<?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>136951</bug_id>
          
          <creation_ts>2014-09-19 04:43:49 -0700</creation_ts>
          <short_desc>Remove WinCE port from trunk</short_desc>
          <delta_ts>2014-09-25 03:42:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alex.christensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>roger_fong</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1036110</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-19 04:43:49 -0700</bug_when>
    <thetext>Here is the webkit-dev thread about it without any objection:
https://lists.webkit.org/pipermail/webkit-dev/2014-August/026829.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036111</commentid>
    <comment_count>1</comment_count>
      <attachid>238372</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-19 04:59:38 -0700</bug_when>
    <thetext>Created attachment 238372
WIP patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036114</commentid>
    <comment_count>2</comment_count>
      <attachid>238373</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-19 05:30:45 -0700</bug_when>
    <thetext>Created attachment 238373
WIP patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036115</commentid>
    <comment_count>3</comment_count>
      <attachid>238374</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-19 05:56:41 -0700</bug_when>
    <thetext>Created attachment 238374
WIP patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036380</commentid>
    <comment_count>4</comment_count>
      <attachid>238435</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-21 15:30:54 -0700</bug_when>
    <thetext>Created attachment 238435
WIP patch for EWS - with win fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036851</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2014-09-23 14:55:48 -0700</bug_when>
    <thetext>I know this is WIP, but it looks good to me so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036941</commentid>
    <comment_count>6</comment_count>
      <attachid>238435</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-24 02:02:26 -0700</bug_when>
    <thetext>Comment on attachment 238435
WIP patch for EWS - with win fixes

View in context: https://bugs.webkit.org/attachment.cgi?id=238435&amp;action=review

&gt; Source/WTF/wtf/OSAllocator.h:82
&gt; -inline void OSAllocator::decommitAndRelease(void* releaseBase, size_t releaseSize, void* decommitBase, size_t decommitSize)
&gt; +inline void OSAllocator::decommitAndRelease(void* releaseBase, size_t releaseSize, void*, size_t)

Maybe we can get rid of these parameters from call sides too.

&gt; Source/WebCore/platform/graphics/win/GDIExtras.h:-59
&gt; -#endif

We can remove the whole header, because it was included only from Source/WebCore/platform/graphics/win/GDIExtras.cpp.

&gt; Source/WebCore/platform/win/COMPtr.h:-40
&gt; -#if !OS(WINCE)
&gt; -#include &lt;guiddef.h&gt;
&gt; -#endif
&gt; -

It shouldn&apos;t be removed because of the guard, but is seems Windows EWS is still happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036944</commentid>
    <comment_count>7</comment_count>
      <attachid>238592</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-24 02:18:53 -0700</bug_when>
    <thetext>Created attachment 238592
proposed patch

addressed my comments in Comment #6 , except the Source/WebCore/platform/win/COMPtr.h change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036967</commentid>
    <comment_count>8</comment_count>
      <attachid>238592</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-24 07:53:17 -0700</bug_when>
    <thetext>Comment on attachment 238592
proposed patch

I think this patch is ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037107</commentid>
    <comment_count>9</comment_count>
      <attachid>238592</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2014-09-24 17:35:24 -0700</bug_when>
    <thetext>Comment on attachment 238592
proposed patch

This looks good, passes the Win EWS, and I just checked that it doesn&apos;t break WinCairo.  I am disappointed that nobody thinks WinCE is worth maintaining, but I see no reason that this shouldn&apos;t go in based on the discussion on webkit-dev.  This can always be used as reference later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037192</commentid>
    <comment_count>10</comment_count>
      <attachid>238592</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 02:43:23 -0700</bug_when>
    <thetext>Comment on attachment 238592
proposed patch

Rejecting attachment 238592 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 238592, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
 self._filesystem.open_text_file_for_reading(self.path)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/common/system/filesystem.py&quot;, line 205, in open_text_file_for_reading
    return codecs.open(path, &apos;r&apos;, &apos;utf8&apos;, errors)
  File &quot;/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py&quot;, line 881, in open
    file = __builtin__.open(filename, mode, buffering)
IOError: [Errno 2] No such file or directory: u&apos;/Volumes/Data/EWS/WebKit/Source/WebKit/wince/ChangeLog&apos;

Full output: http://webkit-queues.appspot.com/results/6567887099658240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037203</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-25 03:42:39 -0700</bug_when>
    <thetext>Landed manually in https://trac.webkit.org/changeset/173949 and https://trac.webkit.org/changeset/173950 , because commit-log-editor 
can&apos;t handle the removed Source/WebKit/wince/ChangeLog file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238372</attachid>
            <date>2014-09-19 04:59:38 -0700</date>
            <delta_ts>2014-09-19 05:30:45 -0700</delta_ts>
            <desc>WIP patch for EWS</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>595004</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzZlMmY5Li5kZjIwNTE0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTQtMDktMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFr
ZToKKwogMjAxNC0wOS0xNyAgUmVuYXRvIE5hZ3kgIDxybmFneUBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgW0VGTF1bR1RLXSBSZW1vdmUgV2ViS2l0MSByZWxhdGVkIGNvZGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCA0MTJlZGY1Li4wYzcwYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmNhY2hlRmx1
c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogY29uZmlnLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbU90aGVyVGhyZWFkKToKKyAgICAgICAgKEpTQzo6c3dhcElmQmFj
a3dhcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNw
cDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorCiAyMDE0LTA5
LTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCByb2xsb3V0IHIxNzM3MzEuIEJyb2tlIG11bHRpcGxlIGJ1aWxkcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCmluZGV4IDA4N2QzMWMu
LjMyMjhhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuaApAQCAtMTExOSw4ICsxMTE5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVudCArIHBhZ2UpOwogCiAgICAgICAg
ICAgICBsaW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAg
ICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FDSEVfU1lOQ19BTEwpOwogI2Vs
c2UKICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTXY3QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TXY3QXNzZW1ibGVyLmgKaW5kZXggZmZjMzA5MC4uNjQ3ZmViMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMjQxMCw4ICsyNDEw
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVu
dCArIHBhZ2UpOwogCiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1cnJlbnQsIGVuZCk7Ci0jZWxp
ZiBPUyhXSU5DRSkKLSAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUsIENBQ0hFX1NZ
TkNfQUxMKTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2lu
ZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCmluZGV4IDI3
NjE2MjQuLjQ1OTY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTM5LDEyICszOSwxMiBA
QAogI2RlZmluZSBXSU5WRVIgMHgwNTAyCiAjZW5kaWYKIAotI2lmICFDT01QSUxFUihNU1ZDN19P
Ul9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUikKIC8v
IFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAjaW5jbHVkZSBvZiBzdGRs
aWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYgX0NSVF9SQU5EX1MKICNk
ZWZpbmUgX0NSVF9SQU5EX1MKICNlbmRpZgotI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9M
T1dFUikgJiYgIU9TKFdJTkNFKQorI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUgog
CiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggMDY1NGZmZS4uMTI2OWYwYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBA
IC02OSwxOCArNjksNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBJZkJhY2t3YXJkcyh2b2lkKiYgYmVnaW4sIHZvaWQq
JiBlbmQpCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKGJlZ2luIDw9IGVuZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIHN0ZDo6c3dhcChiZWdpbiwgZW5kKTsKLSNlbHNlCi1VTlVTRURfUEFSQU0o
YmVnaW4pOwotVU5VU0VEX1BBUkFNKGVuZCk7Ci0jZW5kaWYKLX0KLQogI2lmIE9TKERBUldJTikK
IHR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7CiAjZWxpZiBPUyhXSU5ET1dTKQpA
QCAtMjQ4LDEyICsyMzYsMTAgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJl
bnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIAogICAgIHZvaWQq
IHJlZ2lzdGVyc0JlZ2luID0gJnJlZ2lzdGVyczsKICAgICB2b2lkKiByZWdpc3RlcnNFbmQgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcmVnaXN0ZXJzICsgMSkpKTsKLSAgICBzd2Fw
SWZCYWNrd2FyZHMocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0VuZCk7CiAgICAgY29uc2VydmF0
aXZlUm9vdHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKICAgICB2b2lkKiBzdGFja0JlZ2luID0gc3RhY2tDdXJyZW50Owog
ICAgIHZvaWQqIHN0YWNrRW5kID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCk7Ci0g
ICAgc3dhcElmQmFja3dhcmRzKHN0YWNrQmVnaW4sIHN0YWNrRW5kKTsKICAgICBjb25zZXJ2YXRp
dmVSb290cy5hZGQoc3RhY2tCZWdpbiwgc3RhY2tFbmQsIGppdFN0dWJSb3V0aW5lcywgY29kZUJs
b2Nrcyk7CiB9CiAKQEAgLTQ1Myw3ICs0MzksNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRo
ZXJGcm9tT3RoZXJUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLAog
CiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIocmVncyk7
CiAgICAgdm9pZCogc3RhY2tCYXNlID0gdGhyZWFkLT5zdGFja0Jhc2U7Ci0gICAgc3dhcElmQmFj
a3dhcmRzKHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKICAgICBzdGFja1BvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrUG9pbnRlcikpKTsKICAgICBjb25z
ZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgKaW5kZXggNTVmOWU3Ny4uNjM2YzJmYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTU1LDEyICs1NSw2IEBA
CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQotLy8gRnJvbSBw
a2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZpbGUgZnJvbSB0aGUgUGxhdGZvcm0gQnVpbGRlcikK
LSNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgwN0YKLWV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxp
bXBvcnQpIHZvaWQgQ2FjaGVSYW5nZUZsdXNoKExQVk9JRCBwQWRkciwgRFdPUkQgZHdMZW5ndGgs
IERXT1JEIGR3RmxhZ3MpOwotI2VuZGlmCi0KICNkZWZpbmUgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhD
TFVTSVZFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAwOTQ5M2FhLi42OTU4NzAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2Vu
ZGlmCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNW
QykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNpbmNsdWRlIDxtbXN5c3RlbS5oPgogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KQEAgLTExMDksNyArMTEwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIC8vIGJlIGluIGEg
c2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVp
cmVzIG9iamVjdAogLy8gdW53aW5kaW5nLgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmlu
ZWQoX0RFQlVHKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmluZWQo
X0RFQlVHKQogI2RlZmluZSBUUlkgICAgICAgX190cnkgewogI2RlZmluZSBFWENFUFQoeCkgfSBf
X2V4Y2VwdCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB4OyB9CiAjZWxzZQpAQCAtMTE0
MSw3ICsxMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2VuZGlmCiAK
ICNpZiBPUyhXSU5ET1dTKQotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDeWd3aW4gY2FsbHMgOjpT
ZXRFcnJvck1vZGUoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyksIHdoaWNoIHdlIHdpbGwgaW5oZXJp
dC4gVGhpcyBpcyBiYWQgZm9yCiAgICAgLy8gdGVzdGluZy9kZWJ1Z2dpbmcsIGFzIGl0IGNhdXNl
cyB0aGUgcG9zdC1tb3J0ZW0gZGVidWdnZXIgbm90IHRvIGJlIGludm9rZWQuIFdlIHJlc2V0IHRo
ZQogICAgIC8vIGVycm9yIG1vZGUgaGVyZSB0byB3b3JrIGFyb3VuZCBDeWd3aW4ncyBiZWhhdmlv
ci4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1MjIyPi4KQEAgLTExNTUsNyArMTE1NCw2IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX0FTU0VSVCwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJlcG9ydE1vZGUo
X0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9GSUxFKTsKICNlbmRpZgotI2VuZGlmCiAKICAgICB0
aW1lQmVnaW5QZXJpb2QoMSk7CiAjZW5kaWYKQEAgLTExNzAsNyArMTE2OCw2IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICNlbmRpZgogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChjaGFyKiB0aW1lb3V0U3RyaW5nID0g
Z2V0ZW52KCJKU0NfdGltZW91dCIpKSB7CiAgICAgICAgIGlmIChzc2NhbmYodGltZW91dFN0cmlu
ZywgIiVsZiIsICZzX2Rlc2lyZWRUaW1lb3V0KSAhPSAxKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KApAQCAtMTE3OSw3ICsxMTc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0VGhyZWFkTWFp
biwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KLSNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA0OWExYzM2Li5hZjU3MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQwLDEwICs0MCw2IEBACiAjaW5j
bHVkZSAiSlNSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCi0jaWYgT1MoV0lOQ0UpCi1leHRlcm4g
IkMiIHRpbWVfdCB0aW1lKHRpbWVfdCogdGltZXIpOyAvLyBQcm92aWRlZCBieSBsaWJjZS4KLSNl
bmRpZgotCiAjaWYgSEFWRShTWVNfVElNRV9IKQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggZjBkZGY5
OC4uNDcxOGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
QEAgLTEwNSw3ICsxMDUsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcs
IEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGJvb2wgb3Zl
cnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQog
ewotI2lmICFPUyhXSU5DRSkKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihu
YW1lKTsKICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTQsNyArMTEzLDYgQEAgYm9vbCBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMoVCYgdmFyaWFi
bGUsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlICVzPSVzXG4iLCBuYW1lLCBz
dHJpbmdWYWx1ZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0OTE0MTk3Li4xMzk2MzQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNjYsMTEgKzI2Niw5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVy
ID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOwogCiAgICAgICAgIFN0
cmluZ1ByaW50U3RyZWFtIHBhdGhPdXQ7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBjb25zdCBj
aGFyKiBwcm9maWxlclBhdGggPSBnZXRlbnYoIkpTQ19QUk9GSUxFUl9QQVRIIik7CiAgICAgICAg
IGlmIChwcm9maWxlclBhdGgpCiAgICAgICAgICAgICBwYXRoT3V0LnByaW50KHByb2ZpbGVyUGF0
aCwgIi8iKTsKLSNlbmRpZgogICAgICAgICBwYXRoT3V0LnByaW50KCJKU0NQcm9maWxlLSIsIGdl
dEN1cnJlbnRQcm9jZXNzSUQoKSwgIi0iLCBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPmRhdGFiYXNl
SUQoKSwgIi5qc29uIik7CiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+cmVnaXN0ZXJU
b1NhdmVBdEV4aXQocGF0aE91dC50b0NTdHJpbmcoKS5kYXRhKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0UmVnRXhwLmNwcAppbmRleCA5Mjg2Y2UxLi5hYjhkMWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KICNlbmRpZgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIU9TKFdJTkNFKQorI2lm
IENPTVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjaW5jbHVkZSA8bW1zeXN0ZW0u
aD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xNTAsNyArMTUwLDcgQEAgR2xvYmFsT2JqZWN0
OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGEKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRo
ZSByZWFsTWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKIC8vIHVud2luZGluZy4KIAotI2lm
IENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykgJiYgIU9TKFdJTkNFKQorI2lmIENP
TVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykKICNkZWZpbmUgVFJZICAgICAgIF9fdHJ5
IHsKICNkZWZpbmUgRVhDRVBUKHgpIH0gX19leGNlcHQgKEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRM
RVIpIHsgeDsgfQogI2Vsc2UKQEAgLTE2MywxMiArMTYzLDEwIEBAIGludCByZWFsTWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewog
I2lmIE9TKFdJTkRPV1MpCi0jaWYgIU9TKFdJTkNFKQogICAgIC8vIEN5Z3dpbiBjYWxscyA6OlNl
dEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKSwgd2hpY2ggd2Ugd2lsbCBpbmhlcml0
LiBUaGlzIGlzIGJhZCBmb3IKICAgICAvLyB0ZXN0aW5nL2RlYnVnZ2luZywgYXMgaXQgY2F1c2Vz
IHRoZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlciBub3QgdG8gYmUgaW52b2tlZC4gV2UgcmVzZXQgdGhl
CiAgICAgLy8gZXJyb3IgbW9kZSBoZXJlIHRvIHdvcmsgYXJvdW5kIEN5Z3dpbidzIGJlaGF2aW9y
LiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUyMjI+LgogICAgIDo6U2V0RXJyb3JNb2RlKDAp
OwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9ERUJVRykKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCmluZGV4IGM3NmE5YTguLjMwMmI1ZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKQEAgLTkyLDcgKzky
LDYgQEAgdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBv
aW50ZXIpCiAKIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDaGVjayBmb3Ig
SlNDX0NPREVfUFJPRklMSU5HLgogICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0g
Z2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKICAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2Rl
KQpAQCAtMTE5LDcgKzExOCw2IEBAIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9y
KFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgIEFTU0VSVCghc190cmFja2VyKTsK
ICAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigpOwogICAgIGFs
bG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwotI2VuZGlmCiB9CiAKIHZvaWQq
IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggN2Q2
OTc2YS4uNjc2MWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0
IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorICAgICAgICAq
IHd0Zi9Bc3NlcnRpb25zLmg6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYvQ3VycmVudFRpbWUuY3BwOgor
ICAgICAgICAoV1RGOjpsb3dSZXNVVENUaW1lKToKKyAgICAgICAgKiB3dGYvRGF0YUxvZy5jcHA6
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6Z2V0TG9jYWxUaW1l
KToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToKKyAgICAgICAgKiB3dGYvRmFz
dE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisgICAgICAgICog
d3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiB3dGYvUkFNU2l6ZS5jcHA6CisgICAgICAgIChXVEY6
OmNvbXB1dGVSQU1TaXplKToKKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyU2VlZC5oOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKToKKyAgICAgICAgKiB3
dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrQm91
bmRzOjppc0dyb3dpbmdEb3dud2FyZCk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgor
ICAgICAgICAod3RmX2JzZWFyY2gpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdHJpbmdFeHRy
YXMuaDoKKyAgICAgICAgKHN0cm5pY21wKTogRGVsZXRlZC4KKyAgICAgICAgKHN0cmljbXApOiBE
ZWxldGVkLgorICAgICAgICAoc3RyZHVwKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFk
U3BlY2lmaWMuaDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdU
Rjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9XaW5kb3dzRXh0cmFzLmg6
CisgICAgICAgIChXVEY6OmdldFJlZ2lzdHJ5VmFsdWUpOgorICAgICAgICAoV1RGOjpnZXRXaW5k
b3dQb2ludGVyKToKKyAgICAgICAgKFdURjo6c2V0V2luZG93UG9pbnRlcik6CisgICAgICAgICog
d3RmL2R0b2EvdXRpbHMuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmZvcm1hdCk6CisKIDIwMTQtMDktMTggIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERvdCBub3QgYWxs
b3cgdG8gY3JlYXRlIGRlbGV0ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvY29uZmlnLmggYi9Tb3VyY2UvV1RGL2NvbmZpZy5oCmluZGV4IDVjMjIz
MTYuLjI5MDNjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvY29uZmlnLmgKKysrIGIvU291cmNl
L1dURi9jb25maWcuaApAQCAtNDQsNyArNDQsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmICFD
T01QSUxFUihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZD
N19PUl9MT1dFUikKIC8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAj
aW5jbHVkZSBvZiBzdGRsaWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYg
X0NSVF9SQU5EX1MKICNkZWZpbmUgX0NSVF9SQU5EX1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXgg
MzQxYmQwMS4uNmQ5ZDk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAK
ICNlbmRpZgogI2VuZGlmIC8vIFVTRShDRikKIAotI2lmIENPTVBJTEVSKE1TVkMpICYmICFPUyhX
SU5DRSkKKyNpZiBDT01QSUxFUihNU1ZDKQogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAK
QEAgLTEyMiwyMCArMTIyLDcgQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNv
bnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBpZiAoX3ZzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgYXJncykg
IT0gLTEpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgICAgICAvLyBXaW5DRSBvbmx5IHN1
cHBvcnRzIHdpZGUgY2hhcnMKLSAgICAgICAgICAgICAgICB3Y2hhcl90KiB3aWRlQnVmZmVyID0g
KHdjaGFyX3QqKW1hbGxvYyhzaXplICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgICAgICAg
ICBpZiAod2lkZUJ1ZmZlciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWRlQnVmZmVyW2ldID0gYnVmZmVyW2ldKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ1cod2lkZUJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
ZnJlZSh3aWRlQnVmZmVyKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJp
bmdBKGJ1ZmZlcik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xOTYsNyArMTgzLDcgQEAgc3Rh
dGljIHZvaWQgcHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiAK
IHN0YXRpYyB2b2lkIHByaW50Q2FsbFNpdGUoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uKQogewotI2lmIE9TKFdJTkRPV1MpICYmICFPUyhXSU5DRSkgJiYg
ZGVmaW5lZChfREVCVUcpCisjaWYgT1MoV0lORE9XUykgJiYgZGVmaW5lZChfREVCVUcpCiAgICAg
X0NydERiZ1JlcG9ydChfQ1JUX1dBUk4sIGZpbGUsIGxpbmUsIE5VTEwsICIlc1xuIiwgZnVuY3Rp
b24pOwogI2Vsc2UKICAgICAvLyBCeSB1c2luZyB0aGlzIGZvcm1hdCwgd2hpY2ggbWF0Y2hlcyB0
aGUgZm9ybWF0IHVzZWQgYnkgTVNWQyBmb3IgY29tcGlsZXIgZXJyb3JzLCBkZXZlbG9wZXJzCkBA
IC0yMzUsNyArMjIyLDcgQEAgdm9pZCBXVEZHZXRCYWNrdHJhY2Uodm9pZCoqIHN0YWNrLCBpbnQq
IHNpemUpCiB7CiAjaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmICFkZWZpbmVkKF9fVUNM
SUJDX18pKQogICAgICpzaXplID0gYmFja3RyYWNlKHN0YWNrLCAqc2l6ZSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjZWxpZiBPUyhXSU5ET1dTKQogICAgIC8vIFRoZSBDYXB0
dXJlU3RhY2tCYWNrVHJhY2UgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIFhQLCBidXQgaXQgaXMg
bm90IGRlZmluZWQKICAgICAvLyBpbiB0aGUgV2luZG93cyBTZXJ2ZXIgMjAwMyBSMiBQbGF0Zm9y
bSBTREsuIFNvLCB3ZSdsbCBncmFiIHRoZSBmdW5jdGlvbgogICAgIC8vIHRocm91Z2ggR2V0UHJv
Y0FkZHJlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKaW5kZXggZjRjODkyYS4uZjhhMTA1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuaApAQCAtMTk2LDE0ICsxOTYsNiBAQCBleHRlcm4gIkMiIHsKICAgRXhwcmVzc2lvbnMg
aW5zaWRlIHRoZW0gYXJlIGV2YWx1YXRlZCBpbiBkZWJ1ZyBidWlsZHMgb25seS4KICovCiAKLSNp
ZiBPUyhXSU5DRSkKLS8qIEZJWE1FOiBXZSBpbmNsdWRlIHRoaXMgaGVyZSBvbmx5IHRvIGF2b2lk
IGEgY29uZmxpY3Qgd2l0aCB0aGUgQVNTRVJUIG1hY3JvLiAqLwotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSN1bmRlZiBtaW4KLSN1bmRlZiBtYXgKLSN1bmRlZiBFUlJPUgotI2VuZGlmCi0KICNpZiBP
UyhXSU5ET1dTKQogLyogRklYTUU6IENoYW5nZSB0byB1c2Ugc29tZXRoaW5nIG90aGVyIHRoYW4g
QVNTRVJUIHRvIGF2b2lkIHRoaXMgY29uZmxpY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBwbGF0Zm9y
bSAqLwogI3VuZGVmIEFTU0VSVApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXRvbWljcy5o
IGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDRlNjMwYzIuLjc4NzY4MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9BdG9t
aWNzLmgKQEAgLTc0LDExICs3NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogI2lmIE9TKFdJTkRPV1Mp
CiBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgdW5zaWduZWQqIGxvY2F0
aW9uLCB1bnNpZ25lZCBleHBlY3RlZCwgdW5zaWduZWQgbmV3VmFsdWUpCiB7Ci0jaWYgT1MoV0lO
Q0UpCi0gICAgcmV0dXJuIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHJlaW50ZXJwcmV0X2Nh
c3Q8TE9ORyo+KGNvbnN0X2Nhc3Q8dW5zaWduZWQqPihsb2NhdGlvbikpLCBzdGF0aWNfY2FzdDxM
T05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0gc3RhdGljX2Nh
c3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2Vsc2UKICAgICByZXR1cm4gSW50ZXJsb2NrZWRDb21wYXJl
RXhjaGFuZ2UocmVpbnRlcnByZXRfY2FzdDxMT05HIHZvbGF0aWxlKj4obG9jYXRpb24pLCBzdGF0
aWNfY2FzdDxMT05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0g
c3RhdGljX2Nhc3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2VuZGlmCiB9CiAKIGlubGluZSBib29sIHdl
YWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlvbiwgdm9pZCogZXhwZWN0ZWQs
IHZvaWQqIG5ld1ZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUu
Y3BwIGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCmluZGV4IDk5MGNhYTEuLjQxMWU2
NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCkBAIC03MiwxMSArNzIsNyBAQCBzdGF0aWMgZG91
YmxlIGxvd1Jlc1VUQ1RpbWUoKQogewogICAgIEZJTEVUSU1FIGZpbGVUaW1lOwogCi0jaWYgT1Mo
V0lOQ0UpCi0gICAgR2V0Q3VycmVudEZUKCZmaWxlVGltZSk7Ci0jZWxzZQogICAgIEdldFN5c3Rl
bVRpbWVBc0ZpbGVUaW1lKCZmaWxlVGltZSk7Ci0jZW5kaWYKIAogICAgIC8vIEFzIHBlciBXaW5k
b3dzIGRvY3VtZW50YXRpb24gZm9yIEZJTEVUSU1FLCBjb3B5IHRoZSByZXN1bHRpbmcgRklMRVRJ
TUUgc3RydWN0dXJlIHRvIGEKICAgICAvLyBVTEFSR0VfSU5URUdFUiBzdHJ1Y3R1cmUgdXNpbmcg
bWVtY3B5ICh1c2luZyBtZW1jcHkgaW5zdGVhZCBvZiBkaXJlY3QgYXNzaWdubWVudCBjYW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5jcHAKaW5kZXggMjliZWQxNS4uZWEwNGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRGF0YUxvZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAKQEAgLTM1LDEy
ICszNSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQot
I2lmbmRlZiBfSU9OQkYKLSNkZWZpbmUgX0lPTkJGIDB4MDAwNAotI2VuZGlmCi0jZW5kaWYKLQog
I2RlZmluZSBEQVRBX0xPR19UT19GSUxFIDAKIAogLy8gU2V0IHRvIDEgdG8gdXNlIHRoZSB0ZW1w
IGRpcmVjdG9yeSBmcm9tIGNvbmZzdHIgaW5zdGVhZCBvZiBoYXJkY29kZWQgZGlyZWN0b3J5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYv
RGF0ZU1hdGguY3BwCmluZGV4IDZlZTM2ZDMuLjM3Y2YzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAg
LTEyMSw3ICsxMjEsNiBAQCBzdGF0aWMgY29uc3QgaW50IGZpcnN0RGF5T2ZNb250aFsyXVsxMl0g
PSB7CiAgICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMw
NSwgMzM1fQogfTsKIAotI2lmICFPUyhXSU5DRSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRMb2Nh
bFRpbWUoY29uc3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKIHsKICNp
ZiBDT01QSUxFUihNSU5HVykKQEAgLTEzMiw3ICsxMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Z2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1Y3QgdG0qIGxvY2FsVE0p
CiAgICAgbG9jYWx0aW1lX3IobG9jYWxUaW1lLCBsb2NhbFRNKTsKICNlbmRpZgogfQotI2VuZGlm
CiAKIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKIHsKQEAgLTQyNCwxMSArNDIyLDcgQEAgc3Rh
dGljIHZvaWQgVW5peFRpbWVUb0ZpbGVUaW1lKHRpbWVfdCB0LCBMUEZJTEVUSU1FIHBmdCkKICAq
Lwogc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQodGltZV90IGxvY2FsVGltZSwgZG91
YmxlIHV0Y09mZnNldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBVTlVTRURfUEFSQU0obG9jYWxU
aW1lKTsKLSAgICBVTlVTRURfUEFSQU0odXRjT2Zmc2V0KTsKLSAgICByZXR1cm4gMDsKLSNlbGlm
IE9TKFdJTkRPV1MpCisjaWYgT1MoV0lORE9XUykKICAgICBGSUxFVElNRSB1dGNGaWxlVGltZTsK
ICAgICBVbml4VGltZVRvRmlsZVRpbWUobG9jYWxUaW1lLCAmdXRjRmlsZVRpbWUpOwogICAgIFNZ
U1RFTVRJTUUgdXRjU3lzdGVtVGltZSwgbG9jYWxTeXN0ZW1UaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cAppbmRleCA3OThjMWRjLi4zMTM1NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtMTE4LDEx
ICsxMTgsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogI2lmIE9TKFdJTkRPV1MpCiAKLS8vIFRMU19P
VVRfT0ZfSU5ERVhFUyBpcyBub3QgZGVmaW5lZCBvbiBXaW5DRS4KLSNpZm5kZWYgVExTX09VVF9P
Rl9JTkRFWEVTCi0jZGVmaW5lIFRMU19PVVRfT0ZfSU5ERVhFUyAweGZmZmZmZmZmCi0jZW5kaWYK
LQogc3RhdGljIERXT1JEIGlzRm9yaWJpZGRlblRsc0luZGV4ID0gVExTX09VVF9PRl9JTkRFWEVT
Owogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzQWxsb3dWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TFBWT0lEPigwKTsgLy8gTXVzdCBiZSB6ZXJvLgogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzRm9y
YmlkZGVuVmFsdWUgPSByZWludGVycHJldF9jYXN0PExQVk9JRD4oMSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURl
ZmluZXMuaAppbmRleCBkZjc2YTdhLi42MDMyODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgK
QEAgLTIzOSw3ICsyMzksNyBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVk
IHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQogI2VuZGlmIC8qIFBM
QVRGT1JNKE1BQykgKi8KIAogLyogLS0tLS0tLS0tIEFwcGxlIFdpbmRvd3MgcG9ydCAtLS0tLS0t
LS0gKi8KLSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykKKyNpZiBQTEFURk9STShXSU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAKICNpZiAh
ZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpCiAjZGVmaW5lIEVOQUJMRV9GVUxMU0NSRUVO
X0FQSSAxCkBAIC0yNTMsMjYgKzI1Myw3IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBh
bHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVm
aW5lIEVOQUJMRV9XRUJHTCAxCiAjZW5kaWYKIAotI2VuZGlmIC8qIFBMQVRGT1JNKFdJTikgJiYg
IU9TKFdJTkNFKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAqLwotCi0vKiAtLS0tLS0tLS0gV2lu
Q0UgcG9ydCAtLS0tLS0tLS0gKi8KLS8qIFdpbkNFIHBvcnQgaXMgYSBzcGVjaWFsaXphdGlvbiBv
ZiBQTEFURk9STShXSU4pLiAqLwotLyogUExBVEZPUk0oV0lOKSBpcyBhbHdheXMgZW5hYmxlZCB3
aGVuIGJ1aWxkaW5nIGZvciB0aGUgV2luQ0UgcG9ydC4gKi8KLSNpZiBQTEFURk9STShXSU4pICYm
IE9TKFdJTkNFKQotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RSQUdfU1VQUE9SVCkKLSNkZWZpbmUg
RU5BQkxFX0RSQUdfU1VQUE9SVCAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9GVFBE
SVIpCi0jZGVmaW5lIEVOQUJMRV9GVFBESVIgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFC
TEVfSU5TUEVDVE9SKQotI2RlZmluZSBFTkFCTEVfSU5TUEVDVE9SIDAKLSNlbmRpZgotCi0jZW5k
aWYgLyogUExBVEZPUk0oV0lOKSAmJiBPUyhXSU5DRSkgKi8KKyNlbmRpZiAvKiBQTEFURk9STShX
SU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pICovCiAKIC8qIC0tLS0tLS0tLSBXaW5kb3dzIENB
SVJPIHBvcnQgLS0tLS0tLS0tICovCiAvKiBQTEFURk9STShXSU5fQ0FJUk8pIGlzIGEgc3BlY2lh
bGl6YXRpb24gb2YgUExBVEZPUk0oV0lOKS4gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCmluZGV4IGE1NzY2
NzIuLmJhMTI3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaApAQCAtNzksMTcgKzc5LDkgQEAgaW5saW5l
IHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwg
c2l6ZV90IGNvbW1pdFNpemUKICAgICByZXR1cm4gYmFzZTsKIH0KIAotaW5saW5lIHZvaWQgT1NB
bGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90IHJl
bGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJhc2UsIHNpemVfdCBkZWNvbW1pdFNpemUpCitpbmxp
bmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNl
LCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqLCBzaXplX3QpCiB7CiAgICAgQVNTRVJUKGRlY29t
bWl0QmFzZSA+PSByZWxlYXNlQmFzZSAmJiAoc3RhdGljX2Nhc3Q8Y2hhcio+KGRlY29tbWl0QmFz
ZSkgKyBkZWNvbW1pdFNpemUpIDw9IChzdGF0aWNfY2FzdDxjaGFyKj4ocmVsZWFzZUJhc2UpICsg
cmVsZWFzZVNpemUpKTsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBPbiBtb3N0IHBsYXRmb3JtcyB3
ZSBjYW4gYWN0dWFsbHkgc2tpcCB0aGlzIGZpbmFsIGRlY29tbWl0OyByZWxlYXNpbmcgdGhlIFZN
IHdpbGwKLSAgICAvLyBpbXBsaWNpdGx5IGRlY29tbWl0IGFueSBwaHlzaWNhbCBtZW1vcnkgaW4g
dGhlIHJlZ2lvbi4gVGhpcyBpcyBub3QgdHJ1ZSBvbiBXSU5DRS4KLSAgICBkZWNvbW1pdChkZWNv
bW1pdEJhc2UsIGRlY29tbWl0U2l6ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1p
dEJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1pdFNpemUpOwotI2VuZGlmCiAgICAgcmVs
ZWFzZURlY29tbWl0dGVkKHJlbGVhc2VCYXNlLCByZWxlYXNlU2l6ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDUzMjc3OGUuLmVmZDU5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMzk0LDExICszOTQsNiBA
QAogI2RlZmluZSBXVEZfT1NfU09MQVJJUyAxCiAjZW5kaWYKIAotLyogT1MoV0lOQ0UpIC0gV2lu
ZG93cyBDRTsgbm90ZSB0aGF0IGZvciB0aGlzIHBsYXRmb3JtIE9TKFdJTkRPV1MpIGlzIGFsc28g
ZGVmaW5lZCAqLwotI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKLSNkZWZpbmUgV1RGX09TX1dJTkNF
IDEKLSNlbmRpZgotCiAvKiBPUyhXSU5ET1dTKSAtIEFueSB2ZXJzaW9uIG9mIFdpbmRvd3MgKi8K
ICNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKICNkZWZpbmUgV1RGX09TX1dJ
TkRPV1MgMQpAQCAtNjAwLDcgKzU5NSw3IEBACiAKICNlbmRpZiAvKiBPUyhEQVJXSU4pICovCiAK
LSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaWYgT1MoV0lORE9XUykKIAogI2RlZmlu
ZSBIQVZFX1NZU19USU1FQl9IIDEKICNkZWZpbmUgSEFWRV9BTElHTkVEX01BTExPQyAxCkBAIC02
NTYsNyArNjUxLDYgQEAKICNpZiAhZGVmaW5lZChFTkFCTEVfSklUKSBcCiAgICAgJiYgKENQVShY
ODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMp
KSBcCiAgICAgJiYgIUNQVShBUFBMRV9BUk1WN0spICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgJiYgIU9TKFdJTkNFKQogI2Rl
ZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogCkBAIC05NDMsNyArOTM3LDcgQEAKICNkZWZpbmUg
V1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoV1RG
X1VTRV9JTUxBTkdfRk9OVF9MSU5LMikgJiYgIU9TKFdJTkNFKQorI2lmICFkZWZpbmVkKFdURl9V
U0VfSU1MQU5HX0ZPTlRfTElOSzIpCiAjZGVmaW5lIFdURl9VU0VfSU1MQU5HX0ZPTlRfTElOSzIg
MQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtl
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggY2IyYzUyNi4uNzRjOWVi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUsMTUgKzUsOSBAQCBsaXN0KEFQUEVO
RCBXVEZfU09VUkNFUwogICAgIHdpbi9SdW5Mb29wV2luLmNwcAogKQogCi1pZiAoV0lOQ0UpCi0g
ICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICAgICBtbXRpbWVyCi0gICAgKQotZWxz
ZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0KLSAgICAp
Ci1lbmRpZiAoKQorbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgIHdpbm1tCispCiAKIGxp
c3QoQVBQRU5EIFdURl9IRUFERVJTCiAgICAgIiR7REVSSVZFRF9TT1VSQ0VTX1dURl9ESVJ9L1dU
RkhlYWRlckRldGVjdGlvbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUkFNU2l6ZS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAppbmRleCA1MGI1MjIyLi5hNmQxZjY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9SQU1TaXplLmNwcApAQCAtNjEsMTMgKzYxLDYgQEAgc3RhdGljIHNpemVfdCBjb21wdXRlUkFN
U2l6ZSgpCiAgICAgaWYgKHBhZ2VzID09IC0xIHx8IHBhZ2VTaXplID09IC0xKQogICAgICAgICBy
ZXR1cm4gcmFtU2l6ZUd1ZXNzOwogICAgIHJldHVybiBwYWdlcyAqIHBhZ2VTaXplOwotI2VsaWYg
T1MoV0lOQ0UpCi0gICAgTUVNT1JZU1RBVFVTIHN0YXR1czsKLSAgICBzdGF0dXMuZHdMZW5ndGgg
PSBzaXplb2Yoc3RhdHVzKTsKLSAgICBHbG9iYWxNZW1vcnlTdGF0dXMoJnN0YXR1cyk7Ci0gICAg
aWYgKHN0YXR1cy5kd1RvdGFsUGh5cyA8PSAwKQotICAgICAgICByZXR1cm4gcmFtU2l6ZUd1ZXNz
OwotICAgIHJldHVybiBzdGF0dXMuZHdUb3RhbFBoeXM7CiAjZWxpZiBPUyhXSU5ET1dTKQogICAg
IE1FTU9SWVNUQVRVU0VYIHN0YXR1czsKICAgICBzdGF0dXMuZHdMZW5ndGggPSBzaXplb2Yoc3Rh
dHVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBiL1Nv
dXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaAppbmRleCAxM2FkNDhlLi5hNjVkN2Q5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKKysrIGIvU291cmNl
L1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oCkBAIC00NSw5ICs0NSw2IEBAIGlubGluZSB2b2lk
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQogewogI2lmIE9TKERBUldJTikKICAg
ICAvLyBPbiBEYXJ3aW4gd2UgdXNlIGFyYzRyYW5kb20gd2hpY2ggaW5pdGlhbGlzZXMgaXRzZWxm
LgotI2VsaWYgT1MoV0lOQ0UpCi0gICAgLy8gaW5pdGlhbGl6ZSByYW5kKCkKLSAgICBzcmFuZChH
ZXRUaWNrQ291bnQoKSk7CiAjZWxpZiBDT01QSUxFUihNU1ZDKSAmJiBkZWZpbmVkKF9DUlRfUkFO
RF9TKQogICAgIC8vIE9uIFdpbmRvd3Mgd2UgdXNlIHJhbmRfcyB3aGljaCBpbml0aWFsaXNlcyBp
dHNlbGYKICNlbGlmIE9TKFVOSVgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0Jv
dW5kcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5jcHAKaW5kZXggMWM4Njc1MC4u
ZjMwOGFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmNwcApAQCAtMTI0LDE2ICsxMjQsNiBAQCB2b2lk
IFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICAvLyBzdGFja09yaWdpbi5BbGxvY2F0aW9u
QmFzZSBwb2ludHMgdG8gdGhlIHJlc2VydmVkIHN0YWNrIG1lbW9yeSBiYXNlIGFkZHJlc3MuCiAK
ICAgICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja09yaWdpbi5CYXNlQWRkcmVz
cykgKyBzdGFja09yaWdpbi5SZWdpb25TaXplOwotI2lmIE9TKFdJTkNFKQotICAgIFNZU1RFTV9J
TkZPIHN5c3RlbUluZm87Ci0gICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Ci0gICAgRFdP
UkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7Ci0KLSAgICBNRU1PUllfQkFTSUNf
SU5GT1JNQVRJT04gc3RhY2tNZW1vcnk7Ci0gICAgVmlydHVhbFF1ZXJ5KG1fb3JpZ2luLCAmc3Rh
Y2tNZW1vcnksIHNpemVvZihzdGFja01lbW9yeSkpOwotCi0gICAgbV9ib3VuZCA9IHN0YXRpY19j
YXN0PGNoYXIqPihtX29yaWdpbikgLSBzdGFja01lbW9yeS5SZWdpb25TaXplICsgcGFnZVNpemU7
Ci0jZWxzZQogICAgIC8vIFRoZSBzdGFjayBvbiBXaW5kb3dzIGNvbnNpc3RzIG91dCBvZiB0aHJl
ZSBwYXJ0cyAodW5jb21taXR0ZWQgbWVtb3J5LCBhIGd1YXJkIHBhZ2UgYW5kIHByZXNlbnQKICAg
ICAvLyBjb21taXR0ZWQgbWVtb3J5KS4gVGhlIDMgcmVnaW9ucyBoYXZlIGRpZmZlcmVudCBCYXNl
QWRkcmVzc2VzIGJ1dCBhbGwgaGF2ZSB0aGUgc2FtZSBBbGxvY2F0aW9uQmFzZQogICAgIC8vIHNp
bmNlIHRoZXkgYXJlIGFsbCBmcm9tIHRoZSBzYW1lIFZpcnR1YWxBbGxvYy4gVGhlIDMgcmVnaW9u
cyBhcmUgbGFpZCBvdXQgaW4gbWVtb3J5IChmcm9tIGhpZ2ggdG8KQEAgLTE3Myw3ICsxNjMsNiBA
QCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICBBU1NFUlQoZW5kT2ZTdGFjayA9
PSBjb21wdXRlZEVuZCk7CiAjZW5kaWYgLy8gTkRFQlVHCiAgICAgbV9ib3VuZCA9IHN0YXRpY19j
YXN0PGNoYXIqPihlbmRPZlN0YWNrKSArIGd1YXJkUGFnZS5SZWdpb25TaXplOwotI2VuZGlmIC8v
IE9TKFdJTkNFKQogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKaW5kZXggYjU3YWFlMi4uMTc5
Y2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC05OCwxMSArOTgsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0dyb3dpbmdEb3dud2FyZCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9v
cmlnaW4gJiYgbV9ib3VuZCk7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIHJldHVybiBtX29yaWdp
biA+IG1fYm91bmQ7Ci0jZWxzZQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogICAgIH0K
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oIGIv
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggYzFmNDVlMC4uYTAxODcyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgKQEAgLTI5NywzMSArMjk3LDYgQEAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNDb21waWxhdGlvblRocmVhZCgpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotI2lm
IE9TKFdJTkNFKQotLy8gV2luZG93cyBDRSBDUlQgaGFzIGRvZXMgbm90IGltcGxlbWVudCBic2Vh
cmNoKCkuCi1pbmxpbmUgdm9pZCogd3RmX2JzZWFyY2goY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2
b2lkKiBiYXNlLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplLCBpbnQgKCpjb21wYXJlKShjb25z
dCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0gICAgY29uc3QgY2hhciogZmlyc3QgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSk7Ci0KLSAgICB3aGlsZSAoY291bnQpIHsKLSAgICAg
ICAgc2l6ZV90IHBvcyA9IChjb3VudCAtIDEpID4+IDE7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGl0
ZW0gPSBmaXJzdCArIHBvcyAqIHNpemU7Ci0gICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gY29t
cGFyZShpdGVtLCBrZXkpOwotICAgICAgICBpZiAoIWNvbXBhcmVSZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oaXRlbSk7Ci0gICAgICAgIGlmIChjb21wYXJlUmVz
dWx0IDwgMCkgewotICAgICAgICAgICAgY291bnQgLT0gKHBvcyArIDEpOwotICAgICAgICAgICAg
Zmlyc3QgKz0gKHBvcyArIDEpICogc2l6ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBj
b3VudCA9IHBvczsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBic2VhcmNo
KGtleSwgYmFzZSwgY291bnQsIHNpemUsIGNvbXBhcmUpIHd0Zl9ic2VhcmNoKGtleSwgYmFzZSwg
Y291bnQsIHNpemUsIGNvbXBhcmUpCi0jZW5kaWYKLQogLy8gVGhpcyB2ZXJzaW9uIG9mIHBsYWNl
bWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgogZW51bSBOb3ROdWxsVGFnIHsgTm90TnVsbCB9Owog
aW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxUYWcsIHZvaWQqIGxvY2F0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAppbmRleCAxMDNlMTczLi5iMWFlYTUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdHJp
bmdFeHRyYXMuaApAQCAtNjksMjUgKzY5LDYgQEAgaW5saW5lIGRvdWJsZSB3dGZfdnNucHJpbnRm
KGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2wKIC8v
IHZzbnByaW50ZiBkb2VzIG5vdCBudWxsIHRlcm1pbmF0ZSB0aGUgYnVmZmVyLiBXZWJLaXQgY2Fu
IHJlbHkgb24gdGhlIG51bGwgdGVybWluYXRpb24uCiAjZGVmaW5lIHZzbnByaW50ZihidWZmZXIs
IGNvdW50LCBmb3JtYXQsIGFyZ3MpIHd0Zl92c25wcmludGYoYnVmZmVyLCBjb3VudCwgZm9ybWF0
LCBhcmdzKQogCi0jaWYgT1MoV0lOQ0UpCi0KLWlubGluZSBpbnQgc3RybmljbXAoY29uc3QgY2hh
ciogc3RyaW5nMSwgY29uc3QgY2hhciogc3RyaW5nMiwgc2l6ZV90IGNvdW50KQotewotICAgIHJl
dHVybiBfc3RybmljbXAoc3RyaW5nMSwgc3RyaW5nMiwgY291bnQpOwotfQotCi1pbmxpbmUgaW50
IHN0cmljbXAoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hhciogc3RyaW5nMikKLXsKLSAg
ICByZXR1cm4gX3N0cmljbXAoc3RyaW5nMSwgc3RyaW5nMik7Ci19Ci0KLWlubGluZSBjaGFyKiBz
dHJkdXAoY29uc3QgY2hhciogc3RyU291cmNlKQotewotICAgIHJldHVybiBfc3RyZHVwKHN0clNv
dXJjZSk7Ci19Ci0KLSNlbmRpZgotCiBpbmxpbmUgaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIq
IHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IGxlbikKIHsKICAgICByZXR1cm4gX3N0cm5pY21w
KHMxLCBzMiwgbGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmlj
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmluZGV4IDFkY2IzNzguLmY0MDQw
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtMTU4LDExICsxNTgsNiBAQCBpbmxpbmUg
dm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0cikKIAogI2VsaWYgT1MoV0lORE9XUykK
IAotLy8gVExTX09VVF9PRl9JTkRFWEVTIGlzIG5vdCBkZWZpbmVkIG9uIFdpbkNFLgotI2lmbmRl
ZiBUTFNfT1VUX09GX0lOREVYRVMKLSNkZWZpbmUgVExTX09VVF9PRl9JTkRFWEVTIDB4ZmZmZmZm
ZmYKLSNlbmRpZgotCiAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgVExTIGtleXMgdGhhdCBjYW4g
YmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1bWUgdGhhdDoKIC8vIDEpIE9u
Y2UgdGhlIGluc3RhbmNlIG9mIFRocmVhZFNwZWNpZmljPD4gaXMgY3JlYXRlZCwgaXQgd2lsbCBu
b3QgYmUgZGVzdHJ1Y3RlZCB1bnRpbCB0aGUgcHJvZ3JhbSBkaWVzLgogLy8gMikgV2UgZG8gbm90
IG5lZWQgdG8gaG9sZCBtYW55IGluc3RhbmNlcyBvZiBUaHJlYWRTcGVjaWZpYzw+IGRhdGEuIFRo
aXMgZml4ZWQgbnVtYmVyIHNob3VsZCBiZSBmYXIgZW5vdWdoLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5j
cHAKaW5kZXggZTcyYWZmZi4uMmU5NzY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05
NCw2ICs5NCw3IEBACiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmgiCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgpAQCAtMTA3LDEwICsxMDgsNiBAQAogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgi
CiAjZW5kaWYKIAotI2lmICFPUyhXSU5DRSkKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYK
LQogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgogI2VuZGlmCkBAIC0yMTgs
MTcgKzIxNSw5IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFk
RnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgdW5zaWduZWQgdGhyZWFk
SWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IDA7CiAgICAg
T3duUHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbiA9IGFkb3B0UHRyKG5l
dyBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oZW50cnlQb2ludCwgZGF0YSkpOwotI2lmIE9TKFdJ
TkNFKQotICAgIC8vIFRoaXMgaXMgc2FmZSBvbiBXSU5DRSwgc2luY2UgQ1JUIGlzIGluIHRoZSBj
b3JlIGFuZCBpbm5hdGVseSBtdWx0aXRocmVhZGVkLgotICAgIC8vIE9uIGRlc2t0b3AgV2luZG93
cywgbmVlZCB0byB1c2UgX2JlZ2ludGhyZWFkZXggKG5vdCBhdmFpbGFibGUgb24gV2luQ0UpIGlm
IHVzaW5nIGFueSBDUlQgZnVuY3Rpb25zCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IENyZWF0
ZVRocmVhZCgwLCAwLCAoTFBUSFJFQURfU1RBUlRfUk9VVElORSl3dGZUaHJlYWRFbnRyeVBvaW50
LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAoTFBEV09SRCkmdGhyZWFkSWRlbnRpZmllcik7Ci0jZWxz
ZQogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2Jl
Z2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSwg
MCwgJnRocmVhZElkZW50aWZpZXIpKTsKLSNlbmRpZgogICAgIGlmICghdGhyZWFkSGFuZGxlKSB7
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJl
YWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwOiAlbGQiLCBlbnRyeVBvaW50LCBkYXRh
LCA6OkdldExhc3RFcnJvcigpKTsKLSNlbGlmICFIQVZFKEVSUk5PX0gpCisjaWYgIUhBVkUoRVJS
Tk9fSCkKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRy
eSBwb2ludCAlcCB3aXRoIGRhdGEgJXAuIiwgZW50cnlQb2ludCwgZGF0YSk7CiAjZWxzZQogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVw
IHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQb2ludCwgZGF0YSwgZXJybm8pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV2luZG93c0V4dHJhcy5oIGIvU291cmNlL1dURi93dGYvV2luZG93
c0V4dHJhcy5oCmluZGV4IDE2YmM4NjUuLjA2MWRiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1dpbmRvd3NFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9XaW5kb3dzRXh0cmFzLmgK
QEAgLTM5LDM0ICszOSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogaW5saW5lIEhSRVNVTFQgZ2V0
UmVnaXN0cnlWYWx1ZShIS0VZIGhrZXksIExQQ1dTVFIgcHN6U3ViS2V5LCBMUENXU1RSIHBzelZh
bHVlLCBMUERXT1JEIHBkd1R5cGUsIExQVk9JRCBwdkRhdGEsIExQRFdPUkQgcGNiRGF0YSkKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICBIS0VZIGtleTsKLSAgICBpZiAoOjpSZWdPcGVuS2V5RXhXKGhr
ZXksIHBzelN1YktleSwgMCwgMCwgJmtleSkgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0
dXJuIEVSUk9SX0lOVkFMSURfTkFNRTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IDo6UmVnUXVlcnlW
YWx1ZUV4VyhrZXksIHBzelZhbHVlLCAwLCBwZHdUeXBlLCBzdGF0aWNfY2FzdDxMUEJZVEU+KHB2
RGF0YSksIHBjYkRhdGEpOwotICAgIDo6UmVnQ2xvc2VLZXkoa2V5KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotI2Vsc2UKICAgICByZXR1cm4gOjpTSEdldFZhbHVlVyhoa2V5LCBwc3pTdWJLZXksIHBz
elZhbHVlLCBwZHdUeXBlLCBwdkRhdGEsIHBjYkRhdGEpOwotI2VuZGlmCiB9CiAKIGlubGluZSB2
b2lkKiBnZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGluZGV4KQogewotI2lmIE9TKFdJ
TkNFKQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPig6OkdldFdpbmRvd0xvbmco
aFduZCwgaW5kZXgpKTsKLSNlbHNlCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCBpbmRleCkpOwotI2VuZGlmCiB9CiAKIGlubGluZSB2
b2lkKiBzZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGluZGV4LCB2b2lkKiB2YWx1ZSkK
IHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oOjpT
ZXRXaW5kb3dMb25nKGhXbmQsIGluZGV4LCByZWludGVycHJldF9jYXN0PExPTkc+KHZhbHVlKSkp
OwotI2Vsc2UKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oOjpTZXRXaW5kb3dM
b25nUHRyKGhXbmQsIGluZGV4LCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPih2YWx1ZSkpKTsK
LSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL2R0b2EvdXRpbHMuaCBiL1NvdXJjZS9XVEYvd3RmL2R0b2EvdXRpbHMuaAppbmRleCA1YzQx
NDgyLi45ZTJmYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmgKKysr
IGIvU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oCkBAIC00OSw3ICs0OSw3IEBACiBkZWZpbmVk
KF9fQVJNRUxfXykgfHwgXAogZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQogI2RlZmluZSBE
T1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKLSNlbGlmIENQVShN
SVBTKSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQUEM2NExFKSB8fCBPUyhXSU5D
RSkgfHwgQ1BVKFNINCkgfHwgQ1BVKFMzOTApIHx8IENQVShTMzkwWCkgfHwgQ1BVKElBNjQpIHx8
IENQVShBTFBIQSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoSFBQQSkKKyNlbGlmIENQVShNSVBTKSB8
fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQUEM2NExFKSB8fCBDUFUoU0g0KSB8fCBD
UFUoUzM5MCkgfHwgQ1BVKFMzOTBYKSB8fCBDUFUoSUE2NCkgfHwgQ1BVKEFMUEhBKSB8fCBDUFUo
QVJNNjQpIHx8IENQVShIUFBBKQogI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RP
VUJMRV9PUEVSQVRJT05TIDEKICNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kz
ODZfXykKICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTU4LDggKzU4LDYgQEAgZGVmaW5lZChfTUlQ
U19BUkNIX01JUFMzMlIyKQogI2Vsc2UKICN1bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNU
X0RPVUJMRV9PUEVSQVRJT05TCiAjZW5kaWYgIC8vIF9XSU4zMgotI2VsaWYgZGVmaW5lZChXSU5D
RSkgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JS
RUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKICNlbHNlCiAjZXJyb3IgVGFyZ2V0IGFyY2hpdGVjdHVy
ZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3VibGUtQ29udmVyc2lvbi4KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDA4MDNjMmQuLmY2OWVjODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTQ1MiwyOSArNDUyLDYgQEAgVmVjdG9yPFVD
aGFyPiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkgY29uc3QKIAogU3Ry
aW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewotI2lmIE9TKFdJ
TkNFKQotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotCi0g
ICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOwotCi0gICAgaW50IGJ1ZmZlclNpemUgPSAyNTY7
Ci0gICAgYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAg
IGludCB3cml0dGVuID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlclNpemUsIGZvcm1h
dCwgYXJncyk7Ci0gICAgICAgIHZhX2VuZChhcmdzKTsKLQotICAgICAgICBpZiAod3JpdHRlbiA9
PSAwKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiIik7Ci0gICAgICAgIGlmICh3cml0dGVu
ID4gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZlci5kYXRhKCkpLCB3cml0dGVuKTsKLSAgICAgICAgCi0g
ICAgICAgIGJ1ZmZlclNpemUgPDw9IDE7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyU2l6
ZSk7Ci0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gICAgfQotCi0jZWxzZQogICAg
IHZhX2xpc3QgYXJnczsKICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogCkBAIC01MDksNyAr
NDg2LDYgQEAgU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQog
ICAgIHZhX2VuZChhcmdzKTsKICAgICAKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0YSgpKSwgbGVuKTsKLSNlbmRp
ZgogfQogCiBTdHJpbmcgU3RyaW5nOjpudW1iZXIoaW50IG51bWJlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTA5NmMzLi5iY2Y1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ5IEBACisyMDE0LTA5LTE5
ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3Zl
IFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBs
YXllci5jcHA6CisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFrZTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAqIGVkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi93aW5jZS9JY29uRGF0YWJh
c2VXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEZvcktl
eSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgICogcGFnZS93aW4vRXZl
bnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3JlYXRl
RHJhZ2dpbmdEYXRhVHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51Lmg6
CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
aWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29saWRDb2xvcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuYW1lQW5kQWN0aXZhdGVGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGll
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RElCUGl4ZWxEYXRhOjpzZXRSR0JBQml0bWFwQWxwaGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6Omhhc0FscGhhQmxlbmRTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OmFscGhhQmxlbmRJ
ZlN1cHBvcnRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmluaXRHRElGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdE
SUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdESUds
eXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzY3JpcHRGb250UHJvcGVy
dGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0Uu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFk
aWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJEYXRhV2luY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZhdGVX
aW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlh
UGxheWVyUHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL01lZGlhUGxheWVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9QYXRoV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5D
RS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvV2luQ0VH
cmFwaGljc0V4dHJhcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
d2luL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcik6CisgICAgICAgICogcGxhdGZv
cm0vd2luL0NPTVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250ZXh0TWVudUl0ZW1XaW4uY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVtcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21JdGVtcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkcmFnTGFiZWxGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VE
aXJlY3RvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmxvZ0xldmVsU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFz
dGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkT3duZXJXbmRQcm9j
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpwYXRoUmVtb3ZlQmFkRlNDaGFyYWN0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR2xvYmFsSERyb3BDb250ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGxh
dGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1lc3NhZ2VUb0V2ZW50
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91
c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRldmljZUluZm9Gb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVw
TWVudVdpbjo6cmVnaXN0ZXJDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46
OnduZFByb2MpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRCdXR0b24pOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaW1lcldpbmRv
d1duZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU9mZlNjcmVlblRpbWVyV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXVlVGltZXJQcm9jKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3BT
aGFyZWRUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmg6CisgICAg
ICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2lu
ZG93c1ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc29yQXJjaGl0ZWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFyY2hpdGVjdHVyZVRva2VuRm9yVUFTdHJpbmcpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0NE
YXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5j
cHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICog
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAg
ICAgIChXZWJDb3JlOjpyZWdpc3RlclBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQ
bHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnRJbnRvVHJh
bnNmb3JtZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVhZFdpbkNFLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRXaW5DRS5oOiBS
ZW1vdmVkLgorCiAyMDE0LTA5LTE4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEb3Qgbm90IGFsbG93IHRvIGNyZWF0ZSBkZWxldGUt
b24tZGVzdHJveSBHTWFpbkxvb3BTb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5jcHAK
aW5kZXggYWM2ZjQ2Zi4uMTI3MWE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcApA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBPUyhXSU5DRSkKKyNpZiBQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DRS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZlODkxOC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtlCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAotbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbmNlIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vbmV0d29yay93aW4iCi0gICAgIiR7M1JEUEFSVFlfRElSfS9saWJqcGVnIgotICAgICIk
ezNSRFBBUlRZX0RJUn0vbGlicG5nIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlieG1sMi9pbmNs
dWRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlieHNsdC9pbmNsdWRlIgotICAgICIkezNSRFBB
UlRZX0RJUn0vc3FsaXRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vemxpYiIKLSkKLQotbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgcGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwCi0KLSAg
ICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCi0KLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRElCUGl4ZWxEYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRy
YXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bnRQb2ludFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKLQotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5v
ZGVXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFkaWVudFdpbmNlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZv
cm1QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFw
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luY2UuY3Bw
Ci0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCi0K
LSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCi0gICAgcGxhdGZvcm0v
bmV0d29yay93aW4vQ3JlZGVudGlhbFN0b3JhZ2VXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29y
ay93aW4vUHJveHlTZXJ2ZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3Vy
Y2VIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vU29ja2V0U3RyZWFtSGFu
ZGxlV2luLmNwcAotCi0gICAgcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcAotCi0gICAgcGxh
dGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAotCi0gICAgcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luY2UuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCi0gICAgY3J5
cHQzMgotICAgIGlwaGxwYXBpCi0gICAgbGlianBlZwotICAgIGxpYnBuZwotICAgIGxpYnhtbDIK
LSAgICBsaWJ4c2x0Ci0gICAgc3FsaXRlCi0gICAgd2luaW5ldAotKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggZjE5NTNkNi4uZDY2MzVh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KiB2
aWV3KQogfQogICAgIAogICAgIAotI2lmICFQTEFURk9STShXSU4pIHx8IE9TKFdJTkNFKQorI2lm
ICFQTEFURk9STShXSU4pCiBBWElEIEFYT2JqZWN0Q2FjaGU6OnBsYXRmb3JtR2VuZXJhdGVBWElE
KCkgY29uc3QKIHsKICAgICBzdGF0aWMgQVhJRCBsYXN0VXNlZElEID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggODZjNTViYS4uNDY2ODI5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTc3MCw4ICs3NzAs
NiBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3Np
dGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkucmlnaHQo
dHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAg
ICAgIC8vIFZpc3VhbCB3b3JkIG1vdmVtZW50IHJlbGllcyBvbiBpc1dvcmRUZXh0QnJlYWsgd2hp
Y2ggaXMgbm90IGltcGxlbWVudGVkIGluIFdpbkNFIGFuZCBRVC4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTM2LgogICAgICAgICBib29sIHNr
aXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJl
aGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIHBvcyA9
IHJpZ2h0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwg
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSksIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL3dpbmNl
L0ljb25EYXRhYmFzZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL3dpbmNl
L0ljb25EYXRhYmFzZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRm
ZDllYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi93aW5jZS9JY29u
RGF0YWJhc2VXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCi0KLSNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRl
ICJJY29uRGF0YWJhc2VDbGllbnQuaCIKLSNpbmNsdWRlICJJY29uUmVjb3JkLmgiCi0jaW5jbHVk
ZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBJY29u
RGF0YWJhc2UqIHNoYXJlZEljb25EYXRhYmFzZSA9IDA7Ci0KLS8vIEZ1bmN0aW9uIHRvIG9idGFp
biB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCi1JY29uRGF0YWJhc2UmIGljb25EYXRhYmFzZSgp
Ci17Ci0gICAgaWYgKCFzaGFyZWRJY29uRGF0YWJhc2UpCi0gICAgICAgIHNoYXJlZEljb25EYXRh
YmFzZSA9IG5ldyBJY29uRGF0YWJhc2U7Ci0gICAgcmV0dXJuICpzaGFyZWRJY29uRGF0YWJhc2U7
Ci19Ci0KLUljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKCkge30KLUljb25EYXRhYmFzZTo6fklj
b25EYXRhYmFzZSgpIHt9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRDbGllbnQoSWNvbkRhdGFi
YXNlQ2xpZW50Kikge30KLQotYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBw
YXRoKSB7IHJldHVybiBmYWxzZTsgfQotdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkge30KLQot
dm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkge30KLQotSW1hZ2UqIEljb25EYXRh
YmFzZTo6aWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgSW50U2l6ZSYpIHsgcmV0
dXJuIDA7IH0KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWFkSWNvbkZvclBhZ2VVUkxGcm9tRGlzayhj
b25zdCBTdHJpbmcmKSB7fQotU3RyaW5nIEljb25EYXRhYmFzZTo6aWNvblVSTEZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJikgeyByZXR1cm4gU3RyaW5nKCk7IH0KLUltYWdlKiBJY29uRGF0YWJhc2U6
OmRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmKSB7IHJldHVybiAwO30KLQotdm9pZCBJY29uRGF0
YWJhc2U6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHt9Ci12b2lkIEljb25E
YXRhYmFzZTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHt9Ci0KLXZvaWQg
SWNvbkRhdGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvblVS
TEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwp
IHt9Ci0KLUljb25Mb2FkRGVjaXNpb24gSWNvbkRhdGFiYXNlOjpsb2FkRGVjaXNpb25Gb3JJY29u
VVJMKGNvbnN0IFN0cmluZyYsIERvY3VtZW50TG9hZGVyKikgeyByZXR1cm4gSWNvbkxvYWRObzsg
fQotYm9vbCBJY29uRGF0YWJhc2U6Omljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmlu
ZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRFbmFibGVkKGJv
b2wgZW5hYmxlZCkge30KLWJvb2wgSWNvbkRhdGFiYXNlOjppc0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi12b2lkIEljb25EYXRhYmFzZTo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sIGZsYWcpIHt9Ci1ib29sIEljb25EYXRhYmFzZTo6aXNQcml2YXRlQnJvd3NpbmdF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotdm9pZCBJY29uRGF0YWJhc2U6OmRl
bGF5RGF0YWJhc2VDbGVhbnVwKCkge30KLXZvaWQgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNl
Q2xlYW51cCgpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6Y2hlY2tJbnRlZ3JpdHlCZWZvcmVPcGVu
aW5nKCkge30KLQotLy8gU3VwcG9ydCBmb3IgV2ViQ29yZVN0YXRpc3RpY3MgaW4gV2ViS2l0Ci1z
aXplX3QgSWNvbkRhdGFiYXNlOjpwYWdlVVJMTWFwcGluZ0NvdW50KCkgeyByZXR1cm4gMDsgfQot
c2l6ZV90IEljb25EYXRhYmFzZTo6cmV0YWluZWRQYWdlVVJMQ291bnQoKSB7cmV0dXJuIDA7IH0K
LXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudCgpIHsgcmV0dXJuIDA7IH0KLXNp
emVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkgeyByZXR1cm4gMDsg
fQotCi1ib29sIEljb25EYXRhYmFzZTo6aXNPcGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LVN0cmluZyBJY29uRGF0YWJhc2U6OmRhdGFiYXNlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZygpOyB9Ci1TdHJpbmcgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpIHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1MDJiMjRlLi40ZDk2ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yODI0LDcgKzI4MjQsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBrQ29udGV4dE1lbnVNYXJnaW4gPSAxOwogCi0jaWYgT1MoV0lORE9XUykgJiYgIU9TKFdJTkNF
KQorI2lmIE9TKFdJTkRPV1MpCiAgICAgaW50IHJpZ2h0QWxpZ25lZCA9IDo6R2V0U3lzdGVtTWV0
cmljcyhTTV9NRU5VRFJPUEFMSUdOTUVOVCk7CiAjZWxzZQogICAgIGludCByaWdodEFsaWduZWQg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBmZTVhM2Q1Li5iODU4NTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIGJvb2wgU2V0dGluZ3M6
OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxzZTsKIAogLy8gTk9URXMKIC8vICAxKSBFZGl0aW5n
TWFjQmVoYXZpb3IgY29tcHJpc2VzIFRpZ2VyLCBMZW9wYXJkLCBTbm93TGVvcGFyZCBhbmQgaU9T
IGJ1aWxkcywgYXMgd2VsbCBhcyBRdFdlYktpdCB3aGVuIGJ1aWx0IG9uIE1hYzsKLS8vICAyKSBF
ZGl0aW5nV2luZG93c0JlaGF2aW9yIGNvbXByaXNlcyBXaW4zMiBhbmQgV2luQ0UgYnVpbGRzLCBh
cyB3ZWxsIGFzIFF0V2ViS2l0IGFuZCBDaHJvbWl1bSB3aGVuIGJ1aWx0IG9uIFdpbmRvd3M7Cisv
LyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMgV2luMzIgYnVpbGQ7CiAvLyAg
MykgRWRpdGluZ1VuaXhCZWhhdmlvciBjb21wcmlzZXMgYWxsIHVuaXgtYmFzZWQgc3lzdGVtcywg
YnV0IERhcndpbi9NYWNPUyAoYW5kIHRoZW4gYWJ1c2luZyB0aGUgdGVybWlub2xvZ3kpOwogLy8g
OTkpIE1hY0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFsbGJhY2suCiBzdGF0aWMgRWRp
dGluZ0JlaGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZvcm0oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKaW5kZXggNjBiN2YyMC4uNjQ0
MmVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCkBA
IC05NCwxMSArOTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CiAjaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVyPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdn
aW5nRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gMDsK
LSNlbHNlCiAgICAgcmV0dXJuIERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKTsK
LSNlbmRpZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCmlu
ZGV4IGZmOWQzNmIuLmM4ZTJhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
aApAQCAtOTIsOSArOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwogI2Vsc2UKICAgICAgICAg
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotI2lmIE9TKFdJ
TkNFKQotICAgICAgICB1bnNpZ25lZCBtX2l0ZW1Db3VudDsKLSNlbmRpZgogI2VuZGlmCiAKICNl
bmRpZiAvLyBVU0UoQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDVmMWUxZGQuLjgxOTFjNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JJbWFnZShGcmFtZSYgZnJhbWUsIE5vZGUmIG5vZGUsIEludFJlY3Qm
IGltYWdlUmVjCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hv
dE5vZGUoZnJhbWUsIG5vZGUpLCAmbm9kZSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICghUExBVEZPUk0oV0lOKSB8fCBPUyhXSU5DRSkpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAh
UExBVEZPUk0oV0lOKQogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoVVJMJiwg
Y29uc3QgU3RyaW5nJiwgRm9udFJlbmRlcmluZ01vZGUpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggNDNjZjg3Ni4uYTgxMzg2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTk3LDcgKzE5Nyw3IEBAIENT
dHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpOwogdWludDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVG
b3JQYXRoKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhT1Mo
V0lOQ0UpCisjaWYgUExBVEZPUk0oV0lOKQogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFn
ZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5
KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcAppbmRleCBiZmE5ZDBmLi4yMjBiMzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02NzYsMTEgKzY3Niw3IEBA
IGJvb2wgQml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29saWRDb2xvcigpCiB7CiAgICAgaWYgKCFt
X2NoZWNrZWRGb3JTb2xpZENvbG9yICYmIGZyYW1lQ291bnQoKSA+IDApIHsKICAgICAgICAgY2hl
Y2tGb3JTb2xpZENvbG9yKCk7Ci0gICAgICAgIC8vIFdJTkNFIFBPUlQ6IGNoZWNrRm9yU29saWRD
b2xvcigpIGRvZXNuJ3Qgc2V0IG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgdW50aWwKLSAgICAgICAg
Ly8gaXQgZ2V0cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBmaW5hbCBkZWNpc2lvbi4KLSNp
ZiAhT1MoV0lOQ0UpCiAgICAgICAgIEFTU0VSVChtX2NoZWNrZWRGb3JTb2xpZENvbG9yKTsKLSNl
bmRpZgogICAgIH0KICAgICByZXR1cm4gbV9pc1NvbGlkQ29sb3IgJiYgIW1fY3VycmVudEZyYW1l
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEds
eXBocy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNw
cAppbmRleCBhOGNhZDQ0Li41MjBiNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcApAQCAtMzk0LDIwICszOTQsMTAgQEAgc3RkOjpwYWly
PEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6Z2x5cGhEYXRhQW5kUGFnZUZvckNo
YXJhY3Rlcihjb25zdAogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IGZhbGxiYWNrUGFnZSAmJiBm
YWxsYmFja1BhZ2UtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpID8gZmFsbGJhY2tQYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYykgOiBjaGFyYWN0ZXJGb250RGF0YS0+bWlzc2luZ0dseXBoRGF0
YSgpOwogICAgICAgICAvLyBDYWNoZSBpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHN5c3RlbSBm
YWxsYmFjayBhZ2FpbiBuZXh0IHRpbWUuCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZh
cmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgIC8vIG1pc3NpbmdHbHlwaERhdGEg
cmV0dXJucyBhIG51bGwgY2hhcmFjdGVyLCB3aGljaCBpcyBub3Qgc3VpdGFibGUgZm9yIEdESSB0
byBkaXNwbGF5LgotICAgICAgICAgICAgLy8gQWxzbywgc29tZXRpbWVzIHdlIGNhbm5vdCBtYXAg
YSBmb250IGZvciB0aGUgY2hhcmFjdGVyIG9uIFdJTkNFLCBidXQgR0RJIGNhbiBzdGlsbAotICAg
ICAgICAgICAgLy8gZGlzcGxheSB0aGUgY2hhcmFjdGVyLCBwcm9iYWJseSBiZWNhdXNlIHRoZSBm
b250IHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAvLyBT
byB3ZSBqdXN0IGFsd2F5cyBzZXQgdGhlIGdseXBoIHRvIGJlIHNhbWUgYXMgdGhlIGNoYXJhY3Rl
ciwgYW5kIGxldCBHREkgc29sdmUgaXQuCi0gICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYywgYywgY2hhcmFjdGVyRm9udERhdGEuZ2V0KCkpOwotICAgICAgICAgICAg
Y2hhcmFjdGVyRm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChzdGQ6Om1heChjaGFy
YWN0ZXJGb250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCksIG5vZGUtPmxldmVsKCkpKTsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwYWdlLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKICAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsKICAgICAgICAgICAgIGRh
dGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChzdGQ6Om1heChkYXRhLmZvbnRE
YXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2ZWwoKSkpOwogICAgICAgICAg
ICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpICYmIGRhdGEuZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgIT0gSG9yaXpvbnRhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAgICAgICAgICAgICAgIHJldHVy
biBnbHlwaERhdGFBbmRQYWdlRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24o
YywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhLCBmYWxsYmFja1Bh
Z2UsIHBhZ2VOdW1iZXIpOwotI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogICAgIH0KQEAgLTQxNiwxNSArNDA2LDggQEAgc3RkOjpw
YWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6Z2x5cGhEYXRhQW5kUGFnZUZv
ckNoYXJhY3Rlcihjb25zdAogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byB1c2Ug
dGhlIG1pc3NpbmcgZ2x5cGggZnJvbSB0aGUgbGFzdCByZXNvcnQgZm9udCBpbnN0ZWFkLgogICAg
IEdseXBoRGF0YSBkYXRhID0gcHJpbWFyeVNpbXBsZUZvbnREYXRhKGRlc2NyaXB0aW9uKS0+bWlz
c2luZ0dseXBoRGF0YSgpOwogICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSNp
ZiBPUyhXSU5DRSkKLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdXQgV0lOQ0UgR0RJIGhhbmRs
aW5nIG5lYXIgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyIGFib3ZlLgotICAgICAgICBwYWdlLT5z
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgYywgZGF0YS5mb250RGF0YSk7Ci0gICAgICAgIGRh
dGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChzdGQ6Om1heChkYXRhLmZvbnRE
YXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2ZWwoKSkpOwotICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIocGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpLCBwYWdl
KTsKLSNlbHNlCiAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBkYXRh
LmdseXBoLCBkYXRhLmZvbnREYXRhKTsKICAgICAgICAgZGF0YS5mb250RGF0YS0+c2V0TWF4R2x5
cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFnZVRyZWVM
ZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDgyMDMzYTAuLjk3ZTg1ZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmgKQEAgLTIzLDkgKzIzLDcgQEAKICAqLwogCiAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jh
cnkgdW50aWwgYWxsIHBvcnRzIHN3aXRjaCB0byB1c2luZyB0aGlzIGZpbGUuCi0jaWYgVVNFKFdJ
TkdESSkKLSNpbmNsdWRlICJ3aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgiCi0jZWxpZiBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdU
SykKICNpbmNsdWRlICJmcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgiCiAjZWxzZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmlu
ZGV4IGUxYTllNmIuLmZiZGFlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0yNyw2ICsyNyw0IEBACiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlckRhdGFDYWlyby5oIgotI2VsaWYgVVNFKFdJTkdESSkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckRhdGFXaW5jZS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggYTdmNGIxZS4uNDA5YTU2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtNjYsOSAr
NjYsNiBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
IgogI2VuZGlmCiAjZW5kaWYKLSNlbGlmIE9TKFdJTkNFKQotI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZVdpbkNFLmgiCi0jZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVk
aWFQbGF5ZXJQcml2YXRlCiAjZWxpZiBQTEFURk9STShXSU4pICYmICFVU0UoR1NUUkVBTUVSKQog
I2lmIFVTRShBVkZPVU5EQVRJT04pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0YuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5oCmluZGV4IGQzMDI3MjIuLjJmNzhmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtNDYsNyArNDYsNyBA
QAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCi0jaWYgKFBMQVRGT1JNKFdJ
TikgJiYgIU9TKFdJTkNFKSkKKyNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8dXNwMTAuaD4K
ICNlbmRpZgogCkBAIC0yMzAsMTAgKzIzMCw4IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJ
TikKICAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1Gb250
OyB9Ci0jaWYgIU9TKFdJTkNFKSAvLyBkaXNhYmxlIHVudXNlZCBtZW1iZXJzIHRvIHNhdmUgc3Bh
Y2UKICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29u
c3Q7CiAgICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3Nj
cmlwdENhY2hlOyB9Ci0jZW5kaWYKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0Fz
Y2VudEhhY2soYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNr
KCk7CiAgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25z
dCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7CkBAIC0yNTQsNyArMjUyLDcg
QEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7
CiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CiAK
LSNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpKQorI2lmIChQTEFURk9STShXSU4pCiAg
ICAgdm9pZCBpbml0R0RJRm9udCgpOwogICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7
CiAgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKQEAg
LTMzNiwxMSArMzM0LDkgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29s
IG1faXNTeXN0ZW1Gb250OwotI2lmICFPUyhXSU5DRSkgLy8gZGlzYWJsZSB1bnVzZWQgbWVtYmVy
cyB0byBzYXZlIHNwYWNlCiAgICAgbXV0YWJsZSBTQ1JJUFRfQ0FDSEUgbV9zY3JpcHRDYWNoZTsK
ICAgICBtdXRhYmxlIFNDUklQVF9GT05UUFJPUEVSVElFUyogbV9zY3JpcHRGb250UHJvcGVydGll
czsKICNlbmRpZgotI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGJvb2wgbV9zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcApp
bmRleCBkMDljNWE0Li5mN2QwYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCkBA
IC00MDgsNyArNDA4LDYgQEAgYm9vbCByZW5hbWVGb250KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZm9u
dERhdGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIFZlY3RvcjxjaGEKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIC8vIFJlbmFtZSB0aGUgZm9udCBhbmQgaW5zdGFsbCB0
aGUgbmV3IGZvbnQgZGF0YSBpbnRvIHRoZSBzeXN0ZW0KIEhBTkRMRSByZW5hbWVBbmRBY3RpdmF0
ZUZvbnQoY29uc3QgU2hhcmVkQnVmZmVyJiBmb250RGF0YSwgY29uc3QgU3RyaW5nJiBmb250TmFt
ZSkKIHsKQEAgLTQyNiw2ICs0MjUsNSBAQCBIQU5ETEUgcmVuYW1lQW5kQWN0aXZhdGVGb250KGNv
bnN0IFNoYXJlZEJ1ZmZlciYgZm9udERhdGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbQogCiAgICAg
cmV0dXJuIGZvbnRIYW5kbGU7CiB9Ci0jZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVz
LmgKaW5kZXggYWI4MzllMC4uODMyYTRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCkBA
IC0zNywxMCArMzcsNiBAQCBzdHJ1Y3QgQmlnRW5kaWFuVVNob3J0Owogc3RydWN0IEVPVFByZWZp
eDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKFdJTkNFKQotdHlwZWRlZiB1bnNpZ25l
ZCBfX2ludDggVUludDg7Ci0jZW5kaWYKLQogc3RydWN0IEVPVEhlYWRlciB7CiAgICAgRU9USGVh
ZGVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9ESUJQaXhlbERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RJQlBpeGVsRGF0YS5jcHAKaW5kZXggZTlhMGY5Yi4uMGE4NjViZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5jcHAKQEAg
LTkxLDEyICs5MSwxMCBAQCB2b2lkIERJQlBpeGVsRGF0YTo6c2V0UkdCQUJpdG1hcEFscGhhKEhE
QyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIHVuc2lnbmVkCiAgICAgQVNTRVJUKHBpeGVs
RGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7CiAKICAgICBJbnRSZWN0IGRyYXdSZWN0KGRzdFJl
Y3QpOwotI2lmICFPUyhXSU5DRSkKICAgICBYRk9STSB0cmFuczsKICAgICBHZXRXb3JsZFRyYW5z
Zm9ybShoZGMsICZ0cmFucyk7CiAgICAgSW50U2l6ZSB0cmFuc2Zvcm1lZFBvc2l0aW9uKHRyYW5z
LmVEeCwgdHJhbnMuZUR5KTsKICAgICBkcmF3UmVjdC5tb3ZlKHRyYW5zZm9ybWVkUG9zaXRpb24p
OwotI2VuZGlmCiAKICAgICBpbnQgcGl4ZWxEYXRhV2lkdGggPSBwaXhlbERhdGEuc2l6ZSgpLndp
ZHRoKCk7CiAgICAgaW50IHBpeGVsRGF0YUhlaWdodCA9IHBpeGVsRGF0YS5zaXplKCkuaGVpZ2h0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJ
RXh0cmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRy
YXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ5NWRhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQ
YXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdESUV4dHJhcy5oIgotCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0jaWYgT1MoV0lOQ0UpCi1TT0ZUX0xJTktfTElCUkFSWShjb3JlZGxs
KQotU09GVF9MSU5LX09QVElPTkFMKGNvcmVkbGwsIEFscGhhQmxlbmQsIEJPT0wsIEFQSUVOVFJZ
LCAoSERDIGhkY0Rlc3QsIGludCBuWE9yaWdpbkRlc3QsIGludCBuWU9yaWdpbkRlc3QsIGludCBu
V2lkdGhEZXN0LCBpbnQgbkhlaWdodERlc3QsIEhEQyBoZGNTcmMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblhPcmlnaW5TcmMs
IGludCBuWU9yaWdpblNyYywgaW50IG5XaWR0aFNyYywgaW50IG5IZWlnaHRTcmMsIEJMRU5ERlVO
Q1RJT04gYmxlbmRGdW5jdGlvbikpCi0KLUFscGhhQmxlbmRQb2ludGVyVHlwZSBBbHBoYUJsZW5k
UG9pbnRlcigpCi17Ci0gICAgcmV0dXJuIEFscGhhQmxlbmRQdHIoKTsKLX0KLSNlbmRpZgotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR0RJRXh0cmFzLmgKaW5kZXggMDE2NjEyNC4uYzkxMjkxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuaApAQCAtMzIsMzEg
KzMyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgQk9PTCAoQVBJRU5UUlkgKkFs
cGhhQmxlbmRQb2ludGVyVHlwZSkgKEhEQyBoZGNEZXN0LCBpbnQgblhPcmlnaW5EZXN0LCBpbnQg
bllPcmlnaW5EZXN0LCBpbnQgbldpZHRoRGVzdCwgaW50IG5IZWlnaHREZXN0LCBIREMgaGRjU3Jj
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Y
T3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMsIGludCBuV2lkdGhTcmMsIGludCBuSGVpZ2h0U3Jj
LCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb24pOwogCi0jaWYgT1MoV0lOQ0UpCi1BbHBoYUJs
ZW5kUG9pbnRlclR5cGUgQWxwaGFCbGVuZFBvaW50ZXIoKTsKLSNlbmRpZgotCiBpbmxpbmUgYm9v
bCBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIEFs
cGhhQmxlbmRQb2ludGVyKCk7Ci0jZWxzZQogICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiB9CiAK
IGlubGluZSBib29sIGFscGhhQmxlbmRJZlN1cHBvcnRlZChIREMgaGRjRGVzdCwgaW50IG5YT3Jp
Z2luRGVzdCwgaW50IG5ZT3JpZ2luRGVzdCwgaW50IG5XaWR0aERlc3QsIGludCBuSGVpZ2h0RGVz
dCwgSERDIGhkY1NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblhP
cmlnaW5TcmMsIGludCBuWU9yaWdpblNyYywgaW50IG5XaWR0aFNyYywgaW50IG5IZWlnaHRTcmMs
IEJMRU5ERlVOQ1RJT04gYmxlbmRGdW5jdGlvbikKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBBbHBo
YUJsZW5kUG9pbnRlclR5cGUgYWxwaGFCbGVuZFBvaW50ZXIgPSBBbHBoYUJsZW5kUG9pbnRlcigp
OwotICAgIGlmICghYWxwaGFCbGVuZFBvaW50ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGFscGhhQmxlbmRQb2ludGVyKGhkY0Rlc3QsIG5YT3JpZ2luRGVzdCwgbllPcmlnaW5EZXN0
LCBuV2lkdGhEZXN0LCBuSGVpZ2h0RGVzdCwgaGRjU3JjLCBuWE9yaWdpblNyYywgbllPcmlnaW5T
cmMsIG5XaWR0aFNyYywgbkhlaWdodFNyYywgYmxlbmRGdW5jdGlvbik7Ci0jZWxzZQogICAgIEFs
cGhhQmxlbmQoaGRjRGVzdCwgblhPcmlnaW5EZXN0LCBuWU9yaWdpbkRlc3QsIG5XaWR0aERlc3Qs
IG5IZWlnaHREZXN0LCBoZGNTcmMsIG5YT3JpZ2luU3JjLCBuWU9yaWdpblNyYywgbldpZHRoU3Jj
LCBuSGVpZ2h0U3JjLCBibGVuZEZ1bmN0aW9uKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5j
cHAKaW5kZXggNTBjZjNlNS4uZjNiMGQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcApAQCAtMjcsMTEgKzI3LDYgQEAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBPUyhX
SU5DRSkKLS8vIFNIR0ZJX1NIRUxMSUNPTlNJWkUgaXMgbm90IGF2YWlsYWJsZSBvbiBXSU5DRQot
I2RlZmluZSBTSEdGSV9TSEVMTElDT05TSVpFICAgICAgICAgMAotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBzaGVsbDMyTXVsdGlwbGVGaWxlSWNvbklu
ZGV4ID0gNTQ7CkBAIC02NCw5ICs1OSw2IEBAIFBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRl
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSWNvbihzZmkuaEljb24pKTsKICAgICB9CiAKLSNpZiBPUyhXSU5D
RSkKLSAgICByZXR1cm4gMDsKLSNlbHNlCiAgICAgV0NIQVIgYnVmZmVyW01BWF9QQVRIXTsKICAg
ICBVSU5UIGxlbmd0aCA9IDo6R2V0U3lzdGVtRGlyZWN0b3J5VyhidWZmZXIsIFdURl9BUlJBWV9M
RU5HVEgoYnVmZmVyKSk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC03OSw3ICs3MSw2IEBAIFBhc3NS
ZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBmaWxlbmFtZXMpCiAgICAgaWYgKCE6OkV4dHJhY3RJY29uRXhXKGJ1ZmZlciwgc2hlbGwzMk11
bHRpcGxlRmlsZUljb25JbmRleCwgMCwgJmhJY29uLCAxKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGhJY29uKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBJ
Y29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCkBA
IC04NywxMiArNzgsOCBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcikKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBjb250ZXh0LT5kcmF3SWNv
bihtX2hJY29uLCByLCBESV9OT1JNQUwpOwotI2Vsc2UKICAgICBMb2NhbFdpbmRvd3NDb250ZXh0
IHdpbmRvd0NvbnRleHQoY29udGV4dCwgcik7CiAgICAgRHJhd0ljb25FeCh3aW5kb3dDb250ZXh0
LmhkYygpLCByLngoKSwgci55KCksIG1faEljb24sIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwg
MCwgRElfTk9STUFMKTsKLSNlbmRpZgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAppbmRleCA2
YzE0ODY2Li45NjU4NDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKQEAgLTk2LDEzICs5NiwxMSBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0R0RJRm9udCgpCiAgICAgbV9hdmdDaGFyV2lkdGgg
PSB0ZXh0TWV0cmljcy50bUF2ZUNoYXJXaWR0aDsKICAgICBtX21heENoYXJXaWR0aCA9IHRleHRN
ZXRyaWNzLnRtTWF4Q2hhcldpZHRoOwogICAgIGZsb2F0IHhIZWlnaHQgPSBhc2NlbnQgKiAwLjU2
ZjsgLy8gQmVzdCBndWVzcyBmb3IgeEhlaWdodCBpZiBubyB4IGdseXBoIGlzIHByZXNlbnQuCi0j
aWYgIU9TKFdJTkNFKQogICAgIEdMWVBITUVUUklDUyBnbTsKICAgICBzdGF0aWMgY29uc3QgTUFU
MiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwogICAgIERXT1JEIGxl
biA9IEdldEdseXBoT3V0bGluZShoZGMsICd4JywgR0dPX01FVFJJQ1MsICZnbSwgMCwgMCwgJmlk
ZW50aXR5KTsKICAgICBpZiAobGVuICE9IEdESV9FUlJPUiAmJiBnbS5nbXB0R2x5cGhPcmlnaW4u
eSA+IDApCiAgICAgICAgIHhIZWlnaHQgPSBnbS5nbXB0R2x5cGhPcmlnaW4ueTsKLSNlbmRpZgog
ICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKICAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuaXRzUGVyRW0obWV0cmljcy5vdG1FTVNxdWFyZSk7CiAKQEAgLTEyMSwxMCArMTE5LDgg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIAogdm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAg
U2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKICAgICBkZWxldGUgbV9zY3JpcHRGb250
UHJvcGVydGllczsKLSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CkBAIC0yMDAs
OSArMTk2LDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogCiBGbG9h
dFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25z
dAogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSNlbHNlCiAgICAg
SFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CiAg
ICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9wbGF0Zm9ybURhdGEuaGZv
bnQoKSk7CkBAIC0yMTUsMzUgKzIwOCwyNCBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJv
dW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAogCiAgICAgcmV0dXJuIEZsb2F0UmVj
dChnZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi54LCAtZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmln
aW4ueSwKICAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3ludGhldGljQm9sZE9m
ZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7IAotI2VuZGlmCiB9CiAKIGZsb2F0IFNpbXBs
ZUZvbnREYXRhOjp3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEhX
bmREQyBoZGMoMCk7Ci0jaWYgIU9TKFdJTkNFKQogICAgIFNldEdyYXBoaWNzTW9kZShoZGMsIEdN
X0FEVkFOQ0VEKTsKLSNlbmRpZgogICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdCho
ZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgV0NIQVIg
YyA9IGdseXBoOwotICAgIFNJWkUgZm9udFNpemU7Ci0gICAgR2V0VGV4dEV4dGVudFBvaW50MzJX
KGhkYywgJmMsIDEsICZmb250U2l6ZSk7Ci0gICAgZmxvYXQgcmVzdWx0ID0gZm9udFNpemUuY3gg
KiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyA3Mi5mOwotI2Vsc2UKICAgICBHTFlQSE1FVFJJQ1Mg
Z2RpTWV0cmljczsKICAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAs
IDAsICAwLCAwLCAgMCwgMSB9OwogICAgIEdldEdseXBoT3V0bGluZShoZGMsIGdseXBoLCBHR09f
TUVUUklDUyB8IEdHT19HTFlQSF9JTkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSk7
CiAgICAgZmxvYXQgcmVzdWx0ID0gZ2RpTWV0cmljcy5nbUNlbGxJbmNYICsgbV9zeW50aGV0aWNC
b2xkT2Zmc2V0OwotI2VuZGlmCiAKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAhT1MoV0lOQ0UpCiBTQ1JJUFRfRk9OVFBST1BF
UlRJRVMqIFNpbXBsZUZvbnREYXRhOjpzY3JpcHRGb250UHJvcGVydGllcygpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKSB7CkBAIC0yNjEsNiArMjQzLDUgQEAgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9udFByb3BlcnRpZXMo
KSBjb25zdAogICAgIH0KICAgICByZXR1cm4gbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KLSNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5DRS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5DRS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZWJlNGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBh
cmUgbWV0OgotKgotKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0qIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0qIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0qIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIkZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPG1sYW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhEQyBnX3NjcmVlbkRDOwotCi1z
dGF0aWMgSU11bHRpTGFuZ3VhZ2UgKm11bHRpTGFuZ3VhZ2UgPSAwOwotc3RhdGljIElNTGFuZ0Zv
bnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gMDsKLQotSU11bHRpTGFuZ3VhZ2UqIEZvbnRDYWNo
ZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpCi17Ci0gICAgaWYgKCFtdWx0aUxhbmd1YWdl
KQotICAgICAgICBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0aUxhbmd1YWdlLCAwLCBDTFND
VFhfSU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCAodm9pZCoqKSZtdWx0aUxhbmd1
YWdlKTsKLQotICAgIHJldHVybiBtdWx0aUxhbmd1YWdlOwotfQotCi1JTUxhbmdGb250TGlua1R5
cGUqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQotewotICAgIGlmICghbGFuZ0Zv
bnRMaW5rKSB7Ci0gICAgICAgIGlmIChJTXVsdGlMYW5ndWFnZSogbWxpID0gZ2V0TXVsdGlMYW5n
dWFnZUludGVyZmFjZSgpKQotICAgICAgICAgICAgbWxpLT5RdWVyeUludGVyZmFjZSgmbGFuZ0Zv
bnRMaW5rKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFuZ0ZvbnRMaW5rOwotfQotCi1zdGF0aWMg
Ym9vbCBjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFu
Z0ZvbnRMaW5rLCBIREMgaGRjLCBIRk9OVCBoZm9udCwgVUNoYXIgY2hhcmFjdGVyLCBjb25zdCB3
Y2hhcl90KiBmYWNlTmFtZSkKLXsKLSNpZiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCi0gICAgVUlO
VCB1bmljb2RlUmFuZ2VzOwotICAgIGlmIChTX09LICE9IGxhbmdGb250TGluay0+R2V0Rm9udFVu
aWNvZGVSYW5nZXMoaGRjLCAmdW5pY29kZVJhbmdlcywgMCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN0YXRpYyBWZWN0b3I8VU5JQ09ERVJBTkdFLCA2ND4gZ2x5cGhzZXRCdWZmZXI7
Ci0gICAgZ2x5cGhzZXRCdWZmZXIucmVzaXplKHVuaWNvZGVSYW5nZXMpOwotCi0gICAgaWYgKFNf
T0sgIT0gbGFuZ0ZvbnRMaW5rLT5HZXRGb250VW5pY29kZVJhbmdlcyhoZGMsICZ1bmljb2RlUmFu
Z2VzLCBnbHlwaHNldEJ1ZmZlci5kYXRhKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gYSBiaW5hcnkgc2VhcmNoLiAoWW9uZyBMaTogVGhh
dCdzIGVhc3kuIEJ1dCwgaXMgaXQgZ3VhcmFudGVlZCB0aGF0IHRoZSByYW5nZXMgYXJlIHNvcnRl
ZD8pCi0gICAgZm9yIChWZWN0b3I8VU5JQ09ERVJBTkdFLCA2ND46OmNvbnN0X2l0ZXJhdG9yIGkg
PSBnbHlwaHNldEJ1ZmZlci5iZWdpbigpOyBpICE9IGdseXBoc2V0QnVmZmVyLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGktPndjVG8gPj0gY2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJu
IGktPndjRnJvbSA8PSBjaGFyYWN0ZXI7Ci0gICAgfQotI2Vsc2UKLSAgICBEV09SRCBmb250Q29k
ZVBhZ2VzID0gMCwgY2hhckNvZGVQYWdlcyA9IDA7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBsYW5n
Rm9udExpbmstPkdldEZvbnRDb2RlUGFnZXMoaGRjLCBoZm9udCwgJmZvbnRDb2RlUGFnZXMpOwot
ICAgIGlmIChyZXN1bHQgIT0gU19PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3Vs
dCA9IGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhjaGFyYWN0ZXIsICZjaGFyQ29kZVBh
Z2VzKTsKLSAgICBpZiAocmVzdWx0ICE9IFNfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGZvbnRDb2RlUGFnZXMgfD0gRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25vd25Gb250Q29kZVBh
Z2VzKGZhY2VOYW1lKTsKLSAgICBpZiAoZm9udENvZGVQYWdlcyAmIGNoYXJDb2RlUGFnZXMpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExp
bmssIEhEQyBoZGMsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHJlZkZvbnQsIERXT1JEIGNvZGVQ
YWdlTWFzaywgVUNoYXIgY2hhcmFjdGVyID0gMCkKLXsKLSAgICBIRk9OVCBtbGFuZ0ZvbnQ7Ci0K
LSNpZiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCi0gICAgSFJFU1VMVCByZXN1bHQgPSBsYW5nRm9u
dExpbmstPk1hcEZvbnQoaGRjLCBjb2RlUGFnZU1hc2ssIGNoYXJhY3RlciwgJm1sYW5nRm9udCk7
Ci0jZWxzZQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5NYXBGb250KGhkYywg
Y29kZVBhZ2VNYXNrLCByZWZGb250Lmhmb250KCksICZtbGFuZ0ZvbnQpOwotI2VuZGlmCi0KLSAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBtbGFuZ0ZvbnQ7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RFdPUkQsIDQ+JiBnZXRDSktDb2Rl
UGFnZU1hc2tzKCkKLXsKLSAgICAvLyBUaGUgZGVmYXVsdCBvcmRlciBpbiB3aGljaCB3ZSBsb29r
IGZvciBhIGZvbnQgZm9yIGEgQ0pLIGNoYXJhY3Rlci4gSWYgdGhlIHVzZXIncyBkZWZhdWx0IGNv
ZGUgcGFnZSBpcwotICAgIC8vIG9uZSBvZiB0aGVzZSwgd2Ugd2lsbCB1c2UgaXQgZmlyc3QuCi0g
ICAgc3RhdGljIGNvbnN0IFVJTlQgQ0pLQ29kZVBhZ2VzW10gPSB7Ci0gICAgICAgIDkzMiwgLyog
SmFwYW5lc2UgKi8KLSAgICAgICAgOTM2LCAvKiBTaW1wbGlmaWVkIENoaW5lc2UgKi8KLSAgICAg
ICAgOTUwLCAvKiBUcmFkaXRpb25hbCBDaGluZXNlICovCi0gICAgICAgIDk0OSAgLyogS29yZWFu
ICovCi0gICAgfTsKLQotICAgIHN0YXRpYyBWZWN0b3I8RFdPUkQsIDQ+IGNvZGVQYWdlTWFza3M7
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewot
ICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIElNTGFuZ0ZvbnRMaW5rVHlwZSog
bGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKLSAgICAg
ICAgaWYgKCFsYW5nRm9udExpbmspCi0gICAgICAgICAgICByZXR1cm4gY29kZVBhZ2VNYXNrczsK
LQotICAgICAgICBVSU5UIGRlZmF1bHRDb2RlUGFnZTsKLSAgICAgICAgRFdPUkQgZGVmYXVsdENv
ZGVQYWdlTWFzayA9IDA7Ci0gICAgICAgIGlmIChHZXRMb2NhbGVJbmZvKExPQ0FMRV9VU0VSX0RF
RkFVTFQsIExPQ0FMRV9SRVRVUk5fTlVNQkVSIHwgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdF
LCByZWludGVycHJldF9jYXN0PExQV1NUUj4oJmRlZmF1bHRDb2RlUGFnZSksIHNpemVvZihkZWZh
dWx0Q29kZVBhZ2UpKSkKLSAgICAgICAgICAgIGxhbmdGb250TGluay0+Q29kZVBhZ2VUb0NvZGVQ
YWdlcyhkZWZhdWx0Q29kZVBhZ2UsICZkZWZhdWx0Q29kZVBhZ2VNYXNrKTsKLQotICAgICAgICBp
ZiAoZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1swXSB8fCBkZWZhdWx0Q29kZVBhZ2Ug
PT0gQ0pLQ29kZVBhZ2VzWzFdIHx8IGRlZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFnZXNbMl0g
fHwgZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1szXSkKLSAgICAgICAgICAgIGNvZGVQ
YWdlTWFza3MuYXBwZW5kKGRlZmF1bHRDb2RlUGFnZU1hc2spOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZGVmYXVsdENvZGVQYWdl
ICE9IENKS0NvZGVQYWdlc1tpXSkgewotICAgICAgICAgICAgICAgIERXT1JEIGNvZGVQYWdlTWFz
azsKLSAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoQ0pL
Q29kZVBhZ2VzW2ldLCAmY29kZVBhZ2VNYXNrKTsKLSAgICAgICAgICAgICAgICBjb2RlUGFnZU1h
c2tzLmFwcGVuZChjb2RlUGFnZU1hc2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBjb2RlUGFnZU1hc2tzOwotfQotCi0KLXN0cnVjdCBUcmFpdHNJbkZhbWls
eVByb2NEYXRhIHsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBtX2ZhbWlseU5hbWU7Ci0gICAgSGFz
aFNldDx1bnNpZ25lZD4gbV90cmFpdHNNYXNrczsKLX07Ci0KLXN0YXRpYyBpbnQgQ0FMTEJBQ0sg
dHJhaXRzSW5GYW1pbHlFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBsb2dGb250LCBDT05TVCBURVhU
TUVUUklDKiBtZXRyaWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBU
cmFpdHNJbkZhbWlseVByb2NEYXRhKiBwcm9jRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VHJhaXRz
SW5GYW1pbHlQcm9jRGF0YSo+KGxQYXJhbSk7Ci0KLSAgICB1bnNpZ25lZCB0cmFpdHNNYXNrID0g
MDsKLSAgICB0cmFpdHNNYXNrIHw9IGxvZ0ZvbnQtPmxmSXRhbGljID8gRm9udFN0eWxlSXRhbGlj
TWFzayA6IEZvbnRTdHlsZU5vcm1hbE1hc2s7Ci0gICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFu
dE5vcm1hbE1hc2s7Ci0gICAgTE9ORyB3ZWlnaHQgPSBGb250UGxhdGZvcm1EYXRhOjphZGp1c3Rl
ZEdESUZvbnRXZWlnaHQobG9nRm9udC0+bGZXZWlnaHQsIHByb2NEYXRhLT5tX2ZhbWlseU5hbWUp
OwotICAgIHRyYWl0c01hc2sgfD0gd2VpZ2h0ID09IEZXX1RISU4gPyBGb250V2VpZ2h0MTAwTWFz
ayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19FWFRSQUxJR0hUID8gRm9udFdlaWdodDIwME1hc2sg
OgotICAgICAgICB3ZWlnaHQgPT0gRldfTElHSFQgPyBGb250V2VpZ2h0MzAwTWFzayA6Ci0gICAg
ICAgIHdlaWdodCA9PSBGV19OT1JNQUwgPyBGb250V2VpZ2h0NDAwTWFzayA6Ci0gICAgICAgIHdl
aWdodCA9PSBGV19NRURJVU0gPyBGb250V2VpZ2h0NTAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9
PSBGV19TRU1JQk9MRCA/IEZvbnRXZWlnaHQ2MDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZX
X0JPTEQgPyBGb250V2VpZ2h0NzAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19FWFRSQUJP
TEQgPyBGb250V2VpZ2h0ODAwTWFzayA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGb250V2VpZ2h0OTAwTWFzazsKLSAgICBwcm9jRGF0YS0+bV90cmFpdHNNYXNrcy5hZGQodHJh
aXRzTWFzayk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUlu
aXQoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Y29tSW5pdGlhbGl6ZSgpCi17Ci19Ci0KLXZv
aWQgRm9udENhY2hlOjpjb21VbmluaXRpYWxpemUoKQotewotICAgIGlmIChsYW5nRm9udExpbmsp
IHsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxhbmdGb250TGlu
ayA9IDA7Ci0gICAgfQotICAgIGlmIChtdWx0aUxhbmd1YWdlKSB7Ci0gICAgICAgIG11bHRpTGFu
Z3VhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbXVsdGlMYW5ndWFnZSA9IDA7Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1w
bGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpCi17Ci0gICAgU3RyaW5nIGZhbWlseU5hbWU7Ci0gICAgV0NIQVIgbmFt
ZVtMRl9GQUNFU0laRV07Ci0KLSAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzWzBdOwot
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG9yaWdGb250ID0gb3JpZ2luYWxGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBpZiAoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExp
bmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9
IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5EQywgT0JKX0ZPTlQpOwotICAgICAgICBIRk9OVCBo
Zm9udCA9IDA7Ci0gICAgICAgIERXT1JEIGNvZGVQYWdlcyA9IDA7Ci0gICAgICAgIFVJTlQgY29k
ZVBhZ2UgPSAwOwotICAgICAgICAvLyBUcnkgTUxhbmcgZm9udCBsaW5raW5nIGZpcnN0LgotICAg
ICAgICBsYW5nRm9udExpbmstPkdldENoYXJDb2RlUGFnZXMoY2hhcmFjdGVyLCAmY29kZVBhZ2Vz
KTsKLSAgICAgICAgaWYgKGNvZGVQYWdlcyAmJiB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFj
dGVyLCBVQ0hBUl9VTklGSUVEX0lERU9HUkFQSCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBDSksg
Y2hhcmFjdGVyIG1heSBiZWxvbmcgdG8gbXVsdGlwbGUgY29kZSBwYWdlcy4gV2Ugd2FudCB0bwot
ICAgICAgICAgICAgLy8gZG8gZm9udCBsaW5raW5nIGFnYWluc3QgYSBzaW5nbGUgb25lIG9mIHRo
ZW0sIHByZWZlcnJpbmcgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGNvZGUgcGFnZSBmb3Ig
dGhlIHVzZXIncyBsb2NhbGUuCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8RFdPUkQsIDQ+JiBD
SktDb2RlUGFnZU1hc2tzID0gZ2V0Q0pLQ29kZVBhZ2VNYXNrcygpOwotICAgICAgICAgICAgdW5z
aWduZWQgbnVtQ29kZVBhZ2VzID0gQ0pLQ29kZVBhZ2VNYXNrcy5zaXplKCk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ29kZVBhZ2VzOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBoZm9udCA9IGNyZWF0ZU1MYW5nRm9udChsYW5nRm9udExpbmssIGdfc2NyZWVuREMs
IG9yaWdGb250LCBDSktDb2RlUGFnZU1hc2tzW2ldKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhm
b250KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIFNl
bGVjdE9iamVjdChnX3NjcmVlbkRDLCBoZm9udCk7Ci0gICAgICAgICAgICAgICAgR2V0VGV4dEZh
Y2UoZ19zY3JlZW5EQywgTEZfRkFDRVNJWkUsIG5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYg
KGhmb250ICYmICEoY29kZVBhZ2VzICYgQ0pLQ29kZVBhZ2VNYXNrc1tpXSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXNrZWQgYWJvdXQgYSBjb2RlIHBhZ2UgdGhhdCBpcyBub3Qgb25l
IG9mIHRoZSBjb2RlIHBhZ2VzCi0gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGJ5IE1M
YW5nLCBzbyB0aGUgZm9udCBtaWdodCBub3QgY29udGFpbiB0aGUgY2hhcmFjdGVyLgotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRM
aW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMs
IG9sZEZvbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0ZvbnRMaW5rLT5SZWxlYXNl
Rm9udChoZm9udCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZm9udCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxhbmdGb250
TGluaywgZ19zY3JlZW5EQywgb3JpZ0ZvbnQsIGNvZGVQYWdlcywgY2hhcmFjdGVyKTsKLSAgICAg
ICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBoZm9udCk7Ci0gICAgICAgICAgICBHZXRU
ZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9GQUNFU0laRSwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOwotCi0gICAgICAgIGlmIChoZm9u
dCkgewotICAgICAgICAgICAgZmFtaWx5TmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICBsYW5nRm9u
dExpbmstPlJlbGVhc2VGb250KGhmb250KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBG
b250UGxhdGZvcm1EYXRhOjptYXBLbm93bkZvbnQoY29kZVBhZ2VzLCBmYW1pbHlOYW1lKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGZhbWlseU5hbWUg
PSBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpOwotCi0gICAgaWYgKCFmYW1p
bHlOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBGSVhNRTogdGVtcG9yYXJ5IHdvcmthcm91
bmQgZm9yIFRoYWkgZm9udCBwcm9ibGVtCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24oZGVzY3JpcHRpb24pOwotICAgICAgICBpZiAodWJsb2NrX2dldENvZGUoYykgPT0g
VUJMT0NLX1RIQUkgJiYgZm9udERlc2NyaXB0aW9uLndlaWdodCgpID4gRm9udFdlaWdodE5vcm1h
bCkKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1h
bCk7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gZ2V0Q2FjaGVkRm9udFBs
YXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwotICAgICAgICBpZiAocmVz
dWx0ICYmIHJlc3VsdC0+aGFzaCgpICE9IG9yaWdGb250Lmhhc2goKSkgewotICAgICAgICAgICAg
aWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShy
ZXN1bHQsIERvTm90UmV0YWluKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9udERhdGEucmVs
ZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0
aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCi0gICAgLy8g
dGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkg
cHJlZnMuCi0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjLCBGb250UGxhdGZv
cm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKLX0KLQot
UGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSkpOwotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0
VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5z
aWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLSAgICBMT0dGT05UIGxvZ0ZvbnQ7Ci0gICAgbG9nRm9u
dC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0gICAgdW5zaWduZWQgZmFtaWx5TGVuZ3Ro
ID0gc3RkOjptaW4oZmFtaWx5TmFtZS5sZW5ndGgoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExG
X0ZBQ0VTSVpFIC0gMSkpOwotICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5h
bWUuY2hhcmFjdGVycygpLCBmYW1pbHlMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICBsb2dG
b250LmxmRmFjZU5hbWVbZmFtaWx5TGVuZ3RoXSA9IDA7Ci0gICAgbG9nRm9udC5sZlBpdGNoQW5k
RmFtaWx5ID0gMDsKLQotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgcHJvY0RhdGEoZmFtaWx5
TmFtZSk7Ci0gICAgRW51bUZvbnRGYW1pbGllc0V4KGdfc2NyZWVuREMsICZsb2dGb250LCB0cmFp
dHNJbkZhbWlseUVudW1Qcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnByb2NEYXRhKSwg
MCk7Ci0gICAgY29weVRvVmVjdG9yKHByb2NEYXRhLm1fdHJhaXRzTWFza3MsIHRyYWl0c01hc2tz
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5NDhmOC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgotI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJPcGVuVHlwZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQ3VzdG9t
Rm9udENhY2hlKiBnX2N1c3RvbUZvbnRDYWNoZSA9IDA7Ci0KLXZvaWQgc2V0Q3VzdG9tRm9udENh
Y2hlKEN1c3RvbUZvbnRDYWNoZSogY2FjaGUpCi17Ci0gICAgZ19jdXN0b21Gb250Q2FjaGUgPSBj
YWNoZTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoKQotewotICAgIGlmIChnX2N1c3RvbUZvbnRDYWNoZSAmJiAhbV9uYW1lLmlzRW1wdHkoKSkK
LSAgICAgICAgZ19jdXN0b21Gb250Q2FjaGUtPnVucmVnaXN0ZXJGb250KG1fbmFtZSk7Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBGb250
V2lkdGhWYXJpYW50LCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotewotICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzYzsKLSAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUoc2l6
ZSk7Ci0gICAgZm9udERlc2Muc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzYy5z
ZXRJdGFsaWMoaXRhbGljKTsKLSAgICBmb250RGVzYy5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWln
aHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEo
Zm9udERlc2MsIG1fbmFtZSwgZmFsc2UpOwotfQotCi0vLyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1
bnByZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucyBhbmQg
dG8KLS8vIG5vdCBhbGxvdyBhY2Nlc3MgZnJvbSBDU1MuCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZVVu
aXF1ZUZvbnROYW1lKCkKLXsKLSAgICBHVUlEIGZvbnRVdWlkOwotCi0gICAgdW5zaWduZWQgaW50
KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KCZmb250VXVpZCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoR1VJRCkgLyBzaXplb2YoaW50KSA7ICsraSkKLSAg
ICAgICAgKihwdHIgKyBpKSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmFuZG9tTnVtYmVy
KCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSk7Ci0KLSAg
ICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
JmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7Ci0gICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0
aCgpIDwgTEZfRkFDRVNJWkUpOwotICAgIHJldHVybiBmb250TmFtZS5yZXBsYWNlKCcvJywgJ18n
KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IGNyZWF0ZUZv
bnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyJiBidWZmZXIpCi17Ci0gICAgU3RyaW5n
IGZvbnROYW1lID0gY3JlYXRlVW5pcXVlRm9udE5hbWUoKTsKLQotICAgIFZlY3RvcjxjaGFyPiBy
ZXdyaXR0ZW5Gb250RGF0YTsKLSAgICBpZiAoIXJlbmFtZUZvbnQoYnVmZmVyLCBmb250TmFtZSwg
cmV3cml0dGVuRm9udERhdGEpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGxvY2FsQnVmZmVyID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihy
ZXdyaXR0ZW5Gb250RGF0YSk7Ci0gICAgaWYgKCFnX2N1c3RvbUZvbnRDYWNoZSB8fCAhZ19jdXN0
b21Gb250Q2FjaGUtPnJlZ2lzdGVyRm9udChmb250TmFtZSwgbG9jYWxCdWZmZXIuZ2V0KCkpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+KGZvbnROYW1lKTsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShmb3JtYXQsICJvcGVudHlwZSIpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MmQ3NDIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotI2RlZmluZSBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRS
ZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwotICAgIGNs
YXNzIENhY2hlZEZvbnQ7Ci0gICAgY2xhc3MgU2hhcmVkQnVmZmVyOwotCi0gICAgY2xhc3MgQ3Vz
dG9tRm9udENhY2hlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCByZWdpc3Rl
ckZvbnQoY29uc3QgU3RyaW5nJiBmb250TmFtZSwgY29uc3QgU2hhcmVkQnVmZmVyKikgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckZvbnQoY29uc3QgU3RyaW5nJiBmb250TmFt
ZSkgPSAwOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSB7Ci0g
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOwotICAg
IHB1YmxpYzoKLSAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUpCi0gICAgICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9y
bURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywg
Rm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJX
aWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKLQotICAgICAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBT
dHJpbmcgbV9uYW1lOwotICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3RvbVBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXImKTsK
LSAgICB2b2lkIHNldEN1c3RvbUZvbnRDYWNoZShDdXN0b21Gb250Q2FjaGUqKTsKLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YTZjYTVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRh
LmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVk
ZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3Qu
aD4KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxtbGFuZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWV4dGVybiBIREMgZ19zY3JlZW5EQzsKLQotc3RhdGljIHdjaGFyX3Qg
c29uZ1RpU3RyW10gPSB7IDB4NWI4YiwgMHg0ZjUzLCAwIH07Ci1zdGF0aWMgd2NoYXJfdCBoZWlU
aVN0cltdID0geyAweDllZDEsIDB4NGY1MywgMCB9OwotCi1jbGFzcyBGb250RmFtaWx5Q29kZVBh
Z2VJbmZvIHsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5Q29kZVBhZ2VJbmZvKCkKLSAgICAgICAg
OiBtX2NvZGVQYWdlKDApLCBtX2NvZGVQYWdlcygwKQotICAgIHsKLSAgICB9Ci0gICAgRm9udEZh
bWlseUNvZGVQYWdlSW5mbyhjb25zdCB3Y2hhcl90KiBmYW1pbHksIFVJTlQgY29kZVBhZ2UpCi0g
ICAgICAgIDogbV9mYW1pbHkoZmFtaWx5KSwgbV9jb2RlUGFnZShjb2RlUGFnZSksIG1fY29kZVBh
Z2VzKDApCi0gICAgewotICAgIH0KLSAgICBEV09SRCBjb2RlUGFnZXMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFtX2NvZGVQYWdlcykgewotICAgICAgICAgICAgaWYgKElNTGFuZ0ZvbnRM
aW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2Uo
KSkKLSAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMobV9j
b2RlUGFnZSwgJm1fY29kZVBhZ2VzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jb2Rl
UGFnZXM7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1fZmFtaWx5OwotICAgIFVJTlQgbV9jb2RlUGFn
ZTsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBEV09SRCBtX2NvZGVQYWdlczsKLX07Ci0KLWNsYXNz
IEZvbnRGYW1pbHlDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5Q2hlY2tlcihjb25z
dCB3Y2hhcl90KiBmYW1pbHkpCi0gICAgICAgIDogbV9leGlzdHMoZmFsc2UpCi0gICAgewotICAg
ICAgICBFbnVtRm9udEZhbWlsaWVzKGdfc2NyZWVuREMsIGZhbWlseSwgZW51bUZvbnRGYW1Qcm9j
LCAoTFBBUkFNKXRoaXMpOwotICAgIH0KLSAgICBib29sIGlzU3VwcG9ydGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9leGlzdHM7IH0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2V4aXN0czsKLSAgICBzdGF0
aWMgaW50IENBTExCQUNLIGVudW1Gb250RmFtUHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBlbGYs
IGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBsUGFy
YW0pOwotfTsKLQotY2xhc3MgVmFsaWRGb250RmFtaWx5RmluZGVyIHsKLXB1YmxpYzoKLSAgICBW
YWxpZEZvbnRGYW1pbHlGaW5kZXIoKQotICAgIHsKLSAgICAgICAgRW51bUZvbnRGYW1pbGllcyhn
X3NjcmVlbkRDLCAwLCBlbnVtRm9udEZhbVByb2MsIChMUEFSQU0pdGhpcyk7Ci0gICAgfQotICAg
IGNvbnN0IFN0cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0KLXByaXZh
dGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5OwotICAgIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bUZv
bnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIq
IGxwbnRtLCBEV09SRCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSk7Ci19OwotCi1jbGFzcyBGaXhl
ZFNpemVGb250RGF0YTogcHVibGljIFJlZkNvdW50ZWQ8Rml4ZWRTaXplRm9udERhdGE+IHsKLXB1
YmxpYzoKLSAgICBMT0dGT05UIG1fZm9udDsKLSAgICBHRElPYmplY3Q8SEZPTlQ+IG1faGZvbnQ7
Ci0gICAgVEVYVE1FVFJJQyBtX21ldHJpY3M7Ci0gICAgRFdPUkQgbV9jb2RlUGFnZXM7Ci0gICAg
dW5zaWduZWQgbV93ZWlnaHQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHksIHVuc2lnbmVkIHdlaWdodCwgYm9vbCBpdGFsaWMpOwotcHJpdmF0ZToKLSAgICBGaXhlZFNp
emVGb250RGF0YSgpCi0gICAgICAgIDogbV9jb2RlUGFnZXMoMCkKLSAgICAgICAgLCBtX3dlaWdo
dCgwKQotICAgICAgICAsIG1faXRhbGljKGZhbHNlKQotICAgIHsKLSAgICAgICAgbWVtc2V0KCZt
X2ZvbnQsIDAsIHNpemVvZihtX2ZvbnQpKTsKLSAgICAgICAgbWVtc2V0KCZtX21ldHJpY3MsIDAs
IHNpemVvZihtX21ldHJpY3MpKTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgRml4ZWRTaXplRm9udERh
dGFLZXkgewotICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5ID0gQXRvbWljU3RyaW5nKCksIHVuc2lnbmVkIHdlaWdodCA9IDAsIGJvb2wgaXRhbGljID0g
ZmFsc2UpCi0gICAgICAgIDogbV9mYW1pbHkoZmFtaWx5KQotICAgICAgICAsIG1fd2VpZ2h0KHdl
aWdodCkKLSAgICAgICAgLCBtX2l0YWxpYyhpdGFsaWMpCi0gICAgewotICAgIH0KLQotICAgIEZp
eGVkU2l6ZUZvbnREYXRhS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3dl
aWdodCgtMikgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fd2VpZ2h0ID09IC0yOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRml4
ZWRTaXplRm9udERhdGFLZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdDYXNlKG1fZmFtaWx5LCBvdGhlci5tX2ZhbWlseSkKLSAgICAgICAgICAgICYm
IG1fd2VpZ2h0ID09IG90aGVyLm1fd2VpZ2h0Ci0gICAgICAgICAgICAmJiBtX2l0YWxpYyA9PSBv
dGhlci5tX2l0YWxpYzsKLSAgICB9Ci0KLSAgICBBdG9taWNTdHJpbmcgbV9mYW1pbHk7Ci0gICAg
dW5zaWduZWQgbV93ZWlnaHQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLX07Ci0KLXN0cnVjdCBGaXhl
ZFNpemVGb250RGF0YUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZp
eGVkU2l6ZUZvbnREYXRhS2V5JiBmb250KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaGFzaENv
ZGVzW10gPSB7Ci0gICAgICAgICAgICBDYXNlRm9sZGluZ0hhc2g6Omhhc2goZm9udC5tX2ZhbWls
eSksCi0gICAgICAgICAgICBmb250Lm1fd2VpZ2h0LAotICAgICAgICAgICAgLy8gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGZvbnQubV9pdGFsaWMpOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4g
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5
JiBhLCBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5
VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGaXhlZFNpemVGb250RGF0YUtleT4gewot
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRml4ZWRTaXplRm9udERhdGFLZXksIGtl
eSwgKG51bGxBdG9tKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGaXhlZFNpemVGb250RGF0YUtleSYgc2xvdCkKLSAg
ICB7Ci0gICAgICAgIG5ldyAoJnNsb3QpIEZpeGVkU2l6ZUZvbnREYXRhS2V5KFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
Y29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Ci0gICAgfQotfTsKLQotaW50IENBTExC
QUNLIEZvbnRGYW1pbHlDaGVja2VyOjplbnVtRm9udEZhbVByb2MoY29uc3QgTE9HRk9OVCBGQVIq
IGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZvbnRUeXBlLCBMUEFS
QU0gbFBhcmFtKQotewotICAgICgoRm9udEZhbWlseUNoZWNrZXIqKWxQYXJhbSktPm1fZXhpc3Rz
ID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IENBTExCQUNLIFZhbGlkRm9udEZhbWls
eUZpbmRlcjo6ZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29uc3Qg
VEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKLXsK
LSAgICBpZiAobHBlbGYtPmxmQ2hhclNldCAhPSBTWU1CT0xfQ0hBUlNFVCkgewotICAgICAgICAo
KFZhbGlkRm9udEZhbWlseUZpbmRlciopbFBhcmFtKS0+bV9mYW1pbHkgPSBTdHJpbmcobHBlbGYt
PmxmRmFjZU5hbWUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19
Ci0KLXR5cGVkZWYgVmVjdG9yPEZvbnRGYW1pbHlDb2RlUGFnZUluZm8+IEtub3duRm9udHM7Ci1z
dGF0aWMgS25vd25Gb250cyYga25vd25Gb250cygpCi17Ci0gICAgc3RhdGljIEtub3duRm9udHMg
Zm9udHM7Ci0gICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsKLSAgICBpZiAoZmlyc3RU
aW1lKSB7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgICAgICBpZiAoRm9udFBsYXRm
b3JtRGF0YTo6aXNTb25nVGlTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgIGZvbnRzLmFwcGVuZChG
b250RmFtaWx5Q29kZVBhZ2VJbmZvKHNvbmdUaVN0ciwgOTM2KSk7Ci0gICAgfQotICAgIHJldHVy
biBmb250czsKLX0KLQotc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Rm9udEZhbWlseSgpCi17Ci0g
ICAgaWYgKEZvbnRGYW1pbHlDaGVja2VyKEwiVGFob21hIikuaXNTdXBwb3J0ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZyhMIlRhaG9tYSIpOwotCi0gICAgYm9vbCBnb29kID0gZmFsc2U7Ci0g
ICAgU3RyaW5nIGZhbWlseTsKLSAgICBIS0VZIGtleTsKLSAgICBpZiAoUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgTCJTWVNURU1cXEdESVxcU3lzRm50IiwgMCwgMCwgJmtleSkgPT0g
RVJST1JfU1VDQ0VTUykgewotICAgICAgICBEV09SRCBtYXhsZW4sIHR5cGU7Ci0gICAgICAgIGlm
IChSZWdRdWVyeVZhbHVlRXgoa2V5LCBMIk5tIiwgMCwgJnR5cGUsIDAsICZtYXhsZW4pID09IEVS
Uk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKLSAgICAgICAgICAgICsrbWF4bGVuOwot
ICAgICAgICAgICAgaWYgKHdjaGFyX3QqIGJ1ZmZlciA9IG5ldyB3Y2hhcl90W21heGxlbl0pIHsK
LSAgICAgICAgICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGtleSwgTCJObSIsIDAsICZ0eXBl
LCAoTFBCWVRFKWJ1ZmZlciwgJm1heGxlbikgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBTdHJpbmcoYnVmZmVyLCBtYXhsZW4pOwotICAgICAgICAgICAg
ICAgICAgICBnb29kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlW10gYnVmZmVyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJlZ0Ns
b3NlS2V5KGtleSk7Ci0gICAgfQotICAgIGlmIChnb29kKQotICAgICAgICByZXR1cm4gZmFtaWx5
OwotCi0gICAgcmV0dXJuIFZhbGlkRm9udEZhbWlseUZpbmRlcigpLmZhbWlseSgpOwotfQotCi10
eXBlZGVmIEhhc2hNYXA8Rml4ZWRTaXplRm9udERhdGFLZXksIFJlZlB0cjxGaXhlZFNpemVGb250
RGF0YT4sIEZpeGVkU2l6ZUZvbnREYXRhS2V5SGFzaCwgRml4ZWRTaXplRm9udERhdGFLZXlUcmFp
dHM+IEZpeGVkU2l6ZUZvbnRDYWNoZTsKLUZpeGVkU2l6ZUZvbnRDYWNoZSBnX2ZpeGVkU2l6ZUZv
bnRDYWNoZTsKLQotUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gRml4ZWRTaXplRm9udERh
dGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgdW5zaWduZWQgd2VpZ2h0LCBi
b29sIGl0YWxpYykKLXsKLSAgICBGaXhlZFNpemVGb250RGF0YSogZm9udERhdGEgPSBuZXcgRml4
ZWRTaXplRm9udERhdGEoKTsKLQotICAgIGZvbnREYXRhLT5tX3dlaWdodCA9IHdlaWdodDsKLSAg
ICBmb250RGF0YS0+bV9pdGFsaWMgPSBpdGFsaWM7Ci0KLSAgICBMT0dGT05UJiB3aW5Gb250ID0g
Zm9udERhdGEtPm1fZm9udDsKLSAgICAvLyBUaGUgc2l6ZSBoZXJlIGxvb2tzIHVudXN1YWwuICBU
aGUgbmVnYXRpdmUgbnVtYmVyIGlzIGludGVudGlvbmFsLgotICAgIHdpbkZvbnQubGZIZWlnaHQg
PSAtNzI7Ci0gICAgd2luRm9udC5sZldpZHRoID0gMDsKLSAgICB3aW5Gb250LmxmRXNjYXBlbWVu
dCA9IDA7Ci0gICAgd2luRm9udC5sZk9yaWVudGF0aW9uID0gMDsKLSAgICB3aW5Gb250LmxmVW5k
ZXJsaW5lID0gZmFsc2U7Ci0gICAgd2luRm9udC5sZlN0cmlrZU91dCA9IGZhbHNlOwotICAgIHdp
bkZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwotICAgIHdpbkZvbnQubGZPdXRQcmVj
aXNpb24gPSBPVVRfREVGQVVMVF9QUkVDSVM7Ci0gICAgd2luRm9udC5sZlF1YWxpdHkgPSBDTEVB
UlRZUEVfUVVBTElUWTsgLy9ERUZBVUxUX1FVQUxJVFk7Ci0gICAgd2luRm9udC5sZkNsaXBQcmVj
aXNpb24gPSBDTElQX0RFRkFVTFRfUFJFQ0lTOwotICAgIHdpbkZvbnQubGZQaXRjaEFuZEZhbWls
eSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKLSAgICB3aW5Gb250LmxmSXRhbGljID0g
aXRhbGljOwotICAgIHdpbkZvbnQubGZXZWlnaHQgPSBGb250UGxhdGZvcm1EYXRhOjphZGp1c3Rl
ZEdESUZvbnRXZWlnaHQod2VpZ2h0LCBmYW1pbHkpOwotCi0gICAgaW50IGxlbiA9IHN0ZDo6bWlu
KGZhbWlseS5sZW5ndGgoKSwgKHVuc2lnbmVkIGludClMRl9GQUNFU0laRSAtIDEpOwotICAgIHdt
ZW1jcHkod2luRm9udC5sZkZhY2VOYW1lLCBmYW1pbHkuY2hhcmFjdGVycygpLCBsZW4pOwotICAg
IHdpbkZvbnQubGZGYWNlTmFtZVtsZW5dID0gTCdcMCc7Ci0KLSAgICBmb250RGF0YS0+bV9oZm9u
dCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZ3aW5Gb250KSk7Ci0KLSAg
ICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgZm9udERhdGEtPm1f
aGZvbnQuZ2V0KCkpOwotCi0gICAgR2V0VGV4dE1ldHJpY3MoZ19zY3JlZW5EQywgJmZvbnREYXRh
LT5tX21ldHJpY3MpOwotCi0gICAgaWYgKElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5r
ID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgewotICAgICAgICBsYW5nRm9u
dExpbmstPkdldEZvbnRDb2RlUGFnZXMoZ19zY3JlZW5EQywgZm9udERhdGEtPm1faGZvbnQuZ2V0
KCksICZmb250RGF0YS0+bV9jb2RlUGFnZXMpOwotICAgICAgICBmb250RGF0YS0+bV9jb2RlUGFn
ZXMgfD0gRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25vd25Gb250Q29kZVBhZ2VzKHdpbkZvbnQubGZG
YWNlTmFtZSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQp
OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKGZvbnREYXRhKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQ
dHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCB1bnNpZ25lZCB3ZWlnaHQsIGJvb2wgaXRhbGljKQotewotICAgIEZp
eGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKLSAgICBGaXhl
ZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5h
ZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwotICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZpeGVkU2l6ZUZvbnRE
YXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRX
ZWlnaHQgZm9udFdlaWdodCkKLXsKLSAgICBzdGF0aWMgTE9ORyBnZGlGb250V2VpZ2h0c1tdID0g
ewotICAgICAgICBGV19USElOLCAgICAgICAgLy8gRm9udFdlaWdodDEwMAotICAgICAgICBGV19F
WFRSQUxJR0hULCAgLy8gRm9udFdlaWdodDIwMAotICAgICAgICBGV19MSUdIVCwgICAgICAgLy8g
Rm9udFdlaWdodDMwMAotICAgICAgICBGV19OT1JNQUwsICAgICAgLy8gRm9udFdlaWdodDQwMAot
ICAgICAgICBGV19NRURJVU0sICAgICAgLy8gRm9udFdlaWdodDUwMAotICAgICAgICBGV19TRU1J
Qk9MRCwgICAgLy8gRm9udFdlaWdodDYwMAotICAgICAgICBGV19CT0xELCAgICAgICAgLy8gRm9u
dFdlaWdodDcwMAotICAgICAgICBGV19FWFRSQUJPTEQsICAgLy8gRm9udFdlaWdodDgwMAotICAg
ICAgICBGV19IRUFWWSAgICAgICAgLy8gRm9udFdlaWdodDkwMAotICAgIH07Ci0gICAgcmV0dXJu
IGdkaUZvbnRXZWlnaHRzW2ZvbnRXZWlnaHRdOwotfQotCi1jbGFzcyBGb250UGxhdGZvcm1Qcml2
YXRlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgaW50IG1fcmVmZXJlbmNlOwotICAgIFJlZlB0cjxGaXhl
ZFNpemVGb250RGF0YT4gbV9yb290Rm9udERhdGE7Ci0gICAgQXRvbWljU3RyaW5nIG1fZmFtaWx5
OwotICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKLSAgICBHRElPYmplY3Q8
SEZPTlQ+IG1faGZvbnRTY2FsZWQ7Ci0gICAgaW50IG1fc2l6ZTsKLSAgICBsb25nIG1fZm9udFNj
YWxlZFdpZHRoOwotICAgIGxvbmcgbV9mb250U2NhbGVkSGVpZ2h0OwotICAgIGJvb2wgbV9kaXNh
YmxlZDsKLSAgICBGb250UGxhdGZvcm1Qcml2YXRlRGF0YShpbnQgc2l6ZSwgdW5zaWduZWQgd2Vp
Z2h0KQotICAgICAgICA6IG1fcmVmZXJlbmNlKDEpCi0gICAgICAgICwgbV9mYW1pbHkoRm9udFBs
YXRmb3JtRGF0YTo6ZGVmYXVsdEZvbnRGYW1pbHkoKSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAgICAgLCBtX2ZvbnRTY2FsZWRXaWR0aCgwKQotICAgICAgICAsIG1fZm9udFNjYWxlZEhl
aWdodCgwKQotICAgICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCi0gICAgewotICAgICAgICBtX3Jv
b3RGb250RGF0YSA9IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKG1fZmFtaWx5LCB3ZWlnaHQsIGZh
bHNlKTsKLSAgICB9Ci0gICAgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotICAg
ICAgICA6IG1fcmVmZXJlbmNlKDEpCi0gICAgICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCi0gICAgICAgICwgbV9mb250U2Nh
bGVkV2lkdGgoMCkKLSAgICAgICAgLCBtX2ZvbnRTY2FsZWRIZWlnaHQoMCkKLSAgICAgICAgLCBt
X2Rpc2FibGVkKCFmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgbV9yb290Rm9udERhdGEgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgdG9H
RElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSksIGZvbnREZXNjcmlwdGlvbi5p
dGFsaWMoKSk7Ci0gICAgfQotfTsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBkZXNpcmVkRmFtaWx5LCBib29sIHVzZURlZmF1bHRGb250SWZOb3RQcmVzZW50KQotewot
ICAgIFN0cmluZyBmYW1pbHkoZGVzaXJlZEZhbWlseSk7Ci0gICAgaWYgKCFlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIGRlZmF1bHRGb250RmFtaWx5KCkpICYmICFGb250RmFtaWx5Q2hlY2tlcihm
YW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLmlzU3VwcG9ydGVk
KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgU3RyaW5nKGhlaVRp
U3RyKSkgJiYgaXNTb25nVGlTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgIGZhbWlseSA9IFN0cmlu
Zyhzb25nVGlTdHIpOwotICAgICAgICBlbHNlIGlmICh1c2VEZWZhdWx0Rm9udElmTm90UHJlc2Vu
dCkKLSAgICAgICAgICAgIGZhbWlseSA9IGRlZmF1bHRGb250RmFtaWx5KCk7Ci0gICAgfQotCi0g
ICAgbV9wcml2YXRlID0gbmV3IEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKGZvbnREZXNjcmlwdGlv
biwgZmFtaWx5KTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKLXsKLSAgICBpZiAoIXNpemUpCi0gICAg
ICAgIG1fcHJpdmF0ZSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBtX3ByaXZhdGUgPSBuZXcgRm9u
dFBsYXRmb3JtUHJpdmF0ZURhdGEoKGludCkoc2l6ZSArIDAuNSksIGJvbGQgPyBGV19CT0xEIDog
RldfTk9STUFMKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQot
ewotICAgIGlmIChpc1ZhbGlkKCkgJiYgIS0tbV9wcml2YXRlLT5tX3JlZmVyZW5jZSkgewotICAg
ICAgICBpZiAobV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+cmVmQ291bnQoKSA9PSAyKSB7Ci0g
ICAgICAgICAgICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkobV9wcml2YXRlLT5tX2ZhbWlseSwg
bV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV93ZWlnaHQsIG1fcHJpdmF0ZS0+bV9yb290Rm9u
dERhdGEtPm1faXRhbGljKTsKLSAgICAgICAgICAgIGdfZml4ZWRTaXplRm9udENhY2hlLnJlbW92
ZShrZXkpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBtX3ByaXZhdGU7Ci0gICAgfQotfQot
Ci1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgbykKLXsKLSAgICBpZiAoaXNWYWxpZCgpICYmICEtLW1fcHJpdmF0ZS0+
bV9yZWZlcmVuY2UpCi0gICAgICAgIGRlbGV0ZSBtX3ByaXZhdGU7Ci0KLSAgICBpZiAobV9wcml2
YXRlID0gby5tX3ByaXZhdGUpCi0gICAgICAgICsrbV9wcml2YXRlLT5tX3JlZmVyZW5jZTsKLQot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotSEZPTlQgRm9udFBsYXRmb3JtRGF0YTo6aGZvbnQoKSBj
b25zdAotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChtX3ByaXZhdGUtPm1fZGlzYWJsZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFt
X3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250KQotICAgICAgICBtX3ByaXZhdGUtPm1f
cm9vdEZvbnREYXRhLT5tX2hmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJl
Y3QoJm1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udCkpOwotCi0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQuZ2V0KCk7Ci19Ci0KLUhGT05UIEZvbnRQ
bGF0Zm9ybURhdGE6OmdldFNjYWxlZEZvbnRIYW5kbGUoaW50IGhlaWdodCwgaW50IHdpZHRoKSBj
b25zdAotewotICAgIGlmICghaXNWYWxpZCgpIHx8IG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9oZm9udFNjYWxlZCB8fCBt
X3ByaXZhdGUtPm1fZm9udFNjYWxlZEhlaWdodCAhPSBoZWlnaHQgfHwgbV9wcml2YXRlLT5tX2Zv
bnRTY2FsZWRXaWR0aCAhPSB3aWR0aCkgewotICAgICAgICBtX3ByaXZhdGUtPm1fZm9udFNjYWxl
ZEhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbV9wcml2YXRlLT5tX2ZvbnRTY2FsZWRXaWR0aCA9
IHdpZHRoOwotICAgICAgICBMT0dGT05UIGZvbnQgPSBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRh
LT5tX2ZvbnQ7Ci0gICAgICAgIGZvbnQubGZIZWlnaHQgPSAtaGVpZ2h0OwotICAgICAgICBmb250
LmxmV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbV9wcml2YXRlLT5tX2hmb250U2NhbGVkID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmZvbnQpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2hmb250U2NhbGVkLmdldCgpOwotfQotCi1ib29sIEZvbnRQbGF0
Zm9ybURhdGE6OmRpc2NhcmRGb250SGFuZGxlKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEt
Pm1faGZvbnQpIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX3ByaXZh
dGUtPm1faGZvbnRTY2FsZWQpIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX2hmb250U2NhbGVkID0g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotY29uc3QgVEVYVE1FVFJJQyYgRm9udFBsYXRmb3JtRGF0YTo6bWV0cmljcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fbWV0cmljczsKLX0K
LQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc1N5c3RlbUZvbnQoKSBjb25zdAotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotaW50IEZvbnRQbGF0Zm9ybURhdGE6OnNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPm1fc2l6ZTsKLX0KLQotY29uc3QgRm9udERlc2NyaXB0aW9u
JiBGb250UGxhdGZvcm1EYXRhOjpmb250RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fZm9udERlc2NyaXB0aW9uOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcm
IEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9mYW1pbHk7Ci19Ci0KLWNvbnN0IExPR0ZPTlQmIEZvbnRQbGF0Zm9ybURhdGE6OmxvZ0Zv
bnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2Zv
bnQ7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNEaXNhYmxlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICFpc1ZhbGlkKCkgfHwgbV9wcml2YXRlLT5tX2Rpc2FibGVkOwotfQotCi1EV09S
RCBGb250UGxhdGZvcm1EYXRhOjpjb2RlUGFnZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3By
aXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2NvZGVQYWdlczsKLX0KLQotYm9vbCBGb250UGxhdGZv
cm1EYXRhOjppc1NvbmdUaVN1cHBvcnRlZCgpCi17Ci0gICAgc3RhdGljIGJvb2wgZXhpc3RzID0g
Rm9udEZhbWlseUNoZWNrZXIoc29uZ1RpU3RyKS5pc1N1cHBvcnRlZCgpOwotICAgIHJldHVybiBl
eGlzdHM7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6bWFwS25vd25Gb250KERXT1JEIGNv
ZGVQYWdlcywgU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgS25vd25Gb250cyYgZm9udHMgPSBrbm93
bkZvbnRzKCk7Ci0gICAgZm9yIChLbm93bkZvbnRzOjppdGVyYXRvciBpID0gZm9udHMuYmVnaW4o
KTsgaSAhPSBmb250cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5jb2RlUGFnZXMoKSAm
IGNvZGVQYWdlcykgewotICAgICAgICAgICAgZmFtaWx5ID0gaS0+bV9mYW1pbHk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLURXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3
Y2hhcl90KiBmYW1pbHkpCi17Ci0gICAgS25vd25Gb250cyYgZm9udHMgPSBrbm93bkZvbnRzKCk7
Ci0gICAgZm9yIChLbm93bkZvbnRzOjppdGVyYXRvciBpID0gZm9udHMuYmVnaW4oKTsgaSAhPSBm
b250cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT5tX2Zh
bWlseSwgU3RyaW5nKGZhbWlseSkpKQotICAgICAgICAgICAgcmV0dXJuIGktPmNvZGVQYWdlcygp
OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotY29uc3QgU3RyaW5nJiBGb250UGxhdGZvcm1E
YXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBmYW1pbHkoZ2V0
RGVmYXVsdEZvbnRGYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGZhbWlseTsKLX0KLQotTE9ORyBGb250
UGxhdGZvcm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQoTE9ORyBnZGlGb250V2VpZ2h0LCBj
b25zdCBTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGx1Y2lkYVN0
cigiTHVjaWRhIEdyYW5kZSIpOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1
Y2lkYVN0cikpIHsKLSAgICAgICAgaWYgKGdkaUZvbnRXZWlnaHQgPT0gRldfTk9STUFMKQotICAg
ICAgICAgICAgcmV0dXJuIEZXX01FRElVTTsKLSAgICAgICAgaWYgKGdkaUZvbnRXZWlnaHQgPT0g
RldfQk9MRCkKLSAgICAgICAgICAgIHJldHVybiBGV19TRU1JQk9MRDsKLSAgICB9Ci0gICAgcmV0
dXJuIGdkaUZvbnRXZWlnaHQ7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRm
b3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwYzk0NjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBA
QAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVu
dGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgot
ICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KLSAqCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgg
VG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfaAotI2RlZmlu
ZSBGb250UGxhdGZvcm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5o
PgotCi10eXBlZGVmIHN0cnVjdCB0YWdURVhUTUVUUklDVyBURVhUTUVUUklDOwotdHlwZWRlZiBz
dHJ1Y3QgdGFnTE9HRk9OVFcgTE9HRk9OVDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGE7Ci0KLSAgICBjbGFzcyBGb250UGxhdGZvcm1E
YXRhIHsKLQotICAgIHB1YmxpYzoKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKCk6IG1fcHJp
dmF0ZSgwKSB7fQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlKTsKLQotICAgICAgICAvLyBVc2VkIGZvciBkZWxldGVkIHZhbHVlcyBp
biB0aGUgZm9udCBjYWNoZSdzIGhhc2ggdGFibGVzLgotICAgICAgICBGb250UGxhdGZvcm1EYXRh
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3ByaXZhdGUoKEZvbnRQbGF0Zm9y
bVByaXZhdGVEYXRhKikxKSB7fQotICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gKHVuc2lnbmVkKW1fcHJpdmF0ZSA9PSAxOyB9Ci0KLSAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgdXNlRGVmYXVsdEZvbnRJZk5vdFByZXNl
bnQgPSB0cnVlKTsKLQotICAgICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwotCi0gICAgICAgIEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgbykgOiBtX3ByaXZhdGUoMCkg
eyBvcGVyYXRvcj0obyk7IH0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIG8pOwotCi0gICAgICAgIGludCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9wcml2YXRlKSAmIH4xOyB9Ci0g
ICAgICAgIEhGT05UIGhmb250KCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFRFWFRNRVRSSUMmIG1l
dHJpY3MoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdDsKLSAgICAg
ICAgaW50IHNpemUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuICh1bnNpZ25lZCltX3ByaXZhdGU7IH0KLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHkoKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKSBjb25zdCB7ICAgICByZXR1cm4gbV9wcml2YXRlID09IG90aGVyLm1fcHJp
dmF0ZTsgfQotICAgICAgICBIRk9OVCBnZXRTY2FsZWRGb250SGFuZGxlKGludCBoZWlnaHQsIGlu
dCB3aWR0aCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgZGlzY2FyZEZv
bnRIYW5kbGUoKTsKLSAgICAgICAgRFdPUkQgY29kZVBhZ2VzKCkgY29uc3Q7Ci0KLSAgICAgICAg
c3RhdGljIGJvb2wgaXNTb25nVGlTdXBwb3J0ZWQoKTsKLSAgICAgICAgc3RhdGljIGJvb2wgbWFw
S25vd25Gb250KERXT1JEIGNvZGVQYWdlcywgU3RyaW5nJiBmYW1pbHkpOwotICAgICAgICBzdGF0
aWMgRFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRGb250RmFtaWx5KCk7Ci0gICAgICAg
IHN0YXRpYyBMT05HIGFkanVzdGVkR0RJRm9udFdlaWdodChMT05HIGdkaUZvbnRXZWlnaHQsIGNv
bnN0IFN0cmluZyYgZmFtaWx5KTsKLQotICAgICAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBIb3Jpem9udGFsOyB9IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0g
ICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uKSB7IH0gLy8gRklYTUU6
IEltcGxlbWVudC4KLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZvbnRQbGF0Zm9ybVBy
aXZhdGVEYXRhKiBtX3ByaXZhdGU7Ci0gICAgfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDI4NDhjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIkZvbnRH
bHlwaHMuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLSNpbmNs
dWRlIDx3aW5kb3dzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotSERDIGdfc2NyZWVuREMgPSBHZXREQygwKTsKLQotY2xhc3MgU2Ny
ZWVuRGNSZWxlYXNlciB7Ci1wdWJsaWM6Ci0gICAgflNjcmVlbkRjUmVsZWFzZXIoKQotICAgIHsK
LSAgICAgICAgUmVsZWFzZURDKDAsIGdfc2NyZWVuREMpOwotICAgIH0KLX07Ci0KLVNjcmVlbkRj
UmVsZWFzZXIgcmVsZWFzZVNjcmVlbkRjOwotCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUZXh0KGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7Ci19Ci0KLWNsYXNzIFRleHRSdW5Db21wb25lbnQgewotcHVibGljOgotICAgIFRleHRS
dW5Db21wb25lbnQoKSA6IG1fdGV4dFJ1bigwLCAwKSB7fQotICAgIFRleHRSdW5Db21wb25lbnQo
Y29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQgbGVuZ3RoLCBjb25zdCBUZXh0UnVuJiBwYXJlbnRUZXh0
UnVuLCBjb25zdCBGb250ICZmb250LCBpbnQgb2Zmc2V0KTsKLSAgICBUZXh0UnVuQ29tcG9uZW50
KGludCBzcGFjZXMsIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvZmZzZXQpOwotICAgIH5UZXh0UnVu
Q29tcG9uZW50KCkgeyBtX3RleHRSdW47IH0KLQotICAgIGJvb2wgaXNTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BhY2VzOyB9Ci0gICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3NwYWNlcyA/IG1fc3BhY2VzIDogbV90ZXh0UnVuLmxlbmd0aCgpOyB9Ci0KLSAgICBUZXh0UnVu
IG1fdGV4dFJ1bjsKLSAgICBmbG9hdCBtX3dpZHRoOwotICAgIGludCBtX29mZnNldDsKLSAgICBp
bnQgbV9zcGFjZXM7Ci19OwotCi1UZXh0UnVuQ29tcG9uZW50OjpUZXh0UnVuQ29tcG9uZW50KGNv
bnN0IFVDaGFyICpzdGFydCwgaW50IGxlbmd0aCwgY29uc3QgVGV4dFJ1biYgcGFyZW50VGV4dFJ1
biwgY29uc3QgRm9udCAmZm9udCwgaW50IG8pCi0gICAgOiBtX3RleHRSdW4oc3RhcnQsIGxlbmd0
aCwgMCwgMAotICAgICAgICAsIHBhcmVudFRleHRSdW4uYWxsb3dzVHJhaWxpbmdFeHBhbnNpb24o
KSA/IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gOiBUZXh0UnVuOjpGb3JiaWRUcmFp
bGluZ0V4cGFuc2lvbgotICAgICAgICAsIHBhcmVudFRleHRSdW4uZGlyZWN0aW9uKCkKLSAgICAg
ICAgLCBwYXJlbnRUZXh0UnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkKLSAgICAsIG1fb2Zmc2V0
KG8pCi0gICAgLCBtX3NwYWNlcygwKQotewotICAgIG1fdGV4dFJ1bi5zZXRUYWJTaXplKHBhcmVu
dFRleHRSdW4uYWxsb3dUYWJzKCksIHBhcmVudFRleHRSdW4udGFiU2l6ZSgpKTsKLQotICAgIFdp
ZHRoSXRlcmF0b3IgaXQoJmZvbnQsIG1fdGV4dFJ1bik7Ci0gICAgaXQuYWR2YW5jZShtX3RleHRS
dW4ubGVuZ3RoKCksIDApOwotICAgIG1fd2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci19Ci0K
LVRleHRSdW5Db21wb25lbnQ6OlRleHRSdW5Db21wb25lbnQoaW50IHMsIGNvbnN0IEZvbnQgJmZv
bnQsIGludCBvKQotICAgIDogbV90ZXh0UnVuKDAsIDApCi0gICAgLCBtX29mZnNldChvKQotICAg
ICwgbV9zcGFjZXMocykKLXsKLSAgICBtX3dpZHRoID0gcyAqIGZvbnQucHJpbWFyeUZvbnQoKS0+
d2lkdGhGb3JHbHlwaCgnICcpOwotfQotCi10eXBlZGVmIFZlY3RvcjxUZXh0UnVuQ29tcG9uZW50
LCAxMjg+IFRleHRSdW5Db21wb25lbnRzOwotCi1zdGF0aWMgaW50IGdlbmVyYXRlQ29tcG9uZW50
cyhUZXh0UnVuQ29tcG9uZW50cyogY29tcG9uZW50cywgY29uc3QgRm9udCAmZm9udCwgY29uc3Qg
VGV4dFJ1biAmcnVuKQotewotICAgIGludCBsZXR0ZXJTcGFjaW5nID0gZm9udC5sZXR0ZXJTcGFj
aW5nKCk7Ci0gICAgaW50IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwotICAgIGlu
dCBwYWRkaW5nID0gcnVuLmV4cGFuc2lvbigpOwotICAgIGludCBudW1TcGFjZXMgPSAwOwotICAg
IGlmIChwYWRkaW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuLmxlbmd0aCgp
OyBpKyspCi0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1bltpXSkpCi0gICAg
ICAgICAgICAgICAgKytudW1TcGFjZXM7Ci0gICAgfQotCi0gICAgaW50IG9mZnNldCA9IDA7Ci0g
ICAgaWYgKGxldHRlclNwYWNpbmcpIHsKLSAgICAgICAgLy8gbmVlZCB0byBkcmF3IGV2ZXJ5IGxl
dHRlciBvbiBpdCdzIG93bgotICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBpZiAoRm9u
dDo6dHJlYXRBc1NwYWNlKHJ1blswXSkpIHsKLSAgICAgICAgICAgIGludCBhZGQgPSAwOwotICAg
ICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcv
bnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwotICAgICAgICAgICAg
ICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29tcG9uZW50cy0+
YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBv
ZmZzZXQgKz0gYWRkICsgbGV0dGVyU3BhY2luZyArIGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRo
OwotICAgICAgICAgICAgc3RhcnQgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyIGNoID0gcnVu
W2ldOwotICAgICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGNoKSAmJiBVMTZfSVNfVFJBSUwocnVu
W2ktMV0pKQotICAgICAgICAgICAgICAgIGNoID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoLCBy
dW5baS0xXSk7Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoKSB8fCBVX0dFVF9HQ19N
QVNLKGNoKSAmIFVfR0NfTU5fTUFTSykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuW2ldKSkgewotICAgICAgICAgICAgICAg
IGludCBhZGQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5j
aGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBpIC0gc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biwgZm9udCwgb2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aCAr
IGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChu
dW1TcGFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkID0gcGFkZGluZy9udW1TcGFjZXM7
Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwotICAgICAgICAgICAgICAgICAg
ICAtLW51bVNwYWNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29tcG9u
ZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0ICs9IHdvcmRTcGFjaW5nICsgYWRkICsgY29tcG9uZW50cy0+bGFzdCgp
Lm1fd2lkdGggKyBsZXR0ZXJTcGFjaW5nOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaSAtIHN0YXJ0ID4gMCkgewotICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChU
ZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBpIC0gc3RhcnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQs
IG9mZnNldCkpOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCku
bV93aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFy
dCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5sZW5ndGgoKSAtIHN0YXJ0ID4gMCkg
ewotICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNo
YXJhY3RlcnMxNigpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAg
ICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgIH0KLSAg
ICAgICAgb2Zmc2V0ICs9IGxldHRlclNwYWNpbmc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50
IHN0YXJ0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW4ubGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5baV0pKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGkgLSBzdGFydCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsgc3Rh
cnQsIGkgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAobnVtU3Bh
Y2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOwotICAg
ICAgICAgICAgICAgICAgICBwYWRkaW5nIC09IGFkZDsKLSAgICAgICAgICAgICAgICAgICAgLS1u
dW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbXBvbmVudHMt
PmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIGZvbnQsIG9mZnNldCkpOwotICAgICAgICAgICAg
ICAgIG9mZnNldCArPSBhZGQgKyBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKLSAgICAgICAg
ICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHdvcmRTcGFjaW5n
OwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHJ1bi5sZW5ndGgoKSAtIHN0YXJ0ID4gMCkgewotICAgICAgICAgICAg
Y29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsg
c3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0g
Y29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IG9mZnNldDsKLX0KLQotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBpZiAodG8gPCAwKQotICAgICAgICB0byA9
IHJ1bi5sZW5ndGgoKTsKLSAgICBpZiAoZnJvbSA8IDApCi0gICAgICAgIGZyb20gPSAwOwotCi0g
ICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKLSAgICBpbnQgdyA9IGdlbmVyYXRlQ29t
cG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7Ci0KLSAgICBmbG9hdCB3aWR0aE9mRHJh
d25UZXh0ID0gMDsKLSAgICBpbnQgY3VyUG9zID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IChpbnQpY29tcG9uZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0UnVuQ29t
cG9uZW50JiBjb21wID0gY29tcG9uZW50cy5hdChpKTsKLSAgICAgICAgaW50IGxlbiA9IGNvbXAu
dGV4dExlbmd0aCgpOwotICAgICAgICBpbnQgY3VyRW5kID0gY3VyUG9zICsgbGVuOwotICAgICAg
ICBpZiAoY3VyUG9zIDwgdG8gJiYgZnJvbSA8IGN1ckVuZCAmJiAhY29tcC5pc1NwYWNlKCkpIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgcHQgPSBwb2ludDsKLSAgICAgICAgICAgIGlmIChydW4u
cnRsKCkpCi0gICAgICAgICAgICAgICAgcHQuc2V0WChwb2ludC54KCkgKyB3IC0gY29tcC5tX29m
ZnNldCAtIGNvbXAubV93aWR0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cHQuc2V0WChwb2ludC54KCkgKyBjb21wLm1fb2Zmc2V0KTsKLSAgICAgICAgICAgIHdpZHRoT2ZE
cmF3blRleHQgKz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5tX3RleHRSdW4sIHB0LCBm
cm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBvcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgY3VyUG9zICs9IGxlbjsKLSAgICAgICAgaWYgKGZyb20gPCBjdXJQb3MpCi0gICAg
ICAgICAgICBmcm9tID0gY3VyUG9zOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGhPZkRyYXduVGV4
dDsKLX0KLQotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25z
dCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICov
LCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBUZXh0UnVuQ29t
cG9uZW50cyBjb21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21w
b25lbnRzLCAqdGhpcywgcnVuKTsKLSAgICByZXR1cm4gdzsKLX0KLQotaW50IEZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4Rmxv
YXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxp
bnQ+KHhGbG9hdCk7Ci0KLSAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwotICAgIGlu
dCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKLQotICAg
IGlmIChwb3NpdGlvbiA+PSB3KQotICAgICAgICByZXR1cm4gcnVuLmxlbmd0aCgpOwotCi0gICAg
aW50IG9mZnNldCA9IDA7Ci0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0
IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOwotICAgICAgICAgICAg
aW50IHhlID0gdyAtIGNvbXAubV9vZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgeHMgPSB4ZSAtIGNv
bXAubV93aWR0aDsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSB4cykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gb2Zmc2V0ICsgKGNvbXAuaXNTcGFjZSgpCi0gICAgICAgICAgICAgICAgICAg
ID8gc3RhdGljX2Nhc3Q8aW50PigocG9zaXRpb24gLSB4ZSkgKiBjb21wLm1fc3BhY2VzIC8gc3Rk
OjptYXgoMS5mLCBjb21wLm1fd2lkdGgpICsgMC41KQotICAgICAgICAgICAgICAgICAgICA6IG9m
ZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb21wLm1fdGV4dFJ1biwgcG9zaXRpb24gLSB4
cywgaW5jbHVkZVBhcnRpYWxHbHlwaHMpKTsKLQotICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXAu
dGV4dExlbmd0aCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBUZXh0UnVuQ29tcG9uZW50JiBjb21wID0gY29tcG9uZW50cy5hdChpKTsKLSAgICAgICAgICAg
IGludCB4cyA9IGNvbXAubV9vZmZzZXQ7Ci0gICAgICAgICAgICBpbnQgeGUgPSB4cyArIGNvbXAu
bV93aWR0aDsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSB4ZSkgewotICAgICAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiAtIHhzID49IHhlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2Zmc2V0ICsgY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNl
dCArIChjb21wLmlzU3BhY2UoKQotICAgICAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGlu
dD4oKHBvc2l0aW9uIC0geHMpICogY29tcC5tX3NwYWNlcyAvIHN0ZDo6bWF4KDEuZiwgY29tcC5t
X3dpZHRoKSArIDAuNSkKLSAgICAgICAgICAgICAgICAgICAgOiBvZmZzZXRGb3JQb3NpdGlvbkZv
clNpbXBsZVRleHQoY29tcC5tX3RleHRSdW4sIHBvc2l0aW9uIC0geHMsIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvZmZzZXQgKz0gY29tcC50ZXh0
TGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJ1bi5sZW5ndGgoKTsKLX0K
LQotCi1zdGF0aWMgZmxvYXQgY3Vyc29yVG9YKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRS
dW5Db21wb25lbnRzJiBjb21wb25lbnRzLCBpbnQgd2lkdGgsIGJvb2wgcnRsLCBpbnQgY3Vyc29y
KQotewotICAgIGludCBzdGFydCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21w
b25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNv
bXAgPSBjb21wb25lbnRzLmF0KGkpOwotICAgICAgICBpZiAoc3RhcnQgKyBjb21wLnRleHRMZW5n
dGgoKSA8PSBjdXJzb3IpIHsKLSAgICAgICAgICAgIHN0YXJ0ICs9IGNvbXAudGV4dExlbmd0aCgp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHhzID0gY29t
cC5tX29mZnNldDsKLSAgICAgICAgaWYgKHJ0bCkKLSAgICAgICAgICAgIHhzID0gd2lkdGggLSB4
cyAtIGNvbXAubV93aWR0aDsKLQotICAgICAgICBpbnQgcG9zID0gY3Vyc29yIC0gc3RhcnQ7Ci0g
ICAgICAgIGlmIChjb21wLmlzU3BhY2UoKSkgewotICAgICAgICAgICAgaWYgKHJ0bCkKLSAgICAg
ICAgICAgICAgICBwb3MgPSBjb21wLnRleHRMZW5ndGgoKSAtIHBvczsKLSAgICAgICAgICAgIHJl
dHVybiB4cyArIHBvcyAqIGNvbXAubV93aWR0aCAvIGNvbXAubV9zcGFjZXM7Ci0gICAgICAgIH0K
LSAgICAgICAgV2lkdGhJdGVyYXRvciBpdChmb250LCBjb21wLm1fdGV4dFJ1bik7Ci0gICAgICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgICAgICBpdC5hZHZhbmNlKHBvcywgJmdseXBo
QnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHhzICsgaXQubV9ydW5XaWR0aFNvRmFyOwotICAgIH0K
LSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwKLSAg
ICBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBUZXh0UnVuQ29tcG9uZW50
cyBjb21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRz
LCAqdGhpcywgcnVuKTsKLQotICAgIGlmICghZnJvbSAmJiB0byA9PSBydW4ubGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpLCBwdC55KCksIHcsIGgpOwotCi0gICAgZmxv
YXQgeDEgPSBjdXJzb3JUb1godGhpcywgY29tcG9uZW50cywgdywgcnVuLnJ0bCgpLCBmcm9tKTsK
LSAgICBmbG9hdCB4MiA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25lbnRzLCB3LCBydW4ucnRsKCks
IHRvKTsKLSAgICBpZiAoeDIgPCB4MSkKLSAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwotfQot
Ci1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFw
aHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0dseXBoUGFnZVRyZWVOb2RlV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5DRS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDhkYzU1ZjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
IFRvcmNoIE1vYmlsZSBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRFdPUkQgZ2V0S25vd25Gb250
Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7Ci0KLXR5cGVkZWYgdW5zaWduZWQgKCpm
dW5jR2V0Q2hhckNvZGVQYWdlcykodW5zaWduZWQgc2hvcnQgYywgdW5zaWduZWQmIGxhc3RQb3Mp
OwotZnVuY0dldENoYXJDb2RlUGFnZXMgZ2V0Q2hhckNvZGVQYWdlcyA9IDA7Ci0KLWJvb2wgR2x5
cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKLXsKLSAgICBpZiAobGVuZ3RoICE9IGJ1ZmZlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKSB7Ci0gICAg
ICAgIERXT1JEIGZvbnRDb2RlUGFnZXMgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY29kZVBh
Z2VzKCk7Ci0gICAgICAgIGlmIChmb250Q29kZVBhZ2VzKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0
Q2hhckNvZGVQYWdlcykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RQb3MgPSAwOwot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICBEV09SRCBhY3R1YWxDb2RlUGFnZXMgPSBnZXRDaGFy
Q29kZVBhZ2VzKGJ1ZmZlcltpXSwgbGFzdFBvcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YWN0dWFsQ29kZVBhZ2VzIHx8IChhY3R1YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1
ZmZlcltpXSwgZm9udERhdGEpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hl
KCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBE
V09SRCBhY3R1YWxDb2RlUGFnZXM7Ci0gICAgICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+
R2V0Q2hhckNvZGVQYWdlcyhidWZmZXJbaV0sICZhY3R1YWxDb2RlUGFnZXMpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFjdHVhbENvZGVQYWdlcyB8fCAoYWN0dWFsQ29kZVBhZ2VzICYgZm9u
dENvZGVQYWdlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRl
eChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChv
ZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFkaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNzM1ODgxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNv
bG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKLXsKLSAgICByZXR1cm4g
YS5zdG9wIDwgYi5zdG9wOwotfQotCi1jb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcCwg
Mj4mIEdyYWRpZW50OjpnZXRTdG9wcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0b3BzU29ydGVk
KSB7Ci0gICAgICAgIGlmIChtX3N0b3BzLnNpemUoKSkKLSAgICAgICAgICAgIHN0ZDo6c3RhYmxl
X3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBjb21wYXJlU3RvcHMpOwotICAg
ICAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc3RvcHM7Ci19
Ci0KLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjLCBjb25zdCBGbG9hdFJl
Y3QmIHIpCi17Ci0gICAgYy0+ZmlsbFJlY3QociwgdGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDI2OWYwMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxODUzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2gg
TW9iaWxlIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJHRElFeHRyYXMuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXRoLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAu
aCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIHZvaWQgKCpGdW5jR3JhZGll
bnRGaWxsUmVjdExpbmVhcikoSERDIGhkYywgY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50UG9p
bnQmIHAwLCBjb25zdCBJbnRQb2ludCYgcDEsIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JT
dG9wPiYgc3RvcHMpOwotdHlwZWRlZiB2b2lkICgqRnVuY0dyYWRpZW50RmlsbFJlY3RSYWRpYWwp
KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFBvaW50JiBwMCwgY29uc3QgSW50
UG9pbnQmIHAxLCBmbG9hdCByMCwgZmxvYXQgcjEsIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29s
b3JTdG9wPiYgc3RvcHMpOwotRnVuY0dyYWRpZW50RmlsbFJlY3RMaW5lYXIgZ19saW5lYXJHcmFk
aWVudEZpbGxlciA9IDA7Ci1GdW5jR3JhZGllbnRGaWxsUmVjdFJhZGlhbCBnX3JhZGlhbEdyYWRp
ZW50RmlsbGVyID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzWmVybyhkb3VibGUgZCkKLXsK
LSAgICByZXR1cm4gZCA+IDAgPyBkIDw9IDEuRS0xMCA6IGQgPj0gLTEuRS0xMDsKLX0KLQotLy8g
c3RhYmxlUm91bmQgcm91bmRzIC0wLjUgdG8gMCwgd2hlcmUgbHJvdW5kIHJvdW5kcyAtMC41IHRv
IC0xLgotc3RhdGljIGlubGluZSBpbnQgc3RhYmxlUm91bmQoZG91YmxlIGQpCi17Ci0gICAgaWYg
KGQgPiAwKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihkICsgMC41KTsKLQotICAg
IGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKLSAgICByZXR1cm4gaSAtIGQgPiAwLjUgPyBp
IC0gMSA6IGk7Ci19Ci0KLS8vIFVubGlrZSBlbmNsb3NpbmdJbnRSZWN0KCksIHRoaXMgZnVuY3Rp
b24gZG9lcyBzdHJpY3Qgcm91bmRpbmcuCi1zdGF0aWMgaW5saW5lIEludFJlY3Qgcm91bmRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICByZXR1cm4gSW50UmVjdChzdGFibGVSb3VuZChy
LngoKSksIHN0YWJsZVJvdW5kKHIueSgpKSwgc3RhYmxlUm91bmQoci5tYXhYKCkpIC0gc3RhYmxl
Um91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLm1heFkoKSkgLSBzdGFibGVSb3VuZChyLnkoKSkp
OwotfQotCi0vLyBSb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbgotY2xhc3MgUm90YXRpb25UcmFuc2Zv
cm0gewotcHVibGljOgotICAgIFJvdGF0aW9uVHJhbnNmb3JtKCkKLSAgICAgICAgOiBtX2Nvc0Eo
MS4pCi0gICAgICAgICwgbV9zaW5BKDAuKQotICAgICAgICAsIG1fcHJlU2hpZnRYKDApCi0gICAg
ICAgICwgbV9wcmVTaGlmdFkoMCkKLSAgICAgICAgLCBtX3Bvc3RTaGlmdFgoMCkKLSAgICAgICAg
LCBtX3Bvc3RTaGlmdFkoMCkKLSAgICB7Ci0gICAgfQotICAgIFJvdGF0aW9uVHJhbnNmb3JtIG9w
ZXJhdG9yLSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSb3RhdGlvblRyYW5zZm9ybSBydG47Ci0g
ICAgICAgIHJ0bi5tX2Nvc0EgPSBtX2Nvc0E7Ci0gICAgICAgIHJ0bi5tX3NpbkEgPSAtbV9zaW5B
OwotICAgICAgICBydG4ubV9wcmVTaGlmdFggPSBtX3Bvc3RTaGlmdFg7Ci0gICAgICAgIHJ0bi5t
X3ByZVNoaWZ0WSA9IG1fcG9zdFNoaWZ0WTsKLSAgICAgICAgcnRuLm1fcG9zdFNoaWZ0WCA9IG1f
cHJlU2hpZnRYOwotICAgICAgICBydG4ubV9wb3N0U2hpZnRZID0gbV9wcmVTaGlmdFk7Ci0gICAg
ICAgIHJldHVybiBydG47Ci0gICAgfQotICAgIHZvaWQgbWFwKGRvdWJsZSB4MSwgZG91YmxlIHkx
LCBkb3VibGUqIHgyLCBkb3VibGUqIHkyKSBjb25zdAotICAgIHsKLSAgICAgICAgeDEgKz0gbV9w
cmVTaGlmdFg7Ci0gICAgICAgIHkxICs9IG1fcHJlU2hpZnRZOwotICAgICAgICAqeDIgPSB4MSAq
IG1fY29zQSArIHkxICogbV9zaW5BICsgbV9wb3N0U2hpZnRYOwotICAgICAgICAqeTIgPSB5MSAq
IG1fY29zQSAtIHgxICogbV9zaW5BICsgbV9wb3N0U2hpZnRZOwotICAgIH0KLSAgICB2b2lkIG1h
cChpbnQgeDEsIGludCB5MSwgaW50KiB4MiwgaW50KiB5MikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHgxICs9IG1fcHJlU2hpZnRYOwotICAgICAgICB5MSArPSBtX3ByZVNoaWZ0WTsKLSAgICAgICAg
KngyID0gc3RhYmxlUm91bmQoeDEgKiBtX2Nvc0EgKyB5MSAqIG1fc2luQSkgKyBtX3Bvc3RTaGlm
dFg7Ci0gICAgICAgICp5MiA9IHN0YWJsZVJvdW5kKHkxICogbV9jb3NBIC0geDEgKiBtX3NpbkEp
ICsgbV9wb3N0U2hpZnRZOwotICAgIH0KLQotICAgIGRvdWJsZSBtX2Nvc0E7Ci0gICAgZG91Ymxl
IG1fc2luQTsKLSAgICBpbnQgbV9wcmVTaGlmdFg7Ci0gICAgaW50IG1fcHJlU2hpZnRZOwotICAg
IGludCBtX3Bvc3RTaGlmdFg7Ci0gICAgaW50IG1fcG9zdFNoaWZ0WTsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQm
IHAsIGNvbnN0IFQmIHQpCi17Ci0gICAgaW50IHgsIHk7Ci0gICAgdC5tYXAocC54KCksIHAueSgp
LCAmeCwgJnkpOwotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgVD4gc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHAsIGNvbnN0IFQmIHQpCi17Ci0gICAgZG91YmxlIHgsIHk7Ci0gICAgdC5tYXAocC54KCksIHAu
eSgpLCAmeCwgJnkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVHJhbnNmb3Jt
LCBjbGFzcyBSZWN0LCBjbGFzcyBWYWx1ZT4gc3RhdGljIGlubGluZSBSZWN0IG1hcFJlY3QoY29u
c3QgUmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgVmFsdWUg
eFs0XSwgeVs0XTsKLSAgICBWYWx1ZSBsLCB0LCByLCBiOwotICAgIHIgPSByZWN0Lm1heFgoKSAt
IDE7Ci0gICAgYiA9IHJlY3QubWF4WSgpIC0gMTsKLSAgICB0cmFuc2Zvcm0ubWFwKHJlY3QueCgp
LCByZWN0LnkoKSwgeCwgeSk7Ci0gICAgdHJhbnNmb3JtLm1hcChyZWN0LngoKSwgYiwgeCArIDEs
IHkgKyAxKTsKLSAgICB0cmFuc2Zvcm0ubWFwKHIsIGIsIHggKyAyLCB5ICsgMik7Ci0gICAgdHJh
bnNmb3JtLm1hcChyLCByZWN0LnkoKSwgeCArIDMsIHkgKyAzKTsKLSAgICBsID0gciA9IHhbM107
Ci0gICAgdCA9IGIgPSB5WzNdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0g
ICAgICAgIGlmICh4W2ldIDwgbCkKLSAgICAgICAgICAgIGwgPSB4W2ldOwotICAgICAgICBlbHNl
IGlmICh4W2ldID4gcikKLSAgICAgICAgICAgIHIgPSB4W2ldOwotCi0gICAgICAgIGlmICh5W2ld
IDwgdCkKLSAgICAgICAgICAgIHQgPSB5W2ldOwotICAgICAgICBlbHNlIGlmICh5W2ldID4gYikK
LSAgICAgICAgICAgIGIgPSB5W2ldOwotICAgIH0KLQotICAgIHJldHVybiBJbnRSZWN0KGwsIHQs
IHIgLSBsICsgMSwgYiAtIHQgKyAxKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlu
bGluZSBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVCYgdHJhbnNm
b3JtKQotewotICAgIHJldHVybiBtYXBSZWN0PFQsIEludFJlY3QsIGludD4ocmVjdCwgdHJhbnNm
b3JtKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBGbG9hdFJlY3QgbWFw
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFQmIHRyYW5zZm9ybSkKLXsKLSAgICBy
ZXR1cm4gbWFwUmVjdDxULCBGbG9hdFJlY3QsIGRvdWJsZT4ocmVjdCwgdHJhbnNmb3JtKTsKLX0K
LQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSB7Ci1wdWJsaWM6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSgpCi0gICAgICAgIDogbV90cmFu
c2Zvcm0oKQotICAgICAgICAsIG1fb3BhY2l0eSgxLjApCi0gICAgewotICAgIH0KLQotICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLSAgICBmbG9hdCBtX29wYWNpdHk7Ci19OwotCi1l
bnVtIEFscGhhUGFpbnRUeXBlIHsKLSAgICBBbHBoYVBhaW50Tm9uZSwKLSAgICBBbHBoYVBhaW50
SW1hZ2UsCi0gICAgQWxwaGFQYWludE90aGVyLAotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlIDogcHVibGljIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURh
dGEgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShIREMgZGMp
Ci0gICAgICAgIDogbV9kYyhkYykKLSAgICB7Ci0gICAgfQotICAgIH5HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCFtX2JhY2t1cERhdGEuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmVzdG9yZSgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xh
dGUoeCwgeSk7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Ci0gICAgewotICAgICAgICBtX3RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJvdGF0ZShmbG9hdCByYWRpYW5z
KQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0ucm90YXRlKHJhZDJkZWcocmFkaWFucykpOwot
ICAgIH0KLQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0gKj0gdHJhbnNmb3JtOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIHsK
LSAgICAgICAgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07Ci0gICAgfQotCi0gICAgSW50UmVjdCBt
YXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV90cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgbWFwUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90
cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBtYXBQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90cmFu
c2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90
cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSBtYXBTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGRvdWJsZSB3LCBo
OwotICAgICAgICBtX3RyYW5zZm9ybS5tYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB3
LCBoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4odyksIHN0
YXRpY19jYXN0PGZsb2F0PihoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2RjKQotICAgICAgICAgICAgU2F2ZURDKG1fZGMpOwotCi0gICAgICAgIG1f
YmFja3VwRGF0YS5hcHBlbmQoKnN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZURhdGEqPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2JhY2t1cERhdGEuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmIChtX2RjKQotICAgICAgICAgICAgUmVzdG9yZURDKG1fZGMsIC0xKTsKLQot
ICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhOjpvcGVyYXRvcj0obV9i
YWNrdXBEYXRhLmxhc3QoKSk7Ci0gICAgICAgIG1fYmFja3VwRGF0YS5yZW1vdmVMYXN0KCk7Ci0g
ICAgfQotCi0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwICYmIG1f
Yml0bWFwLT5oYXNBbHBoYSgpOyB9Ci0KLSAgICBQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gZ2V0
VHJhbnNwYXJlbnRMYXllckJpdG1hcChJbnRSZWN0JiBvcmlnUmVjdCwgQWxwaGFQYWludFR5cGUg
YWxwaGFQYWludCwgUkVDVCYgYm1wUmVjdCwgYm9vbCBjaGVja0NsaXBCb3gsIGJvb2wgZm9yY2Up
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9vcGFjaXR5IDw9IDApCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLQotICAgICAgICBpZiAoZm9yY2UgfHwgbV9vcGFjaXR5IDwgMS4pICB7Ci0gICAg
ICAgICAgICBpZiAoY2hlY2tDbGlwQm94KSB7Ci0gICAgICAgICAgICAgICAgUkVDVCBjbGlwQm94
OwotICAgICAgICAgICAgICAgIGludCBjbGlwVHlwZSA9IEdldENsaXBCb3gobV9kYywgJmNsaXBC
b3gpOwotICAgICAgICAgICAgICAgIGlmIChjbGlwVHlwZSA9PSBTSU1QTEVSRUdJT04gfHwgY2xp
cFR5cGUgPT0gQ09NUExFWFJFR0lPTikKLSAgICAgICAgICAgICAgICAgICAgb3JpZ1JlY3QuaW50
ZXJzZWN0KGNsaXBCb3gpOwotICAgICAgICAgICAgICAgIGlmIChvcmlnUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBTaGFyZWRCaXRtYXA6OmNyZWF0ZShvcmln
UmVjdC5zaXplKCksIGFscGhhUGFpbnQgPT0gQWxwaGFQYWludE5vbmUgPyBCaXRtYXBJbmZvOjpC
aXRDb3VudDE2IDogQml0bWFwSW5mbzo6Qml0Q291bnQzMiwgZmFsc2UpOwotICAgICAgICAgICAg
U2V0UmVjdCgmYm1wUmVjdCwgMCwgMCwgb3JpZ1JlY3Qud2lkdGgoKSwgb3JpZ1JlY3QuaGVpZ2h0
KCkpOwotICAgICAgICAgICAgaWYgKGJtcCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWxw
aGFQYWludCkgewotICAgICAgICAgICAgICAgIGNhc2UgQWxwaGFQYWludE5vbmU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBBbHBoYVBhaW50SW1hZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEJpdG1hcDo6RENIb2xkZXIgZGMoYm1wLmdldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYy5nZXQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJpdEJsdChkYy5nZXQoKSwgMCwgMCwgb3JpZ1JlY3Qud2lkdGgoKSwg
b3JpZ1JlY3QuaGVpZ2h0KCksIG1fZGMsIG9yaWdSZWN0LngoKSwgb3JpZ1JlY3QueSgpLCBTUkND
T1BZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm1wLT5pczMyYml0KCkgJiYg
KCFtX2JpdG1hcCB8fCBtX2JpdG1hcC0+aXMxNmJpdCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgYWxwaGEgY2hhbm5lbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWxzID0gKHVuc2lnbmVkKilibXAtPmJ5dGVzKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkKiBjb25zdCBwaXhl
bHNFbmQgPSBwaXhlbHMgKyBibXAtPmJpdG1hcEluZm8oKS5udW1QaXhlbHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBpeGVscyA8IHBpeGVsc0VuZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBpeGVscyB8PSAweEZGMDAwMDAwOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwaXhlbHM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJtcDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAvL2Nhc2UgQWxwaGFQYWludE90aGVyOgotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1lbXNldChibXAtPmJ5dGVzKCksIDB4
RkYsIGJtcC0+Yml0bWFwSW5mbygpLm51bVBpeGVscygpICogNCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBibXA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJtcFJlY3QgPSBvcmln
UmVjdDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCBwYWludEJhY2tUcmFu
c3BhcmVudExheWVyQml0bWFwKEhEQyBoZGMsIFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBJbnRS
ZWN0JiBvcmlnUmVjdCwgQWxwaGFQYWludFR5cGUgYWxwaGFQYWludCwgY29uc3QgUkVDVCYgYm1w
UmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChoZGMgPT0gbV9kYykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoYWxwaGFQYWludCA9PSBBbHBoYVBhaW50T3RoZXIgJiYgaGFzQWxw
aGFCbGVuZFN1cHBvcnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGJtcCAmJiBibXAtPmJ5dGVz
KCkgJiYgYm1wLT5pczMyYml0KCkpOwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVscyA9ICh1
bnNpZ25lZCopYm1wLT5ieXRlcygpOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQqIGNvbnN0
IHBpeGVsc0VuZCA9IHBpeGVscyArIGJtcC0+Yml0bWFwSW5mbygpLm51bVBpeGVscygpOwotICAg
ICAgICAgICAgd2hpbGUgKHBpeGVscyA8IHBpeGVsc0VuZCkgewotICAgICAgICAgICAgICAgICpw
aXhlbHMgXj0gMHhGRjAwMDAwMDsKLSAgICAgICAgICAgICAgICArK3BpeGVsczsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoKG1fb3BhY2l0eSA8IDEuIHx8IGFscGhhUGFp
bnQgPT0gQWxwaGFQYWludE90aGVyKSAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBCTEVOREZVTkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwgMAotICAg
ICAgICAgICAgICAgICwgbV9vcGFjaXR5ID49IDEuID8gMjU1IDogKEJZVEUpKG1fb3BhY2l0eSAq
IDI1NSkKLSAgICAgICAgICAgICAgICAsIGFscGhhUGFpbnQgPT0gQWxwaGFQYWludE5vbmUgPyAw
IDogQUNfU1JDX0FMUEhBIH07Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhbHBoYUJsZW5k
SWZTdXBwb3J0ZWQobV9kYywgb3JpZ1JlY3QueCgpLCBvcmlnUmVjdC55KCksIG9yaWdSZWN0Lndp
ZHRoKCksIG9yaWdSZWN0LmhlaWdodCgpLCBoZGMsIDAsIDAsIGJtcFJlY3QucmlnaHQsIGJtcFJl
Y3QuYm90dG9tLCBibGVuZCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFN0cmV0Y2hCbHQobV9kYywgb3Jp
Z1JlY3QueCgpLCBvcmlnUmVjdC55KCksIG9yaWdSZWN0LndpZHRoKCksIG9yaWdSZWN0LmhlaWdo
dCgpLCBoZGMsIDAsIDAsIGJtcFJlY3QucmlnaHQsIGJtcFJlY3QuYm90dG9tLCBTUkNDT1BZKTsK
LSAgICB9Ci0KLSAgICBIREMgbV9kYzsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBtX2JpdG1h
cDsKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YT4gbV9iYWNr
dXBEYXRhOwotfTsKLQotc3RhdGljIEdESU9iamVjdDxIUEVOPiBjcmVhdGVQZW4oY29uc3QgQ29s
b3ImIGNvbCwgZG91YmxlIGZXaWR0aCwgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgaW50IHdp
ZHRoID0gc3RhYmxlUm91bmQoZldpZHRoKTsKLSAgICBpZiAod2lkdGggPCAxKQotICAgICAgICB3
aWR0aCA9IDE7Ci0KLSAgICBpbnQgcGVuU3R5bGUgPSBQU19OVUxMOwotICAgIHN3aXRjaCAoc3R5
bGUpIHsKLSAgICAgICAgY2FzZSBTb2xpZFN0cm9rZToKLSAgICAgICAgY2FzZSBEb3VibGVTdHJv
a2U6Ci0gICAgICAgIGNhc2UgV2F2eVN0cm9rZTogLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDExNCAtIE5lZWRzIHBsYXRmb3JtIHN1cHBvcnQuCi0g
ICAgICAgICAgICBwZW5TdHlsZSA9IFBTX1NPTElEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRG90dGVkU3Ryb2tlOiAgLy8gbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIENFCi0g
ICAgICAgIGNhc2UgRGFzaGVkU3Ryb2tlOgotICAgICAgICAgICAgcGVuU3R5bGUgPSBQU19EQVNI
OwotICAgICAgICAgICAgd2lkdGggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVQZW4ocGVuU3R5bGUsIHdpZHRoLCBSR0IoY29sLnJlZCgpLCBjb2wuZ3Jl
ZW4oKSwgY29sLmJsdWUoKSkpKTsKLX0KLQotc3RhdGljIGlubGluZSBHRElPYmplY3Q8SEJSVVNI
PiBjcmVhdGVCcnVzaChjb25zdCBDb2xvciYgY29sKQotewotICAgIHJldHVybiBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKGNvbC5yZWQoKSwgY29sLmdyZWVuKCksIGNvbC5i
bHVlKCkpKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQaXhlbFR5cGUsIGJvb2wgSXMxNmJp
dD4gc3RhdGljIHZvaWQgX3JvdGF0ZUJpdG1hcChTaGFyZWRCaXRtYXAqIGRlc3RCbXAsIGNvbnN0
IFNoYXJlZEJpdG1hcCogc291cmNlQm1wLCBjb25zdCBSb3RhdGlvblRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIGludCBkZXN0VyA9IGRlc3RCbXAtPndpZHRoKCk7Ci0gICAgaW50IGRlc3RI
ID0gZGVzdEJtcC0+aGVpZ2h0KCk7Ci0gICAgaW50IHNvdXJjZVcgPSBzb3VyY2VCbXAtPndpZHRo
KCk7Ci0gICAgaW50IHNvdXJjZUggPSBzb3VyY2VCbXAtPmhlaWdodCgpOwotICAgIFBpeGVsVHlw
ZSogZGVzdCA9IChQaXhlbFR5cGUqKWRlc3RCbXAtPmJ5dGVzKCk7Ci0gICAgY29uc3QgUGl4ZWxU
eXBlKiBzb3VyY2UgPSAoY29uc3QgUGl4ZWxUeXBlKilzb3VyY2VCbXAtPmJ5dGVzKCk7Ci0gICAg
aW50IHBhZGRpbmc7Ci0gICAgaW50IHBhZGRlZFNvdXJjZVc7Ci0gICAgaWYgKElzMTZiaXQpIHsK
LSAgICAgICAgcGFkZGluZyA9IGRlc3RXICYgMTsKLSAgICAgICAgcGFkZGVkU291cmNlVyA9IHNv
dXJjZVcgKyAoc291cmNlVyAmIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZGRpbmcgPSAw
OwotICAgICAgICBwYWRkZWRTb3VyY2VXID0gc291cmNlVzsKLSAgICB9Ci0gICAgaWYgKGlzWmVy
byh0cmFuc2Zvcm0ubV9zaW5BKSkgewotICAgICAgICBpbnQgY29zQSA9IHRyYW5zZm9ybS5tX2Nv
c0EgPiAwID8gMSA6IC0xOwotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGRlc3RIOyArK3kp
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZGVzdFc7ICsreCkgewotICAgICAg
ICAgICAgICAgIGludCB4MSA9IHggKyB0cmFuc2Zvcm0ubV9wcmVTaGlmdFg7Ci0gICAgICAgICAg
ICAgICAgaW50IHkxID0geSArIHRyYW5zZm9ybS5tX3ByZVNoaWZ0WTsKLSAgICAgICAgICAgICAg
ICBpbnQgc3JjWCA9IHgxICogY29zQSArIHRyYW5zZm9ybS5tX3Bvc3RTaGlmdFg7Ci0gICAgICAg
ICAgICAgICAgaW50IHNyY1kgPSB5MSAqIGNvc0EgLSB0cmFuc2Zvcm0ubV9wb3N0U2hpZnRZOwot
ICAgICAgICAgICAgICAgIGlmIChzcmNYID49IDAgJiYgc3JjWCA8PSBzb3VyY2VXICYmIHNyY1kg
Pj0gMCAmJiBzcmNZIDw9IHNvdXJjZUgpCi0gICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBz
b3VyY2Vbc3JjWSAqIHBhZGRlZFNvdXJjZVcgKyBzcmNYXSB8IDB4RkYwMDAwMDA7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAqZGVzdCsrIHw9IDB4RkY7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0ICs9IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGlzWmVybyh0cmFuc2Zvcm0ubV9jb3NBKSkgewotICAgICAgICBpbnQgc2luQSA9
IHRyYW5zZm9ybS5tX3NpbkEgPiAwID8gMSA6IC0xOwotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGRlc3RIOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZGVzdFc7
ICsreCkgewotICAgICAgICAgICAgICAgIGludCB4MSA9IHggKyB0cmFuc2Zvcm0ubV9wcmVTaGlm
dFg7Ci0gICAgICAgICAgICAgICAgaW50IHkxID0geSArIHRyYW5zZm9ybS5tX3ByZVNoaWZ0WTsK
LSAgICAgICAgICAgICAgICBpbnQgc3JjWCA9IHkxICogc2luQSArIHRyYW5zZm9ybS5tX3Bvc3RT
aGlmdFg7Ci0gICAgICAgICAgICAgICAgaW50IHNyY1kgPSAteDEgKiBzaW5BICsgdHJhbnNmb3Jt
Lm1fcG9zdFNoaWZ0WTsKLSAgICAgICAgICAgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1ggPD0g
c291cmNlVyAmJiBzcmNZID49IDAgJiYgc3JjWSA8PSBzb3VyY2VIKQotICAgICAgICAgICAgICAg
ICAgICAqZGVzdCsrID0gc291cmNlW3NyY1kgKiBwYWRkZWRTb3VyY2VXICsgc3JjWF07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0ICs9IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGRlc3RIOyArK3kpIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZGVzdFc7ICsreCkgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBmb3IgYmVzdCBxdWFsaXR5LCB3ZSBzaG91bGQgZ2V0IHdlaWdodGVkIHN1bSBv
ZiBmb3VyIG5laWdoYm91cnMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQgd2lsbCBiZSB0
b28gZXhwZW5zaXZlCi0gICAgICAgICAgICAgICAgaW50IHNyY1gsIHNyY1k7Ci0gICAgICAgICAg
ICAgICAgdHJhbnNmb3JtLm1hcCh4LCB5LCAmc3JjWCwgJnNyY1kpOwotICAgICAgICAgICAgICAg
IGlmIChzcmNYID49IDAgJiYgc3JjWCA8PSBzb3VyY2VXICYmIHNyY1kgPj0gMCAmJiBzcmNZIDw9
IHNvdXJjZUgpCi0gICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBzb3VyY2Vbc3JjWSAqIHBh
ZGRlZFNvdXJjZVcgKyBzcmNYXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgKz0g
cGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcm90YXRlQml0bWFw
KFNoYXJlZEJpdG1hcCogZGVzdEJtcCwgY29uc3QgU2hhcmVkQml0bWFwKiBzb3VyY2VCbXAsIGNv
bnN0IFJvdGF0aW9uVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJUKGRlc3RCbXAt
PmlzMTZiaXQoKSA9PSBzb3VyY2VCbXAtPmlzMTZiaXQoKSk7Ci0gICAgaWYgKGRlc3RCbXAtPmlz
MTZiaXQoKSkKLSAgICAgICAgX3JvdGF0ZUJpdG1hcDx1bnNpZ25lZCBzaG9ydCwgdHJ1ZT4oZGVz
dEJtcCwgc291cmNlQm1wLCB0cmFuc2Zvcm0pOwotICAgIGVsc2UKLSAgICAgICAgX3JvdGF0ZUJp
dG1hcDx1bnNpZ25lZCwgZmFsc2U+KGRlc3RCbXAsIHNvdXJjZUJtcCwgdHJhbnNmb3JtKTsKLX0K
LQotY2xhc3MgVHJhbnNwYXJlbnRMYXllckRDIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
cmFuc3BhcmVudExheWVyREMpOwotcHVibGljOgotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyhHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRhdGEsIEludFJlY3QmIG9yaWdSZWN0LCBjb25z
dCBJbnRSZWN0KiByZWN0QmVmb3JlVHJhbnNmb3JtID0gMCwgaW50IGFscGhhID0gMjU1LCBib29s
IHBhaW50SW1hZ2UgPSBmYWxzZSk7Ci0gICAgflRyYW5zcGFyZW50TGF5ZXJEQygpOwotCi0gICAg
SERDIGhkYygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtRGM7IH0KLSAgICBjb25zdCBSRUNUJiByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9ibXBSZWN0OyB9Ci0gICAgSW50U2l6ZSB0b1NoaWZ0KCkgY29u
c3QgeyByZXR1cm4gSW50U2l6ZShtX2JtcFJlY3QubGVmdCAtIG1fb3JpZ1JlY3QueCgpLCBtX2Jt
cFJlY3QudG9wIC0gbV9vcmlnUmVjdC55KCkpOyB9Ci0gICAgdm9pZCBmaWxsQWxwaGFDaGFubmVs
KCk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2Rh
dGE7Ci0gICAgSW50UmVjdCBtX29yaWdSZWN0OwotICAgIEludFJlY3QgbV9yb3RhdGVkT3JpZ1Jl
Y3Q7Ci0gICAgSERDIG1fbWVtRGM7Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gbV9iaXRtYXA7
Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gbV9yb3RhdGVkQml0bWFwOwotICAgIFJFQ1QgbV9i
bXBSZWN0OwotICAgIHVuc2lnbmVkIG1fa2V5OwotICAgIFJvdGF0aW9uVHJhbnNmb3JtIG1fcm90
YXRpb247Ci0gICAgZmxvYXQgbV9vbGRPcGFjaXR5OwotICAgIEFscGhhUGFpbnRUeXBlIG1fYWxw
aGFQYWludFR5cGU7Ci19OwotCi1UcmFuc3BhcmVudExheWVyREM6OlRyYW5zcGFyZW50TGF5ZXJE
QyhHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRhdGEsIEludFJlY3QmIG9yaWdSZWN0
LCBjb25zdCBJbnRSZWN0KiByZWN0QmVmb3JlVHJhbnNmb3JtLCBpbnQgYWxwaGEsIGJvb2wgcGFp
bnRJbWFnZSkKLTogbV9kYXRhKGRhdGEpCi0sIG1fb3JpZ1JlY3Qob3JpZ1JlY3QpCi0sIG1fb2xk
T3BhY2l0eShkYXRhLT5tX29wYWNpdHkpCi0vLyBtX2tleTEgYW5kIG1fa2V5MiBhcmUgbm90IGlu
aXRhbGl6ZWQgaGVyZS4gVGhleSBhcmUgdXNlZCBvbmx5IGluIHRoZSBjYXNlIHRoYXQKLS8vIFNo
YXJlZEJpdG1hcDo6Z2V0REMoKSBpcyBjYWxsZWQsIEkuRS4sIHdoZW4gbV9iaXRtYXAgaXMgbm90
IG51bGwuCi17Ci0gICAgbV9kYXRhLT5tX29wYWNpdHkgKj0gYWxwaGEgLyAyNTUuOwotICAgIGJv
b2wgbXVzdENyZWF0ZUxheWVyOwotICAgIGlmICghbV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0gICAg
ICAgIG11c3RDcmVhdGVMYXllciA9IGZhbHNlOwotICAgICAgICBtX2FscGhhUGFpbnRUeXBlID0g
QWxwaGFQYWludE5vbmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbXVzdENyZWF0ZUxheWVyID0g
dHJ1ZTsKLSAgICAgICAgbV9hbHBoYVBhaW50VHlwZSA9IHBhaW50SW1hZ2UgPyBBbHBoYVBhaW50
SW1hZ2UgOiBBbHBoYVBhaW50T3RoZXI7Ci0gICAgfQotICAgIGlmIChyZWN0QmVmb3JlVHJhbnNm
b3JtICYmICFpc1plcm8obV9kYXRhLT5tX3RyYW5zZm9ybS5iKCkpKSB7Ci0gICAgICAgIG1fcm90
YXRlZE9yaWdSZWN0ID0gb3JpZ1JlY3Q7Ci0gICAgICAgIG1fcm90YXRlZEJpdG1hcCA9IG1fZGF0
YS0+Z2V0VHJhbnNwYXJlbnRMYXllckJpdG1hcChtX3JvdGF0ZWRPcmlnUmVjdCwgbV9hbHBoYVBh
aW50VHlwZSwgbV9ibXBSZWN0LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChtX3JvdGF0ZWRC
aXRtYXApIHsKLSAgICAgICAgICAgIGRvdWJsZSBhID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5hKCk7
Ci0gICAgICAgICAgICBkb3VibGUgYiA9IG1fZGF0YS0+bV90cmFuc2Zvcm0uYigpOwotICAgICAg
ICAgICAgZG91YmxlIGMgPSBfaHlwb3QoYSwgYik7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1f
Y29zQSA9IGEgLyBjOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3NpbkEgPSBiIC8gYzsKLQot
ICAgICAgICAgICAgaW50IGNlbnRlclggPSBvcmlnUmVjdC54KCkgKyBvcmlnUmVjdC53aWR0aCgp
IC8gMjsKLSAgICAgICAgICAgIGludCBjZW50ZXJZID0gb3JpZ1JlY3QueSgpICsgb3JpZ1JlY3Qu
aGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WCA9IC1jZW50
ZXJYOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WSA9IC1jZW50ZXJZOwotICAg
ICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFggPSBjZW50ZXJYOwotICAgICAgICAgICAg
bV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFkgPSBjZW50ZXJZOwotCi0gICAgICAgICAgICBtX29yaWdS
ZWN0ID0gbWFwUmVjdChtX3JvdGF0ZWRPcmlnUmVjdCwgbV9yb3RhdGlvbik7Ci0KLSAgICAgICAg
ICAgIG1fcm90YXRpb24ubV9wcmVTaGlmdFggKz0gbV9yb3RhdGVkT3JpZ1JlY3QueCgpOwotICAg
ICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WSArPSBtX3JvdGF0ZWRPcmlnUmVjdC55KCk7
Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WCAtPSBtX29yaWdSZWN0LngoKTsK
LSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRZIC09IG1fb3JpZ1JlY3QueSgpOwot
Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcExlZnQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1h
cFBvaW50KEZsb2F0UG9pbnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+bG9jYXRpb24oKSkpOwotICAg
ICAgICAgICAgRmxvYXRQb2ludCB0b3BSaWdodChyZWN0QmVmb3JlVHJhbnNmb3JtLT5tYXhYKCkg
LSAxLCByZWN0QmVmb3JlVHJhbnNmb3JtLT55KCkpOwotICAgICAgICAgICAgdG9wUmlnaHQgPSBt
X2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKLSAgICAgICAgICAgIEZsb2F0
UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3JtLT54KCksIHJlY3RCZWZvcmVUcmFu
c2Zvcm0tPm1heFkoKSAtIDEpOwotICAgICAgICAgICAgYm90dG9tTGVmdCA9IG1fZGF0YS0+bV90
cmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgc2lk
ZVRvcCA9IHRvcFJpZ2h0IC0gdG9wTGVmdDsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlTGVm
dCA9IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwotICAgICAgICAgICAgZmxvYXQgd2lkdGggPSBfaHlw
b3Qoc2lkZVRvcC53aWR0aCgpICsgMSwgc2lkZVRvcC5oZWlnaHQoKSArIDEpOwotICAgICAgICAg
ICAgZmxvYXQgaGVpZ2h0ID0gX2h5cG90KHNpZGVMZWZ0LndpZHRoKCkgKyAxLCBzaWRlTGVmdC5o
ZWlnaHQoKSArIDEpOwotCi0gICAgICAgICAgICBvcmlnUmVjdC5pbmZsYXRlWChzdGFibGVSb3Vu
ZCgod2lkdGggLSBvcmlnUmVjdC53aWR0aCgpKSAqIDAuNSkpOwotICAgICAgICAgICAgb3JpZ1Jl
Y3QuaW5mbGF0ZVkoc3RhYmxlUm91bmQoKGhlaWdodCAtIG9yaWdSZWN0LmhlaWdodCgpKSAqIDAu
NSkpOwotCi0gICAgICAgICAgICBtX2JpdG1hcCA9IFNoYXJlZEJpdG1hcDo6Y3JlYXRlKG1fb3Jp
Z1JlY3Quc2l6ZSgpLCBtX3JvdGF0ZWRCaXRtYXAtPmlzMTZiaXQoKSA/IEJpdG1hcEluZm86OkJp
dENvdW50MTYgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDMyLCB0cnVlKTsKLSAgICAgICAgICAgIGlm
IChtX2JpdG1hcCkKLSAgICAgICAgICAgICAgICByb3RhdGVCaXRtYXAobV9iaXRtYXAuZ2V0KCks
IG1fcm90YXRlZEJpdG1hcC5nZXQoKSwgLW1fcm90YXRpb24pOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1fcm90YXRlZEJpdG1hcCA9IDA7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UKLSAgICAgICAgbV9iaXRtYXAgPSBtX2RhdGEtPmdldFRyYW5zcGFyZW50TGF5ZXJCaXRtYXAo
bV9vcmlnUmVjdCwgbV9hbHBoYVBhaW50VHlwZSwgbV9ibXBSZWN0LCB0cnVlLCBtdXN0Q3JlYXRl
TGF5ZXIpOwotICAgIGlmIChtX2JpdG1hcCkKLSAgICAgICAgbV9tZW1EYyA9IG1fYml0bWFwLT5n
ZXREQygmbV9rZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZW1EYyA9IG1fZGF0YS0+bV9kYzsK
LX0KLQotVHJhbnNwYXJlbnRMYXllckRDOjp+VHJhbnNwYXJlbnRMYXllckRDKCkKLXsKLSAgICBp
ZiAobV9yb3RhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fYml0bWFwLT5yZWxlYXNlREMobV9tZW1E
YywgbV9rZXkpOwotICAgICAgICBtX2tleSA9IDA7Ci0gICAgICAgIHJvdGF0ZUJpdG1hcChtX3Jv
dGF0ZWRCaXRtYXAuZ2V0KCksIG1fYml0bWFwLmdldCgpLCBtX3JvdGF0aW9uKTsKLSAgICAgICAg
bV9tZW1EYyA9IG1fcm90YXRlZEJpdG1hcC0+Z2V0REMoJm1fa2V5KTsKLSAgICAgICAgbV9kYXRh
LT5wYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0bWFwKG1fbWVtRGMsIG1fcm90YXRlZEJpdG1h
cC5nZXQoKSwgbV9yb3RhdGVkT3JpZ1JlY3QsIG1fYWxwaGFQYWludFR5cGUsIG1fYm1wUmVjdCk7
Ci0gICAgICAgIG1fcm90YXRlZEJpdG1hcC0+cmVsZWFzZURDKG1fbWVtRGMsIG1fa2V5KTsKLSAg
ICB9IGVsc2UgaWYgKG1fYml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cGFpbnRCYWNrVHJhbnNw
YXJlbnRMYXllckJpdG1hcChtX21lbURjLCBtX2JpdG1hcC5nZXQoKSwgbV9vcmlnUmVjdCwgbV9h
bHBoYVBhaW50VHlwZSwgbV9ibXBSZWN0KTsKLSAgICAgICAgbV9iaXRtYXAtPnJlbGVhc2VEQyht
X21lbURjLCBtX2tleSk7Ci0gICAgfQotICAgIG1fZGF0YS0+bV9vcGFjaXR5ID0gbV9vbGRPcGFj
aXR5OwotfQotCi12b2lkIFRyYW5zcGFyZW50TGF5ZXJEQzo6ZmlsbEFscGhhQ2hhbm5lbCgpCi17
Ci0gICAgaWYgKCFtX2JpdG1hcCB8fCAhbV9iaXRtYXAtPmlzMzJiaXQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQqIHBpeGVscyA9ICh1bnNpZ25lZCopbV9iaXRtYXAtPmJ5dGVz
KCk7Ci0gICAgY29uc3QgdW5zaWduZWQqIGNvbnN0IHBpeGVsc0VuZCA9IHBpeGVscyArIG1fYml0
bWFwLT5iaXRtYXBJbmZvKCkubnVtUGl4ZWxzKCk7Ci0gICAgd2hpbGUgKHBpeGVscyA8IHBpeGVs
c0VuZCkgewotICAgICAgICAqcGl4ZWxzIHw9IDB4RkYwMDAwMDA7Ci0gICAgICAgICsrcGl4ZWxz
OwotICAgIH0KLX0KLQotY2xhc3MgU2NvcGVEQ1Byb3ZpZGVyIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTY29wZURDUHJvdmlkZXIpOwotcHVibGljOgotICAgIGV4cGxpY2l0IFNjb3BlRENQ
cm92aWRlcihHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRhdGEpCi0gICAgICAgIDog
bV9kYXRhKGRhdGEpCi0gICAgewotICAgICAgICBpZiAobV9kYXRhLT5tX2JpdG1hcCkKLSAgICAg
ICAgICAgIG1fZGF0YS0+bV9kYyA9IG1fZGF0YS0+bV9iaXRtYXAtPmdldERDKCZtX2tleSk7Ci0g
ICAgfQotICAgIH5TY29wZURDUHJvdmlkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGF0YS0+
bV9iaXRtYXApIHsKLSAgICAgICAgICAgIG1fZGF0YS0+bV9iaXRtYXAtPnJlbGVhc2VEQyhtX2Rh
dGEtPm1fZGMsIG1fa2V5KTsKLSAgICAgICAgICAgIG1fZGF0YS0+bV9kYyA9IDA7Ci0gICAgICAg
IH0KLSAgICB9Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSog
bV9kYXRhOwotICAgIHVuc2lnbmVkIG1fa2V5OwotfTsKLQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYywgYm9vbCkKLXsKLSAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIG1f
ZGF0YTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJpdG1hcChQYXNzUmVmUHRyPFNo
YXJlZEJpdG1hcD4gYm1wKQotewotICAgIEFTU0VSVCghbV9kYXRhLT5tX2RjKTsKLSAgICBtX2Rh
dGEtPm1fYml0bWFwID0gYm1wOwotfQotCi1IREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dz
Q29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBi
b29sIG1heUNyZWF0ZUJpdG1hcCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEFs
cGhhQmxlbmQuCi0gICAgQVNTRVJUKCFzdXBwb3J0QWxwaGFCbGVuZCk7Ci0gICAgcmV0dXJuIG1f
ZGF0YS0+bV9kYzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNhdmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnNhdmUoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnJl
c3RvcmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1f
ZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBS
ZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwg
dHJSZWN0LCAmcmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBp
ZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50
b1NoaWZ0KCkpOwotCi0gICAgR0RJT2JqZWN0PEhCUlVTSD4gYnJ1c2g7Ci0gICAgSEdESU9CSiBv
bGRCcnVzaDsKLSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBicnVzaCA9
IGNyZWF0ZUJydXNoKGZpbGxDb2xvcigpKTsKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmpl
Y3QoZGMsIGJydXNoLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxl
Y3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLQotICAgIEdESU9iamVj
dDxIUEVOPiBwZW47Ci0gICAgSEdESU9CSiBvbGRQZW47Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkg
IT0gTm9TdHJva2UpIHsKLSAgICAgICAgcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0
cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0
T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBvbGRQZW4gPSBTZWxl
Y3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0KLSAgICBpZiAoYnJ1c2gg
fHwgcGVuKSB7Ci0gICAgICAgIGlmICh0clJlY3Qud2lkdGgoKSA8PSAwKQotICAgICAgICAgICAg
dHJSZWN0LnNldFdpZHRoKDEpOwotICAgICAgICBpZiAodHJSZWN0LmhlaWdodCgpIDw9IDApCi0g
ICAgICAgICAgICB0clJlY3Quc2V0SGVpZ2h0KDEpOwotCi0gICAgICAgIFJlY3RhbmdsZShkYywg
dHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7Ci0g
ICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotICAgIFNlbGVjdE9iamVjdChk
Yywgb2xkQnJ1c2gpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgaWYg
KCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUo
KSA9PSBOb1N0cm9rZSB8fCAhc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9k
YXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCB0clBvaW50MSA9IG1f
ZGF0YS0+bWFwUG9pbnQocG9pbnQxKTsKLSAgICBJbnRQb2ludCB0clBvaW50MiA9IG1fZGF0YS0+
bWFwUG9pbnQocG9pbnQyKTsKLQotICAgIEludFJlY3QgbGluZVJlY3QodHJQb2ludDEsIHRyUG9p
bnQyIC0gdHJQb2ludDEpOwotICAgIGxpbmVSZWN0LnNldEhlaWdodChsaW5lUmVjdC5oZWlnaHQo
KSArIHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJl
bnREQyhtX2RhdGEsIGxpbmVSZWN0LCAwLCBzdHJva2VDb2xvcigpLmFscGhhKCkpOwotICAgIEhE
QyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJu
OwotICAgIHRyUG9pbnQxICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotICAgIHRyUG9pbnQy
ICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotCi0gICAgYXV0byBwZW4gPSBjcmVhdGVQZW4o
c3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotICAgIEhH
RElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwotCi0gICAgTW92ZVRv
RXgoZGMsIHRyUG9pbnQxLngoKSwgdHJQb2ludDEueSgpLCAwKTsKLSAgICBMaW5lVG8oZGMsIHRy
UG9pbnQyLngoKSwgdHJQb2ludDIueSgpKTsKLQotICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVu
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVk
KCkgfHwgKCFmaWxsQ29sb3IoKS5hbHBoYSgpICYmIHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2Rh
dGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRS
ZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVy
REMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJnJlY3QpOwotICAgIEhEQyBkYyA9IHRy
YW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRy
UmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIEdESU9iamVjdDxIQlJV
U0g+IGJydXNoOwotICAgIEhHRElPQkogb2xkQnJ1c2g7Ci0gICAgaWYgKGZpbGxDb2xvcigpLmFs
cGhhKCkpIHsKLSAgICAgICAgYnJ1c2ggPSBjcmVhdGVCcnVzaChmaWxsQ29sb3IoKSk7Ci0gICAg
ICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBicnVzaC5nZXQoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxM
X0JSVVNIKSk7Ci0KLSAgICBHRElPYmplY3Q8SFBFTj4gcGVuOwotICAgIEhHRElPQkogb2xkUGVu
ID0gMDsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewotICAgICAgICBwZW4g
PSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxl
KCkpOwotICAgICAgICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3Qo
TlVMTF9QRU4pKTsKLQotICAgIGlmIChicnVzaCB8fCBwZW4pCi0gICAgICAgIEVsbGlwc2UoZGMs
IHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwot
Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotICAgIFNlbGVjdE9iamVjdChkYywgb2xk
QnJ1c2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxBbmdsZShkb3VibGUgYSwgZG91
YmxlIGIpIAotewotICAgIHJldHVybiBmYWJzKGEgLSBiKSA8IDFFLTU7Ci19Ci0KLXZvaWQgZ2V0
RWxsaXBzZVBvaW50QnlBbmdsZShkb3VibGUgYW5nbGUsIGRvdWJsZSBhLCBkb3VibGUgYiwgZmxv
YXQmIHgsIGZsb2F0JiB5KQotewotICAgIHdoaWxlIChhbmdsZSA8IDApCi0gICAgICAgIGFuZ2xl
ICs9IDIgKiBwaURvdWJsZTsKLSAgICB3aGlsZSAoYW5nbGUgPj0gMiAqIHBpRG91YmxlKQotICAg
ICAgICBhbmdsZSAtPSAyICogcGlEb3VibGU7Ci0KLSAgICBpZiAoZXF1YWxBbmdsZShhbmdsZSwg
MCkgfHwgZXF1YWxBbmdsZShhbmdsZSwgMiAqIHBpRG91YmxlKSkgewotICAgICAgICB4ID0gYTsK
LSAgICAgICAgeSA9IDA7Ci0gICAgfSBlbHNlIGlmIChlcXVhbEFuZ2xlKGFuZ2xlLCBwaURvdWJs
ZSkpIHsKLSAgICAgICAgeCA9IC1hOwotICAgICAgICB5ID0gMDsKLSAgICB9IGVsc2UgaWYgKGVx
dWFsQW5nbGUoYW5nbGUsIC41ICogcGlEb3VibGUpKSB7Ci0gICAgICAgIHggPSAwOwotICAgICAg
ICB5ID0gYjsKLSAgICB9IGVsc2UgaWYgKGVxdWFsQW5nbGUoYW5nbGUsIDEuNSAqIHBpRG91Ymxl
KSkgewotICAgICAgICB4ID0gMDsKLSAgICAgICAgeSA9IC1iOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGRvdWJsZSBrID0gdGFuKGFuZ2xlKTsKLSAgICAgICAgZG91YmxlIHNxQSA9IGEgKiBhOwot
ICAgICAgICBkb3VibGUgc3FCID0gYiAqIGI7Ci0gICAgICAgIGRvdWJsZSB0bXAgPSAxLiAvICgx
LiAvIHNxQSArIChrICogaykgLyBzcUIpOwotICAgICAgICB0bXAgPSB0bXAgPD0gMCA/IDAgOiBz
cXJ0KHRtcCk7Ci0gICAgICAgIGlmIChhbmdsZSA+IC41ICogcGlEb3VibGUgJiYgYW5nbGUgPCAx
LjUgKiBwaURvdWJsZSkKLSAgICAgICAgICAgIHRtcCA9IC10bXA7Ci0gICAgICAgIHggPSB0bXA7
Ci0KLSAgICAgICAgayA9IHRhbiguNSAqIHBpRG91YmxlIC0gYW5nbGUpOwotICAgICAgICB0bXAg
PSAxLiAvICgoayAqIGspIC8gc3FBICsgMSAvIHNxQik7Ci0gICAgICAgIHRtcCA9IHRtcCA8PSAw
ID8gMCA6IHNxcnQodG1wKTsKLSAgICAgICAgaWYgKGFuZ2xlID4gcGlEb3VibGUpCi0gICAgICAg
ICAgICB0bXAgPSAtdG1wOwotICAgICAgICB5ID0gdG1wOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIGlmICghbV9kYXRh
LT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IG5wb2ludHMgPD0gMSB8fCAhcG9p
bnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlciht
X2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBW
ZWN0b3I8UE9JTlQsIDIwPiB3aW5Qb2ludHMobnBvaW50cyk7Ci0gICAgRmxvYXRQb2ludCB0clBv
aW50ID0gbV9kYXRhLT5tYXBQb2ludChwb2ludHNbMF0pOwotICAgIHdpblBvaW50c1swXS54ID0g
c3RhYmxlUm91bmQodHJQb2ludC54KCkpOwotICAgIHdpblBvaW50c1swXS55ID0gc3RhYmxlUm91
bmQodHJQb2ludC55KCkpOwotICAgIFJFQ1QgcmVjdCA9IHsgd2luUG9pbnRzWzBdLngsIHdpblBv
aW50c1swXS55LCB3aW5Qb2ludHNbMF0ueCwgd2luUG9pbnRzWzBdLnkgfTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IG5wb2ludHM7ICsraSkgewotICAgICAgICB0clBvaW50ID0gbV9kYXRh
LT5tYXBQb2ludChwb2ludHNbaV0pOwotICAgICAgICB3aW5Qb2ludHNbaV0ueCA9IHN0YWJsZVJv
dW5kKHRyUG9pbnQueCgpKTsKLSAgICAgICAgd2luUG9pbnRzW2ldLnkgPSBzdGFibGVSb3VuZCh0
clBvaW50LnkoKSk7Ci0gICAgICAgIGlmIChyZWN0LmxlZnQgPiB3aW5Qb2ludHNbaV0ueCkKLSAg
ICAgICAgICAgIHJlY3QubGVmdCA9IHdpblBvaW50c1tpXS54OwotICAgICAgICBlbHNlIGlmIChy
ZWN0LnJpZ2h0IDwgd2luUG9pbnRzW2ldLngpCi0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gd2lu
UG9pbnRzW2ldLng7Ci0gICAgICAgIGlmIChyZWN0LnRvcCA+IHdpblBvaW50c1tpXS55KQotICAg
ICAgICAgICAgcmVjdC50b3AgPSB3aW5Qb2ludHNbaV0ueTsKLSAgICAgICAgZWxzZSBpZiAocmVj
dC5ib3R0b20gPCB3aW5Qb2ludHNbaV0ueSkKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gd2lu
UG9pbnRzW2ldLnk7Ci0gICAgfQotICAgIHJlY3QuYm90dG9tICs9IDE7Ci0gICAgcmVjdC5yaWdo
dCArPSAxOwotCi0gICAgSW50UmVjdCBpbnRSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5
ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgaW50UmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNw
YXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5wb2ludHM7ICsraSkgewotICAgICAgICB3aW5Qb2ludHNbaV0u
eCArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpOwotICAgICAgICB3aW5Qb2ludHNb
aV0ueSArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKS5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBH
RElPYmplY3Q8SEJSVVNIPiBicnVzaDsKLSAgICBIR0RJT0JKIG9sZEJydXNoOwotICAgIGlmIChm
aWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIGJydXNoID0gY3JlYXRlQnJ1c2goZmlsbENv
bG9yKCkpOwotICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkp
OwotICAgIH0gZWxzZQotICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgR2V0U3Rv
Y2tPYmplY3QoTlVMTF9CUlVTSCkpOwotCi0gICAgR0RJT2JqZWN0PEhQRU4+IHBlbjsKLSAgICBI
R0RJT0JKIG9sZFBlbjsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewotICAg
ICAgICBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0
cm9rZVN0eWxlKCkpOwotICAgICAgICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQo
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3Rv
Y2tPYmplY3QoTlVMTF9QRU4pKTsKLQotICAgIGlmIChicnVzaCB8fCBwZW4pCi0gICAgICAgIFBv
bHlnb24oZGMsIHdpblBvaW50cy5kYXRhKCksIG5wb2ludHMpOwotCi0gICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRQZW4pOwotICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29u
c3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChudW1Qb2ludHMgPD0g
MSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhIQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGFscGhhID0gY29sb3IuYWxwaGEoKTsKLSAgICBpZiAoIWFscGhhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAg
IGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGludFJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFu
c3BhcmVudERDKG1fZGF0YSwgbV9kYXRhLT5tYXBSZWN0KGludFJlY3QpLCAmaW50UmVjdCwgYWxw
aGEpOwotCi0gICAgaWYgKCF0cmFuc3BhcmVudERDLmhkYygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIGhicnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChSR0Io
Y29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSkpKTsKLSAgICBGaWxsUmVj
dCh0cmFuc3BhcmVudERDLmhkYygpLCAmdHJhbnNwYXJlbnREQy5yZWN0KCksIGhicnVzaC5nZXQo
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChyZWN0KSk7Ci0KLSAgICBhdXRv
IGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwot
ICAgIGlmIChHZXRDbGlwUmduKG1fZGF0YS0+bV9kYywgY2xpcFJnbi5nZXQoKSkgPiAwKQotICAg
ICAgICBJbnRlcnNlY3RDbGlwUmVjdChtX2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55
KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwotICAgIGVsc2UgewotICAgICAgICBj
bGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKHRyUmVjdC54KCksIHRyUmVj
dC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgU2VsZWN0Q2xp
cFJnbihtX2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhLT5t
X2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFw
UmVjdChyZWN0KTsKLQotICAgIEV4Y2x1ZGVDbGlwUmVjdChtX2RhdGEtPm1fZGMsIHRyUmVjdC54
KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lk
dGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlciht
X2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyOwotICAgIG9mZnNldCArPSByYWRpdXM7Ci0KLSAg
ICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7Ci0gICAgSW50UmVjdCBmaW5hbEZv
Y3VzUmVjdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKyspIHsK
LSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QgPSByZWN0c1tpXTsKLSAgICAgICAgZm9jdXNSZWN0
LmluZmxhdGUob2Zmc2V0KTsKLSAgICAgICAgZmluYWxGb2N1c1JlY3QudW5pdGUoZm9jdXNSZWN0
KTsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IGludFJlY3QgPSBmaW5hbEZvY3VzUmVjdDsKLSAgICBJ
bnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChmaW5hbEZvY3VzUmVjdCk7Ci0gICAgVHJh
bnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZpbnRSZWN0KTsK
LSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAg
IHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAg
ICBSRUNUIHJlY3QgPSB0clJlY3Q7Ci0gICAgRHJhd0ZvY3VzUmVjdChkYywgJnJlY3QpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKLXsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCBzdHJva2VUaGlja25l
c3MoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTdHJva2VTdHlsZSBvbGRTdHlsZSA9IHN0cm9rZVN0eWxlKCk7Ci0gICAg
c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgIGRyYXdMaW5lKHJvdW5kZWRJbnRQb2lu
dChvcmlnaW4pLCByb3VuZGVkSW50UG9pbnQob3JpZ2luICsgRmxvYXRTaXplKHdpZHRoLCAwKSkp
OwotICAgIGlmIChkb3VibGVVbmRlcmxpbmVzKQotICAgICAgICBkcmF3TGluZShyb3VuZGVkSW50
UG9pbnQob3JpZ2luICsgRmxvYXRTaXplKDAsIHN0cm9rZVRoaWNrbmVzcygpICogMikpLCByb3Vu
ZGVkSW50UG9pbnQob3JpZ2luICsgRmxvYXRTaXplKHdpZHRoLCBzdHJva2VUaGlja25lc3MoKSAq
IDIpKSk7Ci0gICAgc2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykK
LXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpZHRocy5zaXplKCk7IGkgKz0gMikKLSAg
ICAgICAgZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQocG9pbnQueCgpICsgd2lkdGhzW2ldLCBw
b2ludC55KCkpLCB3aWR0aHNbaSsxXSAtIHdpZHRoc1tpXSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlRG9jdW1lbnRNYXJrZXJS
ZXNvdXJjZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbnN0IENvbG9yJiBjb2wsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VD
b2xvcihjb25zdCBDb2xvciYgY29sLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwm
IGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2RhdGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAgSW50UmVjdCB0clJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChyZWN0KSk7Ci0gICAgICAgIG1fZGF0YS0+
bV9iaXRtYXAtPmNsZWFyUGl4ZWxzKHRyUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IAot
Ci0gICAgZmlsbFJlY3QocmVjdCwgQ29sb3IoQ29sb3I6OndoaXRlKSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8
fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAg
ICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbnRS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0
YS0+bWFwUmVjdChpbnRSZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnRE
QyhtX2RhdGEsIHRyUmVjdCwgJmludFJlY3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMu
aGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRy
YW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIGF1dG8gcGVuID0gY3JlYXRlUGVuKHN0cm9r
ZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLSAgICBIR0RJT0JK
IG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKLQotICAgIGludCByaWdodCA9
IHRyUmVjdC5tYXhYKCkgLSAxOwotICAgIGludCBib3R0b20gPSB0clJlY3QubWF4WSgpIC0gMTsK
LSAgICBjb25zdCBQT0lOVCBpbnRQb2ludHNbNV0gPQotICAgIHsKLSAgICAgICAgeyB0clJlY3Qu
eCgpLCB0clJlY3QueSgpIH0sCi0gICAgICAgIHsgcmlnaHQsIHRyUmVjdC55KCkgfSwKLSAgICAg
ICAgeyByaWdodCwgYm90dG9tIH0sCi0gICAgICAgIHsgdHJSZWN0LngoKSwgYm90dG9tIH0sCi0g
ICAgICAgIHsgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSB9Ci0gICAgfTsKLQotICAgIFBvbHlsaW5l
KGRjLCBpbnRQb2ludHMsIDUpOwotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgbV9kYXRhLT5tX29wYWNp
dHkgKj0gb3BhY2l0eTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJh
bnNwYXJlbmN5TGF5ZXIoKQotewotICAgIG1fZGF0YS0+cmVzdG9yZSgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtJiBHcmFwaGljc0NvbnRleHQ6OmFmZmluZVRyYW5zZm9ybSgpCi17Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLWNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgR3JhcGhpY3NDb250ZXh0OjphZmZpbmVUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVy
biBtX2RhdGEtPm1fdHJhbnNmb3JtOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzZXRB
ZmZpbmVUcmFuc2Zvcm0oKQotewotICAgIG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFrZUlkZW50aXR5
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKLXsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewotICAgIG1fZGF0YS0+cm90YXRlKHJhZGlh
bnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQotewotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpv
aW4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQotewotICAgIG1f
ZGF0YS0+bV9vcGFjaXR5ID0gYWxwaGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBjbGlwKHBhdGgsIGZpbGxSdWxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRQb2ludCByZWN0Q2Vu
dGVyUG9pbnQoY29uc3QgUkVDVCYgcmVjdCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQocmVjdC5s
ZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMiwgcmVjdC50b3AgKyAocmVjdC5ib3R0
b20gLSByZWN0LnRvcCkgLyAyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYywgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1f
ZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZs
b2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciA9IDA7Ci0gICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOwotICAgICAg
ICAKLSAgICBnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwg
c2hhZG93Q29sb3JTcGFjZSk7Ci0gICAgCi0gICAgY29uc3QgRmxvYXRSZWN0JiBmaWxsUmVjdCA9
IHJlY3QucmVjdCgpOwotICAgIEludFJlY3QgZHN0UmVjdCA9IGZpbGxSZWN0OwotICAgIAotICAg
IGRzdFJlY3QubW92ZShzdGFibGVSb3VuZChzaGFkb3dPZmZzZXQud2lkdGgoKSksIHN0YWJsZVJv
dW5kKHNoYWRvd09mZnNldC5oZWlnaHQoKSkpOwotICAgIGRzdFJlY3QuaW5mbGF0ZShzdGFibGVS
b3VuZChzaGFkb3dCbHVyKSk7Ci0gICAgZHN0UmVjdCA9IG1fZGF0YS0+bWFwUmVjdChkc3RSZWN0
KTsKLSAgCi0gICAgRmxvYXRTaXplIG5ld1RvcExlZnQobV9kYXRhLT5tYXBTaXplKHJlY3QucmFk
aWkoKS50b3BMZWZ0KCkpKTsKLSAgICBGbG9hdFNpemUgbmV3VG9wUmlnaHQobV9kYXRhLT5tYXBT
aXplKHJlY3QucmFkaWkoKS50b3BSaWdodCgpKSk7Ci0gICAgRmxvYXRTaXplIG5ld0JvdHRvbUxl
ZnQobV9kYXRhLT5tYXBTaXplKHJlY3QucmFkaWkoKS5ib3R0b21MZWZ0KCkpKTsKLSAgICBGbG9h
dFNpemUgbmV3Qm90dG9tUmlnaHQobV9kYXRhLT5tYXBTaXplKHJlY3QucmFkaWkoKS5ib3R0b21S
aWdodCgpKSk7Ci0KLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREYyhtX2RhdGEs
IGRzdFJlY3QsICZmaWxsUmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREYy5oZGMoKTsK
LSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkc3RSZWN0Lm1vdmUodHJhbnNw
YXJlbnREYy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0V2luID0gZHN0UmVjdDsKLQotICAg
IGF1dG8gYnJ1c2ggPSBjcmVhdGVCcnVzaChzaGFkb3dDb2xvcik7Ci0gICAgSEdESU9CSiBvbGRC
cnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0
KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAgSW50UG9pbnQgY2VudGVyUG9p
bnQgPSByZWN0Q2VudGVyUG9pbnQocmVjdFdpbik7Ci0gICAgLy8gRHJhdyB0b3AgbGVmdCBoYWxm
Ci0gICAgUkVDVCBjbGlwUmVjdChyZWN0V2luKTsKLSAgICBjbGlwUmVjdC5yaWdodCA9IGNlbnRl
clBvaW50LngoKTsKLSAgICBjbGlwUmVjdC5ib3R0b20gPSBjZW50ZXJQb2ludC55KCk7Ci0KLSAg
ICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwg
MCkpOwotICAgIGJvb2wgbmVlZHNOZXdDbGlwID0gKEdldENsaXBSZ24oZGMsIGNsaXBSZ24uZ2V0
KCkpIDw9IDApOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5lZWRzTmV3Q2xpcCwgY2xpcFJlY3Qs
IHJlY3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdUb3BMZWZ0LndpZHRoKCkgKiAyKSwgc3RhYmxl
Um91bmQobmV3VG9wTGVmdC5oZWlnaHQoKSAqIDIpKTsKLQotICAgIC8vIERyYXcgdG9wIHJpZ2h0
Ci0gICAgY2xpcFJlY3QgPSByZWN0V2luOwotICAgIGNsaXBSZWN0LmxlZnQgPSBjZW50ZXJQb2lu
dC54KCk7Ci0gICAgY2xpcFJlY3QuYm90dG9tID0gY2VudGVyUG9pbnQueSgpOwotCi0gICAgZHJh
d1JvdW5kQ29ybmVyKG5lZWRzTmV3Q2xpcCwgY2xpcFJlY3QsIHJlY3RXaW4sIGRjLCBzdGFibGVS
b3VuZChuZXdUb3BSaWdodC53aWR0aCgpICogMiksIHN0YWJsZVJvdW5kKG5ld1RvcFJpZ2h0Lmhl
aWdodCgpICogMikpOwotCi0gICAgIC8vIERyYXcgYm90dG9tIGxlZnQKLSAgICBjbGlwUmVjdCA9
IHJlY3RXaW47Ci0gICAgY2xpcFJlY3QucmlnaHQgPSBjZW50ZXJQb2ludC54KCk7Ci0gICAgY2xp
cFJlY3QudG9wID0gY2VudGVyUG9pbnQueSgpOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5lZWRz
TmV3Q2xpcCwgY2xpcFJlY3QsIHJlY3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdCb3R0b21MZWZ0
LndpZHRoKCkgKiAyKSwgc3RhYmxlUm91bmQobmV3Qm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpKTsK
LQotICAgIC8vIERyYXcgYm90dG9tIHJpZ2h0Ci0gICAgY2xpcFJlY3QgPSByZWN0V2luOwotICAg
IGNsaXBSZWN0LmxlZnQgPSBjZW50ZXJQb2ludC54KCk7Ci0gICAgY2xpcFJlY3QudG9wID0gY2Vu
dGVyUG9pbnQueSgpOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5lZWRzTmV3Q2xpcCwgY2xpcFJl
Y3QsIHJlY3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdCb3R0b21SaWdodC53aWR0aCgpICogMiks
IHN0YWJsZVJvdW5kKG5ld0JvdHRvbVJpZ2h0LmhlaWdodCgpICogMikpOwotCi0gICAgU2VsZWN0
T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Um91
bmRDb3JuZXIoYm9vbCBuZWVkc05ld0NsaXAsIFJFQ1QgY2xpcFJlY3QsIFJFQ1QgcmVjdFdpbiwg
SERDIGRjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFkYykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0
UmduKDAsIDAsIDAsIDApKTsKLSAgICBpZiAobmVlZHNOZXdDbGlwKSB7Ci0gICAgICAgIGNsaXBS
Z24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oY2xpcFJlY3QubGVmdCwgY2xpcFJl
Y3QudG9wLCBjbGlwUmVjdC5yaWdodCwgY2xpcFJlY3QuYm90dG9tKSk7Ci0gICAgICAgIFNlbGVj
dENsaXBSZ24oZGMsIGNsaXBSZ24uZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBJbnRlcnNl
Y3RDbGlwUmVjdChkYywgY2xpcFJlY3QubGVmdCwgY2xpcFJlY3QudG9wLCBjbGlwUmVjdC5yaWdo
dCwgY2xpcFJlY3QuYm90dG9tKTsKLQotICAgIDo6Um91bmRSZWN0KGRjLCByZWN0V2luLmxlZnQg
LCByZWN0V2luLnRvcCAsIHJlY3RXaW4ucmlnaHQgLCByZWN0V2luLmJvdHRvbSAsIHdpZHRoLCBo
ZWlnaHQpOwotCi0gICAgU2VsZWN0Q2xpcFJnbihkYywgbmVlZHNOZXdDbGlwID8gMCA6IGNsaXBS
Z24uZ2V0KCkpOwotfQotCi0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZyZWN0OwotfQotCi1Db2xvciBncmFkaWVudEF2
ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCi17Ci0gICAgY29uc3QgVmVjdG9y
PEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyA9IGdyYWRpZW50LT5nZXRTdG9wcygpOwotICAg
IGlmIChzdG9wcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgY29u
c3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgc3RvcCA9IHN0b3BzLmZpcnN0KCk7Ci0gICAgaWYgKHN0
b3BzLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gQ29sb3Ioc3RvcC5yZWQsIHN0b3AuZ3Jl
ZW4sIHN0b3AuYmx1ZSwgc3RvcC5hbHBoYSk7Ci0KLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wJiBsYXN0U3RvcCA9IHN0b3BzLmxhc3QoKTsKLSAgICByZXR1cm4gQ29sb3IoKHN0b3AucmVk
ICsgbGFzdFN0b3AucmVkKSAqIDAuNWYKLSAgICAgICAgLCAoc3RvcC5ncmVlbiArIGxhc3RTdG9w
LmdyZWVuKSAqIDAuNWYKLSAgICAgICAgLCAoc3RvcC5ibHVlICsgbGFzdFN0b3AuYmx1ZSkgKiAw
LjVmCi0gICAgICAgICwgKHN0b3AuYWxwaGEgKyBsYXN0U3RvcC5hbHBoYSkgKiAwLjVmKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGMgPSBt
X3N0YXRlLmZpbGxHcmFkaWVudAotICAgICAgICA/IGdyYWRpZW50QXZlcmFnZUNvbG9yKG1fc3Rh
dGUuZmlsbEdyYWRpZW50LmdldCgpKQotICAgICAgICA6IGZpbGxDb2xvcigpOwotCi0gICAgaWYg
KCFjLmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5t
X2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGJydXNoID0gY3JlYXRlQnJ1c2goYyk7
Ci0KLSAgICBpZiAobV9kYXRhLT5tX29wYWNpdHkgPCAxLjBmIHx8IG1fZGF0YS0+aGFzQWxwaGEo
KSkgewotICAgICAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5t
YXBSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpKTsKLSAgICAgICAgdHJSZWN0LmluZmxhdGUoMSk7
Ci0gICAgICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0
KTsKLSAgICAgICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICAgICAgaWYgKCFk
YykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHIgPSBt
X2RhdGEtPm1fdHJhbnNmb3JtOwotICAgICAgICB0ci50cmFuc2xhdGUodHJhbnNwYXJlbnREQy50
b1NoaWZ0KCkud2lkdGgoKSwgdHJhbnNwYXJlbnREQy50b1NoaWZ0KCkuaGVpZ2h0KCkpOwotCi0g
ICAgICAgIFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKLSAgICAg
ICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkpOwotICAg
ICAgICBwYXRoLnBsYXRmb3JtUGF0aCgpLT5maWxsUGF0aChkYywgJnRyKTsKLSAgICAgICAgU2Vs
ZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2VsZWN0T2Jq
ZWN0KG1fZGF0YS0+bV9kYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKLSAgICAgICAgSEdE
SU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIGJydXNoLmdldCgpKTsK
LSAgICAgICAgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+ZmlsbFBhdGgobV9kYXRhLT5tX2RjLCAmbV9k
YXRhLT5tX3RyYW5zZm9ybSk7Ci0gICAgICAgIFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIG9s
ZEJydXNoKTsKLSAgICB9Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwoKSB8fCAhbV9kYXRhLT5t
X29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3Zp
ZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygp
LCBzdHJva2VTdHlsZSgpKTsKLQotICAgIGlmIChtX2RhdGEtPm1fb3BhY2l0eSA8IDEuMGYgfHwg
bV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0gICAgICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChtX2RhdGEtPm1hcFJlY3QocGF0aC5ib3VuZGluZ1JlY3QoKSkpOwotICAgICAgICB0
clJlY3QuaW5mbGF0ZSgxKTsKLSAgICAgICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50
REMobV9kYXRhLCB0clJlY3QpOwotICAgICAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygp
OwotICAgICAgICBpZiAoIWRjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0ciA9IG1fZGF0YS0+bV90cmFuc2Zvcm07Ci0gICAgICAgIHRyLnRyYW5zbGF0
ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0cmFuc3BhcmVudERDLnRvU2hpZnQo
KS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChO
VUxMX0JSVVNIKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBw
ZW4uZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRmb3JtUGF0aCgpLT5zdHJva2VQYXRoKGRjLCAm
dHIpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVT
SCkpOwotICAgICAgICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMs
IHBlbi5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRoKCktPnN0cm9rZVBhdGgobV9k
YXRhLT5tX2RjLCAmbV9kYXRhLT5tX3RyYW5zZm9ybSk7Ci0gICAgICAgIFNlbGVjdE9iamVjdCht
X2RhdGEtPm1fZGMsIG9sZFBlbik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCi17
Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyA9IGdyYWRpZW50LT5nZXRTdG9w
cygpOwotICAgIGlmIChzdG9wcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNp
emVfdCBudW1TdG9wcyA9IHN0b3BzLnNpemUoKTsKLSAgICBpZiAobnVtU3RvcHMgPT0gMSkgewot
ICAgICAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wID0gc3RvcHMuZmlyc3QoKTsK
LSAgICAgICAgQ29sb3IgY29sb3Ioc3RvcC5yZWQsIHN0b3AuZ3JlZW4sIHN0b3AuYmx1ZSwgc3Rv
cC5hbHBoYSk7Ci0gICAgICAgIGZpbGxSZWN0KHIsIGNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gCi0gICAgCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRj
UHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UmVjdCBpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyKTsKLSAgICBJbnRS
ZWN0IHJlY3QgPSBtX2RhdGEtPm1hcFJlY3QoaW50UmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXll
ckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCByZWN0LCAmaW50UmVjdCwgMjU1LCB0cnVlKTsKLSAg
ICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0gICAgRmxv
YXRQb2ludCBmcDAgPSBtX2RhdGEtPm1hcFBvaW50KGdyYWRpZW50LT5wMCgpKTsKLSAgICBGbG9h
dFBvaW50IGZwMSA9IG1fZGF0YS0+bWFwUG9pbnQoZ3JhZGllbnQtPnAxKCkpOwotICAgIEludFBv
aW50IHAwKHN0YWJsZVJvdW5kKGZwMC54KCkpLCBzdGFibGVSb3VuZChmcDAueSgpKSk7Ci0gICAg
SW50UG9pbnQgcDEoc3RhYmxlUm91bmQoZnAxLngoKSksIHN0YWJsZVJvdW5kKGZwMS55KCkpKTsK
LSAgICBwMCArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKTsKLSAgICBwMSArPSB0cmFuc3BhcmVu
dERDLnRvU2hpZnQoKTsKLQotICAgIGlmIChncmFkaWVudC0+aXNSYWRpYWwoKSkgewotICAgICAg
ICBpZiAoZ19yYWRpYWxHcmFkaWVudEZpbGxlcikgewotICAgICAgICAgICAgLy8gRklYTUU6IGRv
bid0IHN1cHBvcnQgMkQgc2NhbGluZyBhdCB0aGlzIHRpbWUKLSAgICAgICAgICAgIGRvdWJsZSBz
Y2FsZSA9IChtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKSArIG1fZGF0YS0+bV90cmFuc2Zvcm0uZCgp
KSAqIDAuNTsKLSAgICAgICAgICAgIGZsb2F0IHIwID0gZ3JhZGllbnQtPnN0YXJ0UmFkaXVzKCkg
KiBzY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IHIxID0gZ3JhZGllbnQtPmVuZFJhZGl1cygpICog
c2NhbGU7Ci0gICAgICAgICAgICBnX3JhZGlhbEdyYWRpZW50RmlsbGVyKGRjLCByZWN0LCBwMCwg
cDEsIHIwLCByMSwgZ3JhZGllbnQtPmdldFN0b3BzKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChnX2xpbmVhckdyYWRpZW50RmlsbGVyKSB7Ci0gICAg
ICAgIGdfbGluZWFyR3JhZGllbnRGaWxsZXIoZGMsIHJlY3QsIHAwLCBwMSwgZ3JhZGllbnQtPmdl
dFN0b3BzKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2ltcGxlIDFEIGxp
bmVhciBzb2x1dGlvbiB0aGF0IGFzc3VtZXMgcDAgaXMgb24gdGhlIHRvcCBvciBsZWZ0IHNpZGUs
IGFuZCBwMSBpcyBvbiB0aGUgcmlnaHQgb3IgYm90dG9tIHNpZGUKLSAgICBzaXplX3QgbnVtUmVj
dHMgPSAobnVtU3RvcHMgLSAxKTsKLSAgICBWZWN0b3I8VFJJVkVSVEVYLCAyMD4gdHY7Ci0gICAg
dHYucmVzaXplKG51bVJlY3RzICogMik7Ci0gICAgVmVjdG9yPEdSQURJRU5UX1JFQ1QsIDEwPiBt
ZXNoOwotICAgIG1lc2gucmVzaXplKG51bVJlY3RzKTsKLSAgICBpbnQgeCA9IHJlY3QueCgpOwot
ICAgIGludCB5ID0gcmVjdC55KCk7Ci0gICAgaW50IHdpZHRoID0gcmVjdC53aWR0aCgpOwotICAg
IGludCBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAgIEZsb2F0U2l6ZSBkID0gZ3JhZGllbnQt
PnAxKCkgLSBncmFkaWVudC0+cDAoKTsKLSAgICBib29sIHZlcnRpY2FsID0gZmFicyhkLmhlaWdo
dCgpKSA+IGZhYnMoZC53aWR0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0
b3BzOyArK2kpIHsKLSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgc3RvcCA9IHN0
b3BzW2ldOwotICAgICAgICBpbnQgaVR2ID0gaSA/IDIgKiBpIC0gMSA6IDA7Ci0gICAgICAgIHR2
W2lUdl0uUmVkID0gc3RvcC5yZWQgKiAweEZGRkY7Ci0gICAgICAgIHR2W2lUdl0uR3JlZW4gPSBz
dG9wLmdyZWVuICogMHhGRkZGOwotICAgICAgICB0dltpVHZdLkJsdWUgPSBzdG9wLmJsdWUgKiAw
eEZGRkY7Ci0gICAgICAgIHR2W2lUdl0uQWxwaGEgPSBzdG9wLmFscGhhICogMHhGRkZGOwotICAg
ICAgICBpZiAoaSkgewotICAgICAgICAgICAgdHZbaVR2XS54ID0gdmVydGljYWwgPyB4ICsgd2lk
dGg6IHggKyB3aWR0aCAqIHN0b3Auc3RvcDsKLSAgICAgICAgICAgIHR2W2lUdl0ueSA9IHZlcnRp
Y2FsID8geSArIGhlaWdodCAqIHN0b3Auc3RvcCA6IHkgKyBoZWlnaHQ7Ci0gICAgICAgICAgICBt
ZXNoW2kgLSAxXS5VcHBlckxlZnQgPSBpVHYgLSAxOwotICAgICAgICAgICAgbWVzaFtpIC0gMV0u
TG93ZXJSaWdodCA9IGlUdjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHR2W2lUdl0u
eCA9IHg7Ci0gICAgICAgICAgICB0dltpVHZdLnkgPSB5OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGkgJiYgaSA8IG51bVJlY3RzKSB7Ci0gICAgICAgICAgICB0dltpVHYgKyAxXSA9IHR2W2lU
dl07Ci0gICAgICAgICAgICBpZiAodmVydGljYWwpCi0gICAgICAgICAgICAgICAgdHZbaVR2ICsg
MV0ueCA9IHg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHZbaVR2ICsgMV0u
eSA9IHk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHcmFkaWVudEZpbGwoZGMsIHR2LmRhdGEo
KSwgdHYuc2l6ZSgpLCBtZXNoLmRhdGEoKSwgbWVzaC5zaXplKCksIHZlcnRpY2FsID8gR1JBRElF
TlRfRklMTF9SRUNUX1YgOiBHUkFESUVOVF9GSUxMX1JFQ1RfSCk7Ci19Ci0KLUFmZmluZVRyYW5z
Zm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2F2
ZVBsYXRmb3JtU3RhdGUoKTsKLQotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAg
ICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgZmlsbFJlY3QocmVjdCwgZmlsbENvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotCi0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0LCBjb25zdCBDb2xv
ciYsIENvbG9yU3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLUludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoYXJWaXNpYmxl
KFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGMgJiYgYyAhPSB6ZXJvV2lkdGhTcGFjZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZmlsbENvbG9yKCkuYWxwaGEoKSB8fCAh
bV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgbXVzdFN1cHBv
cnRBbHBoYSA9IG1fZGF0YS0+aGFzQWxwaGEoKTsKLQotICAgIGlmICghbXVzdFN1cHBvcnRBbHBo
YSAmJiBmaWxsQ29sb3IoKS5hbHBoYSgpID09IDB4RkYgJiYgbV9kYXRhLT5tX29wYWNpdHkgPj0g
MS4wKSB7Ci0gICAgICAgIGZvbnQuZHJhd1RleHQodGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQgb2xkT3BhY2l0eSA9IG1fZGF0
YS0+bV9vcGFjaXR5OwotICAgIG1fZGF0YS0+bV9vcGFjaXR5ICo9IGZpbGxDb2xvcigpLmFscGhh
KCkgLyAyNTUuMDsKLQotICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCA9IGZvbnQuc2VsZWN0aW9uUmVj
dEZvclRleHQocnVuLCBwb2ludCwgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpLCBmcm9tLCB0
byk7Ci0gICAgdGV4dFJlY3Quc2V0WSh0ZXh0UmVjdC55KCkgLSBmb250LmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpOwotICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEt
Pm1hcFJlY3QodGV4dFJlY3QpKTsKLSAgICBSRUNUIGJtcFJlY3Q7Ci0gICAgQWxwaGFQYWludFR5
cGUgYWxwaGFQYWludFR5cGUgPSBtdXN0U3VwcG9ydEFscGhhID8gQWxwaGFQYWludE90aGVyIDog
QWxwaGFQYWludE5vbmU7Ci0gICAgaWYgKFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IG1fZGF0
YS0+Z2V0VHJhbnNwYXJlbnRMYXllckJpdG1hcCh0clJlY3QsIGFscGhhUGFpbnRUeXBlLCBibXBS
ZWN0LCB0cnVlLCBtdXN0U3VwcG9ydEFscGhhKSkgewotICAgICAgICB7Ci0gICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQgZ2MoMCk7Ci0gICAgICAgICAgICBnYy5zZXRCaXRtYXAoYm1wKTsKLSAg
ICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKSwgbV9k
YXRhLT5tX3RyYW5zZm9ybS5kKCkpKTsKLSAgICAgICAgICAgIGZvbnQuZHJhd1RleHQoJmdjLCBy
dW4sIEludFBvaW50KDAsIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSksIGZyb20sIHRvKTsK
LSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBrZXkxOwotICAgICAgICBIREMgbWVtREMgPSBi
bXAtPmdldERDKCZrZXkxKTsKLSAgICAgICAgaWYgKG1lbURDKSB7Ci0gICAgICAgICAgICBtX2Rh
dGEtPnBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAobWVtREMsIGJtcC5nZXQoKSwgdHJS
ZWN0LCBhbHBoYVBhaW50VHlwZSwgYm1wUmVjdCk7Ci0gICAgICAgICAgICBibXAtPnJlbGVhc2VE
QyhtZW1EQywga2V5MSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2RhdGEtPm1fb3BhY2l0
eSA9IG9sZE9wYWNpdHk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoIW51bUdseXBocykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzQ2hhclZpc2libGUoKmdseXBoQnVmZmVy
LmdseXBocyhmcm9tKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKytmcm9tOwotICAg
ICAgICAtLW51bUdseXBoczsKLSAgICB9Ci0KLSAgICBkb3VibGUgc2NhbGVYID0gbV9kYXRhLT5t
X3RyYW5zZm9ybS5hKCk7Ci0gICAgZG91YmxlIHNjYWxlWSA9IG1fZGF0YS0+bV90cmFuc2Zvcm0u
ZCgpOwotCi0gICAgaW50IGhlaWdodCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXplKCkg
KiBzY2FsZVk7Ci0gICAgaW50IHdpZHRoID0gZm9udERhdGEtPmF2Z0NoYXJXaWR0aCgpICogc2Nh
bGVYOwotCi0gICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5t
X2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIRk9OVCBoRm9udCA9IGhlaWdodCA+IDEKLSAg
ICAgICAgPyBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuZ2V0U2NhbGVkRm9udEhhbmRsZShoZWln
aHQsIHNjYWxlWCA9PSBzY2FsZVkgPyAwIDogd2lkdGgpCi0gICAgICAgIDogMDsKLQotICAgIEZs
b2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAtIGZvbnREYXRhLT5mb250
TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICBGbG9hdFBvaW50IHRyUG9pbnQgPSBtX2RhdGEtPm1h
cFBvaW50KHN0YXJ0UG9pbnQpOwotICAgIGludCB5ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkp
OwotCi0gICAgQ29sb3IgY29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICBpZiAoIWNvbG9yLmFscGhh
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTE9SUkVGIGZvbnRDb2xvciA9IFJHQihjb2xv
ci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpKTsKLQotICAgIGlmICghaEZvbnQp
IHsKLSAgICAgICAgZG91YmxlIG9mZnNldCA9IHRyUG9pbnQueCgpOwotICAgICAgICBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsK
LSAgICAgICAgaWYgKHNjYWxlWCA9PSAxLikKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgbnVtR2x5cGhzOyArK2kpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9ICgqYWR2YW5jZSsr
KS53aWR0aCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IG51bUdseXBoczsgKytpKQotICAgICAgICAgICAgICAgIG9mZnNldCArPSAoKmFkdmFuY2UrKyku
d2lkdGgoKSAqIHNjYWxlWDsKLQotICAgICAgICBvZmZzZXQgKz0gd2lkdGg7Ci0KLSAgICAgICAg
YXV0byBoUGVuID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVQZW4oUFNfREFTSCwgMSwgZm9udENv
bG9yKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9k
YywgaFBlbi5nZXQoKSk7Ci0KLSAgICAgICAgTW92ZVRvRXgobV9kYXRhLT5tX2RjLCBzdGFibGVS
b3VuZCh0clBvaW50LngoKSksIHksIDApOwotICAgICAgICBMaW5lVG8obV9kYXRhLT5tX2RjLCBz
dGFibGVSb3VuZChvZmZzZXQpLCB5KTsKLQotICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5t
X2RjLCBvbGRQZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyID0gMDsKLSAgICBDb2xvciBzaGFkb3dD
b2xvcjsKLSAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7Ci0gICAgYm9vbCBoYXNTaGFk
b3cgPSB0ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZUZpbGwKLSAgICAgICAgJiYgZ2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3Bh
Y2UpCi0gICAgICAgICYmIHNoYWRvd0NvbG9yLmFscGhhKCk7Ci0gICAgQ09MT1JSRUYgc2hhZG93
UkdCQ29sb3I7Ci0gICAgRmxvYXRQb2ludCB0clNoYWRvd1BvaW50OwotICAgIGlmIChoYXNTaGFk
b3cpIHsKLSAgICAgICAgc2hhZG93UkdCQ29sb3IgPSBSR0Ioc2hhZG93Q29sb3IucmVkKCksIHNo
YWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSk7Ci0gICAgICAgIHRyU2hhZG93
UG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHN0YXJ0UG9pbnQgKyBzaGFkb3dPZmZzZXQpOwotICAg
IH0KLQotICAgIEhHRElPQkogaE9sZEZvbnQgPSBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBo
Rm9udCk7Ci0gICAgQ09MT1JSRUYgb2xkVGV4dENvbG9yID0gR2V0VGV4dENvbG9yKG1fZGF0YS0+
bV9kYyk7Ci0gICAgaW50IG9sZFRleHRBbGlnbiA9IEdldFRleHRBbGlnbihtX2RhdGEtPm1fZGMp
OwotICAgIFNldFRleHRBbGlnbihtX2RhdGEtPm1fZGMsIDApOwotCi0gICAgaW50IG9sZEJrTW9k
ZSA9IEdldEJrTW9kZShtX2RhdGEtPm1fZGMpOwotICAgIFNldEJrTW9kZShtX2RhdGEtPm1fZGMs
IFRSQU5TUEFSRU5UKTsKLQotICAgIGlmIChudW1HbHlwaHMgPiAxKSB7Ci0gICAgICAgIGRvdWJs
ZSBvZmZzZXQgPSB0clBvaW50LngoKTsKLSAgICAgICAgVmVjdG9yPGludCwgMjU2PiBnbHlwaFNw
YWNlKG51bUdseXBocyk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMjU2PiB0ZXh0KG51bUdseXBo
cyk7Ci0gICAgICAgIGludCogY3VyU3BhY2UgPSBnbHlwaFNwYWNlLmRhdGEoKTsKLSAgICAgICAg
VUNoYXIqIGN1ckNoYXIgPSB0ZXh0LmRhdGEoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHNyY0No
YXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjb25z
dCBzcmNDaGFyRW5kID0gc3JjQ2hhciArIG51bUdseXBoczsKLSAgICAgICAgKmN1ckNoYXIrKyA9
ICpzcmNDaGFyKys7Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHN0YWJsZVJvdW5kKG9mZnNl
dCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZzZXQ7Ci0gICAgICAgIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
OwotICAgICAgICAvLyBGSVhNRTogRXh0VGV4dE91dCgpIGNhbiBmbGlwIG92ZXIgZWFjaCB3b3Jk
IGZvciBSVEwgbGFuZ3VhZ2VzLCBldmVuIHdoZW4gVEFfUlRMUkVBRElORyBpcyBvZmYuCi0gICAg
ICAgIC8vICh0aGlzIGNhbiBiZSBHREkgYnVnIG9yIGZvbnQgZHJpdmVyIGJ1Zz8pCi0gICAgICAg
IC8vIFdlIGFyZSBub3QgY2xlYXIgaG93IGl0IHByb2Nlc3NlcyBjaGFyYWN0ZXJzIGFuZCBoYW5k
bGVzIHNwZWNpZmllZCBzcGFjZXMuIE9uIHRoZSBvdGhlciBzaWRlLAotICAgICAgICAvLyBvdXIg
Z2x5cGggYnVmZmVyIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgZm9yIHJlbmRlcmlu
Zy4gU28sIHRoZSBzb2x1dGlvbiBpcyB0aGF0IHdlCi0gICAgICAgIC8vIGNhbGwgRXh0VGV4dE91
dCgpIGZvciBlYWNoIHNpbmdsZSBjaGFyYWN0ZXIgd2hlbiB0aGUgdGV4dCBjb250YWlucyBhbnkg
UlRMIGNoYXJhY3Rlci4KLSAgICAgICAgLy8gVGhpcyBzb2x1dGlvbiBpcyBub3QgcGVyZmVjdCBh
cyBpdCBpcyBzbG93ZXIgdGhhbiBjYWxsaW5nIEV4dFRleHRPdXQoKSBvbmUgdGltZSBmb3IgYWxs
IGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIERyYXdpbmcgY2hhcmFjdGVycyBvbmUgYnkgb25lIG1h
eSBiZSB0b28gc2xvdy4KLSAgICAgICAgYm9vbCBkcmF3T25lQnlPbmUgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKHNjYWxlWCA9PSAxLikgewotICAgICAgICAgICAgZm9yICg7IHNyY0NoYXIgPCBzcmND
aGFyRW5kOyArK3NyY0NoYXIpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gKCphZHZhbmNl
KyspLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNldEludCA9IHN0YWJsZVJvdW5k
KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ2hhclZpc2libGUoKnNyY0NoYXIpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHJhd09uZUJ5T25lICYmIHVfY2hhckRpcmVjdGlv
bigqc3JjQ2hhcikgPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZHJhd09uZUJ5T25lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgKmN1ckNoYXIrKyA9ICpz
cmNDaGFyOwotICAgICAgICAgICAgICAgICAgICAqY3VyU3BhY2UrKyA9IG9mZnNldEludCAtIGxh
c3RPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RPZmZzZXQgPSBvZmZzZXRJbnQ7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZm9yICg7IHNyY0NoYXIgPCBzcmNDaGFyRW5kOyArK3NyY0NoYXIpIHsKLSAgICAgICAg
ICAgICAgICBvZmZzZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCkgKiBzY2FsZVg7Ci0gICAgICAg
ICAgICAgICAgaW50IG9mZnNldEludCA9IHN0YWJsZVJvdW5kKG9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzQ2hhclZpc2libGUoKnNyY0NoYXIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghZHJhd09uZUJ5T25lICYmIHVfY2hhckRpcmVjdGlvbigqc3JjQ2hhcikgPT0gVV9SSUdI
VF9UT19MRUZUKQotICAgICAgICAgICAgICAgICAgICAgICAgZHJhd09uZUJ5T25lID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgKmN1ckNoYXIrKyA9ICpzcmNDaGFyOwotICAgICAgICAgICAg
ICAgICAgICAqY3VyU3BhY2UrKyA9IG9mZnNldEludCAtIGxhc3RPZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGxhc3RPZmZzZXQgPSBvZmZzZXRJbnQ7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG51bUdseXBocyA9IGN1ckNoYXIgLSB0ZXh0
LmRhdGEoKTsKLSAgICAgICAgaWYgKGhhc1NoYWRvdykgewotICAgICAgICAgICAgU2V0VGV4dENv
bG9yKG1fZGF0YS0+bV9kYywgc2hhZG93UkdCQ29sb3IpOwotICAgICAgICAgICAgaWYgKGRyYXdP
bmVCeU9uZSkgewotICAgICAgICAgICAgICAgIGludCB4U2hhZG93ID0gZmlyc3RPZmZzZXQgKyBz
dGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSAtIHRyUG9pbnQueCgpKTsKLSAgICAgICAgICAg
ICAgICBpbnQgeVNoYWRvdyA9IHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueSgpKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCB4U2hhZG93LCB5U2hhZG93LCAw
LCBOVUxMLCB0ZXh0LmRhdGEoKSArIGksIDEsIDApOwotICAgICAgICAgICAgICAgICAgICB4U2hh
ZG93ICs9IGdseXBoU3BhY2VbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIGZpcnN0T2Zmc2V0
ICsgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC54KCkgLSB0clBvaW50LngoKSksIHN0YWJsZVJv
dW5kKHRyU2hhZG93UG9pbnQueSgpKSwgMCwgTlVMTCwgdGV4dC5kYXRhKCksIG51bUdseXBocywg
Z2x5cGhTcGFjZS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIFNldFRleHRDb2xvcihtX2Rh
dGEtPm1fZGMsIGZvbnRDb2xvcik7Ci0gICAgICAgIGlmIChkcmF3T25lQnlPbmUpIHsKLSAgICAg
ICAgICAgIGludCB4ID0gZmlyc3RPZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEt
Pm1fZGMsIHgsIHksIDAsIE5VTEwsIHRleHQuZGF0YSgpICsgaSwgMSwgMCk7Ci0gICAgICAgICAg
ICAgICAgeCArPSBnbHlwaFNwYWNlW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCBmaXJzdE9mZnNldCwgeSwgMCwg
TlVMTCwgdGV4dC5kYXRhKCksIG51bUdseXBocywgZ2x5cGhTcGFjZS5kYXRhKCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFVDaGFyIGMgPSAqZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAg
ICAgICBpZiAoaGFzU2hhZG93KSB7Ci0gICAgICAgICAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5t
X2RjLCBzaGFkb3dSR0JDb2xvcik7Ci0gICAgICAgICAgICBFeHRUZXh0T3V0KG1fZGF0YS0+bV9k
Yywgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC54KCkpLCBzdGFibGVSb3VuZCh0clNoYWRvd1Bv
aW50LnkoKSksIDAsIE5VTEwsICZjLCAxLCAwKTsKLSAgICAgICAgfQotICAgICAgICBTZXRUZXh0
Q29sb3IobV9kYXRhLT5tX2RjLCBmb250Q29sb3IpOwotICAgICAgICBFeHRUZXh0T3V0KG1fZGF0
YS0+bV9kYywgc3RhYmxlUm91bmQodHJQb2ludC54KCkpLCB5LCAwLCBOVUxMLCAmYywgMSwgMCk7
Ci0gICAgfQotCi0gICAgU2V0VGV4dEFsaWduKG1fZGF0YS0+bV9kYywgb2xkVGV4dEFsaWduKTsK
LSAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBvbGRUZXh0Q29sb3IpOwotICAgIFNldEJr
TW9kZShtX2RhdGEtPm1fZGMsIG9sZEJrTW9kZSk7Ci0gICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+
bV9kYywgaE9sZEZvbnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZyYW1lQ29u
dHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBzdGF0ZSkK
LXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBpbnQgYm94V2lkdGhCZXN0ID0gODsKLSAgICBjb25zdCBpbnQgYm94SGVpZ2h0QmVzdCA9
IDg7Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICgh
bV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1f
ZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnRE
QyhtX2RhdGEsIHRyUmVjdCwgJnJlY3QsIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJhbnNw
YXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0
Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0V2luID0gdHJS
ZWN0OwotCi0gICAgaWYgKChyZWN0V2luLnJpZ2h0IC0gcmVjdFdpbi5sZWZ0KSA8IGJveFdpZHRo
QmVzdCkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBTaGFyZWRCaXRtYXA6
OmNyZWF0ZShJbnRTaXplKGJveFdpZHRoQmVzdCwgYm94SGVpZ2h0QmVzdCksIEJpdG1hcEluZm86
OkJpdENvdW50MTYsIHRydWUpOwotICAgICAgICBTaGFyZWRCaXRtYXA6OkRDSG9sZGVyIG1lbURD
KGJtcC5nZXQoKSk7Ci0gICAgICAgIGlmIChtZW1EQy5nZXQoKSkgewotICAgICAgICAgICAgUkVD
VCB0ZW1wUmVjdCA9IHswLCAwLCBib3hXaWR0aEJlc3QsIGJveEhlaWdodEJlc3R9OwotICAgICAg
ICAgICAgRHJhd0ZyYW1lQ29udHJvbChtZW1EQy5nZXQoKSwgJnRlbXBSZWN0LCB0eXBlLCBzdGF0
ZSk7Ci0KLSAgICAgICAgICAgIDo6U3RyZXRjaEJsdChkYywgcmVjdFdpbi5sZWZ0LCByZWN0V2lu
LnRvcCwgcmVjdFdpbi5yaWdodCAtIHJlY3RXaW4ubGVmdCwgcmVjdFdpbi5ib3R0b20gLSByZWN0
V2luLnRvcCwgbWVtREMuZ2V0KCksIDAsIDAsIGJveFdpZHRoQmVzdCwgYm94SGVpZ2h0QmVzdCwg
U1JDQ09QWSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBE
cmF3RnJhbWVDb250cm9sKGRjLCAmcmVjdFdpbiwgdHlwZSwgc3RhdGUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQ
cm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3Qp
OwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAm
cmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQot
ICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkp
OwotCi0gICAgUkVDVCByZWN0V2luID0gdHJSZWN0OwotICAgIERyYXdGb2N1c1JlY3QoZGMsICZy
ZWN0V2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50VGV4dEZpZWxkKGNvbnN0
IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHN0YXRlKQotewotICAgIGlmICghbV9kYXRhLT5tX29w
YWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVy
KG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50
TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmcmVjdCk7Ci0gICAgSERDIGRj
ID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0g
ICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0
V2luID0gdHJSZWN0OwotICAgIERyYXdFZGdlKGRjLCAmcmVjdFdpbiwgRURHRV9FVENIRUQsIEJG
X1JFQ1QgfCBCRl9BREpVU1QpOwotICAgIEZpbGxSZWN0KGRjLCAmcmVjdFdpbiwgcmVpbnRlcnBy
ZXRfY2FzdDxIQlJVU0g+KCgoc3RhdGUgJiBERkNTX0lOQUNUSVZFKSA/IENPTE9SX0JUTkZBQ0Ug
OiBDT0xPUl9XSU5ET1cpICsgMSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
dG1hcChTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdEluLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKCFtX2Rh
dGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRj
UHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UmVjdCBkc3RSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGRzdFJlY3RJbik7Ci0g
ICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBkc3RSZWN0LCAmZHN0
UmVjdEluLCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0g
ICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIGRzdFJlY3QubW92ZSh0cmFuc3BhcmVu
dERDLnRvU2hpZnQoKSk7Ci0KLSAgICBibXAtPmRyYXcoZGMsIGRzdFJlY3QsIHNyY1JlY3QsIGNv
bXBvc2l0ZU9wLCBibGVuZE1vZGUpOwotCi0gICAgaWYgKGJtcC0+aXMxNmJpdCgpKQotICAgICAg
ICB0cmFuc3BhcmVudERDLmZpbGxBbHBoYUNoYW5uZWwoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0SW4sIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKQotewotICAgIGlmICghbV9kYXRh
LT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1By
b3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFJlY3QgaW50RHN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZGVzdFJlY3RJbik7
Ci0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QoaW50RHN0UmVjdCk7Ci0gICAg
VHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZpbnREc3RS
ZWN0LCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAg
aWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMu
dG9TaGlmdCgpKTsKLSAgICBGbG9hdFJlY3QgbW92ZWREc3RSZWN0ID0gbV9kYXRhLT5tX3RyYW5z
Zm9ybS5pbnZlcnNlKCkubWFwUmVjdChGbG9hdFJlY3QodHJSZWN0KSk7Ci0gICAgRmxvYXRTaXpl
IG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLSAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1vdmVkLndpZHRoKCksIG1vdmVkLmhlaWdodCgpKTsKLQot
ICAgIGJtcC0+ZHJhd1BhdHRlcm4oZGMsIHRyYW5zZm9ybSwgdGlsZVJlY3RJbiwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0SW4sIG9yaWdTb3Vy
Y2VTaXplKTsKLQotICAgIGlmICghYm1wLT5oYXNBbHBoYSgpKQotICAgICAgICB0cmFuc3BhcmVu
dERDLmZpbGxBbHBoYUNoYW5uZWwoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
Y29uKEhJQ09OIGljb24sIGNvbnN0IEludFJlY3QmIGRzdFJlY3RJbiwgVUlOVCBmbGFncykKLXsK
LSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29w
ZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRzdFJlY3QgPSBtX2RhdGEtPm1hcFJlY3Qo
ZHN0UmVjdEluKTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEs
IGRzdFJlY3QsICZkc3RSZWN0SW4sIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJl
bnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgZHN0UmVjdC5t
b3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIERyYXdJY29uRXgoZGMsIGRzdFJl
Y3QueCgpLCBkc3RSZWN0LnkoKSwgaWNvbiwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdo
dCgpLCAwLCBOVUxMLCBmbGFncyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyRGF0YVdpbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlckRhdGFXaW5jZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQ2ZDM4Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyRGF0YVdpbmNlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiU2hhcmVkQml0bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50
U2l6ZTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZl
ckRhdGEoY29uc3QgSW50U2l6ZSYpOwotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IG1fYml0bWFw
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjMjNmOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiU2hhcmVkQml0bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQnVmZmVy
ZWRJbWFnZTogcHVibGljIEltYWdlIHsKLQotcHVibGljOgotICAgIEJ1ZmZlcmVkSW1hZ2UoY29u
c3QgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhKQotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkg
eyByZXR1cm4gIW1fZGF0YS0+bV9iaXRtYXAtPmhhc0FscGhhKCkgOyB9Ci0gICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fZGF0YS0+bV9iaXRtYXAtPndp
ZHRoKCksIG1fZGF0YS0+bV9iaXRtYXAtPmhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkge30KLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpOwotCi0gICAgY29uc3QgSW1hZ2VCdWZmZXJEYXRhKiBtX2RhdGE7Ci19Owot
Ci12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCi17Ci0gICAgSW50UmVjdCBp
bnREc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KTsKLSAgICBJbnRSZWN0IGludFNy
Y1JlY3Qoc3JjUmVjdCk7Ci0gICAgbV9kYXRhLT5tX2JpdG1hcC0+ZHJhdyhjdHh0LCBpbnREc3RS
ZWN0LCBpbnRTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUp
OwotfQotCi12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgQmxlbmRNb2RlKQotewotICAgIG1fZGF0YS0+bV9iaXRtYXAtPmRyYXdQYXR0
ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgpKTsKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFn
ZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fYml0bWFwKFNoYXJlZEJp
dG1hcDo6Y3JlYXRlKHNpemUsIEJpdG1hcEluZm86OkJpdENvdW50MzIsIGZhbHNlKSkKLXsKLSAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWh0bWw1LTIwMDkwMjEyL3RoZS1jYW52
YXMtZWxlbWVudC5odG1sI2NhbnZhc3BpeGVsYXJyYXkKLSAgICAvLyAiV2hlbiB0aGUgY2FudmFz
IGlzIGluaXRpYWxpemVkIGl0IG11c3QgYmUgc2V0IHRvIGZ1bGx5IHRyYW5zcGFyZW50IGJsYWNr
LiIKLSAgICBtX2JpdG1hcC0+cmVzZXRQaXhlbHModHJ1ZSk7Ci0gICAgbV9iaXRtYXAtPnNldEhh
c0FscGhhKHRydWUpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoc2l6ZSkKLSAgICAsIG1f
c2l6ZShzaXplKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQotewotICAgIC8vIEZJWE1FOiBS
ZXNwZWN0IHJlc291dGlvblNjYWxlIHRvIHN1cHBvcnQgaGlnaC1EUEkgY2FudmFzLgotICAgIFVO
VVNFRF9QQVJBTShyZXNvbHV0aW9uU2NhbGUpOwotICAgIC8vIEZJWE1FOiBjb2xvclNwYWNlIGlz
IG5vdCB1c2VkCi0gICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwotCi0gICAgbV9jb250ZXh0
ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dCgwKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRC
aXRtYXAobV9kYXRhLm1fYml0bWFwKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNvcHlC
ZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1
ZmZlcmVkSW1hZ2UoJm1fZGF0YSkpOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVy
OjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIENvcHlCYWNraW5nU3RvcmU7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQotewotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsK
LSAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Ci19Ci0KLXRlbXBs
YXRlIDxib29sIHByZW11bHRpcGxpZWQ+Ci1zdGF0aWMgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFNoYXJlZEJpdG1h
cCogYml0bWFwKQotewotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW1hZ2VEYXRhID0g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVjdC53aWR0aCgpICogcmVj
dC5oZWlnaHQoKSAqIDQpOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJpdG1hcC0+Ynl0ZXMoKSk7Ci0gICAgaWYgKCFz
cmMpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwotCi0gICAgSW50UmVjdCBz
b3VyY2VSZWN0KDAsIDAsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSk7Ci0gICAg
c291cmNlUmVjdC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLQotICAgIHVuc2lnbmVkIGNo
YXIqIGRzdCA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIGltYWdlRGF0YS0+emVyb0ZpbGwoKTsK
LSAgICBzcmMgKz0gKHNvdXJjZVJlY3QueSgpICogYml0bWFwLT53aWR0aCgpICsgc291cmNlUmVj
dC54KCkpICogNDsKLSAgICBkc3QgKz0gKChzb3VyY2VSZWN0LnkoKSAtIHJlY3QueSgpKSAqIHJl
Y3Qud2lkdGgoKSArIHNvdXJjZVJlY3QueCgpIC0gcmVjdC54KCkpICogNDsKLSAgICBpbnQgYnl0
ZXNUb0NvcHkgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzcmNTa2lwID0gKGJp
dG1hcC0+d2lkdGgoKSAtIHNvdXJjZVJlY3Qud2lkdGgoKSkgKiA0OwotICAgIGludCBkc3RTa2lw
ID0gKHJlY3Qud2lkdGgoKSAtIHNvdXJjZVJlY3Qud2lkdGgoKSkgKiA0OwotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRzdEVuZCA9IGRzdCArIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiByZWN0Lndp
ZHRoKCkgKiA0OwotICAgIHdoaWxlIChkc3QgPCBkc3RFbmQpIHsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsgYnl0ZXNUb0NvcHk7Ci0gICAgICAgIHdoaWxl
IChkc3QgPCBkc3RSb3dFbmQpIHsKLSAgICAgICAgICAgIC8vIENvbnZlcnQgQVJHQiBsaXR0bGUg
ZW5kaWFuIHRvIFJHQkEgYmlnIGVuZGlhbgotICAgICAgICAgICAgaW50IGJsdWUgPSAqc3JjKys7
Ci0gICAgICAgICAgICBpbnQgZ3JlZW4gPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgcmVkID0g
KnNyYysrOwotICAgICAgICAgICAgaW50IGFscGhhID0gKnNyYysrOwotICAgICAgICAgICAgaWYg
KHByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1KTsKLSAgICAgICAgICAgICAg
ICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigoZ3JlZW4gKiBhbHBoYSArIDI1
NCkgLyAyNTUpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1KTsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KHJlZCk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oZ3JlZW4pOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KGJsdWUpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGFscGhhKTsKLSAgICAgICAgICAgICAgICArK3NyYzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBzcmMgKz0gc3JjU2tpcDsKLSAgICAgICAgZHN0ICs9IGRzdFNr
aXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhPGZhbHNlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8dHJ1ZT4ocmVjdCwgbV9kYXRhLm1f
Yml0bWFwLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRp
cGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgU2hhcmVkQml0bWFwKiBiaXRtYXAg
PSBtX2RhdGEubV9iaXRtYXAuZ2V0KCk7Ci0gICAgdW5zaWduZWQgY2hhciogZHN0ID0gKHVuc2ln
bmVkIGNoYXIqKWJpdG1hcC0+Ynl0ZXMoKTsKLSAgICBpZiAoIWRzdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UmVjdCBkZXN0UmVjdChkZXN0UG9pbnQsIHNvdXJjZVJlY3Quc2l6ZSgpKTsK
LSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBiaXRtYXAtPndpZHRoKCksIGJp
dG1hcC0+aGVpZ2h0KCkpKTsKLQotICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYyA9IHNvdXJjZS0+ZGF0YSgp
OwotICAgIGRzdCArPSAoZGVzdFJlY3QueSgpICogYml0bWFwLT53aWR0aCgpICsgZGVzdFJlY3Qu
eCgpKSAqIDQ7Ci0gICAgc3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZVNpemUud2lkdGgo
KSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7Ci0gICAgaW50IGJ5dGVzVG9Db3B5ID0gZGVzdFJlY3Qu
d2lkdGgoKSAqIDQ7Ci0gICAgaW50IGRzdFNraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gZGVzdFJl
Y3Qud2lkdGgoKSkgKiA0OwotICAgIGludCBzcmNTa2lwID0gKHNvdXJjZVNpemUud2lkdGgoKSAt
IGRlc3RSZWN0LndpZHRoKCkpICogNDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RFbmQg
PSBkc3QgKyBkZXN0UmVjdC5oZWlnaHQoKSAqIGJpdG1hcC0+d2lkdGgoKSAqIDQ7Ci0gICAgd2hp
bGUgKGRzdCA8IGRzdEVuZCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RSb3dF
bmQgPSBkc3QgKyBieXRlc1RvQ29weTsKLSAgICAgICAgd2hpbGUgKGRzdCA8IGRzdFJvd0VuZCkg
ewotICAgICAgICAgICAgLy8gQ29udmVydCBSR0JBIGJpZyBlbmRpYW4gdG8gQVJHQiBsaXR0bGUg
ZW5kaWFuCi0gICAgICAgICAgICBpbnQgcmVkID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGdy
ZWVuID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGJsdWUgPSAqc3JjKys7Ci0gICAgICAgICAg
ICBpbnQgYWxwaGEgPSAqc3JjKys7Ci0gICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBQcmVt
dWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oYmx1ZSAqIDI1NSAvIGFscGhhKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbiAqIDI1NSAvIGFscGhhKTsKLSAgICAgICAg
ICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihyZWQgKiAyNTUgLyBh
bHBoYSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oYWxwaGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqZHN0Kysg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihibHVlKTsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbik7Ci0gICAgICAgICAgICAgICAg
KmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocmVkKTsKLSAgICAgICAgICAgICAg
ICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3JjICs9IHNyY1NraXA7Ci0gICAgICAgIGRzdCArPSBk
c3RTa2lwOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKLXsKLSAgICBVTlVTRURf
UEFSQU0obG9va1VwVGFibGUpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJs
ZSosIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RhdGEubV9iaXRtYXAt
PmJ5dGVzKCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdp
bkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2lu
Q0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzBhOTYzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiV2luY2VHcmFwaGljc0V4dHJhcy5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlRnJh
bWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBTaGFyZWRCaXRtYXA6
OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgbV9zaXplLCBoYXNBbHBoYSgpKTsKLX0KLQotYm9vbCBG
cmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhRGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRh
RGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ZyYW1l
KSB7Ci0gICAgICAgIG1fZnJhbWUgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCi17Ci0gICAgaWYgKCFibXApCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJJVE1BUCBibXBJbmZvOwotICAgIEdldE9iamVj
dChibXAsIHNpemVvZihCSVRNQVApLCAmYm1wSW5mbyk7Ci0KLSAgICBBU1NFUlQoYm1wSW5mby5i
bUJpdHNQaXhlbCA9PSAzMik7Ci0gICAgaW50IGJ1ZmZlclNpemUgPSBibXBJbmZvLmJtV2lkdGhC
eXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0KLSAgICBhdXRvIGhkYyA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLSAgICBIR0RJT0JKIGhPbGRCbXAgPSBTZWxlY3RP
YmplY3QoaGRjLmdldCgpLCBibXApOwotCi0gICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Z2MoaGRjLmdldCgpKTsKLQotICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdl
OjpzaXplKCk7Ci0gICAgICAgIGlmIChzaXplKQotICAgICAgICAgICAgZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKCZnYywgRmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5m
by5ibUhlaWdodCksICpzaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLCAwLCBibXBJ
bmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXpl
LndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBv
c2l0ZUNvcHksIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkp
OwotICAgIH0KLQotICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhPbGRCbXApOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291
cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAgIGludCBmcmFtZXMgPSBmcmFtZUNvdW50
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewotICAgICAgICBSZWZQ
dHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgoaSk7Ci0gICAgICAgIGlmICghYm1w
IHx8IGJtcC0+aGVpZ2h0KCkgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyY1NpemUuaGVpZ2h0
KCkpIHx8IGJtcC0+d2lkdGgoKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3JjU2l6ZS53aWR0
aCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNpemVfdCBjdXJyZW50RnJh
bWUgPSBtX2N1cnJlbnRGcmFtZTsKLSAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAg
ICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNTaXplLndpZHRoKCksIHNy
Y1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGVO
b3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKLSAgICAgICAgbV9jdXJyZW50
RnJhbWUgPSBjdXJyZW50RnJhbWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBO
byBpbWFnZSBvZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJhd2lu
ZyB0aGUgY3VycmVudCBmcmFtZQotICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6
OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3Np
dGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7Ci19
Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdEluLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIW1f
c291cmNlLmluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtYXlGaWxs
V2l0aFNvbGlkQ29sb3IoKSkKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJl
Y3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEludFJlY3QgaW50U3JjUmVjdChzcmNSZWN0SW4pOwotICAgICAgICBSZWZQ
dHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAg
ICAgICBpZiAoYm1wKSB7Ci0gICAgICAgICAgICBpZiAoYm1wLT53aWR0aCgpICE9IG1fc291cmNl
LnNpemUoKS53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNjYWxlRmFjdG9yID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihibXAtPndpZHRoKCkpIC8gbV9zb3VyY2Uuc2l6ZSgpLndpZHRo
KCk7Ci0KLSAgICAgICAgICAgICAgICBpbnRTcmNSZWN0LnNldFgoc3RhYmxlUm91bmQoc3JjUmVj
dEluLngoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgaW50U3JjUmVjdC5zZXRX
aWR0aChzdGFibGVSb3VuZChzcmNSZWN0SW4ud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAg
ICAgICAgICAgICAgaW50U3JjUmVjdC5zZXRZKHN0YWJsZVJvdW5kKHNyY1JlY3RJbi55KCkgKiBz
Y2FsZUZhY3RvcikpOwotICAgICAgICAgICAgICAgIGludFNyY1JlY3Quc2V0SGVpZ2h0KHN0YWJs
ZVJvdW5kKHNyY1JlY3RJbi5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBibXAtPmRyYXcoY3R4dCwgZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSwg
aW50U3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Ci17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLSAgICBpZiAoIWJtcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm1wLT5kcmF3
UGF0dGVybihjdHh0LCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIG1fc291cmNlLnNpemUoKSk7Ci19Ci0KLXZvaWQgQml0
bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29uc3QKLXsKLSAg
ICBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsID0gMDsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBpZiAobV9jaGVja2VkRm9yU29saWRDb2xvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKSB7Ci0gICAgICAg
IG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3Ig
PSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZEJpdG1h
cD4gYm1wID0gZnJhbWVBdEluZGV4KDApOwotICAgIGlmICghYm1wIHx8ICFibXAtPnZhbGlkSGVp
Z2h0KCkpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChibXAtPndpZHRoKCkgIT0gMSB8fCBibXAtPnZhbGlkSGVpZ2h0
KCkgIT0gMSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBtX2No
ZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKLQotICAgIGlmIChibXAtPmlzMTZiaXQoKSkgewotICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBjID0gKCh1bnNpZ25lZCBzaG9ydCAqKWJtcC0+Ynl0ZXMoKSlb
MF07Ci0gICAgICAgIGludCByID0gKGMgPj4gNykgJiAweEY4OwotICAgICAgICBpbnQgZyA9IChj
ID4+IDIpICYgMHhGODsKLSAgICAgICAgaW50IGIgPSAoYyA8PCAzKSAmIDB4Rjg7Ci0gICAgICAg
IGlmIChibXAtPnVzZXNUcmFuc3BhcmVudENvbG9yKCkgJiYgYm1wLT50cmFuc3BhcmVudENvbG9y
KCkgPT0gUkdCKHIsIGcsIGIpKQotICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3Iociwg
ZywgYiwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9y
KHIsIGcsIGIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGMgPSAoKHVuc2lnbmVk
ICopYm1wLT5ieXRlcygpKVswXTsKLSAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoYyk7Ci0g
ICAgfQotCi0gICAgaWYgKGJtcC0+dmFsaWRIZWlnaHQoKSA9PSBibXAtPmhlaWdodCgpKQotICAg
ICAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJpdmF0ZVdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGI4YzI1MjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVXaW5D
RV9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVdpbkNFX2gKLQotI2lmIEVOQUJMRShWSURF
TykKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBjbGFz
cyBJbnRTaXplOwotICAgIGNsYXNzIEludFJlY3Q7Ci0KLSAgICBjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdp
c3RyYXIpOwotCi0gICAgICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsKLQotICAgICAgICBJbnRT
aXplIG5hdHVyYWxTaXplKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgICAgICB2b2lkIGNh
bmNlbExvYWQoKTsKLQotICAgICAgICB2b2lkIHBsYXkoKTsKLSAgICAgICAgdm9pZCBwYXVzZSgp
OwotCi0gICAgICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2Vla2luZygp
IGNvbnN0OwotCi0gICAgICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0
IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKTsKLQot
ICAgICAgICB2b2lkIHNldFJhdGUoZmxvYXQpOwotICAgICAgICB2b2lkIHNldFZvbHVtZShmbG9h
dCk7Ci0KLSAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX25ldHdvcmtTdGF0ZTsgfQotICAgICAgICBNZWRpYVBsYXllcjo6UmVh
ZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0KLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25z
dDsKLSAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7Ci0gICAgICAgIC8vIEZJ
WE1FOiBieXRlc0xvYWRlZCgpIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGRpZExvYWRpbmdQcm9n
cmVzcygpIChieSBzb21lYm9keSB3aG8gY2FuIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
aXMgY2xhc3MpLgotICAgICAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0OwotICAgICAg
ICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRWaXNpYmxl
KGJvb2wpOwotICAgICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgICAg
IHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwotICAgICAgICB2b2lkIGRpZEVuZCgpOwotCi0gICAg
ICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7Ci0KLSAg
ICAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKLSAgICAgICAgdm9pZCBkb1NlZWsoKTsKLSAgICAg
ICAgdm9pZCBjYW5jZWxTZWVrKCk7Ci0gICAgICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8
TWVkaWFQbGF5ZXJQcml2YXRlPiopOwotICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsKLQotICAgICAgICAvLyBl
bmdpbmUgc3VwcG9ydAotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwotICAgICAgICBzdGF0aWMgdm9pZCBn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAgICAgICAgc3RhdGlj
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5l
U3VwcG9ydFBhcmFtZXRlcnMmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsK
LQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuICJXaW5DRSI7IH0KLQotICAgICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgICAg
IGZsb2F0IG1fc2Vla1RvOwotICAgICAgICBmbG9hdCBtX2VuZFRpbWU7Ci0gICAgICAgIFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7Ci0gICAgICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7Ci0gICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICAgICAgdW5zaWduZWQgbV9lbmFibGVkVHJhY2tDb3VudDsK
LSAgICAgICAgdW5zaWduZWQgbV90b3RhbFRyYWNrQ291bnQ7Ci0gICAgICAgIGJvb2wgbV9oYXNV
bnN1cHBvcnRlZFRyYWNrczsKLSAgICAgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5aW5nOwotICAgICAg
ICBib29sIG1faXNTdHJlYW1pbmc7Ci0gICAgfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQotCi0jZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclBy
b3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkMTA0MC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclBy
b3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcm94eS5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAi
UmVuZGVyUGFydE9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUg
IldpZGdldC5oIgotI2luY2x1ZGUgImNfY2xhc3MuaCIKLSNpbmNsdWRlICJjX2luc3RhbmNlLmgi
Ci0jaW5jbHVkZSAiY19ydW50aW1lLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNp
bmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgQmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1X
ZWJNZWRpYVBsYXllclByb3h5OjpXZWJNZWRpYVBsYXllclByb3h5KE1lZGlhUGxheWVyKiBwbGF5
ZXIpCi0gICAgOiBtX21lZGlhUGxheWVyKHBsYXllcikKLSAgICAsIG1faW5pdChmYWxzZSkKLSAg
ICAsIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4oZmFsc2UpCi17Ci0gICAgaWYgKCFtX2luaXQp
Ci0gICAgICAgIGluaXRFbmdpbmUoKTsKLX0KLQotV2ViTWVkaWFQbGF5ZXJQcm94eTo6fldlYk1l
ZGlhUGxheWVyUHJveHkoKQotewotICAgIG1faW5zdGFuY2UucmVsZWFzZSgpOwotfQotCi1TY3Jp
cHRJbnN0YW5jZSBXZWJNZWRpYVBsYXllclByb3h5OjpwbHVnaW5JbnN0YW5jZSgpCi17Ci0gICAg
aWYgKCFtX2luc3RhbmNlKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogciA9IGVsZW1lbnQoKS0+
cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyIHx8ICFyLT5pc1dpZGdldCgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudCgpLT5kb2N1bWVu
dCgpLmZyYW1lKCk7Ci0KLSAgICAgICAgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBzdGF0
aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihlbGVtZW50KCktPnJlbmRlcmVyKCkpOwotICAgICAgICBp
ZiAocmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpCi0gICAgICAgICAgICBt
X2luc3RhbmNlID0gZnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2luc3RhbmNl
OwotfQotCi12b2lkIFdlYk1lZGlhUGxheWVyUHJveHk6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
Ci17Ci0gICAgaWYgKCFtX2luaXQpCi0gICAgICAgIGluaXRFbmdpbmUoKTsKLSAgICBpZiAobV9p
bml0KQotICAgICAgICBpbnZva2VNZXRob2QoInBsYXkiKTsKLX0KLQotdm9pZCBXZWJNZWRpYVBs
YXllclByb3h5Ojppbml0RW5naW5lKCkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50
ID0gdG9IVE1MTWVkaWFFbGVtZW50KG1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkp
OwotICAgIFN0cmluZyB1cmwgPSBlbGVtZW50LT5pbml0aWFsVVJMKCk7Ci0KLSAgICBpZiAodXJs
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgU3RyaW5nIHNlcnZpY2VUeXBlOwot
Ci0gICAgLy8gYWRkIGFsbCBhdHRyaWJ1dGVzIHNldCBvbiB0aGUgZW1iZWQgb2JqZWN0Ci0gICAg
aWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBB
dHRyaWJ1dGUqIGl0ID0gZWxlbWVudC0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgIHBh
cmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCkuc3RyaW5nKCkpOwotICAgICAg
ICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW1wbGF5ZXIyIjsKLSAg
ICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPnJlcXVlc3RPYmplY3Qoc3RhdGlj
X2Nhc3Q8UmVuZGVyUGFydE9iamVjdCo+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLCB1cmwsIG51bGxB
dG9tLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwotICAgIG1faW5pdCA9
IHRydWU7Ci0KLX0KLQotSFRNTE1lZGlhRWxlbWVudCogV2ViTWVkaWFQbGF5ZXJQcm94eTo6ZWxl
bWVudCgpCi17Ci0gICAgcmV0dXJuIHRvSFRNTE1lZGlhRWxlbWVudChtX21lZGlhUGxheWVyLT5t
ZWRpYVBsYXllckNsaWVudCgpKTsKLQotfQotCi12b2lkIFdlYk1lZGlhUGxheWVyUHJveHk6Omlu
dm9rZU1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUpCi17Ci0gICAgRnJhbWUqIGZyYW1l
ID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgUm9vdE9iamVjdCogcm9vdCA9
IGZyYW1lLT5zY3JpcHQoKS5iaW5kaW5nUm9vdE9iamVjdCgpOwotICAgIGlmICghcm9vdCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHJvb3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSW5zdGFuY2UqIGluc3RhbmNlID0gcGx1Z2luSW5zdGFuY2Uo
KS5nZXQoKTsKLSAgICBpZiAoIWluc3RhbmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnN0
YW5jZS0+YmVnaW4oKTsKLSAgICBDbGFzcyAqYUNsYXNzID0gaW5zdGFuY2UtPmdldENsYXNzKCk7
Ci0gICAgSWRlbnRpZmllciBpZGVuKGV4ZWMsIG1ldGhvZE5hbWUpOwotICAgIE1ldGhvZExpc3Qg
bWV0aG9kTGlzdCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKGlkZW4sIGluc3RhbmNlKTsKLSAgICBB
cmdMaXN0IGFyZ3M7Ci0gICAgaW5zdGFuY2UtPmludm9rZU1ldGhvZChleGVjLCBtZXRob2RMaXN0
ICwgYXJncyk7Ci0gICAgaW5zdGFuY2UtPmVuZCgpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQ
cm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5
ZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDk1YTI2Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVy
UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLQotI2lmbmRlZiBNZWRpYVBsYXllclByb3h5X2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcm94
eV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNp
emU7Ci0gICAgY2xhc3MgTWVkaWFQbGF5ZXI7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKLSAgICBj
bGFzcyBIVE1MTWVkaWFFbGVtZW50OwotCi0gICAgZW51bSBNZWRpYVBsYXllclByb3h5Tm90aWZp
Y2F0aW9uVHlwZSB7Ci0gICAgICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheVBhdXNlQnV0
dG9uUHJlc3NlZCwKLSAgICAgICAgSWRsZSwKLSAgICAgICAgTG9hZGluZywKLSAgICAgICAgTG9h
ZGVkLAotICAgICAgICBGb3JtYXRFcnJvciwKLSAgICAgICAgTmV0d29ya0Vycm9yLAotICAgICAg
ICBEZWNvZGVFcnJvcgotICAgIH07Ci0KLSAgICBjbGFzcyBXZWJNZWRpYVBsYXllclByb3h5IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFdlYk1lZGlhUGxheWVyUHJveHkoTWVkaWFQbGF5ZXIqIHBs
YXllcik7Ci0gICAgICAgIH5XZWJNZWRpYVBsYXllclByb3h5KCk7Ci0KLSAgICAgICAgTWVkaWFQ
bGF5ZXIqIG1lZGlhUGxheWVyKCkge3JldHVybiBtX21lZGlhUGxheWVyO30KLSAgICAgICAgdm9p
ZCBpbml0RW5naW5lKCk7Ci0gICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCk7Ci0g
ICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQoKTsKLSAgICAgICAgdm9pZCBpbnZva2VN
ZXRob2QoY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lKTsKLSAgICAgICAgUmVmUHRyPEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlPiBwbHVnaW5JbnN0YW5jZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7Ci0gICAgICAgIGJvb2wgbV9pbml0OwotICAg
ICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgICAgIGJvb2wgbV9o
YXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKLSAgICAgICAgU2NyaXB0SW5zdGFuY2UgbV9pbnN0YW5j
ZTsKLSAgICB9OwotCi19Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNlOWU3Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBhdGguaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1QYXRoV2luQ0UuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGF0aDo6UGF0aCgp
Ci0gICAgOiBtX3BhdGgobmV3IFBsYXRmb3JtUGF0aCgpKQotewotfQotCi1QYXRoOjpQYXRoKGNv
bnN0IFBhdGgmIG90aGVyKQotICAgIDogbV9wYXRoKG5ldyBQbGF0Zm9ybVBhdGgoKm90aGVyLm1f
cGF0aCkpCi17Ci19Ci0KLVBhdGg6On5QYXRoKCkKLXsKLSAgICBkZWxldGUgbV9wYXRoOwotfQot
Ci1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCi17Ci0gICAgaWYgKCZv
dGhlciAhPSB0aGlzKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3BhdGg7Ci0gICAgICAgIG1fcGF0aCA9
IG5ldyBQbGF0Zm9ybVBhdGgoKm90aGVyLm1fcGF0aCk7Ci0gICAgfQotICAgIHJldHVybiAqdGhp
czsKLX0KLQotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2lu
ZFJ1bGUgcnVsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwg
cnVsZSk7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
LXsKLSAgICBtX3BhdGgtPnRyYW5zbGF0ZShzaXplKTsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OmJv
dW5kaW5nUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7
Ci19Ci0KLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAg
IG1fcGF0aC0+bW92ZVRvKHBvaW50KTsKLX0KLQotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgbV9wYXRoLT5hZGRMaW5lVG8ocG9pbnQpOwotfQot
Ci12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBG
bG9hdFBvaW50JiBwKQotewotICAgIG1fcGF0aC0+YWRkUXVhZEN1cnZlVG8oY3AsIHApOwotfQot
Ci12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25z
dCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgbV9wYXRoLT5h
ZGRCZXppZXJDdXJ2ZVRvKGNwMSwgY3AyLCBwKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykK
LXsKLSAgICBtX3BhdGgtPmFkZEFyY1RvKHAxLCBwMiwgcmFkaXVzKTsKLX0KLQotdm9pZCBQYXRo
OjpjbG9zZVN1YnBhdGgoKQotewotICAgIG1fcGF0aC0+Y2xvc2VTdWJwYXRoKCk7Ci19Ci0KLXZv
aWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwg
ZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgbV9wYXRoLT5hZGRFbGxpcHNl
KHAsIHIsIHIsIHNhciwgZWFyLCBhbnRpY2xvY2t3aXNlKTsKLX0KLQotdm9pZCBQYXRoOjphZGRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBtX3BhdGgtPmFkZFJlY3Qocik7Ci19Ci0K
LXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgbV9wYXRo
LT5hZGRFbGxpcHNlKHIpOwotfQotCi12b2lkIFBhdGg6OmFkZFBhdGgoY29uc3QgUGF0aCYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgbV9wYXRoLT5jbGVhcigpOwotfQotCi1ib29sIFBhdGg6
OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKLX0KLQot
dm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9u
KSBjb25zdAotewotICAgIG1fcGF0aC0+YXBwbHkoaW5mbywgZnVuY3Rpb24pOwotfQotCi12b2lk
IFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi17Ci0gICAgbV9wYXRo
LT50cmFuc2Zvcm0odCk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
U3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLQotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJv
a2VTdHlsZUFwcGxpZXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQYXRoOjpoYXNDdXJyZW50
UG9pbnQoKSBjb25zdAotewotICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgY29ycmVjdC4gQXQg
dGhlIG1lYW50aW1lLCB3ZSBkbyB3aGF0IG90aGVyIHBvcnRzCi0gICAgLy8gZG8uCi0gICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI2NiwKLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxODcsIGFuZCAKLSAg
ICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80NTg3MwotICAgIHJldHVybiAh
aXNFbXB0eSgpOwotfQotCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcGF0aC0+bGFzdFBvaW50KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L1BsYXRmb3JtUGF0aFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjU3OWQ5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NzIgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdp
bkNFLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0j
aW5jbHVkZSAiV2luQ0VHcmFwaGljc0V4dHJhcy5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEltcGxlbWVudGVkIGluIEdyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAotdm9pZCBnZXRFbGxpcHNl
UG9pbnRCeUFuZ2xlKGRvdWJsZSBhbmdsZSwgZG91YmxlIGEsIGRvdWJsZSBiLCBmbG9hdCYgeCwg
ZmxvYXQmIHkpOwotCi1zdGF0aWMgdm9pZCBxdWFkQ3VydmUoaW50IHNlZ21lbnRzLCBWZWN0b3I8
UGF0aFBvaW50PiYgcHRzLCBjb25zdCBQYXRoUG9pbnQqIGNvbnRyb2wpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgc3RlcCA9IDEuMCAvIHNlZ21lbnRzOwotICAgIHJlZ2lzdGVyIGZsb2F0IHRBID0gMC4w
OwotICAgIHJlZ2lzdGVyIGZsb2F0IHRCID0gMS4wOwotCi0gICAgZmxvYXQgYzF4ID0gY29udHJv
bFswXS54KCk7Ci0gICAgZmxvYXQgYzF5ID0gY29udHJvbFswXS55KCk7Ci0gICAgZmxvYXQgYzJ4
ID0gY29udHJvbFsxXS54KCk7Ci0gICAgZmxvYXQgYzJ5ID0gY29udHJvbFsxXS55KCk7Ci0gICAg
ZmxvYXQgYzN4ID0gY29udHJvbFsyXS54KCk7Ci0gICAgZmxvYXQgYzN5ID0gY29udHJvbFsyXS55
KCk7Ci0KLSAgICBjb25zdCBpbnQgb2Zmc2V0ID0gcHRzLnNpemUoKTsKLSAgICBwdHMucmVzaXpl
KG9mZnNldCArIHNlZ21lbnRzKTsKLSAgICBQYXRoUG9pbnQgcHA7Ci0gICAgcHAubV94ID0gYzF4
OwotICAgIHBwLm1feSA9IGMxeTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VnbWVudHM7
ICsraSkgewotICAgICAgICB0QSArPSBzdGVwOwotICAgICAgICB0QiAtPSBzdGVwOwotCi0gICAg
ICAgIGNvbnN0IGZsb2F0IGEgPSB0QiAqIHRCOwotICAgICAgICBjb25zdCBmbG9hdCBiID0gMi4w
ICogdEEgKiB0QjsKLSAgICAgICAgY29uc3QgZmxvYXQgYyA9IHRBICogdEE7Ci0KLSAgICAgICAg
cHAubV94ID0gYzF4ICogYSArIGMyeCAqIGIgKyBjM3ggKiBjOwotICAgICAgICBwcC5tX3kgPSBj
MXkgKiBhICsgYzJ5ICogYiArIGMzeSAqIGM7Ci0KLSAgICAgICAgcHRzW29mZnNldCArIGkgLSAx
XSA9IHBwOwotICAgIH0KLQotICAgIHBwLm1feCA9IGMzeDsKLSAgICBwcC5tX3kgPSBjM3k7Ci0g
ICAgcHRzW29mZnNldCArIHNlZ21lbnRzIC0gMV0gPSBwcDsKLX0KLQotc3RhdGljIGlubGluZSB2
b2lkIGJlemllcihpbnQgc2VnbWVudHMsIFZlY3RvcjxQYXRoUG9pbnQ+JiBwdHMsIGNvbnN0IFBh
dGhQb2ludCogY29udHJvbCkKLXsKLSAgICBjb25zdCBmbG9hdCBzdGVwID0gMS4wIC8gc2VnbWVu
dHM7Ci0gICAgcmVnaXN0ZXIgZmxvYXQgdEEgPSAwLjA7Ci0gICAgcmVnaXN0ZXIgZmxvYXQgdEIg
PSAxLjA7Ci0KLSAgICBmbG9hdCBjMXggPSBjb250cm9sWzBdLngoKTsKLSAgICBmbG9hdCBjMXkg
PSBjb250cm9sWzBdLnkoKTsKLSAgICBmbG9hdCBjMnggPSBjb250cm9sWzFdLngoKTsKLSAgICBm
bG9hdCBjMnkgPSBjb250cm9sWzFdLnkoKTsKLSAgICBmbG9hdCBjM3ggPSBjb250cm9sWzJdLngo
KTsKLSAgICBmbG9hdCBjM3kgPSBjb250cm9sWzJdLnkoKTsKLSAgICBmbG9hdCBjNHggPSBjb250
cm9sWzNdLngoKTsKLSAgICBmbG9hdCBjNHkgPSBjb250cm9sWzNdLnkoKTsKLQotICAgIGNvbnN0
IGludCBvZmZzZXQgPSBwdHMuc2l6ZSgpOwotICAgIHB0cy5yZXNpemUob2Zmc2V0ICsgc2VnbWVu
dHMpOwotICAgIFBhdGhQb2ludCBwcDsKLSAgICBwcC5tX3ggPSBjMXg7Ci0gICAgcHAubV95ID0g
YzF5OwotCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZWdtZW50czsgKytpKSB7Ci0gICAgICAg
IHRBICs9IHN0ZXA7Ci0gICAgICAgIHRCIC09IHN0ZXA7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHRB
c3EgPSB0QSAqIHRBOwotICAgICAgICBjb25zdCBmbG9hdCB0QnNxID0gdEIgKiB0QjsKLQotICAg
ICAgICBjb25zdCBmbG9hdCBhID0gdEJzcSAqIHRCOwotICAgICAgICBjb25zdCBmbG9hdCBiID0g
My4wICogdEEgKiB0QnNxOwotICAgICAgICBjb25zdCBmbG9hdCBjID0gMy4wICogdEIgKiB0QXNx
OwotICAgICAgICBjb25zdCBmbG9hdCBkID0gdEFzcSAqIHRBOwotCi0gICAgICAgIHBwLm1feCA9
IGMxeCAqIGEgKyBjMnggKiBiICsgYzN4ICogYyArIGM0eCAqIGQ7Ci0gICAgICAgIHBwLm1feSA9
IGMxeSAqIGEgKyBjMnkgKiBiICsgYzN5ICogYyArIGM0eSAqIGQ7Ci0KLSAgICAgICAgcHRzW29m
ZnNldCArIGkgLSAxXSA9IHBwOwotICAgIH0KLQotICAgIHBwLm1feCA9IGM0eDsKLSAgICBwcC5t
X3kgPSBjNHk7Ci0gICAgcHRzW29mZnNldCArIHNlZ21lbnRzIC0gMV0gPSBwcDsKLX0KLQotc3Rh
dGljIGJvb2wgY29udGFpbnNQb2ludChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9p
bnQmIHApCi17Ci0gICAgcmV0dXJuIHAueCgpID49IHIueCgpICYmIHAueSgpID49IHIueSgpICYm
IHAueCgpIDwgci5tYXhYKCkgJiYgcC55KCkgPCByLm1heFkoKTsKLX0KLQotc3RhdGljIHZvaWQg
bm9ybWFsaXplQW5nbGUoZmxvYXQmIGFuZ2xlKQotewotICAgIGFuZ2xlID0gZm1vZChhbmdsZSwg
MiAqIHBpRmxvYXQpOwotICAgIGlmIChhbmdsZSA8IDApCi0gICAgICAgIGFuZ2xlICs9IDIgKiBw
aUZsb2F0OwotICAgIGlmIChhbmdsZSA8IDAuMDAwMDFmKQotICAgICAgICBhbmdsZSA9IDA7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRyYW5zZm9ybUFyY1BvaW50KGZsb2F0JiB4LCBmbG9hdCYgeSwgY29u
c3QgRmxvYXRQb2ludCYgYykKLXsKLSAgICB4ICs9IGMueCgpOwotICAgIHkgKz0gYy55KCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGluZmxhdGVSZWN0VG9Db250YWluUG9pbnQoRmxvYXRSZWN0JiByLCBm
bG9hdCB4LCBmbG9hdCB5KQotewotICAgIGlmIChyLmlzRW1wdHkoKSkgewotICAgICAgICByLnNl
dFgoeCk7Ci0gICAgICAgIHIuc2V0WSh5KTsKLSAgICAgICAgci5zZXRTaXplKEZsb2F0U2l6ZSgx
LCAxKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHggPCByLngoKSkgewotICAg
ICAgICByLnNldFdpZHRoKHIubWF4WCgpIC0geCk7Ci0gICAgICAgIHIuc2V0WCh4KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBmbG9hdCB3ID0geCAtIHIueCgpICsgMTsKLSAgICAgICAgaWYgKHcg
PiByLndpZHRoKCkpCi0gICAgICAgICAgICByLnNldFdpZHRoKHcpOwotICAgIH0KLSAgICBpZiAo
eSA8IHIueSgpKSB7Ci0gICAgICAgIHIuc2V0SGVpZ2h0KHIubWF4WSgpIC0geSk7Ci0gICAgICAg
IHIuc2V0WSh5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBoID0gIHkgLSByLnkoKSAr
IDE7Ci0gICAgICAgIGlmIChoID4gci5oZWlnaHQoKSkKLSAgICAgICAgICAgIHIuc2V0SGVpZ2h0
KGgpOwotICAgIH0KLX0KLQotLy8gcmV0dXJuIDAtYmFzZWQgdmFsdWU6IDAgLSBmaXJzdCBRdWFk
cmFudCAoIDAgLSA5MCBkZWdyZWUpCi1zdGF0aWMgaW5saW5lIGludCBxdWFkcmFudChjb25zdCBQ
YXRoUG9pbnQmIHBvaW50LCBjb25zdCBQYXRoUG9pbnQmIG9yaWdpbikKLXsKLSAgICByZXR1cm4g
cG9pbnQubV94IDwgb3JpZ2luLm1feCA/Ci0gICAgICAgIChwb2ludC5tX3kgPCBvcmlnaW4ubV95
ID8gMiA6IDEpCi0gICAgICAgIDogKHBvaW50Lm1feSA8IG9yaWdpbi5tX3kgPyAzIDogMCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1YWRyYW50T25MZWZ0KGludCBxKSB7IHJldHVybiBx
ID09IDEgfHwgcSA9PSAyOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNRdWFkcmFudE9uUmlnaHQo
aW50IHEpIHsgcmV0dXJuIHEgPT0gMCB8fCBxID09IDM7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1F1YWRyYW50T25Ub3AoaW50IHEpIHsgcmV0dXJuIHEgPT0gMiB8fCBxID09IDM7IH0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1F1YWRyYW50T25Cb3R0b20oaW50IHEpIHsgcmV0dXJuIHEgPT0gMCB8
fCBxID09IDE7IH0KLQotc3RhdGljIGlubGluZSBpbnQgbmV4dFF1YWRyYW50KGludCBxKSB7IHJl
dHVybiBxID09IDMgPyAwIDogcSArIDE7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHF1YWRyYW50RGlm
ZihpbnQgcTEsIGludCBxMikKLXsKLSAgICBpbnQgZCA9IHExIC0gcTI7Ci0gICAgd2hpbGUgKGQg
PCAwKQotICAgICAgICBkICs9IDQ7Ci0gICAgcmV0dXJuIGQ7Ci19Ci0KLXN0cnVjdCBQYXRoVmVj
dG9yIHsKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95OwotCi0gICAgUGF0aFZlY3Rvcigp
IDogbV94KDApLCBtX3koMCkge30KLSAgICBQYXRoVmVjdG9yKGZsb2F0IHgsIGZsb2F0IHkpIDog
bV94KHgpLCBtX3koeSkge30KLSAgICBkb3VibGUgYW5nbGUoKSBjb25zdCB7IHJldHVybiBhdGFu
MihtX3ksIG1feCk7IH0KLSAgICBvcGVyYXRvciBkb3VibGUgKCkgY29uc3QgeyByZXR1cm4gYW5n
bGUoKTsgfQotICAgIGRvdWJsZSBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfaHlwb3QobV94LCBt
X3kpOyB9Ci19OwotCi1QYXRoVmVjdG9yIG9wZXJhdG9yLShjb25zdCBQYXRoUG9pbnQmIHAxLCBj
b25zdCBQYXRoUG9pbnQmIHAyKQotewotICAgIHJldHVybiBQYXRoVmVjdG9yKHAxLm1feCAtIHAy
Lm1feCwgcDEubV95IC0gcDIubV95KTsKLX0KLQotc3RhdGljIHZvaWQgYWRkQXJjUG9pbnQoUGF0
aFBvbHlnb24mIHBvbHksIGNvbnN0IFBhdGhQb2ludCYgY2VudGVyLCBjb25zdCBQYXRoUG9pbnQm
IHJhZGl1cywgZG91YmxlIGFuZ2xlKQotewotICAgIFBhdGhQb2ludCBwOwotICAgIGdldEVsbGlw
c2VQb2ludEJ5QW5nbGUoYW5nbGUsIHJhZGl1cy5tX3gsIHJhZGl1cy5tX3ksIHAubV94LCBwLm1f
eSk7Ci0gICAgdHJhbnNmb3JtQXJjUG9pbnQocC5tX3gsIHAubV95LCBjZW50ZXIpOwotICAgIGlm
IChwb2x5LmlzRW1wdHkoKSB8fCBwb2x5Lmxhc3QoKSAhPSBwKQotICAgICAgICBwb2x5LmFwcGVu
ZChwKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkQXJjUG9pbnRzKFBhdGhQb2x5Z29uJiBwb2x5LCBj
b25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyYgZGF0YSkKLXsKLSAgICBjb25zdCBQYXRo
UG9pbnQmIHN0YXJ0UG9pbnQgPSBwb2x5Lmxhc3QoKTsKLSAgICBkb3VibGUgY3VyQW5nbGUgPSBz
dGFydFBvaW50IC0gZGF0YS5tX2NlbnRlcjsKLSAgICBkb3VibGUgZW5kQW5nbGUgPSBkYXRhLm1f
ZW5kIC0gZGF0YS5tX2NlbnRlcjsKLSAgICBkb3VibGUgYW5nbGVTdGVwID0gMi4gLyBzdGQ6Om1h
eChkYXRhLm1fcmFkaXVzLm1feCwgZGF0YS5tX3JhZGl1cy5tX3kpOwotICAgIGlmIChkYXRhLm1f
Y2xvY2t3aXNlKSB7Ci0gICAgICAgIGlmIChlbmRBbmdsZSA8PSBjdXJBbmdsZSB8fCBzdGFydFBv
aW50ID09IGRhdGEubV9lbmQpCi0gICAgICAgICAgICBlbmRBbmdsZSArPSAyICogcGlEb3VibGU7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYW5nbGVTdGVwID0gLWFuZ2xlU3RlcDsKLSAgICAgICAg
aWYgKGVuZEFuZ2xlID49IGN1ckFuZ2xlIHx8IHN0YXJ0UG9pbnQgPT0gZGF0YS5tX2VuZCkKLSAg
ICAgICAgICAgIGVuZEFuZ2xlIC09IDIgKiBwaURvdWJsZTsKLSAgICB9Ci0KLSAgICBmb3IgKGN1
ckFuZ2xlICs9IGFuZ2xlU3RlcDsgZGF0YS5tX2Nsb2Nrd2lzZSA/IGN1ckFuZ2xlIDwgZW5kQW5n
bGUgOiBjdXJBbmdsZSA+IGVuZEFuZ2xlOyBjdXJBbmdsZSArPSBhbmdsZVN0ZXApCi0gICAgICAg
IGFkZEFyY1BvaW50KHBvbHksIGRhdGEubV9jZW50ZXIsIGRhdGEubV9yYWRpdXMsIGN1ckFuZ2xl
KTsKLQotICAgIGlmIChwb2x5LmlzRW1wdHkoKSB8fCBwb2x5Lmxhc3QoKSAhPSBkYXRhLm1fZW5k
KQotICAgICAgICBwb2x5LmFwcGVuZChkYXRhLm1fZW5kKTsKLX0KLQotc3RhdGljIHZvaWQgZHJh
d1BvbHlnb25zKEhEQyBkYywgY29uc3QgVmVjdG9yPFBhdGhQb2x5Z29uPiYgcG9seWdvbnMsIGJv
b2wgZmlsbCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBm
b3IgKFZlY3RvcjxQYXRoUG9seWdvbj46OmNvbnN0X2l0ZXJhdG9yIGkgPSBwb2x5Z29ucy5iZWdp
bigpOyBpICE9IHBvbHlnb25zLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaW50IG5wb2ludHMgPSBp
LT5zaXplKCk7Ci0gICAgICAgIGlmICghbnBvaW50cykKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIFBPSU5UKiB3aW5Qb2ludHMgPSAwOwotICAgICAgICBpZiAoZmlsbCkgewotICAg
ICAgICAgICAgaWYgKG5wb2ludHMgPiAyKQotICAgICAgICAgICAgICAgIHdpblBvaW50cyA9IG5l
dyBQT0lOVFtucG9pbnRzICsgMV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgd2luUG9p
bnRzID0gbmV3IFBPSU5UW25wb2ludHNdOwotCi0gICAgICAgIGlmICh3aW5Qb2ludHMpIHsKLSAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbikgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IGkyID0gMDsgaTIgPCBucG9pbnRzOyArK2kyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0
UG9pbnQgdHJQb2ludCA9IHRyYW5zZm9ybWF0aW9uLT5tYXBQb2ludChpLT5hdChpMikpOwotICAg
ICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJdLnggPSBzdGFibGVSb3VuZCh0clBvaW50Lngo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0ueSA9IHN0YWJsZVJvdW5kKHRy
UG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBucG9pbnRzOyArK2kyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0ueCA9IHN0YWJsZVJvdW5kKGktPmF0KGkyKS54
KCkpOwotICAgICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJdLnkgPSBzdGFibGVSb3VuZChp
LT5hdChpMikueSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChmaWxsICYmIHdpblBvaW50c1tucG9pbnRzIC0gMV0gIT0gd2luUG9pbnRzWzBd
KSB7Ci0gICAgICAgICAgICAgICAgd2luUG9pbnRzW25wb2ludHNdLnggPSB3aW5Qb2ludHNbMF0u
eDsKLSAgICAgICAgICAgICAgICB3aW5Qb2ludHNbbnBvaW50c10ueSA9IHdpblBvaW50c1swXS55
OwotICAgICAgICAgICAgICAgICsrbnBvaW50czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGZpbGwpCi0gICAgICAgICAgICAgICAgOjpQb2x5Z29uKGRjLCB3aW5Qb2ludHMsIG5w
b2ludHMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIDo6UG9seWxpbmUoZGMs
IHdpblBvaW50cywgbnBvaW50cyk7Ci0gICAgICAgICAgICBkZWxldGVbXSB3aW5Qb2ludHM7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLQotaW50IFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om51bUNvbnRy
b2xQb2ludHMoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBQYXRo
TW92ZVRvOgotICAgIGNhc2UgUGF0aExpbmVUbzoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBQYXRoUXVhZEN1cnZlVG86Ci0gICAgY2FzZSBQYXRoQXJjVG86Ci0gICAgICAgIHJldHVybiAy
OwotICAgIGNhc2UgUGF0aEJlemllckN1cnZlVG86Ci0gICAgICAgIHJldHVybiAzOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gUGF0aENsb3NlU3VicGF0aCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotaW50IFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om51bVBv
aW50cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFBhdGhNb3Zl
VG86Ci0gICAgY2FzZSBQYXRoTGluZVRvOgotICAgIGNhc2UgUGF0aEFyY1RvOgotICAgICAgICBy
ZXR1cm4gMTsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgY2FzZSBQYXRoQmV6aWVyQ3VydmVUbzoKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQYXRoQ2xvc2VTdWJwYXRoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIFBhdGhQb2x5Z29uOjptb3ZlKGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0KQotewotICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46Oml0ZXJhdG9yIGkg
PSBiZWdpbigpOyBpIDwgZW5kKCk7ICsraSkKLSAgICAgICAgaS0+bW92ZShvZmZzZXQpOwotfQot
Ci12b2lkIFBhdGhQb2x5Z29uOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQot
ewotICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46Oml0ZXJhdG9yIGkgPSBiZWdpbigpOyBpIDwg
ZW5kKCk7ICsraSkKLSAgICAgICAgKmkgPSB0Lm1hcFBvaW50KCppKTsKLX0KLQotYm9vbCBQYXRo
UG9seWdvbjo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAg
aWYgKHNpemUoKSA8IDMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRlc3QgaW50
ZXJzZWN0aW9ucyBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFuZCB0aGUgdmVydGljYWwgbGluZTogeCA9
IHBvaW50LngoKQotCi0gICAgaW50IGludGVyc2VjdGVkID0gMDsKLSAgICBjb25zdCBQYXRoUG9p
bnQqIHBvaW50MSA9ICZsYXN0KCk7Ci0gICAgVmVjdG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJh
dG9yIGxhc3QgPSBlbmQoKTsKLSAgICAvLyB3YXNOZWdhdGl2ZTogLTEgbWVhbnMgdW5rbm93biwg
MCBtZWFucyBmYWxzZSwgMSBtZWFucyB0cnVlLgotICAgIGludCB3YXNOZWdhdGl2ZSA9IC0xOwot
ICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJhdG9yIGkgPSBiZWdpbigpOyBp
ICE9IGxhc3Q7ICsraSkgewotICAgICAgICBjb25zdCBQYXRoUG9pbnQmIHBvaW50MiA9ICppOwot
ICAgICAgICBpZiAocG9pbnQxLT54KCkgIT0gcG9pbnQueCgpKSB7Ci0gICAgICAgICAgICBpZiAo
cG9pbnQyLngoKSA9PSBwb2ludC54KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZ2V0
dGluZyBvbiB0aGUgdmVydGljYWwgbGluZQotICAgICAgICAgICAgICAgIHdhc05lZ2F0aXZlID0g
cG9pbnQxLT54KCkgPCBwb2ludC54KCkgPyAxIDogMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
cG9pbnQyLngoKSA8IHBvaW50LngoKSAhPSBwb2ludDEtPngoKSA8IHBvaW50LngoKSkgewotICAg
ICAgICAgICAgICAgIGZsb2F0IHkgPSAocG9pbnQyLnkoKSAtIHBvaW50MS0+eSgpKSAvIChwb2lu
dDIueCgpIC0gcG9pbnQxLT54KCkpICogKHBvaW50LngoKSAtIHBvaW50MS0+eCgpKSArIHBvaW50
MS0+eSgpOwotICAgICAgICAgICAgICAgIGlmICh5ID49IHBvaW50LnkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytpbnRlcnNlY3RlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFdlIHdlcmUgb24gdGhlIHZlcnRpY2FsIGxpbmUKLQotICAgICAgICAg
ICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZQotICAgICAgICAgICAgaWYgKHBvaW50MS0+eSgpID09
IHBvaW50LnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAg
aWYgKHBvaW50MS0+eSgpID4gcG9pbnQueSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBvaW50
Mi54KCkgPT0gcG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNlZSBpZiB0aGUg
cG9pbnQgaXMgb24gdGhpcyBzZWdtZW50Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludDIu
eSgpIDw9IHBvaW50LnkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBzdGlsbCBvbiB0aGUgbGluZQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBsZWF2aW5n
IHRoZSBsaW5lIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBnZXQgYmFj
ayB0byBzZWUgd2hpY2ggc2lkZSB3ZSBjb21lIGZyb20uIElmIHdlIGNvbWUgZnJvbQotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBzaWRlIHdlIGFyZSBsZWF2aW5nLCBubyBpbnRlcnNl
Y3Rpb24gc2hvdWxkIGJlIGNvdW50ZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdhc05lZ2F0
aXZlIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFBhdGhQb2ludD46OmNv
bnN0X2l0ZXJhdG9yIGpMYXN0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxQ
YXRoUG9pbnQ+Ojpjb25zdF9pdGVyYXRvciBqID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PSBiZWdpbigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gbGFzdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tajsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoai0+eCgpICE9IHBvaW50LngoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoai0+eCgpID4gcG9pbnQueCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzTmVnYXRpdmUgPSAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3YXNOZWdhdGl2ZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKGogIT0gakxhc3QpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAod2FzTmVnYXRpdmUgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
d2FzTmVnYXRpdmUgPyBwb2ludDIueCgpID4gcG9pbnQueCgpIDogcG9pbnQyLngoKSA8IHBvaW50
LngoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsraW50ZXJzZWN0ZWQ7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2ludDIueCgpID09IHBvaW50LngoKSAm
JiBwb2ludDIueSgpID49IHBvaW50LnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBwb2ludDEgPSAmcG9pbnQyOwotICAgIH0KLQotICAgIHJldHVy
biBpbnRlcnNlY3RlZCAmIDE7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6bW92ZShj
b25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAgICBpbnQgbiA9IG51bUNvbnRyb2xQb2ludHMo
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKLSAgICAgICAgbV9kYXRhLm1fcG9p
bnRzW2ldLm1vdmUob2Zmc2V0KTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGhFbGVtZW50Ojp0cmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQotewotICAgIGludCBuID0gbnVtQ29udHJv
bFBvaW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIEZs
b2F0UG9pbnQgcCA9IHQubWFwUG9pbnQobV9kYXRhLm1fcG9pbnRzW2ldKTsKLSAgICAgICAgbV9k
YXRhLm1fcG9pbnRzW2ldLnNldChwLngoKSwgcC55KCkpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0
Zm9ybVBhdGhFbGVtZW50OjppbmZsYXRlUmVjdFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwgY29u
c3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBjb25zdAotewotICAgIGlmIChtX3R5cGUgPT0gUGF0
aEFyY1RvKSB7Ci0gICAgICAgIGNvbnN0IEFyY1RvJiBkYXRhID0gbV9kYXRhLm1fYXJjVG9EYXRh
OwotICAgICAgICBQYXRoUG9pbnQgc3RhcnRQb2ludDsKLSAgICAgICAgc3RhcnRQb2ludCA9IGxh
c3RQb2ludDsKLSAgICAgICAgUGF0aFBvaW50IGVuZFBvaW50ID0gZGF0YS5tX2VuZDsKLSAgICAg
ICAgaWYgKCFkYXRhLm1fY2xvY2t3aXNlKQotICAgICAgICAgICAgc3RkOjpzd2FwKHN0YXJ0UG9p
bnQsIGVuZFBvaW50KTsKLQotICAgICAgICBpbnQgcTAgPSBxdWFkcmFudChzdGFydFBvaW50LCBk
YXRhLm1fY2VudGVyKTsKLSAgICAgICAgaW50IHExID0gcXVhZHJhbnQoZW5kUG9pbnQsIGRhdGEu
bV9jZW50ZXIpOwotICAgICAgICBib29sIGNvbnRhaW5zRXh0cmVtZXNbNF0gPSB7IGZhbHNlIH07
IC8vIGJvdHRvbSwgbGVmdCwgdG9wLCByaWdodAotICAgICAgICBzdGF0aWMgY29uc3QgUGF0aFBv
aW50IGV4dHJlbWVWZWN0b3JzWzRdID0geyB7IDAsIDEgfSwgeyAtMSwgMCB9LCB7IDAsIC0xIH0s
IHsgMSwgMCB9IH07Ci0gICAgICAgIGlmIChxMCA9PSBxMSkgewotICAgICAgICAgICAgaWYgKHN0
YXJ0UG9pbnQubV94ID09IGVuZFBvaW50Lm1feCB8fCBpc1F1YWRyYW50T25Cb3R0b20ocTApICE9
IHN0YXJ0UG9pbnQubV94ID4gZW5kUG9pbnQubV94KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRXh0cmVt
ZXNbaV0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaW50IGV4dHJlbWUgPSBxMDsKLSAgICAgICAgICAgIGludCBkaWZmID0gcXVhZHJhbnREaWZm
KHExLCBxMCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpZmY7ICsraSkgewot
ICAgICAgICAgICAgICAgIGNvbnRhaW5zRXh0cmVtZXNbZXh0cmVtZV0gPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGV4dHJlbWUgPSBuZXh0UXVhZHJhbnQoZXh0cmVtZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KHIsIHN0YXJ0
UG9pbnQubV94LCBzdGFydFBvaW50Lm1feSk7Ci0gICAgICAgIGluZmxhdGVSZWN0VG9Db250YWlu
UG9pbnQociwgZW5kUG9pbnQubV94LCBlbmRQb2ludC5tX3kpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5zRXh0cmVtZXNbaV0p
Ci0gICAgICAgICAgICAgICAgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Qb2ludChyLCBkYXRhLm1fY2Vu
dGVyLm1feCArIGRhdGEubV9yYWRpdXMubV94ICogZXh0cmVtZVZlY3RvcnNbaV0ubV94LCBkYXRh
Lm1fY2VudGVyLm1feSArIGRhdGEubV9yYWRpdXMubV95ICogZXh0cmVtZVZlY3RvcnNbaV0ubV95
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBuID0gbnVtUG9pbnRzKCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgaW5mbGF0
ZVJlY3RUb0NvbnRhaW5Qb2ludChyLCBtX2RhdGEubV9wb2ludHNbaV0ubV94LCBtX2RhdGEubV9w
b2ludHNbaV0ubV95KTsKLSAgICB9Ci19Ci0KLVBhdGhFbGVtZW50VHlwZSBQbGF0Zm9ybVBhdGhF
bGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
UGF0aE1vdmVUbzoKLSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ7Ci0gICAg
Y2FzZSBQYXRoTGluZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2lu
dDsKLSAgICBjYXNlIFBhdGhBcmNUbzoKLSAgICAgICAgLy8gRklYTUU6IHRoZXJlJ3Mgbm8gYXJj
VG8gdHlwZSBmb3IgUGF0aEVsZW1lbnQKLSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50QWRkTGlu
ZVRvUG9pbnQ7Ci0gICAgICAgIC8vIHJldHVybiBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9p
bnQ7Ci0gICAgY2FzZSBQYXRoUXVhZEN1cnZlVG86Ci0gICAgICAgIHJldHVybiBQYXRoRWxlbWVu
dEFkZFF1YWRDdXJ2ZVRvUG9pbnQ7Ci0gICAgY2FzZSBQYXRoQmV6aWVyQ3VydmVUbzoKLSAgICAg
ICAgcmV0dXJuIFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gUGF0aENsb3NlU3VicGF0aCk7Ci0gICAgICAgIHJldHVybiBQ
YXRoRWxlbWVudENsb3NlU3VicGF0aDsKLSAgICB9Ci19Ci0KLVBsYXRmb3JtUGF0aDo6UGxhdGZv
cm1QYXRoKCkKLSAgICA6IG1fcGVuTGlmdGVkKHRydWUpCi17Ci0gICAgbV9jdXJyZW50UG9pbnQu
Y2xlYXIoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmVuc3VyZVN1YnBhdGgoKQotewotICAg
IGlmIChtX3BlbkxpZnRlZCkgewotICAgICAgICBtX3BlbkxpZnRlZCA9IGZhbHNlOwotICAgICAg
ICBtX3N1YnBhdGhzLmFwcGVuZChQYXRoUG9seWdvbigpKTsKLSAgICAgICAgbV9zdWJwYXRocy5s
YXN0KCkuYXBwZW5kKG1fY3VycmVudFBvaW50KTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJU
KCFtX3N1YnBhdGhzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRUb1N1
YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSkKLXsKLSAgICBpZiAoZS5wbGF0Zm9y
bVR5cGUoKSA9PSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRoTW92ZVRvKSB7Ci0gICAgICAgIG1f
cGVuTGlmdGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBlLnBvaW50QXQoMCk7
Ci0gICAgfSBlbHNlIGlmIChlLnBsYXRmb3JtVHlwZSgpID09IFBsYXRmb3JtUGF0aEVsZW1lbnQ6
OlBhdGhDbG9zZVN1YnBhdGgpIHsKLSAgICAgICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwotICAgICAg
ICBpZiAoIW1fc3VicGF0aHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50
UG9pbnQgIT0gbV9zdWJwYXRocy5sYXN0KClbMF0pIHsKLSAgICAgICAgICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gVzNDLCB3ZSBoYXZlIHRvIGRyYXcgYSBsaW5lIGZyb20gY3VycmVudCBwb2ludCB0
byB0aGUgaW5pdGlhbCBwb2ludAotICAgICAgICAgICAgICAgIG1fc3VicGF0aHMubGFzdCgpLmFw
cGVuZChtX3N1YnBhdGhzLmxhc3QoKVswXSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9p
bnQgPSBtX3N1YnBhdGhzLmxhc3QoKVswXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVuc3VyZVN1YnBhdGgoKTsKLSAgICAgICAgc3dpdGNoIChlLnBsYXRmb3JtVHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0aExpbmVUbzoKLSAgICAgICAg
ICAgIG1fc3VicGF0aHMubGFzdCgpLmFwcGVuZChlLnBvaW50QXQoMCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0aEFyY1RvOgotICAg
ICAgICAgICAgYWRkQXJjUG9pbnRzKG1fc3VicGF0aHMubGFzdCgpLCBlLmFyY1RvKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0aFF1
YWRDdXJ2ZVRvOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBhdGhQb2ludCBjb250
cm9sW10gPSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50LAotICAgICAgICAg
ICAgICAgICAgICBlLnBvaW50QXQoMCksCi0gICAgICAgICAgICAgICAgICAgIGUucG9pbnRBdCgx
KSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWdpYyBu
dW1iZXI/Ci0gICAgICAgICAgICAgICAgcXVhZEN1cnZlKDUwLCBtX3N1YnBhdGhzLmxhc3QoKSwg
Y29udHJvbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRoQmV6aWVyQ3VydmVUbzoKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBQYXRoUG9pbnQgY29udHJvbFtdID0gewotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludCwKLSAgICAgICAgICAgICAgICAgICAgZS5wb2ludEF0KDApLAot
ICAgICAgICAgICAgICAgICAgICBlLnBvaW50QXQoMSksCi0gICAgICAgICAgICAgICAgICAgIGUu
cG9pbnRBdCgyKSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBtYWdpYyBudW1iZXI/Ci0gICAgICAgICAgICAgICAgYmV6aWVyKDEwMCwgbV9zdWJwYXRocy5s
YXN0KCksIGNvbnRyb2wpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gbV9zdWJwYXRo
cy5sYXN0KCkubGFzdCgpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFwcGVuZChj
b25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKQotewotICAgIGUuaW5mbGF0ZVJlY3RUb0NvbnRh
aW5NZShtX2JvdW5kaW5nUmVjdCwgbGFzdFBvaW50KCkpOwotICAgIGFkZFRvU3VicGF0aChlKTsK
LSAgICBtX2VsZW1lbnRzLmFwcGVuZChlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFwcGVu
ZChjb25zdCBQbGF0Zm9ybVBhdGgmIHApCi17Ci0gICAgY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVu
dHMmIGUgPSBwLmVsZW1lbnRzKCk7Ci0gICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6Y29u
c3RfaXRlcmF0b3IgaXQoZS5iZWdpbigpKTsgaXQgIT0gZS5lbmQoKTsgKytpdCkgewotICAgICAg
ICBhZGRUb1N1YnBhdGgoKml0KTsKLSAgICAgICAgaXQtPmluZmxhdGVSZWN0VG9Db250YWluTWUo
bV9ib3VuZGluZ1JlY3QsIGxhc3RQb2ludCgpKTsKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQo
Kml0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpjbGVhcigpCi17Ci0gICAgbV9l
bGVtZW50cy5jbGVhcigpOwotICAgIG1fYm91bmRpbmdSZWN0ID0gRmxvYXRSZWN0KCk7Ci0gICAg
bV9zdWJwYXRocy5jbGVhcigpOwotICAgIG1fY3VycmVudFBvaW50LmNsZWFyKCk7Ci0gICAgbV9w
ZW5MaWZ0ZWQgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6c3Ryb2tlUGF0aChIREMg
ZGMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17Ci0gICAg
ZHJhd1BvbHlnb25zKGRjLCBtX3N1YnBhdGhzLCBmYWxzZSwgdHJhbnNmb3JtYXRpb24pOwotfQot
Ci12b2lkIFBsYXRmb3JtUGF0aDo6ZmlsbFBhdGgoSERDIGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0qIHRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0
T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotICAgIGRyYXdQb2x5Z29ucyhk
YywgbV9zdWJwYXRocywgdHJ1ZSwgdHJhbnNmb3JtYXRpb24pOwotICAgIFNlbGVjdE9iamVjdChk
Yywgb2xkUGVuKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCi17Ci0gICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6aXRlcmF0b3Ig
aXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgaXQtPm1vdmUoc2l6ZSk7Ci0KLSAgICBtX2JvdW5kaW5nUmVjdC5tb3ZlKHNpemUpOwot
ICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6aXRlcmF0b3IgaXQgPSBtX3N1YnBhdGhzLmJl
Z2luKCk7IGl0ICE9IG1fc3VicGF0aHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5tb3ZlKHNp
emUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdCkKLXsKLSAgICBmb3IgKFBsYXRmb3JtUGF0aEVsZW1lbnRzOjppdGVyYXRvciBpdCht
X2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KQotICAgICAg
ICBpdC0+dHJhbnNmb3JtKHQpOwotCi0gICAgbV9ib3VuZGluZ1JlY3QgPSB0Lm1hcFJlY3QobV9i
b3VuZGluZ1JlY3QpOwotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6aXRlcmF0b3IgaXQg
PSBtX3N1YnBhdGhzLmJlZ2luKCk7IGl0ICE9IG1fc3VicGF0aHMuZW5kKCk7ICsraXQpCi0gICAg
ICAgIGl0LT50cmFuc2Zvcm0odCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1QYXRoOjpjb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKLXsKLSAgICAvLyBv
cHRpbWl6YXRpb246IGNoZWNrIHRoZSBib3VuZGluZyByZWN0IGZpcnN0Ci0gICAgaWYgKCFjb250
YWluc1BvaW50KG1fYm91bmRpbmdSZWN0LCBwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fc3Vi
cGF0aHMuYmVnaW4oKTsgaSAhPSBtX3N1YnBhdGhzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGktPmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpNb3ZlVG8gZGF0
YSA9IHsgeyBwb2ludC54KCksIHBvaW50LnkoKSB9IH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVu
dCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRk
TGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIFBsYXRmb3JtUGF0aEVsZW1l
bnQ6OkxpbmVUbyBkYXRhID0geyB7IHBvaW50LngoKSwgcG9pbnQueSgpIH0gfTsKLSAgICBQbGF0
Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1QYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxv
YXRQb2ludCYgcCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpRdWFkQ3VydmVUbyBkYXRh
ID0geyB7IGNwLngoKSwgY3AueSgpIH0sIHsgcC54KCksIHAueSgpIH0gfTsKLSAgICBQbGF0Zm9y
bVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1QYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxv
YXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIFBsYXRmb3JtUGF0aEVs
ZW1lbnQ6OkJlemllckN1cnZlVG8gZGF0YSA9IHsgeyBjcDEueCgpLCBjcDEueSgpIH0sIHsgY3Ay
LngoKSwgY3AyLnkoKSB9LCB7IHAueCgpLCBwLnkoKSB9IH07Ci0gICAgUGxhdGZvcm1QYXRoRWxl
bWVudCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6
YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgZnAxLCBjb25zdCBGbG9hdFBvaW50JiBmcDIsIGZs
b2F0IHJhZGl1cykKLXsKLSAgICBjb25zdCBQYXRoUG9pbnQmIHAwID0gbV9jdXJyZW50UG9pbnQ7
Ci0gICAgUGF0aFBvaW50IHAxOwotICAgIHAxID0gZnAxOwotICAgIFBhdGhQb2ludCBwMjsKLSAg
ICBwMiA9IGZwMjsKLSAgICBpZiAoIXJhZGl1cyB8fCBwMCA9PSBwMSB8fCBwMSA9PSBwMikgewot
ICAgICAgICBhZGRMaW5lVG8ocDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF0
aFZlY3RvciB2MDEgPSBwMCAtIHAxOwotICAgIFBhdGhWZWN0b3IgdjIxID0gcDIgLSBwMTsKLQot
ICAgIC8vIHNpbihBIC0gQikgPSBzaW4oQSkgKiBjb3MoQikgLSBzaW4oQikgKiBjb3MoQSkKLSAg
ICBkb3VibGUgY3Jvc3MgPSB2MDEubV94ICogdjIxLm1feSAtIHYwMS5tX3kgKiB2MjEubV94Owot
Ci0gICAgaWYgKGZhYnMoY3Jvc3MpIDwgMUUtMTApIHsKLSAgICAgICAgLy8gb24gb25lIGxpbmUK
LSAgICAgICAgYWRkTGluZVRvKHAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRv
dWJsZSBkMDEgPSB2MDEubGVuZ3RoKCk7Ci0gICAgZG91YmxlIGQyMSA9IHYyMS5sZW5ndGgoKTsK
LSAgICBkb3VibGUgYW5nbGUgPSAocGlEb3VibGUgLSBmYWJzKGFzaW4oY3Jvc3MgLyAoZDAxICog
ZDIxKSkpKSAqIDAuNTsKLSAgICBkb3VibGUgc3BhbiA9IHJhZGl1cyAqIHRhbihhbmdsZSk7Ci0g
ICAgZG91YmxlIHJhdGUgPSBzcGFuIC8gZDAxOwotICAgIFBhdGhQb2ludCBzdGFydFBvaW50Owot
ICAgIHN0YXJ0UG9pbnQubV94ID0gcDEubV94ICsgdjAxLm1feCAqIHJhdGU7Ci0gICAgc3RhcnRQ
b2ludC5tX3kgPSBwMS5tX3kgKyB2MDEubV95ICogcmF0ZTsKLQotICAgIGFkZExpbmVUbyhzdGFy
dFBvaW50KTsKLQotICAgIFBhdGhQb2ludCBlbmRQb2ludDsKLSAgICByYXRlID0gc3BhbiAvIGQy
MTsKLSAgICBlbmRQb2ludC5tX3ggPSBwMS5tX3ggKyB2MjEubV94ICogcmF0ZTsKLSAgICBlbmRQ
b2ludC5tX3kgPSBwMS5tX3kgKyB2MjEubV95ICogcmF0ZTsKLQotICAgIFBhdGhQb2ludCBtaWRQ
b2ludDsKLSAgICBtaWRQb2ludC5tX3ggPSAoc3RhcnRQb2ludC5tX3ggKyBlbmRQb2ludC5tX3gp
ICogMC41OwotICAgIG1pZFBvaW50Lm1feSA9IChzdGFydFBvaW50Lm1feSArIGVuZFBvaW50Lm1f
eSkgKiAwLjU7Ci0KLSAgICBQYXRoVmVjdG9yIHZtMSA9IG1pZFBvaW50IC0gcDE7Ci0gICAgZG91
YmxlIGRtMSA9IHZtMS5sZW5ndGgoKTsKLSAgICBkb3VibGUgZCA9IF9oeXBvdChyYWRpdXMsIHNw
YW4pOwotCi0gICAgUGF0aFBvaW50IGNlbnRlclBvaW50OwotICAgIHJhdGUgPSBkIC8gZG0xOwot
ICAgIGNlbnRlclBvaW50Lm1feCA9IHAxLm1feCArIHZtMS5tX3ggKiByYXRlOwotICAgIGNlbnRl
clBvaW50Lm1feSA9IHAxLm1feSArIHZtMS5tX3kgKiByYXRlOwotCi0gICAgUGxhdGZvcm1QYXRo
RWxlbWVudDo6QXJjVG8gZGF0YSA9IHsKLSAgICAgICAgZW5kUG9pbnQsCi0gICAgICAgIGNlbnRl
clBvaW50LAotICAgICAgICB7IHJhZGl1cywgcmFkaXVzIH0sCi0gICAgICAgIGNyb3NzIDwgMAot
ICAgIH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUp
OwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6Y2xvc2VTdWJwYXRoKCkKLXsKLSAgICBQbGF0Zm9y
bVBhdGhFbGVtZW50IHBlOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLS8vIGFkZCBhIGNpcmN1bGFy
IGFyYyBjZW50cmVkIGF0IHAgd2l0aCByYWRpdXMgciBmcm9tIHN0YXJ0IGFuZ2xlIHNhciAocmFk
aWFucykgdG8gZW5kIGFuZ2xlIGVhcgotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29u
c3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgc2FyLCBmbG9hdCBlYXIs
IGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBmbG9hdCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwg
ZW5kWTsKLQotICAgIG5vcm1hbGl6ZUFuZ2xlKHNhcik7Ci0gICAgbm9ybWFsaXplQW5nbGUoZWFy
KTsKLQotICAgIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoc2FyLCBhLCBiLCBzdGFydFgsIHN0YXJ0
WSk7Ci0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShlYXIsIGEsIGIsIGVuZFgsIGVuZFkpOwot
Ci0gICAgdHJhbnNmb3JtQXJjUG9pbnQoc3RhcnRYLCBzdGFydFksIHApOwotICAgIHRyYW5zZm9y
bUFyY1BvaW50KGVuZFgsIGVuZFksIHApOwotCi0gICAgRmxvYXRQb2ludCBzdGFydChzdGFydFgs
IHN0YXJ0WSk7Ci0gICAgbW92ZVRvKHN0YXJ0KTsKLQotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6
OkFyY1RvIGRhdGEgPSB7IHsgZW5kWCwgZW5kWSB9LCB7IHAueCgpLCBwLnkoKSB9LCAgeyBhLCBi
IH0sICFhbnRpY2xvY2t3aXNlIH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsK
LSAgICBhcHBlbmQocGUpOwotfQotCi0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcikKLXsKLSAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKLQotICAgIGZsb2F0
IHJpZ2h0ID0gci5tYXhYKCkgLSAxOwotICAgIGZsb2F0IGJvdHRvbSA9IHIubWF4WSgpIC0gMTsK
LSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyaWdodCwgci55KCkpKTsKLSAgICBhZGRMaW5lVG8o
RmxvYXRQb2ludChyaWdodCwgYm90dG9tKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoci54
KCksIGJvdHRvbSkpOwotICAgIGFkZExpbmVUbyhyLmxvY2F0aW9uKCkpOwotfQotCi12b2lkIFBs
YXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgRmxvYXRT
aXplIHJhZGl1cyhyLndpZHRoKCkgKiAwLjUsIHIuaGVpZ2h0KCkgKiAwLjUpOwotICAgIGFkZEVs
bGlwc2Uoci5sb2NhdGlvbigpICsgcmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpLCAwLCAwLCB0cnVlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFwcGx5KHZvaWQqIGlu
Zm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgUGF0aEVsZW1l
bnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107Ci0gICAgcGVsZW1lbnQucG9p
bnRzID0gcG9pbnRzOwotCi0gICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6Y29uc3RfaXRl
cmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytp
dCkgewotICAgICAgICBwZWxlbWVudC50eXBlID0gaXQtPnR5cGUoKTsKLSAgICAgICAgaW50IG4g
PSBpdC0+bnVtUG9pbnRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQot
ICAgICAgICAgICAgcG9pbnRzW2ldID0gaXQtPnBvaW50QXQoaSk7Ci0gICAgICAgIGZ1bmN0aW9u
KGluZm8sICZwZWxlbWVudCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJjb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9y
bVBhdGhXaW5DRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxh
dGZvcm1QYXRoV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5MjQzZi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0
Zm9ybVBhdGhXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgUGxhdGZvcm1QYXRoV2luQ0VfaAotI2RlZmluZSBQbGF0Zm9ybVBhdGhXaW5DRV9oCi0K
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiUGF0aC5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLQot
ICAgIHN0cnVjdCBQYXRoUG9pbnQgewotICAgICAgICBmbG9hdCBtX3g7Ci0gICAgICAgIGZsb2F0
IG1feTsKLSAgICAgICAgY29uc3QgZmxvYXQmIHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAg
ICAgICAgY29uc3QgZmxvYXQmIHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLSAgICAgICAgdm9p
ZCBzZXQoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgewotICAgICAgICAgICAgbV94ID0geDsK
LSAgICAgICAgICAgIG1feSA9IHk7Ci0gICAgICAgIH07Ci0gICAgICAgIG9wZXJhdG9yIEZsb2F0
UG9pbnQoKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KG1feCwgbV95KTsgfQotICAgICAgICB2
b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1feCArPSBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAgICAgIG1feSArPSBvZmZzZXQuaGVpZ2h0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgUGF0aFBvaW50JiBvcGVyYXRvcj0oY29uc3QgRmxvYXRQ
b2ludCYgcCkKLSAgICAgICAgewotICAgICAgICAgICAgbV94ID0gcC54KCk7Ci0gICAgICAgICAg
ICBtX3kgPSBwLnkoKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGNsZWFyKCkgeyBtX3ggPSBtX3kgPSAwOyB9Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQYXRoUG9pbnQ+IHsKLSAgICAgICAgdm9pZCBt
b3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKLSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsYXRmb3JtUGF0aEVs
ZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBQbGFmb3JtUGF0aEVsZW1lbnRUeXBl
IHsKLSAgICAgICAgICAgIFBhdGhNb3ZlVG8sCi0gICAgICAgICAgICBQYXRoTGluZVRvLAotICAg
ICAgICAgICAgUGF0aEFyY1RvLAotICAgICAgICAgICAgUGF0aFF1YWRDdXJ2ZVRvLAotICAgICAg
ICAgICAgUGF0aEJlemllckN1cnZlVG8sCi0gICAgICAgICAgICBQYXRoQ2xvc2VTdWJwYXRoLAot
ICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBNb3ZlVG8gewotICAgICAgICAgICAgUGF0aFBv
aW50IG1fZW5kOwotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBMaW5lVG8gewotICAgICAg
ICAgICAgUGF0aFBvaW50IG1fZW5kOwotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBBcmNU
byB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAgICAgICAgICBQYXRoUG9pbnQg
bV9jZW50ZXI7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9yYWRpdXM7Ci0gICAgICAgICAgICBi
b29sIG1fY2xvY2t3aXNlOwotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBRdWFkQ3VydmVU
byB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDA7Ci0gICAgICAgICAgICBQYXRoUG9p
bnQgbV9wb2ludDE7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0IEJlemllckN1cnZlVG8g
ewotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnQwOwotICAgICAgICAgICAgUGF0aFBvaW50
IG1fcG9pbnQxOwotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnQyOwotICAgICAgICB9Owot
Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoKTogbV90eXBlKFBhdGhDbG9zZVN1YnBhdGgp
IHsgbV9kYXRhLm1fcG9pbnRzWzBdLnNldCgwLCAwKTsgICAgfQotICAgICAgICBQbGF0Zm9ybVBh
dGhFbGVtZW50KGNvbnN0IE1vdmVUbyYgZGF0YSk6IG1fdHlwZShQYXRoTW92ZVRvKSB7IG1fZGF0
YS5tX21vdmVUb0RhdGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29u
c3QgTGluZVRvJiBkYXRhKTogbV90eXBlKFBhdGhMaW5lVG8pIHsgbV9kYXRhLm1fbGluZVRvRGF0
YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBBcmNUbyYgZGF0
YSk6IG1fdHlwZShQYXRoQXJjVG8pIHsgbV9kYXRhLm1fYXJjVG9EYXRhID0gZGF0YTsgfQotICAg
ICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50KGNvbnN0IFF1YWRDdXJ2ZVRvJiBkYXRhKTogbV90eXBl
KFBhdGhRdWFkQ3VydmVUbykgeyBtX2RhdGEubV9xdWFkQ3VydmVUb0RhdGEgPSBkYXRhOyB9Ci0g
ICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgQmV6aWVyQ3VydmVUbyYgZGF0YSk6IG1f
dHlwZShQYXRoQmV6aWVyQ3VydmVUbykgeyBtX2RhdGEubV9iZXppZXJDdXJ2ZVRvRGF0YSA9IGRh
dGE7IH0KLQotICAgICAgICBjb25zdCBNb3ZlVG8mIG1vdmVUbygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5tX21vdmVUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgTGluZVRvJiBsaW5lVG8oKSBjb25z
dCB7IHJldHVybiBtX2RhdGEubV9saW5lVG9EYXRhOyB9Ci0gICAgICAgIGNvbnN0IEFyY1RvJiBh
cmNUbygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2FyY1RvRGF0YTsgfQotICAgICAgICBjb25z
dCBRdWFkQ3VydmVUbyYgcXVhZEN1cnZlVG8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9xdWFk
Q3VydmVUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgQmV6aWVyQ3VydmVUbyYgYmV6aWVyQ3VydmVU
bygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2JlemllckN1cnZlVG9EYXRhOyB9Ci0gICAgICAg
IGNvbnN0IFBhdGhQb2ludCYgbGFzdFBvaW50KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IG4gPSBudW1Qb2ludHMoKTsKLSAgICAgICAgICAgIHJldHVybiBuID4gMSA/IG1fZGF0
YS5tX3BvaW50c1tuIC0gMV0gOiBtX2RhdGEubV9wb2ludHNbMF07Ci0gICAgICAgIH0KLSAgICAg
ICAgY29uc3QgUGF0aFBvaW50JiBwb2ludEF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLm1fcG9pbnRzW2luZGV4XTsgfQotICAgICAgICBpbnQgbnVtUG9pbnRzKCkgY29uc3Q7Ci0g
ICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgbW92ZShj
b25zdCBGbG9hdFNpemUmIG9mZnNldCk7Ci0gICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdCk7Ci0gICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBlKCkgY29uc3Q7
Ci0gICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgcGxhdGZvcm1UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3Q7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBQbGFmb3JtUGF0aEVsZW1lbnRUeXBlIG1fdHlwZTsKLSAgICAgICAgdW5p
b24gewotICAgICAgICAgICAgTW92ZVRvIG1fbW92ZVRvRGF0YTsKLSAgICAgICAgICAgIExpbmVU
byBtX2xpbmVUb0RhdGE7Ci0gICAgICAgICAgICBBcmNUbyBtX2FyY1RvRGF0YTsKLSAgICAgICAg
ICAgIFF1YWRDdXJ2ZVRvIG1fcXVhZEN1cnZlVG9EYXRhOwotICAgICAgICAgICAgQmV6aWVyQ3Vy
dmVUbyBtX2JlemllckN1cnZlVG9EYXRhOwotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnRz
WzRdOwotICAgICAgICB9IG1fZGF0YTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8UGxh
dGZvcm1QYXRoRWxlbWVudD4gUGxhdGZvcm1QYXRoRWxlbWVudHM7Ci0KLSAgICBjbGFzcyBQbGF0
Zm9ybVBhdGggewotICAgIHB1YmxpYzoKLSAgICAgICAgUGxhdGZvcm1QYXRoKCk7Ci0gICAgICAg
IGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnRzJiBlbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudHM7IH0KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVu
dCYgZSk7Ci0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBsYXRmb3JtUGF0aCYgcCk7Ci0gICAg
ICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50cy5pc0VtcHR5KCk7IH0KLQotICAgICAgICB2b2lkIHN0cm9rZVBhdGgoSERDLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyKSBjb25zdDsKLSAgICAgICAgdm9pZCBmaWxsUGF0aChI
REMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50
IGxhc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpID8gRmxvYXRQ
b2ludCgwLCAwKSA6IG1fZWxlbWVudHMubGFzdCgpLmxhc3RQb2ludCgpOyB9Ci0KLSAgICAgICAg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5n
UmVjdDsgfQotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBX
aW5kUnVsZSBydWxlKSBjb25zdDsKLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKTsKLSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0KTsKLQotICAgICAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAg
IHZvaWQgYWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KTsKLSAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cyk7Ci0gICAgICAgIHZvaWQgY2xvc2VTdWJwYXRo
KCk7Ci0gICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCBh
LCBmbG9hdCBiLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKTsKLSAg
ICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcik7Ci0gICAgICAgIHZvaWQgYWRk
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpOwotICAgICAgICB2b2lkIGFwcGx5KHZvaWQqIGlu
Zm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0OwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgdm9pZCBlbnN1cmVTdWJwYXRoKCk7Ci0gICAgICAgIHZvaWQgYWRkVG9TdWJwYXRo
KGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQmIGUpOwotCi0gICAgICAgIFBsYXRmb3JtUGF0aEVs
ZW1lbnRzIG1fZWxlbWVudHM7Ci0gICAgICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nUmVjdDsKLSAg
ICAgICAgVmVjdG9yPFBhdGhQb2x5Z29uPiBtX3N1YnBhdGhzOwotICAgICAgICBQYXRoUG9pbnQg
bV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIGJvb2wgbV9wZW5MaWZ0ZWQ7Ci0gICAgfTsKLQotfQot
Ci0jZW5kaWYgLy8gUGxhdGZvcm1QYXRoV2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM0OTg1OGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDYxMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxMCBQ
YXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLQotI2luY2x1ZGUgIkdESUV4
dHJhcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIldp
bkNFR3JhcGhpY3NFeHRyYXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgV1RGOjpSZWZDb3Vu
dGVkTGVha0NvdW50ZXIgc2hhcmVkQml0bWFwTGVha0NvdW50ZXIoIlNoYXJlZEJpdG1hcCIpOwot
I2VuZGlmCi0KLQotUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IFNoYXJlZEJpdG1hcDo6Y3JlYXRl
KGNvbnN0IEludFNpemUmIHNpemUsIEJpdG1hcEluZm86OkJpdENvdW50IGJpdENvdW50LCBib29s
IGluaXRQaXhlbHMpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gcmVzdWx0YW50Qml0bWFw
ID0gYWRvcHRSZWYobmV3IFNoYXJlZEJpdG1hcChzaXplLCBiaXRDb3VudCwgaW5pdFBpeGVscykp
OwotICAgIGlmIChyZXN1bHRhbnRCaXRtYXAgJiYgIXJlc3VsdGFudEJpdG1hcC0+Ynl0ZXMoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHJlc3VsdGFudEJpdG1hcC5yZWxlYXNlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBTaGFyZWRCaXRtYXA6OmNyZWF0ZShjb25z
dCBWZWN0b3I8dW5zaWduZWQ+JiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGhhc0Fs
cGhhKQotewotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IHJlc3VsdCA9IGNyZWF0ZShzaXplLCBC
aXRtYXBJbmZvOjpCaXRDb3VudDMyLCBmYWxzZSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIG1lbWNweShyZXN1bHQtPmJ5dGVzKCksIGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOwotICAgIHJlc3VsdC0+c2V0SGFzQWxwaGEoaGFz
QWxwaGEpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi1TaGFyZWRCaXRtYXA6
OlNoYXJlZEJpdG1hcChjb25zdCBJbnRTaXplJiBzaXplLCBCaXRtYXBJbmZvOjpCaXRDb3VudCBi
aXRDb3VudCwgYm9vbCBpbml0UGl4ZWxzKQotICAgIDogbV9ibXBJbmZvKEJpdG1hcEluZm86OmNy
ZWF0ZUJvdHRvbVVwKHNpemUsIGJpdENvdW50KSkKLSAgICAsIG1fbG9ja2VkKGZhbHNlKQotICAg
ICwgbV91c2VzVHJhbnNwYXJlbnRDb2xvcihmYWxzZSkKLSAgICAsIG1fdHJhbnNwYXJlbnRDb2xv
cihSR0IoMCwgMCwgMCkpCi0gICAgLCBtX3BpeGVscygwKQotICAgICwgbV9oYXNBbHBoYShmYWxz
ZSkKLSAgICAsIG1fdmFsaWRIZWlnaHQoYWJzKHNpemUuaGVpZ2h0KCkpKQotewotI2lmbmRlZiBO
REVCVUcKLSAgICBzaGFyZWRCaXRtYXBMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKLSNlbmRpZgot
Ci0gICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1wSW5mby5udW1QaXhlbHMoKTsKLSAgICBp
ZiAoYml0Q291bnQgPT0gQml0bWFwSW5mbzo6Qml0Q291bnQxNikKLSAgICAgICAgYnVmZmVyU2l6
ZSAvPSAyOwotCi0gICAgbV9waXhlbERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+
KGJ1ZmZlclNpemUpOwotICAgIG1fcGl4ZWxzID0gbV9waXhlbERhdGEuZ2V0KCk7Ci0KLSAgICBp
ZiAoaW5pdFBpeGVscykKLSAgICAgICAgcmVzZXRQaXhlbHMoKTsKLX0KLQotU2hhcmVkQml0bWFw
Ojp+U2hhcmVkQml0bWFwKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgc2hhcmVkQml0bWFwTGVh
a0NvdW50ZXIuZGVjcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTaGFyZWRCaXRtYXA6OnJl
c2V0UGl4ZWxzKGJvb2wgYmxhY2spCi17Ci0gICAgaWYgKCFtX3BpeGVscykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1wSW5mby5udW1QaXhlbHMoKTsK
LSAgICBpZiAoYmxhY2spIHsKLSAgICAgICAgdW5zaWduZWQgYnVmZmVyU2l6ZUluQnl0ZXMgPSBi
dWZmZXJTaXplICogKGlzMTZiaXQoKSA/IDIgOiA0KTsKLSAgICAgICAgbWVtc2V0KG1fcGl4ZWxz
LCAwLCBidWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoaXMxNmJpdCgpKSB7Ci0gICAgICAgIC8vIEZpbGwgaXQgd2l0aCB3aGl0ZSBjb2xvcgotICAg
ICAgICB3bWVtc2V0KHN0YXRpY19jYXN0PHdjaGFyX3QqPihtX3BpeGVscyksIDB4RkZGRiwgYnVm
ZmVyU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGl0IHdoaXRl
IGJ1dCB0cmFuc3BhcmVudAotICAgIHVuc2lnbmVkKiBwaXhlbCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkKj4obV9waXhlbHMpOwotICAgIGNvbnN0IHVuc2lnbmVkKiBidWZmZXJFbmQgPSBwaXhlbCAr
IGJ1ZmZlclNpemU7Ci0gICAgd2hpbGUgKHBpeGVsIDwgYnVmZmVyRW5kKQotICAgICAgICAqcGl4
ZWwrKyA9IDB4MDBGRkZGRkY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY29u
dmVydDMyVG8xNih1bnNpZ25lZCBwaXhlbCkKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCByID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChwaXhlbCAmIDB4MDBGODAwMDApID4+IDgpOwotICAg
IHVuc2lnbmVkIHNob3J0IGcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKHBpeGVsICYg
MHgwMDAwRkMwMCkgPj4gNSk7Ci0gICAgdW5zaWduZWQgc2hvcnQgYiA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigocGl4ZWwgJiAweDAwMDAwMEY4KSA+PiAzKTsKLSAgICByZXR1cm4gciB8
IGcgfCBiOwotfQotCi1ib29sIFNoYXJlZEJpdG1hcDo6dG8xNmJpdCgpCi17Ci0gICAgaWYgKG1f
bG9ja2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzMTZiaXQoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBCaXRtYXBJbmZvIG5ld0JtcEluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGUobV9ibXBJbmZvLnNpemUoKSwgQml0bWFwSW5mbzo6Qml0Q291bnQxNik7Ci0KLSAg
ICBpbnQgd2lkdGggPSBuZXdCbXBJbmZvLndpZHRoKCk7Ci0gICAgaW50IHBhZGRlZFdpZHRoID0g
bmV3Qm1wSW5mby5wYWRkZWRXaWR0aCgpOwotICAgIGludCBidWZmZXJTaXplID0gcGFkZGVkV2lk
dGggKiBuZXdCbXBJbmZvLmhlaWdodCgpOwotICAgIGF1dG8gbmV3UGl4ZWxEYXRhID0gc3RkOjpt
YWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihidWZmZXJTaXplIC8gMik7Ci0gICAgdm9pZCogbmV3UGl4
ZWxzID0gbmV3UGl4ZWxEYXRhLmdldCgpOwotCi0gICAgaWYgKCFuZXdQaXhlbHMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHNob3J0KiBwMTYgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KG5ld1BpeGVscyk7Ci0gICAgY29uc3QgdW5zaWduZWQqIHAzMiA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4obV9waXhlbHMpOwotCi0gICAgYm9vbCBza2lwcyA9
IHBhZGRlZFdpZHRoICE9IHdpZHRoOwotCi0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIHAxNmVu
ZCA9IHAxNiArIGJ1ZmZlclNpemU7Ci0gICAgd2hpbGUgKHAxNiA8IHAxNmVuZCkgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIHNob3J0KiBwMTZsaW5lRW5kID0gcDE2ICsgd2lkdGg7IHAxNiA8IHAx
NmxpbmVFbmQ7ICkKLSAgICAgICAgICAgICpwMTYrKyA9IGNvbnZlcnQzMlRvMTYoKnAzMisrKTsK
LQotICAgICAgICBpZiAoc2tpcHMpCi0gICAgICAgICAgICAqcDE2KysgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX2hiaXRtYXApCi0gICAgICAgIG1faGJpdG1hcCA9IG51bGxwdHI7Ci0gICAgZWxz
ZQotICAgICAgICBtX3BpeGVsRGF0YSA9IG5ld1BpeGVsRGF0YS5yZWxlYXNlKCk7Ci0KLSAgICBt
X3BpeGVscyA9IG5ld1BpeGVsczsKLSAgICBtX2JtcEluZm8gPSBuZXdCbXBJbmZvOwotCi0gICAg
c2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNoYXJlZEJp
dG1hcDo6ZnJlZU1lbW9yeSgpCi17Ci0gICAgaWYgKG1fbG9ja2VkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9oYml0bWFwKSB7Ci0gICAgICAgIG1faGJpdG1hcCA9IG51bGxw
dHI7Ci0gICAgICAgIG1fcGl4ZWxzID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKG1fcGl4ZWxzKSB7Ci0gICAgICAgIG1fcGl4ZWxEYXRhID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9waXhlbHMgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLUdESU9iamVjdDxIQklUTUFQPiBTaGFyZWRCaXRtYXA6OmNyZWF0
ZUhhbmRsZSh2b2lkKiogcGl4ZWxzLCBCaXRtYXBJbmZvKiBibXBJbmZvLCBpbnQgaGVpZ2h0LCBi
b29sIHVzZTE2Yml0KSBjb25zdAotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKGhlaWdodCA9PSAtMSkKLSAgICAgICAgaGVpZ2h0ID0gdGhp
cy0+aGVpZ2h0KCk7Ci0gICAgKmJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJ
bnRTaXplKHdpZHRoKCksIGhlaWdodCksICh1c2UxNmJpdCB8fCBpczE2Yml0KCkpID8gQml0bWFw
SW5mbzo6Qml0Q291bnQxNiA6IEJpdG1hcEluZm86OkJpdENvdW50MzIpOwotCi0gICAgYXV0byBo
Ym1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsIGJtcEluZm8sIERJQl9S
R0JfQ09MT1JTLCBwaXhlbHMsIDAsIDApKTsKLQotICAgIGlmICghaGJtcCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJtcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVD
b21wYXRpYmxlREMoMCkpOwotICAgIEhHRElPQkogaE9sZEJtcCA9IFNlbGVjdE9iamVjdChibXBE
Qy5nZXQoKSwgaGJtcC5nZXQoKSk7Ci0KLSAgICBTdHJldGNoRElCaXRzKGJtcERDLmdldCgpLCAw
LCAwLCB3aWR0aCgpLCBoZWlnaHQsIDAsIDAsIHdpZHRoKCksIGhlaWdodCwgbV9waXhlbHMsICZt
X2JtcEluZm8sIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsKLQotICAgIFNlbGVjdE9iamVjdChi
bXBEQy5nZXQoKSwgaE9sZEJtcCk7Ci0KLSAgICByZXR1cm4gaGJtcDsKLX0KLQotYm9vbCBTaGFy
ZWRCaXRtYXA6OmVuc3VyZUhhbmRsZSgpCi17Ci0gICAgaWYgKG1faGJpdG1hcCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAobV9sb2NrZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJpdG1h
cEluZm8gYm1wSW5mbzsKLSAgICB2b2lkKiBwaXhlbHM7Ci0gICAgbV9oYml0bWFwID0gY3JlYXRl
SGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgIWhhc0FscGhhKCkpOwotCi0gICAgaWYgKCFt
X2hiaXRtYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGl4ZWxEYXRhID0gbnVs
bHB0cjsKLSAgICBtX3BpeGVscyA9IHBpeGVsczsKLSAgICBtX2JtcEluZm8gPSBibXBJbmZvOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjdHh0LT5kcmF3Qml0bWFwKHRoaXMsIGRzdFJlY3QsIHNyY1JlY3Qs
IHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgU2hh
cmVkQml0bWFwOjpkcmF3KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSEJJVE1BUCBoYml0bWFwID0gMDsKLSAgICBHRElPYmplY3Q8SEJJVE1BUD4g
aFRlbXBCaXRtYXA7Ci0gICAgYm9vbCB1c2luZ0hhbmRsZSA9IGNvbXBvc2l0ZU9wID09IENvbXBv
c2l0ZVNvdXJjZU92ZXIgJiYgKGhhc0FscGhhKCkgJiYgaGFzQWxwaGFCbGVuZFN1cHBvcnQoKSB8
fCB1c2VzVHJhbnNwYXJlbnRDb2xvcigpKTsKLQotICAgIGlmICh1c2luZ0hhbmRsZSkgewotICAg
ICAgICBpZiAoZW5zdXJlSGFuZGxlKCkpCi0gICAgICAgICAgICBoYml0bWFwID0gbV9oYml0bWFw
LmdldCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZvaWQqIHBpeGVsczsKLSAgICAg
ICAgICAgIEJpdG1hcEluZm8gYm1wSW5mbzsKLSAgICAgICAgICAgIGhUZW1wQml0bWFwID0gY3Jl
YXRlSGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgdXNlc1RyYW5zcGFyZW50Q29sb3IoKSk7
Ci0gICAgICAgICAgICBoYml0bWFwID0gaFRlbXBCaXRtYXAuZ2V0KCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKCFoYml0bWFwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIg
Y29tcG9zaXRlIG9wZXJhdGlvbiB0eXBlcz8KLSAgICAgICAgRFdPUkQgcm9wID0gY29tcG9zaXRl
T3AgPT0gQ29tcG9zaXRlQ29weSA/IFNSQ0NPUFkKLSAgICAgICAgICAgIDogY29tcG9zaXRlT3Ag
PT0gQ29tcG9zaXRlWE9SID8gUEFUSU5WRVJUCi0gICAgICAgICAgICA6IGNvbXBvc2l0ZU9wID09
IENvbXBvc2l0ZUNsZWFyID8gV0hJVEVORVNTCi0gICAgICAgICAgICA6IFNSQ0NPUFk7Ci0KLSAg
ICAgICAgU3RyZXRjaERJQml0cyhoZGMsIGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVj
dC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgc3JjUmVjdC54KCksIHNy
Y1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIG1fcGl4ZWxzLCAm
bV9ibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcm9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gaG1lbWRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMo
aGRjKSk7Ci0gICAgSEdESU9CSiBoT2xkQm1wID0gU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwg
aGJpdG1hcCk7Ci0KLSAgICBpZiAoIXVzZXNUcmFuc3BhcmVudENvbG9yKCkgJiYgaGFzQWxwaGFC
bGVuZFN1cHBvcnQoKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgQkxFTkRGVU5DVElPTiBibGVu
ZCA9IHsgQUNfU1JDX09WRVIsIDAsIDI1NSwgQUNfU1JDX0FMUEhBIH07Ci0gICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFscGhhQmxlbmRJZlN1cHBvcnRlZChoZGMsIGRzdFJlY3QueCgpLCBkc3RSZWN0
LnkoKSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpLCBobWVtZGMuZ2V0KCksCi0g
ICAgICAgICAgICBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNyY1JlY3Qud2lkdGgoKSwgc3Jj
UmVjdC5oZWlnaHQoKSwgYmxlbmQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zcGFyZW50Qmx0KGhkYywgZHN0UmVj
dC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksIGht
ZW1kYy5nZXQoKSwKLSAgICAgICAgICAgIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgc3JjUmVj
dC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCB0cmFuc3BhcmVudENvbG9yKCkpOwotICAgIH0K
LQotICAgIFNlbGVjdE9iamVjdChobWVtZGMuZ2V0KCksIGhPbGRCbXApOwotfQotCi1HRElPYmpl
Y3Q8SEJJVE1BUD4gU2hhcmVkQml0bWFwOjpjbGlwQml0bWFwKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGJvb2wgdXNlQWxwaGEsIEJpdG1hcEluZm8mIGJtcEluZm8sIHZvaWQqJiBwaXhlbHMpCi17Ci0g
ICAgaWYgKCFieXRlcygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGludCBvbGRX
aWR0aCA9IHdpZHRoKCk7Ci0gICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwotICAgIGludCBj
b3B5V2lkdGggPSBzdGQ6Om1pbjxpbnQ+KHJlY3Qud2lkdGgoKSwgb2xkV2lkdGggLSByZWN0Lngo
KSk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHJlY3QuaGVpZ2h0KCksIG9s
ZEhlaWdodCAtIHJlY3QueSgpKTsKLSAgICBpZiAoIWNvcHlXaWR0aCB8fCAhY29weUhlaWdodCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBibXBJbmZvID0gQml0bWFwSW5mbzo6Y3Jl
YXRlQm90dG9tVXAoSW50U2l6ZShjb3B5V2lkdGgsIGNvcHlIZWlnaHQpLCAodXNlQWxwaGEgJiYg
aXMzMmJpdCgpKSA/IEJpdG1hcEluZm86OkJpdENvdW50MzIgOiBCaXRtYXBJbmZvOjpCaXRDb3Vu
dDE2KTsKLSAgICBhdXRvIG5ld0JtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlv
bigwLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApKTsKLQotICAgIGlm
ICghbmV3Qm1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZGNOZXcgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgSEdESU9CSiB0bXBO
ZXcgPSBTZWxlY3RPYmplY3QoZGNOZXcuZ2V0KCksIG5ld0JtcC5nZXQoKSk7Ci0KLSAgICBTdHJl
dGNoRElCaXRzKGRjTmV3LmdldCgpLCAwLCAwLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LAotICAgICAgICBieXRlcygpLCAm
Yml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7Ci0KLSAgICBTZWxlY3RPYmpl
Y3QoZGNOZXcuZ2V0KCksIHRtcE5ldyk7Ci0gICAgcmV0dXJuIG5ld0JtcDsKLX0KLQotUGFzc1Jl
ZlB0cjxTaGFyZWRCaXRtYXA+IFNoYXJlZEJpdG1hcDo6Y2xpcEJpdG1hcChjb25zdCBJbnRSZWN0
JiByZWN0LCBib29sIHVzZUFscGhhKQotewotICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7Ci0g
ICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwotICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1p
bjxpbnQ+KHJlY3Qud2lkdGgoKSwgb2xkV2lkdGggLSByZWN0LngoKSk7Ci0gICAgaW50IGNvcHlI
ZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHJlY3QuaGVpZ2h0KCksIG9sZEhlaWdodCAtIHJlY3QueSgp
KTsKLSAgICBpZiAoIWNvcHlXaWR0aCB8fCAhY29weUhlaWdodCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBuZXdCbXAgPSBjcmVhdGUoSW50U2l6ZShjb3B5
V2lkdGgsIGNvcHlIZWlnaHQpLCB1c2VBbHBoYSAmJiBpczMyYml0KCkgPyBCaXRtYXBJbmZvOjpC
aXRDb3VudDMyIDogQml0bWFwSW5mbzo6Qml0Q291bnQxNiwgZmFsc2UpOwotCi0gICAgaWYgKCFu
ZXdCbXAgfHwgIW5ld0JtcC0+Ynl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBEQ0hv
bGRlciBkY05ldyhuZXdCbXAuZ2V0KCkpOwotCi0gICAgU3RyZXRjaERJQml0cyhkY05ldy5nZXQo
KSwgMCwgMCwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCByZWN0LngoKSwgcmVjdC55KCksIGNvcHlX
aWR0aCwgY29weUhlaWdodCwKLSAgICAgICAgYnl0ZXMoKSwgJmJpdG1hcEluZm8oKSwgRElCX1JH
Ql9DT0xPUlMsIFNSQ0NPUFkpOwotCi0gICAgcmV0dXJuIG5ld0JtcDsKLX0KLQotc3RhdGljIHZv
aWQgZHJhd1BhdHRlcm5TaW1wbGUoSERDIGhkYywgY29uc3QgUkVDVCYgZGVzdFJlY3QsIEhCSVRN
QVAgaGJtcCwgY29uc3QgUE9JTlQmIHBoYXNlKQotewotICAgIGF1dG8gaEJydXNoID0gYWRvcHRH
RElPYmplY3QoOjpDcmVhdGVQYXR0ZXJuQnJ1c2goaGJtcCkpOwotICAgIGlmICghaEJydXNoKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBQT0lOVCBvbGRPcmc7Ci0gICAgU2V0QnJ1c2hPcmdFeCho
ZGMsIGRlc3RSZWN0LmxlZnQgLSBwaGFzZS54LCBkZXN0UmVjdC50b3AgLSBwaGFzZS55LCAmb2xk
T3JnKTsKLSAgICBGaWxsUmVjdChoZGMsICZkZXN0UmVjdCwgaEJydXNoLmdldCgpKTsKLSAgICBT
ZXRCcnVzaE9yZ0V4KGhkYywgb2xkT3JnLngsIG9sZE9yZy55LCAwKTsKLX0KLQotc3RhdGljIHZv
aWQgZHJhd1BhdHRlcm5TaW1wbGUoSERDIGhkYywgY29uc3QgUkVDVCYgZGVzdFJlY3QsIGNvbnN0
IFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBTSVpFJiBibXBTaXplLCBjb25zdCBQT0lOVCYgcGhh
c2UpCi17Ci0gICAgaW50IGRzdFkgPSBkZXN0UmVjdC50b3A7Ci0gICAgZm9yIChpbnQgc291cmNl
WSA9IHBoYXNlLnk7IGRzdFkgPCBkZXN0UmVjdC5ib3R0b207ICkgewotICAgICAgICBpbnQgc291
cmNlSCA9IHN0ZDo6bWluPGludD4oYm1wU2l6ZS5jeSAtIHNvdXJjZVksIGRlc3RSZWN0LmJvdHRv
bSAtIGRzdFkpOwotICAgICAgICBpbnQgZHN0WCA9IGRlc3RSZWN0LmxlZnQ7Ci0gICAgICAgIGZv
ciAoaW50IHNvdXJjZVggPSBwaGFzZS54OyBkc3RYIDwgZGVzdFJlY3QucmlnaHQ7ICkgewotICAg
ICAgICAgICAgaW50IHNvdXJjZVcgPSBzdGQ6Om1pbjxpbnQ+KGJtcFNpemUuY3ggLSBzb3VyY2VY
LCBkZXN0UmVjdC5yaWdodCAtIGRzdFgpOwotCi0gICAgICAgICAgICBTdHJldGNoRElCaXRzKGhk
YywgZHN0WCwgZHN0WSwgc291cmNlVywgc291cmNlSCwgc291cmNlWCwgc291cmNlWSwgc291cmNl
Vywgc291cmNlSCwKLSAgICAgICAgICAgICAgICBibXAtPmJ5dGVzKCksICZibXAtPmJpdG1hcElu
Zm8oKSwgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOwotCi0gICAgICAgICAgICBkc3RYICs9IHNv
dXJjZVc7Ci0gICAgICAgICAgICBzb3VyY2VYID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGRz
dFkgKz0gc291cmNlSDsKLSAgICAgICAgc291cmNlWSA9IDA7Ci0gICAgfQotfQotCi1zdGF0aWMg
TE9ORyBub3JtYWxpemVQaGFzZShMT05HIHBoYXNlLCBpbnQgbGltaXQpCi17Ci0gICAgaWYgKCFw
aGFzZSB8fCBsaW1pdCA8IDIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGxpbWl0ID09
IDIpCi0gICAgICAgIHJldHVybiBwaGFzZSAmIDE7Ci0KLSAgICBpZiAocGhhc2UgPCAwKSB7Ci0g
ICAgICAgIHBoYXNlID0gLXBoYXNlOwotICAgICAgICBpZiAocGhhc2UgPiBsaW1pdCkKLSAgICAg
ICAgICAgIHBoYXNlID0gc3RhdGljX2Nhc3Q8TE9ORz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBo
YXNlKSAlIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW1pdCkpOwotICAgICAgICBpZiAocGhhc2Up
Ci0gICAgICAgICAgICBwaGFzZSA9IGxpbWl0IC0gcGhhc2U7Ci0gICAgICAgIHJldHVybiBwaGFz
ZTsKLSAgICB9Ci0KLSAgICBpZiAocGhhc2UgPCBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHBoYXNl
OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PExPTkc+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihw
aGFzZSkgJSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGltaXQpKTsKLX0KLQotdm9pZCBTaGFyZWRC
aXRtYXA6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKLXsKLSAgICBpZiAoIW1f
cGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0gICAgY3R4dC0+ZHJhd0JpdG1hcFBhdHRlcm4odGhp
cywgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0LCBvcmlnU291cmNlU2l6ZSk7Ci19Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpk
cmF3UGF0dGVybihIREMgaGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKLXsK
LSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodGlsZVJlY3RJ
bi53aWR0aCgpIDw9IDAgfHwgdGlsZVJlY3RJbi5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIHVzZUFscGhhID0gb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBo
YXNBbHBoYSgpICYmIGlzMzJiaXQoKTsKLQotICAgIGludCBibXBXaWR0aCA9IHdpZHRoKCk7Ci0g
ICAgaW50IGJtcEhlaWdodCA9IGhlaWdodCgpOwotCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KHRp
bGVSZWN0SW4pOwotICAgIGlmIChibXBXaWR0aCAhPSBvcmlnU291cmNlU2l6ZS53aWR0aCgpKSB7
Ci0gICAgICAgIGRvdWJsZSByYXRlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihibXBXaWR0aCkgLyBv
cmlnU291cmNlU2l6ZS53aWR0aCgpOwotICAgICAgICBkb3VibGUgdGVtcCA9IHRpbGVSZWN0Lndp
ZHRoKCkgKiByYXRlOwotICAgICAgICB0aWxlUmVjdC5zZXRYKHRpbGVSZWN0LngoKSAqIHJhdGUp
OwotICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCh0ZW1wKTsKLSAgICAgICAgdGVtcCA9IHRpbGVS
ZWN0LmhlaWdodCgpICogcmF0ZTsKLSAgICAgICAgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55KCkg
KiByYXRlKTsKLSAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KHRlbXApOwotICAgIH0KLQotICAg
IEdESU9iamVjdDxIQklUTUFQPiBjbGlwcGVkQm1wOwotCi0gICAgaWYgKHRpbGVSZWN0LngoKSB8
fCB0aWxlUmVjdC55KCkgfHwgdGlsZVJlY3Qud2lkdGgoKSAhPSBibXBXaWR0aCB8fCB0aWxlUmVj
dC5oZWlnaHQoKSAhPSBibXBIZWlnaHQpIHsKLSAgICAgICAgQml0bWFwSW5mbyBwYXR0ZXJuQm1w
SW5mbzsKLSAgICAgICAgdm9pZCogcGF0dGVyblBpeGVsczsKLSAgICAgICAgY2xpcHBlZEJtcCA9
IGNsaXBCaXRtYXAoSW50UmVjdCh0aWxlUmVjdCksIHVzZUFscGhhLCBwYXR0ZXJuQm1wSW5mbywg
cGF0dGVyblBpeGVscyk7Ci0gICAgICAgIGlmICghY2xpcHBlZEJtcCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBibXBXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCk7Ci0gICAgICAgIGJt
cEhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpOwotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9y
bSB0ZiA9IHBhdHRlcm5UcmFuc2Zvcm0gKiB0cmFuc2Zvcm07Ci0KLSAgICBGbG9hdFJlY3QgdHJS
ZWN0ID0gdGYubWFwUmVjdChkZXN0UmVjdCk7Ci0KLSAgICBSRUNUIGNsaXBCb3g7Ci0gICAgaW50
IGNsaXBUeXBlID0gR2V0Q2xpcEJveChoZGMsICZjbGlwQm94KTsKLSAgICBpZiAoY2xpcFR5cGUg
PT0gU0lNUExFUkVHSU9OKQotICAgICAgICB0clJlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChjbGlw
Qm94LmxlZnQsIGNsaXBCb3gudG9wLCBjbGlwQm94LnJpZ2h0IC0gY2xpcEJveC5sZWZ0LCBjbGlw
Qm94LmJvdHRvbSAtIGNsaXBCb3gudG9wKSk7Ci0gICAgZWxzZSBpZiAoY2xpcFR5cGUgPT0gQ09N
UExFWFJFR0lPTikgewotICAgICAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICBpZiAoR2V0Q2xpcFJnbihoZGMsIGNs
aXBSZ24uZ2V0KCkpID4gMCkgewotICAgICAgICAgICAgRFdPUkQgcmVnaW9uRGF0YVNpemUgPSBH
ZXRSZWdpb25EYXRhKGNsaXBSZ24uZ2V0KCksIHNpemVvZihSR05EQVRBKSwgMCk7Ci0gICAgICAg
ICAgICBpZiAocmVnaW9uRGF0YVNpemUpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UkdOREFU
QT4gcmVnaW9uRGF0YShyZWdpb25EYXRhU2l6ZSk7Ci0gICAgICAgICAgICAgICAgR2V0UmVnaW9u
RGF0YShjbGlwUmduLmdldCgpLCByZWdpb25EYXRhU2l6ZSwgcmVnaW9uRGF0YS5kYXRhKCkpOwot
ICAgICAgICAgICAgICAgIFJFQ1QqIHJlY3QgPSByZWludGVycHJldF9jYXN0PFJFQ1QqPihyZWdp
b25EYXRhWzBdLkJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZm9yIChEV09SRCBpID0gMDsgaSA8
IHJlZ2lvbkRhdGFbMF0ucmRoLm5Db3VudDsgKytpLCArK3JlY3QpCi0gICAgICAgICAgICAgICAg
ICAgIHRyUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVj
dC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0clJlY3Qud2lkdGgoKSA8PSAw
IHx8IHRyUmVjdC5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0clJlY3Qu
aW5mbGF0ZSgxKTsKLSAgICBJbnRSZWN0IHZpc2libGVEc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dCh0Zi5pbnZlcnNlKCkubWFwUmVjdCh0clJlY3QpKTsKLSAgICB2aXNpYmxlRHN0UmVjdC5pbnRl
cnNlY3QoSW50UmVjdChkZXN0UmVjdCkpOwotCi0gICAgaWYgKHZpc2libGVEc3RSZWN0LndpZHRo
KCkgPD0gMCB8fCB2aXNpYmxlRHN0UmVjdC5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0clJlY3QgPSB0Zi5tYXBSZWN0KHZpc2libGVEc3RSZWN0KTsKLSAgICBSRUNUIGRz
dFJlY3RXaW4gPSB7Ci0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC54KCkpLAotICAgICAgICBz
dGFibGVSb3VuZCh0clJlY3QueSgpKSwKLSAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0Lm1heFgo
KSksCi0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC5tYXhZKCkpLAotICAgIH07Ci0gICAgaWYg
KGRzdFJlY3RXaW4ucmlnaHQgPD0gZHN0UmVjdFdpbi5sZWZ0IHx8IGRzdFJlY3RXaW4uYm90dG9t
IDw9IGRzdFJlY3RXaW4udG9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTSVpFIGJtcFNpemUg
PSB7IGJtcFdpZHRoLCBibXBIZWlnaHQgfTsKLQotICAgIC8vIFJlbGF0aXZlIHRvIGRlc3RpbmF0
aW9uLCBpbiBiaXRtYXAgcGl4ZWxzCi0gICAgUE9JTlQgcGhhc2VXaW4gPSB7IHN0YWJsZVJvdW5k
KHZpc2libGVEc3RSZWN0LngoKSAtIHBoYXNlLngoKSksIHN0YWJsZVJvdW5kKHZpc2libGVEc3RS
ZWN0LnkoKSAtIHBoYXNlLnkoKSkgfTsKLSAgICBwaGFzZVdpbi54ID0gbm9ybWFsaXplUGhhc2Uo
cGhhc2VXaW4ueCwgYm1wU2l6ZS5jeCk7Ci0gICAgcGhhc2VXaW4ueSA9IG5vcm1hbGl6ZVBoYXNl
KHBoYXNlV2luLnksIGJtcFNpemUuY3kpOwotCi0gICAgUkVDVCBzcmNSZWN0V2luID0gewotICAg
ICAgICAwLAotICAgICAgICAwLAotICAgICAgICBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC5t
YXhYKCkpIC0gc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueCgpKSwKLSAgICAgICAgc3RhYmxl
Um91bmQodmlzaWJsZURzdFJlY3QubWF4WSgpKSAtIHN0YWJsZVJvdW5kKHZpc2libGVEc3RSZWN0
LnkoKSkKLSAgICB9OwotICAgIGlmIChzcmNSZWN0V2luLnJpZ2h0IDw9IDAgfHwgc3JjUmVjdFdp
bi5ib3R0b20gPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQml0bWFwSW5mbyBibXBJbmZv
ID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZShzcmNSZWN0V2luLnJpZ2h0LCBz
cmNSZWN0V2luLmJvdHRvbSksIHVzZUFscGhhID8gQml0bWFwSW5mbzo6Qml0Q291bnQzMiA6IEJp
dG1hcEluZm86OkJpdENvdW50MTYpOwotICAgIHZvaWQqIHBpeGVsczsKLSAgICBhdXRvIGhibXBU
ZW1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXBJbmZvLCBESUJf
UkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpOwotCi0gICAgaWYgKCFoYm1wVGVtcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBobWVtZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQyhoZGMpKTsKLSAgICBIR0RJT0JKIG9sZEJtcCA9IFNlbGVjdE9iamVjdChobWVt
ZGMuZ2V0KCksIGhibXBUZW1wLmdldCgpKTsKLSAgICBpZiAoY2xpcHBlZEJtcCkKLSAgICAgICAg
ZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCBjbGlwcGVkQm1wLmdl
dCgpLCBwaGFzZVdpbik7Ci0gICAgZWxzZSBpZiAoKG9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIg
fHwgY2FuVXNlRElCaXRzKCkpICYmIHNyY1JlY3RXaW4ucmlnaHQgPD0gYm1wU2l6ZS5jeCAqIDIg
JiYgc3JjUmVjdFdpbi5ib3R0b20gPD0gYm1wU2l6ZS5jeSAqIDIpCi0gICAgICAgIGRyYXdQYXR0
ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwgdGhpcywgYm1wU2l6ZSwgcGhhc2VX
aW4pOwotICAgIGVsc2UgaWYgKGVuc3VyZUhhbmRsZSgpKQotICAgICAgICBkcmF3UGF0dGVyblNp
bXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RXaW4sIGdldEhhbmRsZSgpLCBwaGFzZVdpbik7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHZvaWQqIHBpeGVsczsKLSAgICAgICAgQml0bWFwSW5mbyBibXBJ
bmZvOwotICAgICAgICBhdXRvIGhibXAgPSBjcmVhdGVIYW5kbGUoJnBpeGVscywgJmJtcEluZm8s
IC0xLCBmYWxzZSk7Ci0gICAgICAgIGlmIChoYm1wKQotICAgICAgICAgICAgZHJhd1BhdHRlcm5T
aW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCBoYm1wLmdldCgpLCBwaGFzZVdpbik7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgb2xk
Qm1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh1
c2VBbHBoYSAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBCTEVOREZVTkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwgMCwgMjU1LCBBQ19TUkNfQUxQ
SEEgfTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gYWxwaGFCbGVuZElmU3VwcG9ydGVkKGhkYywg
ZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2luLnRvcCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJl
Y3RXaW4ubGVmdCwgZHN0UmVjdFdpbi5ib3R0b20gLSBkc3RSZWN0V2luLnRvcCwKLSAgICAgICAg
ICAgIGhtZW1kYy5nZXQoKSwgMCwgMCwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0
b20sIGJsZW5kKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAg
ICB9IGVsc2UgaWYgKHVzZUFscGhhICYmICFoYXNBbHBoYUJsZW5kU3VwcG9ydCgpIHx8IG9wID09
IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgdXNlc1RyYW5zcGFyZW50Q29sb3IoKSkgewotICAgICAg
ICBUcmFuc3BhcmVudEJsdChoZGMsIGRzdFJlY3RXaW4ubGVmdCwgZHN0UmVjdFdpbi50b3AsIGRz
dFJlY3RXaW4ucmlnaHQgLSBkc3RSZWN0V2luLmxlZnQsCi0gICAgICAgICAgICBkc3RSZWN0V2lu
LmJvdHRvbSAtIGRzdFJlY3RXaW4udG9wLCBobWVtZGMuZ2V0KCksIDAsIDAsIHNyY1JlY3RXaW4u
cmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tLCB0cmFuc3BhcmVudENvbG9yKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIERXT1JEIGJtcE9wID0gb3AgPT0gQ29tcG9zaXRlQ29weSA/IFNSQ0NPUFkK
LSAgICAgICAgICAgICAgICAgICAgOiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gU1JDQ09Q
WQotICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0ZVhPUiA/IFBBVElOVkVSVAot
ICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0ZUNsZWFyID8gV0hJVEVORVNTCi0g
ICAgICAgICAgICAgICAgICAgIDogU1JDQ09QWTsgLy8gRklYRU1FOiBvdGhlciB0eXBlcz8KLQot
ICAgICAgICBTdHJldGNoRElCaXRzKGhkYywgZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2luLnRv
cCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwKLSAgICAgICAgICAgIGRzdFJl
Y3RXaW4uYm90dG9tIC0gZHN0UmVjdFdpbi50b3AsIDAsIDAsIHNyY1JlY3RXaW4ucmlnaHQsIHNy
Y1JlY3RXaW4uYm90dG9tLAotICAgICAgICAgICAgcGl4ZWxzLCAmYm1wSW5mbywgRElCX1JHQl9D
T0xPUlMsIGJtcE9wKTsKLSAgICB9Ci0gICAgU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgb2xk
Qm1wKTsKLX0KLQotU2hhcmVkQml0bWFwOjpEQ1Byb3ZpZGVyKiBTaGFyZWRCaXRtYXA6OnNfZGNQ
cm92aWRlciA9IG5ldyBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI7Ci0KLUhEQyBTaGFyZWRCaXRt
YXA6OkRDUHJvdmlkZXI6OmdldERDKFNoYXJlZEJpdG1hcCogYm1wLCB1bnNpZ25lZCoga2V5KQot
ewotICAgIGlmICghYm1wIHx8ICFibXAtPmVuc3VyZUhhbmRsZSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEhEQyBoZGMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7Ci0gICAgaWYgKCFoZGMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgKmtleSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQ+KFNlbGVjdE9iamVjdChoZGMsIGJtcC0+Z2V0SGFuZGxlKCkpKTsKLSAgICBSRUNUIHJlY3Qg
PSB7IDAsIDAsIGJtcC0+d2lkdGgoKSwgYm1wLT5oZWlnaHQoKSB9OwotICAgIGF1dG8gY2xpcFJn
biA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbkluZGlyZWN0KCZyZWN0KSk7Ci0gICAg
U2VsZWN0Q2xpcFJnbihoZGMsIGNsaXBSZ24uZ2V0KCkpOwotCi0gICAgcmV0dXJuIGhkYzsKLX0K
LQotdm9pZCBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI6OnJlbGVhc2VEQyhTaGFyZWRCaXRtYXAq
LCBIREMgaGRjLCB1bnNpZ25lZCBrZXkxKQotewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRjLCByZWludGVycHJldF9jYXN0PEhHRElPQko+KGtl
eTEpKTsKLSAgICBEZWxldGVEQyhoZGMpOwotfQotCi12b2lkIFNoYXJlZEJpdG1hcDo6Y2xlYXJQ
aXhlbHMoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGJtcFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
OwotICAgIGJtcFJlY3QuaW50ZXJzZWN0KHJlY3QpOwotICAgIGlmIChpczE2Yml0KCkpIHsKLSAg
ICAgICAgdW5zaWduZWQgdyA9IG1fYm1wSW5mby5wYWRkZWRXaWR0aCgpOwotICAgICAgICB1bnNp
Z25lZCBzaG9ydCogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihtX3BpeGVscyk7
Ci0gICAgICAgIGRzdCArPSBibXBSZWN0LnkoKSAqIHcgKyBibXBSZWN0LngoKTsKLSAgICAgICAg
aW50IHdvcmRzVG9TZXQgPSBibXBSZWN0LndpZHRoKCk7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0KiBkc3RFbmQgPSBkc3QgKyBibXBSZWN0LmhlaWdodCgpICogdzsKLSAgICAgICAgd2hp
bGUgKGRzdCA8IGRzdEVuZCkgewotICAgICAgICAgICAgd21lbXNldChyZWludGVycHJldF9jYXN0
PHdjaGFyX3QqPihkc3QpLCAwLCB3b3Jkc1RvU2V0KTsKLSAgICAgICAgICAgIGRzdCArPSB3Owot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3ID0gd2lk
dGgoKTsKLSAgICB1bnNpZ25lZCogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihtX3BpeGVs
cyk7Ci0gICAgZHN0ICs9IGJtcFJlY3QueSgpICogdyArIGJtcFJlY3QueCgpOwotICAgIGludCB3
b3Jkc1RvU2V0ID0gYm1wUmVjdC53aWR0aCgpICogMjsKLSAgICBjb25zdCB1bnNpZ25lZCogZHN0
RW5kID0gZHN0ICsgYm1wUmVjdC5oZWlnaHQoKSAqIHc7Ci0gICAgd2hpbGUgKGRzdCA8IGRzdEVu
ZCkgewotICAgICAgICB3bWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KGRzdCksIDAs
IHdvcmRzVG9TZXQpOwotICAgICAgICBkc3QgKz0gdzsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1NoYXJlZEJpdG1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvU2hhcmVkQml0bWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODk1
YjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
U2hhcmVkQml0bWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBw
YXJvZ2EuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNoYXJlZEJpdG1hcF9oCi0jZGVmaW5lIFNo
YXJlZEJpdG1hcF9oCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJC
aXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRT
aXplOwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci0KLWNsYXNzIFNoYXJlZEJpdG1hcDog
cHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQml0bWFwPiB7Ci1wdWJsaWM6Ci0gICAgflNoYXJlZEJp
dG1hcCgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gY3JlYXRlKGNvbnN0
IEludFNpemUmLCBCaXRtYXBJbmZvOjpCaXRDb3VudCA9IEJpdG1hcEluZm86OkJpdENvdW50MzIs
IGJvb2wgaW5pdFBpeGVscyA9IHRydWUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJp
dG1hcD4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mLCBjb25zdCBJbnRTaXplJiwgYm9v
bCBoYXNBbHBoYSA9IHRydWUpOwotCi0gICAgY29uc3QgQml0bWFwSW5mbyYgYml0bWFwSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mbzsgfQotICAgIHZvaWQqIGJ5dGVzKCkgeyByZXR1cm4g
bV9waXhlbHM7IH0KLSAgICBjb25zdCB2b2lkKiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4
ZWxzOyB9Ci0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8ud2lk
dGgoKTsgfQotICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mby5o
ZWlnaHQoKTsgfQotICAgIHVuc2lnbmVkIHZhbGlkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV92
YWxpZEhlaWdodDsgfQotICAgIHZvaWQgc2V0VmFsaWRIZWlnaHQodW5zaWduZWQgdmFsaWRIZWln
aHQpIHsgbV92YWxpZEhlaWdodCA9IHZhbGlkSGVpZ2h0OyB9Ci0gICAgdm9pZCByZXNldFBpeGVs
cyhib29sIGJsYWNrID0gZmFsc2UpOwotICAgIHZvaWQgY2xlYXJQaXhlbHMoY29uc3QgSW50UmVj
dCYgcik7Ci0gICAgYm9vbCBsb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2xvY2tlZDsgfQotICAg
IHZvaWQgbG9jaygpIHsgbV9sb2NrZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCB1bmxvY2soKSB7IG1f
bG9ja2VkID0gZmFsc2U7IH0KLSAgICBib29sIGZyZWVNZW1vcnkoKTsKLSAgICBib29sIGlzMTZi
aXQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8uaXMxNmJpdCgpOyB9Ci0gICAgYm9vbCBpczMy
Yml0KCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvLmlzMzJiaXQoKTsgfQotICAgIGJvb2wgdG8x
NmJpdCgpOwotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9
Ci0gICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1faGFzQWxwaGEgPSBhbHBoYTsg
fQotICAgIGJvb2wgZW5zdXJlSGFuZGxlKCk7Ci0gICAgSEJJVE1BUCBnZXRIYW5kbGUoKSB7IHJl
dHVybiBtX2hiaXRtYXAuZ2V0KCk7IH0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gY3JlYXRlSGFu
ZGxlKHZvaWQqKiBwaXhlbHMsIEJpdG1hcEluZm8qIGJtcEluZm8sIGludCBoID0gLTEsIGJvb2wg
dXNlMTZiaXQgPSB0cnVlKSBjb25zdDsKLSAgICBib29sIHVzZXNUcmFuc3BhcmVudENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VzVHJhbnNwYXJlbnRDb2xvcjsgfQotICAgIENPTE9SUkVGIHRy
YW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcGFyZW50Q29sb3I7IH0KLSAg
ICB2b2lkIHNldFRyYW5zcGFyZW50Q29sb3IoQ09MT1JSRUYgYykKLSAgICB7Ci0gICAgICAgIG1f
dXNlc1RyYW5zcGFyZW50Q29sb3IgPSB0cnVlOwotICAgICAgICBtX3RyYW5zcGFyZW50Q29sb3Ig
PSBjOwotICAgIH0KLSAgICBib29sIGNhblVzZURJQml0cygpIGNvbnN0IHsgcmV0dXJuICFoYXNB
bHBoYSgpICYmICF1c2VzVHJhbnNwYXJlbnRDb2xvcigpOyB9Ci0KLSAgICBHRElPYmplY3Q8SEJJ
VE1BUD4gY2xpcEJpdG1hcChjb25zdCBJbnRSZWN0JiwgYm9vbCB1c2VBbHBoYSwgQml0bWFwSW5m
byYsIHZvaWQqJiBwaXhlbHMpOwotCi0gICAgUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IGNsaXBC
aXRtYXAoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSk7Ci0KLSAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
SW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwotICAgIHZvaWQgZHJhdyhIREMsIGNvbnN0IEludFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEhE
QywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IElu
dFNpemUmIG9yaWdTb3VyY2VTaXplKTsKLQotICAgIGNsYXNzIERDUHJvdmlkZXIgewotICAgIHB1
YmxpYzoKLSAgICAgICAgdmlydHVhbCBIREMgZ2V0REMoU2hhcmVkQml0bWFwKiwgdW5zaWduZWQq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VEQyhTaGFyZWRCaXRtYXAqLCBIREMsIHVu
c2lnbmVkKTsKLSAgICB9OwotCi0gICAgc3RhdGljIERDUHJvdmlkZXIqIHNfZGNQcm92aWRlcjsK
LQotICAgIEhEQyBnZXREQyh1bnNpZ25lZCoga2V5MSkgeyByZXR1cm4gc19kY1Byb3ZpZGVyLT5n
ZXREQyh0aGlzLCBrZXkxKTsgfQotICAgIHZvaWQgcmVsZWFzZURDKEhEQyBoZGMsIHVuc2lnbmVk
IGtleTEpIHsgc19kY1Byb3ZpZGVyLT5yZWxlYXNlREModGhpcywgaGRjLCBrZXkxKTsgfQotCi0g
ICAgY2xhc3MgRENIb2xkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgRENIb2xkZXIoU2hhcmVk
Qml0bWFwKiBibXAgPSAwKSB7IHNldEludGVybmFsKGJtcCk7IH0KLSAgICAgICAgfkRDSG9sZGVy
KCkgeyBjbGVhckludGVybmFsKCk7IH0KLSAgICAgICAgdm9pZCBzZXQoU2hhcmVkQml0bWFwKiBi
bXAgPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhckludGVybmFsKCk7Ci0gICAgICAg
ICAgICBzZXRJbnRlcm5hbChibXApOwotICAgICAgICB9Ci0gICAgICAgIEhEQyBnZXQoKSBjb25z
dCB7IHJldHVybiBtX2hkYzsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIERDSG9sZGVyJiBvcGVy
YXRvcj0oY29uc3QgRENIb2xkZXImKTsKLSAgICAgICAgRENIb2xkZXIoY29uc3QgRENIb2xkZXIm
KTsKLSAgICAgICAgdm9pZCBjbGVhckludGVybmFsKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1faGRjKQotICAgICAgICAgICAgICAgIG1fYml0bWFwLT5yZWxlYXNlREMobV9oZGMsIG1f
a2V5KTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHNldEludGVybmFsKFNoYXJlZEJpdG1hcCog
Ym1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JpdG1hcCA9IGJtcDsKLSAgICAgICAgICAg
IG1faGRjID0gYm1wID8gYm1wLT5nZXREQygmbV9rZXkpIDogMDsKLSAgICAgICAgfQotICAgICAg
ICBTaGFyZWRCaXRtYXAqIG1fYml0bWFwOwotICAgICAgICBIREMgbV9oZGM7Ci0gICAgICAgIHVu
c2lnbmVkIG1fa2V5OwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgU2hhcmVkQml0bWFwKGNvbnN0
IEludFNpemUmLCBCaXRtYXBJbmZvOjpCaXRDb3VudCwgYm9vbCBpbml0UGl4ZWxzKTsKLSAgICBC
aXRtYXBJbmZvIG1fYm1wSW5mbzsKLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gbV9oYml0bWFwOwot
ICAgIHZvaWQqIG1fcGl4ZWxzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZFtdPiBtX3Bp
eGVsRGF0YTsKLSAgICBDT0xPUlJFRiBtX3RyYW5zcGFyZW50Q29sb3I7Ci0gICAgaW50IG1fdmFs
aWRIZWlnaHQ7Ci0gICAgYm9vbCBtX2xvY2tlZDsKLSAgICBib29sIG1fdXNlc1RyYW5zcGFyZW50
Q29sb3I7Ci0gICAgYm9vbCBtX2hhc0FscGhhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gU2hhcmVkQml0bWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjhmOGMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlIDxtbGFuZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhEQyBnX3NjcmVlbkRDOwotCi12b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1f
cGxhdGZvcm1EYXRhLm1ldHJpY3MoKTsKLSAgICBtX2lzU3lzdGVtRm9udCA9IG1fcGxhdGZvcm1E
YXRhLmlzU3lzdGVtRm9udCgpOwotCi0gICAgZmxvYXQgYXNjZW50ID0gKHRtLnRtQXNjZW50ICog
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzIuMGY7Ci0gICAgZmxvYXQgZGVzY2VudCA9
ICh0bS50bURlc2NlbnQgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3Mi4wZjsKLSAg
ICBmbG9hdCBsaW5lR2FwID0gKHRtLnRtRXh0ZXJuYWxMZWFkaW5nICogbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpICsgMzYpIC8gNzIuMGY7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNp
bmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChhc2NlbnQgKiAwLjU2Zik7Ci19Ci0KLXZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKLXsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2MoZm9udERlc2NyaXB0
aW9uKTsKLSAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAq
IGZvbnREZXNjLmNvbXB1dGVkU2l6ZSgpKSk7Ci0gICAgZm9udERlc2Muc2V0U3BlY2lmaWVkU2l6
ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2Muc3BlY2lmaWVkU2l6ZSgpKSk7Ci0gICAg
Zm9udERlc2Muc2V0S2V5d29yZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNjLmtl
eXdvcmRTaXplKCkpKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBmb250Q2FjaGUo
KS5nZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjLCBtX3BsYXRmb3JtRGF0YS5mYW1p
bHkoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKCpyZXN1bHQpOwotfQotCi1EV09SRCBnZXRLbm93bkZvbnRD
b2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKLQotYm9vbCBTaW1wbGVGb250RGF0YTo6
Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBj
b25zdAotewotICAgIGlmIChtX3BsYXRmb3JtRGF0YS5pc0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gRklYTUU6IE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIHNlZW1z
IHRvIGltcGx5IHRoYXQgY2hhcmFjdGVycyBjYW4gYmUgb3V0cHV0IHVzaW5nIGEgZ2l2ZW4gZm9u
dCBhbmQgREMKLSAgICAvLyBtZXJlbHkgYnkgdGVzdGluZyBjb2RlIHBhZ2UgaW50ZXJzZWN0aW9u
LiAgVGhpcyBzZWVtcyBzdXNwZWN0IHRob3VnaC4gIENhbid0IGEgZm9udCBvbmx5IHBhcnRpYWxs
eQotICAgIC8vIGNvdmVyIGEgZ2l2ZW4gY29kZSBwYWdlPwotCi0gICAgLy8gRklYTUU6IGluIHRo
ZSBjYXNlIHRoYXQgd2UgZmFpbGVkIHRvIGdldCB0aGUgaW50ZXJmYWNlLCBzdGlsbCB1c2UgdGhl
IGZvbnQuCi0gICAgSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUo
KS5nZXRGb250TGlua0ludGVyZmFjZSgpOwotICAgIGlmICghbGFuZ0ZvbnRMaW5rKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIERXT1JEIGZvbnRDb2RlUGFnZXMgPSBtX3BsYXRmb3JtRGF0
YS5jb2RlUGFnZXMoKTsKLSAgICBpZiAoIWZvbnRDb2RlUGFnZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIERXT1JEIGFjcENvZGVQYWdlcyA9IDA7Ci0gICAgbGFuZ0ZvbnRMaW5rLT5D
b2RlUGFnZVRvQ29kZVBhZ2VzKENQX0FDUCwgJmFjcENvZGVQYWdlcyk7Ci0KLSAgICBEV09SRCBh
Y3R1YWxDb2RlUGFnZXM7Ci0gICAgbG9uZyBudW1DaGFyYWN0ZXJzUHJvY2Vzc2VkOwotICAgIHdo
aWxlIChsZW5ndGgpIHsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRTdHJDb2RlUGFnZXMoY2hh
cmFjdGVycywgbGVuZ3RoLCBhY3BDb2RlUGFnZXMsICZhY3R1YWxDb2RlUGFnZXMsICZudW1DaGFy
YWN0ZXJzUHJvY2Vzc2VkKTsKLSAgICAgICAgaWYgKGFjdHVhbENvZGVQYWdlcyAmJiAhKGFjdHVh
bENvZGVQYWdlcyAmIGZvbnRDb2RlUGFnZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGxlbmd0aCAtPSBudW1DaGFyYWN0ZXJzUHJvY2Vzc2VkOwotICAgICAgICBjaGFy
YWN0ZXJzICs9IG51bUNoYXJhY3RlcnNQcm9jZXNzZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKLXsKLSAgICBp
ZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgVEVYVE1FVFJJQyYgdG0gPSBtX3BsYXRmb3JtRGF0YS5tZXRyaWNzKCk7Ci0KLSAgICAvLyBZ
ZXMsIHRoaXMgbG9va3MgYmFja3dhcmRzLCBidXQgdGhlIGZpeGVkIHBpdGNoIGJpdCBpcyBhY3R1
YWxseSBzZXQgaWYgdGhlIGZvbnQKLSAgICAvLyBpcyAqbm90KiBmaXhlZCBwaXRjaC4gIFVuYmVs
aWV2YWJsZSBidXQgdHJ1ZS4KLSAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gISh0bS50bVBpdGNo
QW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9QSVRDSCk7Ci19Ci0KLUZsb2F0UmVjdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci19Ci0gICAgCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChtX3BsYXRmb3JtRGF0YS5p
c0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSEdESU9CSiBoT2xkRm9udCA9
IFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKLQotICAg
IFNJWkUgZm9udFNpemU7Ci0gICAgd2NoYXJfdCBjID0gZ2x5cGg7Ci0gICAgR2V0VGV4dEV4dGVu
dFBvaW50MzIoZ19zY3JlZW5EQywgJmMsIDEsICZmb250U2l6ZSk7Ci0KLSAgICBTZWxlY3RPYmpl
Y3QoZ19zY3JlZW5EQywgaE9sZEZvbnQpOwotCi0gICAgcmV0dXJuIChmbG9hdClmb250U2l6ZS5j
eCAqIChmbG9hdCltX3BsYXRmb3JtRGF0YS5zaXplKCkgLyA3Mi5mOwotfQotCi0KLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgaWYgKCFtX3BsYXRm
b3JtRGF0YS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFRFWFRNRVRS
SUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOwotICAgIG1fYXZnQ2hhcldpZHRoID0g
KHRtLnRtQXZlQ2hhcldpZHRoICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7Ci0g
ICAgbV9tYXhDaGFyV2lkdGggPSAodG0udG1NYXhDaGFyV2lkdGggKiBtX3BsYXRmb3JtRGF0YS5z
aXplKCkgKyAzNikgLyA3MjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4
dHJhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvV2luQ0VHcmFw
aGljc0V4dHJhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2FiMjFjLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1dpbkNFR3Jh
cGhpY3NFeHRyYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgV2luQ0VHcmFwaGljc0V4dHJhc19oCi0jZGVmaW5lIFdpbkNFR3JhcGhpY3NFeHRyYXNfaAot
Ci0vLyBUaGlzIGZpbGUgaXMgdXNlZCB0byBjb250YWluIHNtYWxsIHV0aWxpdGllcyB1c2VkIGJ5
IFdJTkNFIGdyYXBoaWNzIGNvZGUuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAvLyBBbHdh
eXMgcm91bmQgdG8gc2FtZSBkaXJlY3Rpb24uIDAuNSBpcyByb3VuZGVkIHRvIDEsCi0gICAgLy8g
YW5kIC0wLjUgKDAuNSAtIDEpIGlzIHJvdW5kZWQgdG8gMCAoMSAtIDEpLCBzbyB0aGF0IGl0Ci0g
ICAgLy8gaXMgY29uc2lzdGVudCB3aGVuIHRyYW5zZm9ybWF0aW9uIHNoaWZ0cy4KLSAgICBzdGF0
aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKLSAgICB7Ci0gICAgICAgIGlmIChk
ID4gMCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGQgKyAwLjUpOwotCi0g
ICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKLSAgICAgICAgcmV0dXJuIGkgLSBk
ID4gMC41ID8gaSAtIDEgOiBpOwotICAgIH0KLX0KLQotI2VuZGlmIFdpbkNFR3JhcGhpY3NFeHRy
YXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAppbmRleCBhNGZhNmQxLi41ZmM4YzVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMzEsMTUgKzMxLDYgQEAKICNpbmNsdWRl
IDxzdGRpby5oPiAvLyBOZWVkZWQgYnkganBlZ2xpYi5oIGZvciBGSUxFLgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KIAotI2lmIE9TKFdJTkNFKQotLy8gUmVtb3ZlIHdhcm5pbmc6ICdGQVInIG1h
Y3JvIHJlZGVmaW5pdGlvbgotI3VuZGVmIEZBUgotCi0vLyBqbW9yZWNmZy5oIGluIGxpYmpwZWcg
Y2hlY2tzIGZvciBYTURfSCB3aXRoIHRoZSBjb21tZW50OiAiWDExL3htZC5oIGNvcnJlY3RseSBk
ZWZpbmVzIElOVDMyIgotLy8gZml4IElOVDMyIHJlZGVmaW5pdGlvbiBlcnJvciBieSBwcmV0ZW5k
aW5nIHdlIGFyZSBYMTEveG1kLmgKLSNkZWZpbmUgWE1EX0gKLSNlbmRpZgotCiBleHRlcm4gIkMi
IHsKICNpbmNsdWRlICJqcGVnbGliLmgiCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmllcldpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmllcldpbi5jcHAK
aW5kZXggZGRlZGFiZi4uMGE1MWYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luLmNwcApA
QCAtMTA3LDE0ICsxMDcsMTEgQEAgTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5v
dGlmaWVyKCkKIAogICAgIG1lbXNldCgmbV9vdmVybGFwcGVkLCAwLCBzaXplb2YobV9vdmVybGFw
cGVkKSk7CiAKLS8vIEZJWE1FOiBDaGVjayBtX292ZXJsYXBwZWQgb24gV2luQ0UuCi0jaWYgIU9T
KFdJTkNFKQogICAgIG1fb3ZlcmxhcHBlZC5oRXZlbnQgPSA6OkNyZWF0ZUV2ZW50KDAsIGZhbHNl
LCBmYWxzZSwgMCk7CiAKICAgICA6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmbV93YWl0
SGFuZGxlLCBtX292ZXJsYXBwZWQuaEV2ZW50LCBhZGRyQ2hhbmdlQ2FsbGJhY2ssIHRoaXMsIElO
RklOSVRFLCAwKTsKIAogICAgIHJlZ2lzdGVyRm9yQWRkcmVzc0NoYW5nZSgpOwotI2VuZGlmCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9DT01QdHIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIu
aAppbmRleCA3NDA0ODU0Li5jNmIyZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ09NUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0
ci5oCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KIAotI2lmICFPUyhXSU5DRSkKLSNpbmNsdWRlIDxndWlk
ZGVmLmg+Ci0jZW5kaWYKLQogdHlwZWRlZiBsb25nIEhSRVNVTFQ7CiAKIC8vIEZJWE1FOiBTaG91
bGQgd2UgcHV0IHRoaXMgaW50byB0aGUgV2ViQ29yZSBuYW1lc3BhY2UgYW5kIHVzZSAidXNpbmci
IG9uIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
VXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCmluZGV4IDJiY2NmMWEuLjdmZGM2YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCkBAIC0z
MSwxNCArMzEsMTIgQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJtYXJr
dXAuaCIKICNpbmNsdWRlIDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjaW5jbHVk
ZSA8d2luaW5ldC5oPiAvLyBmb3IgSU5URVJORVRfTUFYX1VSTF9MRU5HVEgKICNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmICFPUyhXSU5DRSkKLSNpbmNsdWRl
IDxzaGx3YXBpLmg+Ci0jZW5kaWYKIAogI2lmIFVTRShDRikKICNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NvbnRleHRNZW51SXRlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcAppbmRleCA1Zjk1NWJmLi43YjQxZTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcApA
QCAtMjgsMTAgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAKLSNpZiBPUyhX
SU5DRSkKLSNpZm5kZWYgTUZTX0RJU0FCTEVECi0jZGVmaW5lIE1GU19ESVNBQkxFRCBNRl9HUkFZ
RUQKLSNlbmRpZgogI2lmbmRlZiBNSUlNX0ZUWVBFCiAjZGVmaW5lIE1JSU1fRlRZUEUgTUlJTV9U
WVBFCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250
ZXh0TWVudVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVX
aW4uY3BwCmluZGV4IDM3NTVmMjQuLjQ1MDQ3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcApAQCAtNTIsOSArNTIsNiBAQCBDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoSE1FTlUgbWVudSkKIAogdm9pZCBDb250ZXh0TWVudTo6Z2V0Q29udGV4
dE1lbnVJdGVtcyhITUVOVSBtZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCiB7
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgaW50IGNv
dW50ID0gOjpHZXRNZW51SXRlbUNvdW50KG1lbnUpOwogICAgIGlmIChjb3VudCA8PSAwKQogICAg
ICAgICByZXR1cm47CkBAIC04MCw3ICs3Nyw2IEBAIHZvaWQgQ29udGV4dE1lbnU6OmdldENvbnRl
eHRNZW51SXRlbXMoSE1FTlUgbWVudSwgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIGl0ZW1zCiAg
ICAgICAgIGlmICg6OkdldE1lbnVJdGVtSW5mbyhtZW51LCBpLCBUUlVFLCAmaW5mbykpCiAgICAg
ICAgICAgIGl0ZW1zLmFwcGVuZChDb250ZXh0TWVudUl0ZW0oaW5mbykpOwogICAgIH0KLSNlbmRp
ZgogfQogCiBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21J
dGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCkBAIC05MiwzMSArODgs
NiBAQCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21JdGVt
cyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogCiAgICAgICAgIE1FTlVJVEVNSU5GTyBtZW51
SXRlbSA9IGl0ZW0ucGxhdGZvcm1Db250ZXh0TWVudUl0ZW0oKTsKIAotI2lmIE9TKFdJTkNFKQot
ICAgICAgICBVSU5UIGZsYWdzID0gTUZfQllQT1NJVElPTjsKLSAgICAgICAgVUlOVCBuZXdJdGVt
ID0gMDsKLSAgICAgICAgTFBDV1NUUiB0aXRsZSA9IDA7Ci0KLSAgICAgICAgaWYgKGl0ZW0udHlw
ZSgpID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgICAgICBmbGFncyB8PSBNRl9TRVBBUkFUT1I7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxhZ3MgfD0gTUZfU1RSSU5HOwotICAgICAg
ICAgICAgZmxhZ3MgfD0gaXRlbS5jaGVja2VkKCkgPyBNRl9DSEVDS0VEIDogTUZfVU5DSEVDS0VE
OwotICAgICAgICAgICAgZmxhZ3MgfD0gaXRlbS5lbmFibGVkKCkgPyBNRl9FTkFCTEVEIDogTUZf
R1JBWUVEOwotCi0gICAgICAgICAgICB0aXRsZSA9IG1lbnVJdGVtLmR3VHlwZURhdGE7Ci0gICAg
ICAgICAgICBtZW51SXRlbS5kd1R5cGVEYXRhID0gMDsKLQotICAgICAgICAgICAgaWYgKG1lbnVJ
dGVtLmhTdWJNZW51KSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gTUZfUE9QVVA7Ci0gICAg
ICAgICAgICAgICAgbmV3SXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUlOVD4obWVudUl0ZW0uaFN1
Yk1lbnUpOwotICAgICAgICAgICAgICAgIG1lbnVJdGVtLmhTdWJNZW51ID0gMDsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBtZW51SXRlbS53SUQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICA6Okluc2VydE1lbnVXKG1lbnUsIGksIGZsYWdzLCBuZXdJdGVtLCB0
aXRsZSk7Ci0jZWxzZQogICAgICAgICAvLyBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtQ29udGV4
dE1lbnVJdGVtIGRvZXNuJ3Qgc2V0IHRoZSB0aXRsZSBvZiB0aGUgTUVOVUlURU1JTkZPIHRvIG1h
a2UgdGhlCiAgICAgICAgIC8vIGxpZmV0aW1lIGhhbmRsaW5nIGVhc2llciBmb3IgY2FsbGVycy4K
ICAgICAgICAgVmVjdG9yPFVDaGFyPiB3aWRlQ2hhclRpdGxlOyAvLyBSZXRhaW4gYnVmZmVyIGZv
ciBsb25nIGVub3VnaCB0byBtYWtlIHRoZSBJbnNlcnRNZW51SXRlbSBjYWxsCkBAIC0xMzAsNyAr
MTAxLDYgQEAgSE1FTlUgQ29udGV4dE1lbnU6OmNyZWF0ZVBsYXRmb3JtQ29udGV4dE1lbnVGcm9t
SXRlbXMoY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXQKICAgICAgICAgfQogCiAgICAgICAgIDo6
SW5zZXJ0TWVudUl0ZW0obWVudSwgaSwgVFJVRSwgJm1lbnVJdGVtKTsKLSNlbmRpZgogICAgIH0K
IAogICAgIHJldHVybiBtZW51OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlV2luLmNwcAppbmRleCAwZDhkNDQxLi5iNWE4MDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMTA1LDcgKzEwNSw2IEBAIGNvbnN0IGZs
b2F0IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsKIHN0YXRpYyBGb250IGRyYWdMYWJlbEZvbnQo
aW50IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsK
ICAgICBGb250IHJlc3VsdDsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgTk9OQ0xJRU5UTUVUUklDUyBt
ZXRyaWNzOwogICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwogICAgIFN5c3Rl
bVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwg
Jm1ldHJpY3MsIDApOwpAQCAtMTE4LDcgKzExNyw2IEBAIHN0YXRpYyBGb250IGRyYWdMYWJlbEZv
bnQoaW50IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
ICAgICBkZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwogICAgIHJl
c3VsdCA9IEZvbnQoZGVzY3JpcHRpb24sIDAsIDApOwogICAgIHJlc3VsdC51cGRhdGUoMCk7Ci0j
ZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggYzY1MjkzZC4uNWQ0OWI0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMTU2LDE5ICsx
NTYsNiBAQCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKIAog
U3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KQogewotI2lmIE9TKFdJTkNFKQotICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLQotICAgIGJ1aWxkZXIuYXBwZW5kKHBhdGgpOwotCi0gICAgVUNoYXIgbGFzdFBh
dGhDaGFyYWN0ZXIgPSBwYXRoW3BhdGgubGVuZ3RoKCkgLSAxXTsKLSAgICBpZiAobGFzdFBhdGhD
aGFyYWN0ZXIgIT0gTCdcXCcgJiYgbGFzdFBhdGhDaGFyYWN0ZXIgIT0gTCcvJyAmJiBjb21wb25l
bnRbMF0gIT0gTCdcXCcgJiYgY29tcG9uZW50WzBdICE9IEwnLycpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKFBsYXRmb3JtRmlsZVBhdGhTZXBhcmF0b3IpOwotCi0gICAgYnVpbGRlci5hcHBlbmQo
Y29tcG9uZW50KTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0jZWxzZQogICAg
IFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKIAogICAgIGlmIChwYXRoLmxlbmd0aCgp
ICsgMSA+IGJ1ZmZlci5zaXplKCkpCkBAIC0xODMsNyArMTcwLDYgQEAgU3RyaW5nIHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9u
ZW50KQogICAgIGJ1ZmZlci5zaHJpbmsod2NzbGVuKGJ1ZmZlci5kYXRhKCkpKTsKIAogICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci0jZW5kaWYKIH0KIAogI2lmICFVU0UoQ0YpCkBA
IC0yMjYsMjQgKzIxMiw3IEBAIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCiAKIFN0cmluZyBw
YXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotI2lmIE9TKFdJTkNFKQotICAg
IHNpemVfdCBwb3NpdGlvblNsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgnLycpOwotICAgIHNpemVf
dCBwb3NpdGlvbkJhY2tzbGFzaCA9IHBhdGgucmV2ZXJzZUZpbmQoJ1xcJyk7Ci0KLSAgICBzaXpl
X3QgcG9zaXRpb247Ci0gICAgaWYgKHBvc2l0aW9uU2xhc2ggPT0gbm90Rm91bmQpCi0gICAgICAg
IHBvc2l0aW9uID0gcG9zaXRpb25CYWNrc2xhc2g7Ci0gICAgZWxzZSBpZiAocG9zaXRpb25CYWNr
c2xhc2ggPT0gbm90Rm91bmQpCi0gICAgICAgIHBvc2l0aW9uID0gIHBvc2l0aW9uU2xhc2g7Ci0g
ICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHN0ZDo6bWF4KHBvc2l0aW9uU2xhc2gsIHBvc2l0
aW9uQmFja3NsYXNoKTsKLQotICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkKLSAgICAgICAg
cmV0dXJuIHBhdGg7Ci0gICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBvc2l0aW9uICsgMSk7Ci0j
ZWxzZQogICAgIHJldHVybiBTdHJpbmcoOjpQYXRoRmluZEZpbGVOYW1lKFN0cmluZyhwYXRoKS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkpOwotI2VuZGlmCiB9CiAKIFN0
cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTI3OCw5ICsyNDcsNiBA
QCBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogCiBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VEaXJl
Y3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJu
IFN0cmluZygpOwotI2Vsc2UKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CiAg
ICAgaWYgKEZBSUxFRChTSEdldEZvbGRlclBhdGhXKDAsIHBhdGhJZGVudGlmaWVyIHwgQ1NJRExf
RkxBR19DUkVBVEUsIDAsIDAsIGJ1ZmZlci5kYXRhKCkpKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwpAQCAtMjkzLDcgKzI1OSw2IEBAIHN0YXRpYyBTdHJpbmcgc3RvcmFnZURpcmVjdG9yeShE
V09SRCBwYXRoSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgcmV0
dXJuIGRpcmVjdG9yeTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VE
aXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vTG9nZ2luZ1dpbi5jcHAKaW5kZXggMmZhZTc3OC4uZjM2YTE0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcApAQCAtMzgsOSArMzgsNiBAQCBzdGF0aWMg
Y2hhciAqIGNvbnN0IGxvZ2dpbmdFbnZpcm9ubWVudFZhcmlhYmxlID0gIldlYkNvcmVMb2dnaW5n
IjsKIAogU3RyaW5nIGxvZ0xldmVsU3RyaW5nKCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNlCiAgICAgRFdPUkQgbGVuZ3RoID0gR2V0RW52aXJvbm1l
bnRWYXJpYWJsZUEobG9nZ2luZ0Vudmlyb25tZW50VmFyaWFibGUsIDAsIDApOwogICAgIGlmICgh
bGVuZ3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTUxLDcgKzQ4LDYgQEAg
U3RyaW5nIGxvZ0xldmVsU3RyaW5nKCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
c3RlYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRX
aW4uY3BwCmluZGV4IGNlNWE3ZTIuLmMyYTA3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTc5LDEyICs3OSwxMCBAQCBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBQYXN0ZWJvYXJkT3duZXJXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gdwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX0RFU1RST1k6CiAgICAg
ICAgIGJyZWFrOwotI2lmICFPUyhXSU5DRSkKICAgICBjYXNlIFdNX0RSQVdDTElQQk9BUkQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fQ0hBTkdFQ0JDSEFJTjoKICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBscmVzdWx0ID0gRGVmV2luZG93UHJvYyho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTYsMTAg
Kzk0LDggQEAgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5
QW5kUGFzdGUoKQogewogICAgIE93blB0cjxQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkID0gYWRvcHRQ
dHIobmV3IFBhc3RlYm9hcmQpOwogICAgIENPTVB0cjxJRGF0YU9iamVjdD4gY2xpcGJvYXJkRGF0
YTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYgKCFTVUNDRUVERUQoT2xlR2V0Q2xpcGJvYXJkKCZj
bGlwYm9hcmREYXRhKSkpCiAgICAgICAgIGNsaXBib2FyZERhdGEgPSAwOwotI2VuZGlmCiAgICAg
cGFzdGVib2FyZC0+c2V0RXh0ZXJuYWxEYXRhT2JqZWN0KGNsaXBib2FyZERhdGEuZ2V0KCkpOwog
ICAgIHJldHVybiBwYXN0ZWJvYXJkLnJlbGVhc2UoKTsKIH0KQEAgLTUyNSw3ICs1MjEsNiBAQCB2
b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRS
ZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbAogICAgIHdyaXRlUGxhaW5UZXh0VG9EYXRhT2JqZWN0KHRl
eHQsIHNtYXJ0UmVwbGFjZU9wdGlvbik7CiB9CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgaW5s
aW5lIHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyhQV1NUUiBwc3osIHNpemVfdCBsZW5n
dGgpCiB7CiAgICAgc2l6ZV90IHdyaXRlVG8gPSAwOwpAQCAtNTM5LDE0ICs1MzQsOSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyhQV1NUUiBwc3osIHNpemVf
dCBsZW5ndGgpCiAgICAgfQogICAgIHBzelt3cml0ZVRvXSA9IDA7CiB9Ci0jZW5kaWYKIAogc3Rh
dGljIFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxlKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBVQ2hhciogZXh0ZW5zaW9uLCBib29sIGlzTGlu
aykKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLSNlbHNlCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmc1BhdGhNYXhMZW5ndGhF
eGNsdWRpbmdOdWxsVGVybWluYXRvciA9IE1BWF9QQVRIIC0gMTsKICAgICBib29sIHVzZWRVUkwg
PSBmYWxzZTsKICAgICBXQ0hBUiBmc1BhdGhCdWZmZXJbTUFYX1BBVEhdOwpAQCAtNTg5LDcgKzU3
OSw2IEBAIHN0YXRpYyBTdHJpbmcgZmlsZXN5c3RlbVBhdGhGcm9tVXJsT3JUaXRsZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsCiAgICAgfQogCiAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihmc1BhdGhCdWZmZXIpLCBleHRlbnNpb24p
OwotI2VuZGlmCiB9CiAKIC8vIHdyaXRlRmlsZVRvRGF0YU9iamVjdCB0YWtlcyBvd25lcnNoaXAg
b2YgZmlsZURlc2NyaXB0b3IgYW5kIGZpbGVDb250ZW50CkBAIC05NjYsMTAgKzk1NSw2IEBAIHN0
YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudChjb25zdCBVUkwmIHVybCwgU3Ry
aW5nJiBmaWxlTmFtZSwgU2hhcmVkCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgIH0gZWxzZSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgIHJldHVybiAwOwotI2Vsc2UKICAgICAgICAgV0NIQVIgdGVtcFBhdGhbTUFYX1BB
VEhdOwogICAgICAgICBXQ0hBUiBleHRlbnNpb25bTUFYX1BBVEhdOwogICAgICAgICBpZiAoITo6
R2V0VGVtcFBhdGgoV1RGX0FSUkFZX0xFTkdUSCh0ZW1wUGF0aCksIHRlbXBQYXRoKSkKQEAgLTEw
MDEsNyArOTg2LDYgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KGNv
bnN0IFVSTCYgdXJsLCBTdHJpbmcmIGZpbGVOYW1lLCBTaGFyZWQKICAgICAgICAgQ2xvc2VIYW5k
bGUodGVtcEZpbGVIYW5kbGUpOwogICAgICAgICBpZiAoIXRlbXBXcml0ZVN1Y2NlZWRlZCkKICAg
ICAgICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgfQogCiAgICAgU0laRV9UIGRyb3BGaWxl
c1NpemUgPSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogKHdjc2xlbihmaWxl
UGF0aCkgKyAyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxh
dGZvcm1Nb3VzZUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0
Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCmluZGV4IDE0M2JiYWEuLmYxOTUzMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3Bw
CkBAIC02Niw5ICs2Niw3IEBAIHN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIG1lc3NhZ2VUb0V2
ZW50VHlwZShVSU5UIG1lc3NhZ2UpCiAgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgogICAgICAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQ7CiAKLSNpZiAhT1MoV0lO
Q0UpCiAgICAgICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSNlbmRpZgogICAgICAgICBjYXNlIFdN
X01PVVNFTU9WRToKICAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVk
OwogCkBAIC0xMDQsOSArMTAyLDcgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNl
RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIEwKICAgICAgICAg
ICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV01fTU9VU0VNT1ZFOgotI2lmICFPUyhXSU5DRSkKICAgICAgICAgY2FzZSBXTV9NT1VT
RUxFQVZFOgotI2VuZGlmCiAgICAgICAgICAgICBpZiAod1BhcmFtICYgTUtfTEJVVFRPTikKICAg
ICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247CiAgICAgICAgICAgICBlbHNlIGlm
ICh3UGFyYW0gJiBNS19NQlVUVE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QbGF0Zm9ybVNjcmVlbldpbi5jcHAKaW5kZXggY2M5YTAyMy4uZGVhOTU0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCkBAIC01
NSwxMyArNTUsOCBAQCBzdGF0aWMgREVWTU9ERSBkZXZpY2VJbmZvRm9yV2lkZ2V0KFdpZGdldCog
d2lkZ2V0KQogICAgIERFVk1PREUgZGV2aWNlSW5mbzsKICAgICBkZXZpY2VJbmZvLmRtU2l6ZSA9
IHNpemVvZihERVZNT0RFKTsKICAgICBkZXZpY2VJbmZvLmRtRHJpdmVyRXh0cmEgPSAwOwotI2lm
IE9TKFdJTkNFKQotICAgIGlmICghRW51bURpc3BsYXlTZXR0aW5ncygwLCBFTlVNX0NVUlJFTlRf
U0VUVElOR1MsICZkZXZpY2VJbmZvKSkKLSAgICAgICAgZGV2aWNlSW5mby5kbUJpdHNQZXJQZWwg
PSAxNjsKLSNlbHNlCiAgICAgTU9OSVRPUklORk9FWCBtb25pdG9ySW5mbyA9IG1vbml0b3JJbmZv
Rm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgRW51bURpc3BsYXlTZXR0aW5ncyhtb25pdG9ySW5mby5z
ekRldmljZSwgRU5VTV9DVVJSRU5UX1NFVFRJTkdTLCAmZGV2aWNlSW5mbyk7Ci0jZW5kaWYKIAog
ICAgIHJldHVybiBkZXZpY2VJbmZvOwogfQpAQCAtODUsMTMgKzgwLDggQEAgaW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9t
ZShXaWRnZXQqIHdpZGdldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBFbnVtRGlzcGxheVNl
dHRpbmdzIGRvZXNuJ3Qgc2V0IGRtQ29sb3IgaW4gREVWTU9ERS4KLSAgICByZXR1cm4gZmFsc2U7
Ci0jZWxzZQogICAgIERFVk1PREUgZGV2aWNlSW5mbyA9IGRldmljZUluZm9Gb3JXaWRnZXQod2lk
Z2V0KTsKICAgICByZXR1cm4gZGV2aWNlSW5mby5kbUNvbG9yID09IERNQ09MT1JfTU9OT0NIUk9N
RTsKLSNlbmRpZgogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggNWYxMmU3
ZS4uNTU0NmJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5jcHAKQEAgLTQ5LDEwICs0OSw2IEBACiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVk
ZSA8d2luZG93c3guaD4KLSNpZiBPUyhXSU5DRSkKLSNpbmNsdWRlIDxSZXNEZWZDRS5oPgotI2Rl
ZmluZSBNQUtFUE9JTlRTKGwpICgqKChQT0lOVFMgRkFSICopJihsKSkpCi0jZW5kaWYKIAogI2Rl
ZmluZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4ODAwMAogCkBAIC0xNjQsNyArMTYwLDYgQEAgdm9p
ZCBQb3B1cE1lbnVXaW46OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2aWV3LCBp
bnQgaW5kZXgpCiAgICAgICAgICAgICBzZXRGb2N1c2VkSW5kZXgoaW5kZXgpOwogICAgIH0KIAot
I2lmICFPUyhXSU5DRSkKICAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRDT01CT0JP
WEFOSU1BVElPTiwgMCwgJnNob3VsZEFuaW1hdGUsIDApOwogCiAgICAgaWYgKHNob3VsZEFuaW1h
dGUpIHsKQEAgLTE3Myw5ICsxNjgsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJ
bnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAgaWYgKCE6Oklz
UmVjdEVtcHR5KCZ2aWV3UmVjdCkpCiAgICAgICAgICAgICA6OkFuaW1hdGVXaW5kb3cobV9wb3B1
cCwgZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uLCBBV19CTEVORCk7CiAgICAgfSBlbHNlCi0jZW5k
aWYKLQotICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJVkFURSk7CisgICAg
ICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJVkFURSk7CiAKICAgICBtX3No
b3dQb3B1cCA9IHRydWU7CiAKQEAgLTE5OSw3ICsxOTIsNiBAQCB2b2lkIFBvcHVwTWVudVdpbjo6
c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gU3RlYWwgbW91c2UgbWVzc2FnZXMu
Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICAgICAgY2FzZSBXTV9OQ01PVVNFTU9WRToKICAgICAg
ICAgICAgIGNhc2UgV01fTkNMQlVUVE9ORE9XTjoKICAgICAgICAgICAgIGNhc2UgV01fTkNMQlVU
VE9OVVA6CkBAIC0yMTAsNyArMjAyLDYgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnNob3coY29uc3Qg
SW50UmVjdCYgciwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICBjYXNl
IFdNX05DTUJVVFRPTkRPV046CiAgICAgICAgICAgICBjYXNlIFdNX05DTUJVVFRPTlVQOgogICAg
ICAgICAgICAgY2FzZSBXTV9OQ01CVVRUT05EQkxDTEs6Ci0jZW5kaWYKICAgICAgICAgICAgIGNh
c2UgV01fTU9VU0VXSEVFTDoKICAgICAgICAgICAgICAgICBtc2cuaHduZCA9IG1fcG9wdXA7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02MDEsMTEgKzU5Miw3IEBAIHZvaWQgUG9wdXBNZW51
V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICAg
ICAgbV9ibXAuY2xlYXIoKTsKICAgICB9CiAgICAgaWYgKCFtX2JtcCkgewotI2lmIE9TKFdJTkNF
KQotICAgICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0
b21VcChjbGllbnRSZWN0KCkuc2l6ZSgpLCBCaXRtYXBJbmZvOjpCaXRDb3VudDE2KTsKLSNlbHNl
CiAgICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRv
bVVwKGNsaWVudFJlY3QoKS5zaXplKCkpOwotI2VuZGlmCiAgICAgICAgIHZvaWQqIHBpeGVscyA9
IDA7CiAgICAgICAgIG1fYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKG1f
REMuZ2V0KCksICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpOwog
ICAgICAgICBpZiAoIW1fYm1wKQpAQCAtNzY3LDE0ICs3NTQsMTAgQEAgdm9pZCBQb3B1cE1lbnVX
aW46OnJlZ2lzdGVyQ2xhc3MoKQogICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQog
ICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBXTkRDTEFTUyB3Y2V4OwotI2Vs
c2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xB
U1NFWCk7CiAgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CiAgICAgd2NleC5zdHlsZSAgICAg
ICAgICA9IENTX0RST1BTSEFET1c7Ci0jZW5kaWYKIAogICAgIHdjZXgubHBmblduZFByb2MgICAg
PSBQb3B1cE1lbnVXbmRQcm9jOwogICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwpAQCAtNzg4
LDExICs3NzEsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcygpCiAKICAgICBo
YXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKIAotI2lmIE9TKFdJTkNFKQotICAgIFJl
Z2lzdGVyQ2xhc3MoJndjZXgpOwotI2Vsc2UKICAgICBSZWdpc3RlckNsYXNzRXgoJndjZXgpOwot
I2VuZGlmCiB9CiAKIApAQCAtODE5LDEwICs3OTgsOCBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6
d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YQogICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CiAKICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSNp
ZiAhT1MoV0lOQ0UpCiAgICAgICAgIGNhc2UgV01fTU9VU0VBQ1RJVkFURToKICAgICAgICAgICAg
IHJldHVybiBNQV9OT0FDVElWQVRFOwotI2VuZGlmCiAgICAgICAgIGNhc2UgV01fU0laRTogewog
ICAgICAgICAgICAgaWYgKCFzY3JvbGxiYXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTk2Niw5ICs5NDMsNyBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBCT09MIHNob3VsZEhvdFRyYWNrID0gRkFMU0U7Ci0jaWYgIU9TKFdJTkNF
KQogICAgICAgICAgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUSE9UVFJBQ0tJTkcs
IDAsICZzaG91bGRIb3RUcmFjaywgMCk7Ci0jZW5kaWYKIAogICAgICAgICAgICAgUkVDVCBib3Vu
ZHM7CiAgICAgICAgICAgICBHZXRDbGllbnRSZWN0KHBvcHVwSGFuZGxlKCksICZib3VuZHMpOwpA
QCAtMTA3MCwxMSArMTA0NSw5IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhCiAgICAgICAgICAg
ICBsUmVzdWx0ID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jaWYgIU9TKFdJ
TkNFKQogICAgICAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgogICAgICAgICAgICAgcGFpbnQoY2xp
ZW50UmVjdCgpLCAoSERDKXdQYXJhbSk7CiAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbFJlc3VsdCA9IERlZldpbmRvd1Byb2MoaFduZCwg
bWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCmluZGV4IGRkYTU5ZTEuLmM0NmM4NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2lu
LmNwcApAQCAtMjk0LDkgKzI5NCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllCiAgICAgICAg
IGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
KSB7CiAgICAgICAgICAgICB4cFN0YXRlICs9IFRTX0FDVElWRTsKICAgICAgICAgICAgIGNsYXNz
aWNTdGF0ZSB8PSBERkNTX1BVU0hFRDsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgICAgICBjbGFz
c2ljU3RhdGUgfD0gREZDU19GTEFUOwotI2VuZGlmCiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgeHBTdGF0ZSArPSBUU19IT1ZFUjsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZEJ1ZmZlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcAppbmRleCA4YTgzN2Q2Li5mNWRkMjI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNw
cApAQCAtMzEsMTEgKzMxLDYgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLS8vIElOVkFMSURfRklMRV9TSVpFIGlzIG5vdCBkZWZp
bmVkIG9uIFdpbkNFLgotI2lmbmRlZiBJTlZBTElEX0ZJTEVfU0laRQotI2RlZmluZSBJTlZBTElE
X0ZJTEVfU0laRSAweGZmZmZmZmZmCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNP
ZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2hhcmVkVGltZXJXaW4uY3BwCmluZGV4IGNmOTI0YjQuLjMyN2MyZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVyV2luLmNwcApAQCAtNjMsNyAr
NjMsNiBAQCBzdGF0aWMgSEFORExFIHRpbWVyOwogc3RhdGljIEhXTkQgdGltZXJXaW5kb3dIYW5k
bGUgPSAwOwogY29uc3QgTFBDV1NUUiBrVGltZXJXaW5kb3dDbGFzc05hbWUgPSBMIlRpbWVyV2lu
ZG93Q2xhc3MiOwogCi0jaWYgIU9TKFdJTkNFKQogc3RhdGljIFVJTlQgdGltZXJGaXJlZE1lc3Nh
Z2UgPSAwOwogc3RhdGljIEhBTkRMRSB0aW1lclF1ZXVlOwogc3RhdGljIGJvb2wgaGlnaFJlc1Rp
bWVyQWN0aXZlOwpAQCAtNzMsNyArNzIsNiBAQCBzdGF0aWMgTE9ORyBwZW5kaW5nVGltZXJzOwog
Y29uc3QgaW50IHRpbWVyUmVzb2x1dGlvbiA9IDE7IC8vIFRvIGltcHJvdmUgdGltZXIgcmVzb2x1
dGlvbiwgd2UgY2FsbCB0aW1lQmVnaW5QZXJpb2QvdGltZUVuZFBlcmlvZCB3aXRoIHRoaXMgdmFs
dWUgdG8gaW5jcmVhc2UgdGltZXIgcmVzb2x1dGlvbiB0byAxbXMuCiBjb25zdCBpbnQgaGlnaFJl
c29sdXRpb25UaHJlc2hvbGRNc2VjID0gMTY7IC8vIE9ubHkgYWN0aXZhdGUgaGlnaC1yZXMgdGlt
ZXIgZm9yIHN1Yi0xNm1zIHRpbWVycyAoV2luZG93cyBjYW4gZmlyZSB0aW1lcnMgYXQgMTZtcyBp
bnRlcnZhbHMgd2l0aG91dCBjaGFuZ2luZyB0aGUgc3lzdGVtIHJlc29sdXRpb24pLgogY29uc3Qg
aW50IHN0b3BIaWdoUmVzVGltZXJJbk1zZWMgPSAzMDA7IC8vIFN0b3AgaGlnaC1yZXMgdGltZXIg
YWZ0ZXIgMC4zIHNlY29uZHMgdG8gbGVzc2VuIHBvd2VyIGNvbnN1bXB0aW9uICh3ZSBkb24ndCB1
c2UgYSBzbWFsbGVyIHRpbWUgc2luY2Ugb3NjaWxsYXRpbmcgYmV0d2VlbiBoaWdoIGFuZCBsb3cg
cmVzb2x1dGlvbiBicmVha3MgdGltZXIgYWNjdXJhY3kgb24gWFApLgotI2VuZGlmCiAKIGVudW0g
ewogICAgIHNoYXJlZFRpbWVySUQgPSAxMDAwLApAQCAtOTgsNyArOTYsNiBAQCBMUkVTVUxUIENB
TExCQUNLIFRpbWVyV2luZG93V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdQYXJhbSwgTFBBUgogICAgICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxlLCBz
aGFyZWRUaW1lcklEKTsKICAgICAgICAgICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwog
ICAgICAgICB9Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBlbHNlIGlmICh3UGFyYW0gPT0gZW5k
SGlnaFJlc1RpbWVySUQpIHsKICAgICAgICAgICAgIEtpbGxUaW1lcih0aW1lcldpbmRvd0hhbmRs
ZSwgZW5kSGlnaFJlc1RpbWVySUQpOwogICAgICAgICAgICAgaGlnaFJlc1RpbWVyQWN0aXZlID0g
ZmFsc2U7CkBAIC0xMDksNyArMTA2LDYgQEAgTFJFU1VMVCBDQUxMQkFDSyBUaW1lcldpbmRvd1du
ZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVIKICAgICAg
ICAgcHJvY2Vzc2luZ0N1c3RvbVRpbWVyTWVzc2FnZSA9IHRydWU7CiAgICAgICAgIHNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbigpOwogICAgICAgICBwcm9jZXNzaW5nQ3VzdG9tVGltZXJNZXNzYWdl
ID0gZmFsc2U7Ci0jZW5kaWYKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIERlZldpbmRvd1By
b2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCkBAIC0xMjEsMzAgKzExNywxOSBA
QCBzdGF0aWMgdm9pZCBpbml0aWFsaXplT2ZmU2NyZWVuVGltZXJXaW5kb3coKQogICAgIGlmICh0
aW1lcldpbmRvd0hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAg
V05EQ0xBU1Mgd2NleDsKLSAgICBtZW1zZXQoJndjZXgsIDAsIHNpemVvZihXTkRDTEFTUykpOwot
I2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgbWVtc2V0KCZ3Y2V4LCAwLCBzaXplb2Yo
V05EQ0xBU1NFWCkpOwogICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwotI2Vu
ZGlmCiAKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gVGltZXJXaW5kb3dXbmRQcm9jOwogICAg
IHdjZXguaEluc3RhbmNlICAgICAgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOwogICAgIHdj
ZXgubHBzekNsYXNzTmFtZSAgPSBrVGltZXJXaW5kb3dDbGFzc05hbWU7Ci0jaWYgT1MoV0lOQ0Up
Ci0gICAgUmVnaXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAgIFJlZ2lzdGVyQ2xhc3NFeCgm
d2NleCk7Ci0jZW5kaWYKIAogICAgIHRpbWVyV2luZG93SGFuZGxlID0gQ3JlYXRlV2luZG93KGtU
aW1lcldpbmRvd0NsYXNzTmFtZSwgMCwgMCwKICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19V
U0VERUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCks
IDApOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIHRpbWVyRmlyZWRNZXNzYWdlID0gUmVnaXN0ZXJX
aW5kb3dNZXNzYWdlKEwiY29tLmFwcGxlLldlYktpdC5UaW1lckZpcmVkIik7Ci0jZW5kaWYKIH0K
IAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCkBAIC0xNTIs
MTMgKzEzNywxMSBAQCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZiko
KSkKICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwogfQogCi0jaWYgIU9TKFdJTkNF
KQogc3RhdGljIHZvaWQgTlRBUEkgcXVldWVUaW1lclByb2MoUFZPSUQsIEJPT0xFQU4pCiB7CiAg
ICAgaWYgKEludGVybG9ja2VkSW5jcmVtZW50KCZwZW5kaW5nVGltZXJzKSA9PSAxKQogICAgICAg
ICBQb3N0TWVzc2FnZSh0aW1lcldpbmRvd0hhbmRsZSwgdGltZXJGaXJlZE1lc3NhZ2UsIDAsIDAp
OwogfQotI2VuZGlmCiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGlu
dGVydmFsKQogewpAQCAtMTc0LDcgKzE1Nyw2IEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50
ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgIGluaXRpYWxpemVPZmZTY3JlZW5UaW1lcldpbmRv
dygpOwogICAgIGJvb2wgdGltZXJTZXQgPSBmYWxzZTsKIAotI2lmICFPUyhXSU5DRSkKICAgICBp
ZiAoU2V0dGluZ3M6OnNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKCkpIHsKICAgICAgICAg
aWYgKGludGVydmFsIDwgaGlnaFJlc29sdXRpb25UaHJlc2hvbGRNc2VjKSB7CiAgICAgICAgICAg
ICBpZiAoIWhpZ2hSZXNUaW1lckFjdGl2ZSkgewpAQCAtMjA2LDcgKzE4OCw2IEBAIHZvaWQgc2V0
U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotI2VuZGlmIC8vICFPUyhXSU5DRSkKIAogICAgIGlmICh0aW1lclNl
dCkgewogICAgICAgICBpZiAodGltZXJJRCkgewpAQCAtMjIxLDEyICsyMDIsMTAgQEAgdm9pZCBz
ZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiAKIHZvaWQgc3RvcFNo
YXJlZFRpbWVyKCkKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYgKHRpbWVyUXVldWUgJiYgdGlt
ZXIpIHsKICAgICAgICAgRGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyUXVldWUsIHRpbWVyLCAw
KTsKICAgICAgICAgdGltZXIgPSAwOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKHRpbWVySUQp
IHsKICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxlLCB0aW1lcklEKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Tb2Z0TGlua2luZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKaW5kZXggMDc5ZjA1YS4uY2QwZDZk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKQEAgLTM5LDEy
ICszOSw3IEBACiAgICAgICAgIHJldHVybiBsaWJyYXJ5OyBcCiAgICAgfQogCi0jaWYgT1MoV0lO
Q0UpCi0jZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBHZXRQcm9jQWRkcmVzc0EKLSNl
bHNlCiAjZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBHZXRQcm9jQWRkcmVzcwotI2Vu
ZGlmCi0KICNkZWZpbmUgU09GVF9MSU5LX0xJQlJBUlkobGliKSBTT0ZUX0xJTktfTElCUkFSWV9I
RUxQRVIobGliLCBMIi5kbGwiKQogI2RlZmluZSBTT0ZUX0xJTktfREVCVUdfTElCUkFSWShsaWIp
IFNPRlRfTElOS19MSUJSQVJZX0hFTFBFUihsaWIsIEwiX2RlYnVnLmRsbCIpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAppbmRleCBjOWVkY2EwLi40NDM5OGU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwCkBAIC0zOSwy
MyArMzksMTMgQEAgV2luZG93c1ZlcnNpb24gd2luZG93c1ZlcnNpb24oaW50KiBtYWpvciwgaW50
KiBtaW5vcikKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOwotI2lmIE9TKFdJTkNFKQotICAgICAgICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZv
OwotI2Vsc2UKICAgICAgICAgT1NWRVJTSU9OSU5GT0VYIHZlcnNpb25JbmZvOwotI2VuZGlmCiAg
ICAgICAgIFplcm9NZW1vcnkoJnZlcnNpb25JbmZvLCBzaXplb2YodmVyc2lvbkluZm8pKTsKICAg
ICAgICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5m
byk7CiAgICAgICAgIEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8q
PigmdmVyc2lvbkluZm8pKTsKICAgICAgICAgbWFqb3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdN
YWpvclZlcnNpb247CiAgICAgICAgIG1pbm9yVmVyc2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JW
ZXJzaW9uOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIGlmIChtYWpvclZlcnNpb24gPj0gMSAm
JiBtYWpvclZlcnNpb24gPD0gNykKLSAgICAgICAgICAgIHZlcnNpb24gPSBzdGF0aWNfY2FzdDxX
aW5kb3dzVmVyc2lvbj4oV2luZG93c0NFMSArIChtYWpvclZlcnNpb24gLSAxKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JWZXJzaW9uIDwgMSkgPyBXaW5kb3dz
Q0UxIDogV2luZG93c0NFNzsKLSNlbHNlCiAgICAgICAgIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRm
b3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5k
b3dzM18xOwogICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVS
X1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKQEAgLTc3LDcgKzY3LDYgQEAgV2luZG93c1ZlcnNp
b24gd2luZG93c1ZlcnNpb24oaW50KiBtYWpvciwgaW50KiBtaW5vcikKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JWZXJzaW9uID09IDQpID8gV2lu
ZG93c05UNCA6IFdpbmRvd3NOVDM7CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAogICAgIGlm
IChtYWpvcikKQEAgLTExNCw3ICsxMDMsNiBAQCBzdGF0aWMgU3RyaW5nIG9zVmVyc2lvbkZvclVB
U3RyaW5nKCkKICAgICByZXR1cm4gZmFtaWx5TmFtZSArIFN0cmluZzo6bnVtYmVyKG1ham9yKSAr
ICcuJyArIFN0cmluZzo6bnVtYmVyKG1pbm9yKTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIHN0YXRp
YyBib29sIGlzV09XNjQoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7
CkBAIC0xNTgsMTggKzE0NiwxNSBAQCBzdGF0aWMgV09SRCBwcm9jZXNzb3JBcmNoaXRlY3R1cmUo
KQogCiAgICAgcmV0dXJuIGFyY2hpdGVjdHVyZTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgU3RyaW5n
IGFyY2hpdGVjdHVyZVRva2VuRm9yVUFTdHJpbmcoKQogewotI2lmICFPUyhXSU5DRSkKICAgICBp
ZiAoaXNXT1c2NCgpKQogICAgICAgICByZXR1cm4gIjsgV09XNjQiOwogICAgIGlmIChwcm9jZXNz
b3JBcmNoaXRlY3R1cmUoKSA9PSBQUk9DRVNTT1JfQVJDSElURUNUVVJFX0FNRDY0KQogICAgICAg
ICByZXR1cm4gIjsgV2luNjQ7IHg2NCI7CiAgICAgaWYgKHByb2Nlc3NvckFyY2hpdGVjdHVyZSgp
ID09IFBST0NFU1NPUl9BUkNISVRFQ1RVUkVfSUE2NCkKICAgICAgICAgcmV0dXJuICI7IFdpbjY0
OyBJQTY0IjsKLSNlbmRpZgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCBjNzkzN2I4Li45NDY5M2U0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAt
Mjc5LDcgKzI3OSw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSog
cE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDCiB7CiAgICAgc3dpdGNoKHBN
ZWRTcmMtPnR5bWVkKQogICAgIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgY2FzZSBUWU1FRF9IR0xP
QkFMOgogICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IChIR0xPQkFMKU9sZUR1cGxpY2F0ZURh
dGEocE1lZFNyYy0+aEdsb2JhbCxwRm10U3JjLT5jZkZvcm1hdCwgMCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMjk1LDcgKzI5NCw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01F
RElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDCiAgICAgY2FzZSBU
WU1FRF9GSUxFOgogICAgICAgICBwTWVkU3JjLT5scHN6RmlsZU5hbWUgPSAoTFBPTEVTVFIpT2xl
RHVwbGljYXRlRGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUscEZtdFNyYy0+Y2ZGb3JtYXQsIDAp
OwogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgVFlNRURfSVNUUkVBTToKICAgICAg
ICAgcE1lZERlc3QtPnBzdG0gPSBwTWVkU3JjLT5wc3RtOwogICAgICAgICBwTWVkU3JjLT5wc3Rt
LT5BZGRSZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5k
ZXggOThkMGE5Ny4uZmJhMmNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAKQEAgLTM3NSw3ICszNzUsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjphZGREaXNh
YmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKICAgICByZXR1cm4gbV9kaXNh
YmxlZFBsdWdpbkZpbGVzLmFkZChmaWxlTmFtZSkuaXNOZXdFbnRyeTsKIH0KIAotI2lmICghT1Mo
V0lOQ0UpKSAmJiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkp
CisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpKQogLy8g
Rm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRl
ZAogLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3Jl
IGNvbnN0cnVjdHMKIC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBo
ZXJlIHVuZGVyIFhQX1dJTj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4
IGE4OGFkZjkuLmUxY2MyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApA
QCAtMzQwLDE3ICszNDAsMTAgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICNpZiBkZWZpbmVk
KFhQX1dJTikgJiYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cK
ICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIFdORFBST0Mg
Y3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIEdXTF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1
Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpblduZFByb2MpOwotI2Vsc2UKICAg
ICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIo
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKIAogICAgICAgICBpZiAoY3Vy
cmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBTZXRXaW5kb3dM
b25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1f
cGx1Z2luV25kUHJvYyk7Ci0jZW5kaWYKICAgICB9CiAjZW5kaWYgLy8gIWRlZmluZWQoWFBfV0lO
KSB8fCBQTEFURk9STShHVEspCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCmluZGV4IGRmNzlkYzku
LmE5NzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05v
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCkBA
IC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkK
IC8vIHBvcnRzIHVzaW5nIFBsdWdpblZpZXcsIGJ1dCB1bnRpbCB0aGVuLCBpZiBuZXcgZnVuY3Rp
b25zIGxpa2UgdGhpcyBhcmUgCiAvLyBhZGRlZCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGV5IGhhdmUg
dGhlIHByb3BlciBwbGF0Zm9ybSAjaWZzIHNvIHRoYXQgY2hhbmdlcwogLy8gZG8gbm90IGJyZWFr
IHBvcnRzIHdobyBjb21waWxlIGJvdGggdGhpcyBmaWxlIGFuZCBQbHVnaW5WaWV3LmNwcC4gICAK
LSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8
IE9TKFdJTkNFKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRG
T1JNKEdUSykKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIHZvaWQgUGx1Z2luVmll
dzo6a2VlcEFsaXZlKE5QUCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcAppbmRleCBlMjUwZTEzLi5kMWM3ZDg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0zMywxMiAr
MzMsNiBAQAogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlIDx3dGYvV2luZG93
c0V4dHJhcy5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBXSU5DRSBkb2Vzbid0IHN1cHBvcnQgUmVn
aXN0cnkgS2V5IEFjY2VzcyBSaWdodHMuIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGFsd2F5cyBiZSAw
Ci0jaWZuZGVmIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMKLSNkZWZpbmUgS0VZX0VOVU1FUkFURV9T
VUJfS0VZUyAwCi0jZW5kaWYKLQogQk9PTCBQYXRoUmVtb3ZlRmlsZVNwZWMoTFBXU1RSIG1vZHVs
ZUZpbGVOYW1lU3RyKQogewogICAgIGlmICghKm1vZHVsZUZpbGVOYW1lU3RyKQpAQCAtMjM4LDE0
ICsyMzIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5EaXJlY3Rvcmll
cyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRX
aW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9y
aWVzKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdp
biBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZp
cmVmb3ggaW5zdGFsbHMKICAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsg
MV07CiAgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRT
dHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGly
ZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOwogCiAgICAg
aWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gV1RG
X0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQogICAgICAgICBkaXJlY3Rvcmllcy5h
cHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEp
KTsKLSNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsKICAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTM3Nyw3ICszNjksNiBAQCBleGl0OgogCiBzdGF0aWMg
aW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+
JiBkaXJlY3RvcmllcykKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgV0NIQVIgc3lzdGVtRGlyZWN0
b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURp
cmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKQEAgLTM5
MCw3ICszODEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVj
dG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIAogICAgIFBhdGhDb21iaW5lKG1h
Y3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRc
XFNob2Nrd2F2ZSAxMCIpKTsKICAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVj
dG9yeVN0cik7Ci0jZW5kaWYKIH0KIAogVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRl
ZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IDY3Y2M3NjQuLmE4NTI1N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCkBAIC0yMzcsOSAr
MjM3LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKICAgICAgICAgbV9sb2FkQ291bnQr
KzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIHsKLSNpZiBPUyhXSU5DRSkKLSAg
ICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKS5kYXRhKCkpOwotI2Vsc2UKICAgICAgICAgV0NIQVIgY3VycmVudFBhdGhb
TUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFU
SCwgY3VycmVudFBhdGgpKQpAQCAtMjU4LDcgKzI1NSw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6
bG9hZCgpCiAgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAogICAgIGlmICgh
bV9tb2R1bGUpCkBAIC0yNzAsMTUgKzI2Niw5IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgp
CiAgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CiAgICAgTlBFcnJv
ciBucEVycjsKIAotI2lmIE9TKFdJTkNFKQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIEwiTlBfSW5pdGlhbGl6ZSIpOwot
ICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9j
QWRkcmVzcyhtX21vZHVsZSwgTCJOUF9HZXRFbnRyeVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRk
b3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIEwiTlBf
U2h1dGRvd24iKTsKLSNlbHNlCiAgICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVu
Y1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKICAgICBOUF9H
ZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3Mo
bV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwogICAgIG1fTlBQX1NodXRkb3duID0gKE5Q
UF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIp
OwotI2VuZGlmCiAKICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRz
IHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAgZ290byBhYm9ydDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKaW5kZXggNmIyOWQzYi4uNDk1MzI5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKQEAgLTcz
LDEzICs3Myw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3dpbi9HRElPYmplY3QuaD4KIAotI2lmIE9TKFdJTkNFKQotI3VuZGVmIExPR19OUEVSUk9S
Ci0jZGVmaW5lIExPR19OUEVSUk9SKHgpCi0jdW5kZWYgTE9HX1BMVUdJTl9ORVRfRVJST1IKLSNk
ZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQotI2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxjYWlyby13aW4zMi5o
PgpAQCAtMTE4LDcgKzExMSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBjb25zdCBM
UENXU1RSIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKIGNv
bnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3Bl
cnR5IjsKIAotI2lmICFPUyhXSU5DRSkKIC8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBh
aW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCiAvLyA8aHR0cDovL3d3dy5mZW5neXVh
bi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgogLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZl
bmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBAIC0yNzAsNyArMjYyLDYgQEAgc3RhdGljIHZv
aWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFp
bnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkVuZFBhaW50IiwgZW5kUGFp
bnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJlaW50
ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWludCkpKTsKIAogfQotI2VuZGlmCiAK
IHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiB7CkBAIC0yODYsMTggKzI3NywxMCBA
QCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogCiAgICAgQVNTRVJUKFdlYkNvcmU6
Omluc3RhbmNlSGFuZGxlKCkpOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgV05EQ0xBU1Mgd2NleCA9
IHsgMCB9OwotI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgd2NleC5jYlNpemUgPSBz
aXplb2YoV05EQ0xBU1NFWCk7CiAgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0jZW5kaWYK
LQogICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19EQkxDTEtTOwotI2lmIE9TKFdJTkNFKQot
ICAgIHdjZXguc3R5bGUgICAgICAgICAgfD0gQ1NfUEFSRU5UREM7Ci0jZW5kaWYKICAgICB3Y2V4
LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKICAgICB3Y2V4LmNiQ2xzRXh0cmEgICAg
ID0gMDsKICAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKQEAgLTMwOCwxMSArMjkxLDcgQEAg
c3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKICAgICB3Y2V4Lmxwc3pNZW51TmFtZSAg
ID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05h
bWU7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzKCZ3Y2V4KTsK
LSNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLSNlbmRpZgogfQog
CiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFdu
ZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtMzk0LDcg
KzM3Myw2IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1l
ci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChtZXNz
YWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAgICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2Vk
IHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UKICAgICAgICAg
Ly8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91ciBob29rZWQg
dmVyc2lvbnMgb2YKQEAgLTQwMiw3ICszODAsNiBAQCBQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAg
ICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAgIG1fd21QcmludEhEQyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KLSNlbmRpZgogCiAgICAgLy8gQ2FsbCB0aGUgcGx1
Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJv
YyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKQEAgLTQy
NSwxMSArNDAyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAg
IEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKICAgICBJbnRSZWN0IG9sZENs
aXBSZWN0ID0gbV9jbGlwUmVjdDsKIAotI2lmIE9TKFdJTkNFKQotICAgIG1fd2luZG93UmVjdCA9
IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7Ci0jZWxzZQogICAgIG1f
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVj
dCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOwotI2VuZGlmCiAgICAgbV9jbGlw
UmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1Jl
Y3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKQEAgLTUyOSw5ICs1MDIsNyBAQCBib29sIFBs
dWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQogdm9pZCBQbHVnaW5W
aWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykKIHsKICAgICBpZiAobV9p
c1dpbmRvd2VkKSB7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBTZW5kTWVzc2FnZShwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENMSUVOVCwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+
KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJTERSRU4gfCBQUkZfT1dORUQpOwotI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY0MSw3ICs2MTIsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMgdGhhdCB0aGUgcGFz
c2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0ZXMuCiAgICAgLy8gSW4gdGhlIEdUSyBhbmQg
UXQgcG9ydHMgd2UgYWx3YXlzIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVm
b3JlIG5lZWQKICAgICAvLyB0byBwcmVzZXJ2ZSB0aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdp
bmRvd3NDb250ZXh0LgotI2lmICFQTEFURk9STShHVEspICYmICFPUyhXSU5DRSkKKyNpZiAhUExB
VEZPUk0oR1RLKQogICAgIGlmICghY29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsK
ICAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwogICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5k
b3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7CkBAIC02NzksOSArNjUwLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIGV4
dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7Ci0jZW5kaWYKIAogdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewpAQCAtNzQ5LDcgKzcxOCw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
ICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKIAotI2lmICFQTEFURk9STShHVEspICYmICFPUyhXSU5DRSkKKyNpZiAh
UExBVEZPUk0oR1RLKQogICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3
YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKICAgICAv
LyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29y
IHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCiAgICAgaWdub3JlTmV4dFNldEN1cnNvciA9
IHRydWU7CkBAIC03NjIsMTUgKzczMSw2IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNj
cm9sbFZpZXcqIHBhcmVudCkKIHsKICAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwogCi0j
aWYgT1MoV0lOQ0UpCi0gICAgaWYgKHBhcmVudCkgewotICAgICAgICBpbml0KCk7Ci0gICAgICAg
IGlmIChwYXJlbnQtPmlzVmlzaWJsZSgpKQotICAgICAgICAgICAgc2hvdygpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBoaWRlKCk7Ci0gICAgfQotI2Vsc2UKICAgICBpZiAocGFyZW50KQog
ICAgICAgICBpbml0KCk7CiAgICAgZWxzZSB7CkBAIC03ODQsNyArNzQ0LDYgQEAgdm9pZCBQbHVn
aW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogICAgICAgICBpZiAocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSA9PSBmb2N1c2VkV2luZG93IHx8IDo6SXNDaGlsZChwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCBmb2N1c2VkV2luZG93KSkKICAgICAgICAgICAgIDo6U2V0Rm9jdXMoMCk7
CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShi
b29sIHZpc2libGUpCkBAIC04MDcsMTggKzc2Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKCFtX2lzU3RhcnRlZCkKICAg
ICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgSW50UmVjdCByID0gdG9GcmFtZVZp
ZXcocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOwotICAgIG1fbnBXaW5kb3cueCA9
IHIueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IHIueSgpOwotCi0gICAgbV9ucFdpbmRvdy53aWR0
aCA9IHIud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IHIuaGVpZ2h0KCk7Ci0KLSAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gci53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QuYm90dG9tID0gci5oZWlnaHQoKTsKLSNlbHNlCi0gICAgLy8gSW4gdGhlIEdUSyBh
bmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50
IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gSW4gdGhlIEdUSyBwb3J0IHdlIGRyYXcgaW4gYW4g
b2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdwogICAgIC8v
IGNvb3JkaW5hdGVzLgogIyBpZiBQTEFURk9STShHVEspCiAgICAgSW50UG9pbnQgcCA9IHJlY3Qu
bG9jYXRpb24oKTsKQEAgLTgzMyw3ICs3ODEsNiBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5y
aWdodCA9IHJlY3Qud2lkdGgoKTsKICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJl
Y3QuaGVpZ2h0KCk7Ci0jZW5kaWYKICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOwog
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIApAQCAtODUwLDE3ICs3OTcsOSBAQCB2
b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiAg
ICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKIAotI2lmIE9TKFdJTkNFKQot
ICAgICAgICBpZiAoIW1fcGx1Z2luV25kUHJvYykgewotICAgICAgICAgICAgV05EUFJPQyBjdXJy
ZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgR1dMX1dORFBST0MpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jICE9IFBsdWdp
blZpZXdXbmRQcm9jKQotICAgICAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9D
KVNldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05H
KVBsdWdpblZpZXdXbmRQcm9jKTsKLSAgICAgICAgfQotI2Vsc2UKICAgICAgICAgV05EUFJPQyBj
dXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKICAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jICE9IFBs
dWdpblZpZXdXbmRQcm9jKQogICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0Mp
U2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChM
T05HX1BUUilQbHVnaW5WaWV3V25kUHJvYyk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTk4OCw5
ICs5MjcsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogCiAgICAgaWYgKG1f
aXNXaW5kb3dlZCkgewogICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSNpZiAhT1MoV0lO
Q0UpCiAgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50
LCBob29rZWRFbmRQYWludCk7Ci0jZW5kaWYKIAogICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NI
SUxEOwogICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQpAQCAtMTAxMCwxMSArOTQ3LDcgQEAg
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAgLy8gdGhlIFNob2Nrd2F2
ZSBEaXJlY3RvciBwbHVnLWluLgogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCiAgICAg
ICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQ
Uk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgICAg
IDo6U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExP
TkcpRGVmV2luZG93UHJvYyk7Ci0jZWxzZQogICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7
Ci0jZW5kaWYKICAgICAgICAgU2V0UHJvcChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBrV2ViUGx1
Z2luVmlld1Byb3BlcnR5LCB0aGlzKTsKIAogICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdp
bmRvd1R5cGVXaW5kb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNTE5OGYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjkyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lV2luQ0UuaCIKLQotI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250TWV0cmljcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBhaW50SW5mby5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0vKiAKLSAqIFRoZSBm
b2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBob3cgYSB3aWRnZXQgaXMg
ZHJhd24gdXNpbmcKLSAqIFdpbmRvd3MnIFRoZW1lIEFQSS4gRm9yIG1vcmUgaW5mb3JtYXRpb24g
b24gdGhlbWUgcGFydHMgYW5kIHN0YXRlcyBzZWUKLSAqIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvc2hlbGxjYy9wbGF0Zm9y
bS9jb21tY3Rscy91c2VyZXgvdG9waWNzL3BhcnRzYW5kc3RhdGVzLmFzcAotICovCi0jZGVmaW5l
IFRIRU1FX0NPTE9SIDIwNAotI2RlZmluZSBUSEVNRV9GT05UICAyMTAKLQotLy8gR2VuZXJpYyBz
dGF0ZSBjb25zdGFudHMKLSNkZWZpbmUgVFNfTk9STUFMICAgIDEKLSNkZWZpbmUgVFNfSE9WRVIg
ICAgIDIKLSNkZWZpbmUgVFNfQUNUSVZFICAgIDMKLSNkZWZpbmUgVFNfRElTQUJMRUQgIDQKLSNk
ZWZpbmUgVFNfRk9DVVNFRCAgIDUKLQotLy8gQnV0dG9uIGNvbnN0YW50cwotI2RlZmluZSBCUF9C
VVRUT04gICAgMQotI2RlZmluZSBCUF9SQURJTyAgICAgMgotI2RlZmluZSBCUF9DSEVDS0JPWCAg
MwotCi0vLyBUZXh0ZmllbGQgY29uc3RhbnRzCi0jZGVmaW5lIFRGUF9URVhURklFTEQgMQotI2Rl
ZmluZSBURlNfUkVBRE9OTFkgIDYKLQotdHlwZWRlZiBIQU5ETEUgKFdJTkFQSSpvcGVuVGhlbWVE
YXRhUHRyKShIV05EIGh3bmQsIExQQ1dTVFIgcHN6Q2xhc3NMaXN0KTsKLXR5cGVkZWYgSFJFU1VM
VCAoV0lOQVBJKmNsb3NlVGhlbWVEYXRhUHRyKShIQU5ETEUgaFRoZW1lKTsKLXR5cGVkZWYgSFJF
U1VMVCAoV0lOQVBJKmRyYXdUaGVtZUJhY2tncm91bmRQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBo
ZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUICpwUmVjdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQ1QqIHBDbGlwUmVjdCk7Ci10eXBlZGVmIEhS
RVNVTFQgKFdJTkFQSSpkcmF3VGhlbWVFZGdlUHRyKShIQU5ETEUgaFRoZW1lLCBIREMgaGRjLCBp
bnQgaVBhcnRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpU3RhdGVJZCwgY29uc3QgUkVDVCAqcFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCB1RWRnZSwgdW5zaWduZWQgdUZsYWdzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVCogcENsaXBSZWN0
KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lQ29udGVudFJlY3RQdHIpKEhBTkRM
RSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUKiBwUmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1QqIHBDb250ZW50UmVjdCk7
Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZVBhcnRTaXplUHRyKShIQU5ETEUgaFRo
ZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpU3RhdGVJZCwgUkVDVCogcHJjLCBpbnQgdHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFKiBwc3opOwotdHlwZWRlZiBIUkVTVUxUIChX
SU5BUEkqZ2V0VGhlbWVTeXNGb250UHRyKShIQU5ETEUgaFRoZW1lLCBpbnQgaUZvbnRJZCwgT1VU
IExPR0ZPTlQqIHBGb250KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lQ29sb3JQ
dHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGludCBpUHJvcElkLCBPVVQgQ09MT1JS
RUYqIHBGb250KTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IGRy
b3BEb3duQnV0dG9uV2lkdGggPSAxNzsKLXN0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDQ7
Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lV2luQ0U6OmNyZWF0ZSgpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVdpbkNFKTsKLX0KLQotUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQot
ewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogd2luY2VUaGVtZSA9IFJlbmRlclRoZW1lV2luQ0U6
OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gd2luY2VUaGVtZTsKLX0KLQotUmVuZGVy
VGhlbWVXaW5DRTo6UmVuZGVyVGhlbWVXaW5DRSgpCi17Ci19Ci0KLVJlbmRlclRoZW1lV2luQ0U6
On5SZW5kZXJUaGVtZVdpbkNFKCkKLXsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIENPTE9S
UkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUKTsKLSAgICByZXR1cm4gQ29s
b3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwg
MjU1KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgQ09MT1JSRUYgY29sb3IgPSBHZXRT
eXNDb2xvcihDT0xPUl9HUkFZVEVYVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xv
ciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDI1NSk7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lV2luQ0U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKLXsKLSAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hM
SUdIVFRFWFQpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUo
Y29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAyNTUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVdp
bkNFOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gQ29sb3I6OndoaXRlOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnN1
cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9u
UGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6
c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUgKnN0eWxlKSBjb25zdAotewotICAg
IHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwotfQotCi11bnNpZ25l
ZCBSZW5kZXJUaGVtZVdpbkNFOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVyT2JqZWN0KiBv
KQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgaWYgKCFpc0VuYWJsZWQobykgfHwg
aXNSZWFkT25seUNvbnRyb2wobykpCi0gICAgICAgIHJlc3VsdCA9IERGQ1NfSU5BQ1RJVkU7Ci0g
ICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKSAvLyBBY3RpdmUgc3VwZXJzZWRlcyBob3ZlcgotICAg
ICAgICByZXN1bHQgPSBERkNTX1BVU0hFRDsKLQotICAgIGlmIChpc0NoZWNrZWQobykpCi0gICAg
ICAgIHJlc3VsdCB8PSBERkNTX0NIRUNLRUQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVGhl
bWVEYXRhIFJlbmRlclRoZW1lV2luQ0U6OmdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8pCi17
Ci0gICAgVGhlbWVEYXRhIHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpKSB7Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0g
ICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9CVVRUT047Ci0gICAgICAgIHJlc3VsdC5tX2NsYXNz
aWNTdGF0ZSA9IERGQ1NfQlVUVE9OUFVTSDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDaGVj
a2JveFBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAgICAgICAg
cmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19CVVRUT05DSEVDSzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9SQURJTzsK
LSAgICAgICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19CVVRUT05SQURJTzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBMaXN0Ym94UGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoK
LSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAg
IHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgfD0gZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKG8pOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSBidXR0b24KLSAg
ICBUaGVtZURhdGEgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwotCi0gICAgLy8gTm93IHBh
aW50IHRoZSBidXR0b24uCi0gICAgaS5jb250ZXh0LT5kcmF3RnJhbWVDb250cm9sKHIsIERGQ19C
VVRUT04sIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSk7Ci0gICAgaWYgKGlzRm9jdXNlZChvKSkg
ewotICAgICAgICBpZiAodGhlbWVEYXRhLm1fcGFydCA9PSBCUF9CVVRUT04pIHsKLSAgICAgICAg
ICAgIEludFJlY3QgZm9jdXNSZWN0KHIpOwotICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUo
LTIpOwotICAgICAgICAgICAgaS5jb250ZXh0LT5kcmF3Rm9jdXNSZWN0KGZvY3VzUmVjdCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaS5jb250ZXh0LT5kcmF3Rm9jdXNSZWN0KHIpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJ
WE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0
IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgotICAgIC8vIEF0IGRpZmZl
cmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlv
dSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCi0gICAgLy8gdGhlIGhpZ2hlciBEUEku
ICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFu
IDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCi0gICAgLy8gbWV0cmljcy4KLSAgICBp
ZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBHZXQgdGhlIGNv
cnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0ZmllbGQKLSAgICBUaGVtZURhdGEgdGhlbWVEYXRh
ID0gZ2V0VGhlbWVEYXRhKG8pOwotCi0gICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgot
ICAgIGkuY29udGV4dC0+cGFpbnRUZXh0RmllbGQociwgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRl
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHBhaW50VGV4dEZpZWxkKHJlbmRlcmVyLCBwYWludEluZm8sIHJlY3QpOwotICAg
IHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCByZWN0
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBi
dXR0b25SZWN0KHJlY3QubWF4WCgpIC0gZHJvcERvd25CdXR0b25XaWR0aCAtIDEsIHJlY3QueSgp
LCBkcm9wRG93bkJ1dHRvbldpZHRoLCByZWN0LmhlaWdodCgpKTsKLSAgICBidXR0b25SZWN0Lmlu
ZmxhdGVZKC0xKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ZyYW1lQ29udHJvbChidXR0
b25SZWN0LCBERkNfU0NST0xMLCBERkNTX1NDUk9MTENPTUJPQk9YIHwgZGV0ZXJtaW5lQ2xhc3Np
Y1N0YXRlKHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyVGhl
bWVXaW5DRTo6c3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OnRoZW1lQ2hhbmdlZCgpCi17Ci19Ci0KLVN0cmluZyBSZW5kZXJUaGVtZVdp
bkNFOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lV2luQ0U6OmV4dHJh
UXVpcmtzU3R5bGVTaGVldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6c3VwcG9ydHNIb3Zlcihjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBNYXAg
YSBDU1NWYWx1ZSogc3lzdGVtIGNvbG9yIHRvIGFuIGluZGV4IHVuZGVyc3Rvb2QgYnkgR2V0U3lz
Q29sb3IKLXN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRleChDU1NWYWx1ZUlEIGNz
c1ZhbHVlSWQpCi17Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgY2FzZSBDU1NWYWx1
ZUFjdGl2ZWJvcmRlcjogcmV0dXJuIENPTE9SX0FDVElWRUJPUkRFUjsKLSAgICBjYXNlIENTU1Zh
bHVlQWN0aXZlY2FwdGlvbjogcmV0dXJuIENPTE9SX0FDVElWRUNBUFRJT047Ci0gICAgY2FzZSBD
U1NWYWx1ZUFwcHdvcmtzcGFjZTogcmV0dXJuIENPTE9SX0FQUFdPUktTUEFDRTsKLSAgICBjYXNl
IENTU1ZhbHVlQmFja2dyb3VuZDogcmV0dXJuIENPTE9SX0JBQ0tHUk9VTkQ7Ci0gICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbmZhY2U6IHJldHVybiBDT0xPUl9CVE5GQUNFOwotICAgIGNhc2UgQ1NTVmFs
dWVCdXR0b25oaWdobGlnaHQ6IHJldHVybiBDT0xPUl9CVE5ISUdITElHSFQ7Ci0gICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbnNoYWRvdzogcmV0dXJuIENPTE9SX0JUTlNIQURPVzsKLSAgICBjYXNlIENT
U1ZhbHVlQnV0dG9udGV4dDogcmV0dXJuIENPTE9SX0JUTlRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1
ZUNhcHRpb250ZXh0OiByZXR1cm4gQ09MT1JfQ0FQVElPTlRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1
ZUdyYXl0ZXh0OiByZXR1cm4gQ09MT1JfR1JBWVRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUhpZ2hs
aWdodDogcmV0dXJuIENPTE9SX0hJR0hMSUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlSGlnaGxpZ2h0
dGV4dDogcmV0dXJuIENPTE9SX0hJR0hMSUdIVFRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0
aXZlYm9yZGVyOiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVCT1JERVI7Ci0gICAgY2FzZSBDU1NWYWx1
ZUluYWN0aXZlY2FwdGlvbjogcmV0dXJuIENPTE9SX0lOQUNUSVZFQ0FQVElPTjsKLSAgICBjYXNl
IENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9udGV4dDogcmV0dXJuIENPTE9SX0lOQUNUSVZFQ0FQVElP
TlRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUluZm9iYWNrZ3JvdW5kOiByZXR1cm4gQ09MT1JfSU5G
T0JLOwotICAgIGNhc2UgQ1NTVmFsdWVJbmZvdGV4dDogcmV0dXJuIENPTE9SX0lORk9URVhUOwot
ICAgIGNhc2UgQ1NTVmFsdWVNZW51OiByZXR1cm4gQ09MT1JfTUVOVTsKLSAgICBjYXNlIENTU1Zh
bHVlTWVudXRleHQ6IHJldHVybiBDT0xPUl9NRU5VVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlU2Ny
b2xsYmFyOiByZXR1cm4gQ09MT1JfU0NST0xMQkFSOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRk
YXJrc2hhZG93OiByZXR1cm4gQ09MT1JfM0RES1NIQURPVzsKLSAgICBjYXNlIENTU1ZhbHVlVGhy
ZWVkZmFjZTogcmV0dXJuIENPTE9SXzNERkFDRTsKLSAgICBjYXNlIENTU1ZhbHVlVGhyZWVkaGln
aGxpZ2h0OiByZXR1cm4gQ09MT1JfM0RISUdITElHSFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZVRocmVl
ZGxpZ2h0c2hhZG93OiByZXR1cm4gQ09MT1JfM0RMSUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlVGhy
ZWVkc2hhZG93OiByZXR1cm4gQ09MT1JfM0RTSEFET1c7Ci0gICAgY2FzZSBDU1NWYWx1ZVdpbmRv
dzogcmV0dXJuIENPTE9SX1dJTkRPVzsKLSAgICBjYXNlIENTU1ZhbHVlV2luZG93ZnJhbWU6IHJl
dHVybiBDT0xPUl9XSU5ET1dGUkFNRTsKLSAgICBjYXNlIENTU1ZhbHVlV2luZG93dGV4dDogcmV0
dXJuIENPTE9SX1dJTkRPV1RFWFQ7Ci0gICAgZGVmYXVsdDogcmV0dXJuIC0xOyAvLyBVbnN1cHBv
cnRlZCBDU1NWYWx1ZQotICAgIH0KLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6c3lzdGVt
Q29sb3IoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKSBjb25zdAotewotICAgIGludCBzeXNDb2xvcklu
ZGV4ID0gY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRleChjc3NWYWx1ZUlkKTsKLSAgICBpZiAoc3lz
Q29sb3JJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xv
cihjc3NWYWx1ZUlkKTsKLQotICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3Ioc3lzQ29s
b3JJbmRleCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShj
b2xvciksIEdldEJWYWx1ZShjb2xvcikpOwotfQotCi1jb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0
aCA9IDc7Ci1jb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKLQotdm9pZCBSZW5kZXJU
aGVtZVdpbkNFOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRo
dW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlk
ZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfQotfQotCi0jaWYg
MAotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RCdXR0b25Jbm5lclN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGlubmVyIHBhZGRpbmcgbWF0Y2hlcyBG
aXJlZm94LgotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgxLCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKDMsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dFBhZGRpbmdCb3R0b20oTGVuZ3RoKDEsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdM
ZWZ0KExlbmd0aCgzLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcg
c2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4KLSAgICBjb25zdCBpbnQgcGFk
ZGluZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci19Ci0jZW5k
aWYKLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVy
biBwYWludFRleHRGaWVsZChvLCBpLCByKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgQ29sb3IgYnV0dG9uQ29s
b3IgPSAoby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVu
dChvLT5ub2RlKCkpLT5hY3RpdmUoKSkgPyBDb2xvcigxMzgsIDEzOCwgMTM4KSA6IENvbG9yKDE4
NiwgMTg2LCAxODYpOwotCi0gICAgSW50U2l6ZSBjYW5jZWxTaXplKDEwLCAxMCk7Ci0gICAgSW50
U2l6ZSBjYW5jZWxSYWRpdXMoY2FuY2VsU2l6ZS53aWR0aCgpIC8gMiwgY2FuY2VsU2l6ZS5oZWln
aHQoKSAvIDIpOwotICAgIGludCB4ID0gci54KCkgKyAoci53aWR0aCgpIC0gY2FuY2VsU2l6ZS53
aWR0aCgpKSAvIDI7Ci0gICAgaW50IHkgPSByLnkoKSArIChyLmhlaWdodCgpIC0gY2FuY2VsU2l6
ZS5oZWlnaHQoKSkgLyAyICsgMTsKLSAgICBJbnRSZWN0IGNhbmNlbEJvdW5kcyhJbnRQb2ludCh4
LCB5KSwgY2FuY2VsU2l6ZSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KGNhbmNlbEJvdW5k
cywgY2FuY2VsUmFkaXVzLCBjYW5jZWxSYWRpdXMsIGNhbmNlbFJhZGl1cywgY2FuY2VsUmFkaXVz
KSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGNhbmNlbEJvdW5kcywgYnV0dG9u
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgLy8gRHJhdyB0aGUgJ3gnCi0gICAg
SW50U2l6ZSB4U2l6ZSgzLCAzKTsKLSAgICBJbnRSZWN0IHhCb3VuZHMoY2FuY2VsQm91bmRzLmxv
Y2F0aW9uKCkgKyBJbnRTaXplKDMsIDMpLCB4U2l6ZSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKHhCb3VuZHMubG9jYXRpb24oKSwgIHhCb3VuZHMu
bG9jYXRpb24oKSArIHhCb3VuZHMuc2l6ZSgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJh
d0xpbmUoSW50UG9pbnQoeEJvdW5kcy5tYXhYKCksIHhCb3VuZHMueSgpKSwgIEludFBvaW50KHhC
b3VuZHMueCgpLCB4Qm91bmRzLm1heFkoKSkpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJl
c3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIGNhbmNlbFNpemUo
MTMsIDExKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbFNpemUud2lkdGgoKSwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxTaXplLmhlaWdodCgp
LCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7Ci0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKLXsKLSAgICBJbnRTaXplIG1hZ25pZmllclNpemUoMTUsIDExKTsKLSAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKG1hZ25pZmllclNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
LXsKLSAgICBJbnRTaXplIG1hZ25pZmllclNpemUoMTUsIDExKTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKG1hZ25pZmllclNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChvLCBwYWludEluZm8s
IHIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgcGFkZGluZ3MgbmVlZGVk
IHRvIHBsYWNlIHRoZSB0ZXh0IGNvcnJlY3RseSBpbiB0aGUgPHNlbGVjdD4gYm94Ci0gICAgY29u
c3QgaW50IGRyb3BEb3duQm94UGFkZGluZ1RvcCAgICA9IDI7Ci0gICAgY29uc3QgaW50IGRyb3BE
b3duQm94UGFkZGluZ1JpZ2h0ICA9IHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0ICsgZHJv
cERvd25CdXR0b25XaWR0aCA6IDQ7Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0Jv
dHRvbSA9IDI7Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0xlZnQgICA9IHN0eWxl
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9uV2lkdGg7Ci0gICAg
Ly8gVGhlIDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0IGxlYXN0IDEycHggaGlnaCBmb3IgdGhlIGJ1
dHRvbiB0byByZW5kZXIgbmljZWx5IG9uIFdpbmRvd3MKLSAgICBjb25zdCBpbnQgZHJvcERvd25C
b3hNaW5IZWlnaHQgPSAxMjsKLQotICAgIC8vIFBvc2l0aW9uIHRoZSB0ZXh0IGNvcnJlY3RseSB3
aXRoaW4gdGhlIHNlbGVjdCBib3ggYW5kIG1ha2UgdGhlIGJveCB3aWRlIGVub3VnaCB0byBmaXQg
dGhlIGRyb3Bkb3duIGJ1dHRvbgotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChkcm9w
RG93bkJveFBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChM
ZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0xlZnQsIEZp
eGVkKSk7Ci0KLSAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8KLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgb3VyIG1pbi1oZWlnaHQK
LSAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAg
bWluSGVpZ2h0ID0gc3RkOjptYXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhlaWdodCk7Ci0K
LSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7Ci0KLSAg
ICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoUFJFKTsKLQotICAgIERXT1JEIGNvbG9yTWVudSA9IEdldFN5c0NvbG9yKENPTE9SX01FTlUp
OwotICAgIERXT1JEIGNvbG9yTWVudVRleHQgPSBHZXRTeXNDb2xvcihDT0xPUl9NRU5VVEVYVCk7
Ci0gICAgQ29sb3IgYmdDb2xvcihHZXRSVmFsdWUoY29sb3JNZW51KSwgR2V0R1ZhbHVlKGNvbG9y
TWVudSksIEdldEJWYWx1ZShjb2xvck1lbnUpLCAyNTUpOwotICAgIENvbG9yIHRleHRDb2xvcihH
ZXRSVmFsdWUoY29sb3JNZW51VGV4dCksIEdldEdWYWx1ZShjb2xvck1lbnVUZXh0KSwgR2V0QlZh
bHVlKGNvbG9yTWVudVRleHQpLCAyNTUpOwotICAgIGlmIChiZ0NvbG9yID09IHRleHRDb2xvcikK
LSAgICAgICAgdGV4dENvbG9yLnNldFJHQigofmJnQ29sb3IucmdiKCkpIHwgMHhGRjAwMDAwMCk7
Ci0gICAgc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOwotICAgIHN0eWxlLT5hY2Nlc3NC
YWNrZ3JvdW5kTGF5ZXJzKCktPnNldENsaXAoQ29udGVudEZpbGxCb3gpOwotICAgIHN0eWxlLT5z
ZXRCYWNrZ3JvdW5kQ29sb3IoYmdDb2xvcik7Ci0gICAgc3R5bGUtPnNldENvbG9yKHRleHRDb2xv
cik7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0vLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEgSFRN
TE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJucyAwIGlmIG9uZSBjYW5ub3QgYmUgZm91
bmQuCi1zdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5v
ZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlKiBtZWRp
YU5vZGUgPSBub2RlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFtZWRpYU5vZGUpCi0gICAgICAg
IG1lZGlhTm9kZSA9IG5vZGU7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgIW1lZGlhTm9kZS0+aXNF
bGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobWVkaWFOb2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9IVE1MTWVkaWFFbGVtZW50KG1lZGlh
Tm9kZSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIGJvb2wgcmMgPSBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUcmFjayhvLCBpLCBy
KTsKLSAgICBJbnRQb2ludCBsZWZ0ID0gSW50UG9pbnQoci54KCkgKyAyLCAoci55KCkgKyByLm1h
eFkoKSkgLyAyKTsKLSAgICBpLmNvbnRleHQtPnNhdmUoKTsKLSAgICBpLmNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBpLmNvbnRl
eHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
aS5jb250ZXh0LT5maWxsUmVjdChyKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0g
ICAgaWYgKG1lZGlhRWxlbWVudCkgewotICAgICAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yKDAsIDB4ZmYsIDApKTsKLSAgICAgICAgSW50UG9pbnQgcmlnaHQgPSBJbnRQb2ludChs
ZWZ0LngoKSArIG1lZGlhRWxlbWVudC0+cGVyY2VudExvYWRlZCgpICogKHIubWF4WCgpIC0gci54
KCkgLSA0KSwgKHIueSgpICsgci5tYXhZKCkpIC8gMik7Ci0gICAgICAgIGkuY29udGV4dC0+ZHJh
d0xpbmUobGVmdCwgcmlnaHQpOwotICAgICAgICBsZWZ0ID0gcmlnaHQ7Ci0gICAgfQotI2VuZGlm
Ci0gICAgaS5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwotICAgIGkuY29udGV4dC0+ZHJhd0xpbmUobGVmdCwgSW50UG9pbnQoci5tYXhY
KCkgLSAyLCBsZWZ0LnkoKSkpOwotICAgIGkuY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIGJvb2wgcmMgPSBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaHVtYihvLCBpLCByKTsKLSAg
ICBpLmNvbnRleHQtPnNhdmUoKTsKLSAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9y
OjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgaS5jb250ZXh0LT5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBpLmNvbnRleHQtPmZp
bGxSZWN0KHIpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKLSAgICBpZiAobWVkaWFF
bGVtZW50KSB7Ci0gICAgICAgIGZsb2F0IHB0ID0gbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgp
IC8gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwotICAgICAgICBGbG9hdFJlY3QgaW50UmVjdCA9
IHI7Ci0gICAgICAgIGludFJlY3Quc2V0WChpbnRSZWN0LngoKSArIGludFJlY3Qud2lkdGgoKSAq
IHB0IC0gMik7Ci0gICAgICAgIGludFJlY3Quc2V0V2lkdGgoNSk7Ci0gICAgICAgIGkuY29udGV4
dC0+ZmlsbFJlY3QoaW50UmVjdCk7Ci0gICAgfQotI2VuZGlmCi0gICAgaS5jb250ZXh0LT5yZXN0
b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IHBhZGRpbmcgPSAxOwotICAgIHN0eWxl
LT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRk
aW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi1i
b29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRS
ZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTIpOwotICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6
Z3JheSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJj
ID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKLSAgICBib29sIG11
dGVkID0gIW1lZGlhRWxlbWVudCB8fCBtZWRpYUVsZW1lbnQtPm11dGVkKCk7Ci0gICAgRmxvYXRS
ZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTIpOwotICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2spOwotICAgIEZsb2F0UG9pbnQgcHRzWzZdID0gewotICAgICAgICBGbG9hdFBvaW50KGlt
UmVjdC54KCkgKyAxLCBpbVJlY3QueSgpICsgaW1SZWN0LmhlaWdodCgpIC8gMy4wKSwKLSAgICAg
ICAgRmxvYXRQb2ludChpbVJlY3QueCgpICsgMSArIGltUmVjdC53aWR0aCgpIC8gMi4wLCBpbVJl
Y3QueSgpICsgaW1SZWN0LmhlaWdodCgpIC8gMy4wKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJl
Y3QubWF4WCgpIC0gMSwgaW1SZWN0LnkoKSksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0Lm1h
eFgoKSAtIDEsIGltUmVjdC5tYXhZKCkpLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkg
KyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyAyLjAgKiBpbVJlY3QuaGVp
Z2h0KCkgLyAzLjApLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxLCBpbVJlY3Qu
eSgpICsgMi4wICogaW1SZWN0LmhlaWdodCgpIC8gMy4wKQotICAgIH07Ci0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDYsIHB0cyk7Ci0gICAgaWYgKG11dGVkKQotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoaW1SZWN0Lm1heFgoKSwg
aW1SZWN0LnkoKSksIEludFBvaW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIGJvb2wg
cmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBpbVJlY3Qg
PSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0zKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2sp
OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+
bm9kZSgpKTsKLSAgICBib29sIHBhdXNlZCA9ICFtZWRpYUVsZW1lbnQgfHwgbWVkaWFFbGVtZW50
LT5wYXVzZWQoKTsKLSAgICBpZiAocGF1c2VkKSB7Ci0gICAgICAgIGZsb2F0IHdpZHRoID0gaW1S
ZWN0LndpZHRoKCk7Ci0gICAgICAgIGltUmVjdC5zZXRXaWR0aCh3aWR0aCAvIDMuMCk7Ci0gICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChpbVJlY3QpOwotICAgICAgICBpbVJlY3Qu
bW92ZSgyLjAgKiB3aWR0aCAvIDMuMCwgMCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5m
aWxsUmVjdChpbVJlY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcHRzWzNd
ID0geyBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVj
dC5tYXhYKCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50
KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5kcmF3Q29udmV4UG9seWdvbigzLCBwdHMpOwotICAgIH0KLSAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNF
OjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJjID0gcGFpbnRC
dXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBp
bVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQo
KGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEZsb2F0UG9p
bnQoaW1SZWN0LngoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEZsb2F0
UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkg
fTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwg
aW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIu
MCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0
Lm1heFgoKSwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwot
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzKTsKLSAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzMik7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVX
aW5DRTo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9
IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7
Ci0gICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9pbnQgcHRzWzNdID0geyBGbG9h
dFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsg
aW1SZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjAp
LCBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2lu
dCBwdHMyWzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAy
LjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIChpbVJlY3QueSgpICsg
aW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1h
eFgoKSkgLyAyLjAsIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNh
dmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNr
KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0cyk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0czIpOwotICAgIHBhaW50SW5m
by5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWlu
dFNsaWRlclRyYWNrKG8sIHBhaW50SW5mbywgcik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5D
RTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50U2xpZGVy
VGh1bWIobywgcGFpbnRJbmZvLCByKTsKLX0KLSNlbmRpZgotCi12b2lkIFJlbmRlclRoZW1lV2lu
Q0U6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGludCB3aWR0aCA9IDo6R2V0U3lzdGVt
TWV0cmljcyhTTV9DWFZTQ1JPTEwpOwotICAgIGlmICh3aWR0aCA8PSAwKQotICAgICAgICB3aWR0
aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgLy8gV2Ugc3BsaXQgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgaW50byB0d28g
dmVydGljYWxseS4gV2UgY2FuJ3QgZHJhdyBhCi0gICAgLy8gc3BpbiBidXR0b24gb2Ygd2hpY2gg
aGVpZ2h0IGlzIGxlc3MgdGhhbiAycHguCi0gICAgaWYgKHIuaGVpZ2h0KCkgPCAyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgSW50UmVjdCB1cFJlY3Qocik7Ci0gICAgdXBSZWN0LnNldEhl
aWdodChyLmhlaWdodCgpIC8gMik7Ci0gICAgSW50UmVjdCBkb3duUmVjdChyKTsKLSAgICBkb3du
UmVjdC5zZXRZKHVwUmVjdC5tYXhZKCkpOwotICAgIGRvd25SZWN0LnNldEhlaWdodChyLmhlaWdo
dCgpIC0gdXBSZWN0LmhlaWdodCgpKTsKLQotICAgIHVuc2lnbmVkIHN0YXRlVXAgPSBERkNTX1ND
Uk9MTFVQOwotICAgIHVuc2lnbmVkIHN0YXRlRG93biA9IERGQ1NfU0NST0xMRE9XTjsKLQotICAg
IGlmICghaXNFbmFibGVkKG8pIHx8IGlzUmVhZE9ubHlDb250cm9sKG8pKSB7Ci0gICAgICAgIHN0
YXRlVXAgfD0gREZDU19JTkFDVElWRTsKLSAgICAgICAgc3RhdGVEb3duIHw9IERGQ1NfSU5BQ1RJ
VkU7Ci0gICAgfSBlbHNlIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgaWYgKGlzU3BpblVw
QnV0dG9uUGFydFByZXNzZWQobykpCi0gICAgICAgICAgICBzdGF0ZVVwIHw9IERGQ1NfUFVTSEVE
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZURvd24gfD0gREZDU19QVVNIRUQ7Ci0g
ICAgfQotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdGcmFtZUNvbnRyb2wodXBSZWN0LCBE
RkNfU0NST0xMLCBzdGF0ZVVwKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ZyYW1lQ29u
dHJvbChkb3duUmVjdCwgREZDX1NDUk9MTCwgc3RhdGVEb3duKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZDYx
ZGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2lu
Q0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaWZuZGVmIFJlbmRlclRoZW1lV2luQ0VfaAotI2RlZmluZSBSZW5kZXJUaGVtZVdpbkNF
X2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLXR5cGVkZWYgdm9pZCogSEFORExFOwot
dHlwZWRlZiBzdHJ1Y3QgSElOU1RBTkNFX18qIEhJTlNUQU5DRTsKLXR5cGVkZWYgSElOU1RBTkNF
IEhNT0RVTEU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIHN0cnVjdCBUaGVtZURhdGEg
ewotICAgICAgICBUaGVtZURhdGEoKSA6bV9wYXJ0KDApLCBtX3N0YXRlKDApLCBtX2NsYXNzaWNT
dGF0ZSgwKSB7fQotICAgICAgICBUaGVtZURhdGEoaW50IHBhcnQsIGludCBzdGF0ZSkKLSAgICAg
ICAgICAgIDogbV9wYXJ0KHBhcnQpCi0gICAgICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCi0gICAg
ICAgICAgICAsIG1fY2xhc3NpY1N0YXRlKDApCi0gICAgICAgIHsgfQotCi0gICAgICAgIHVuc2ln
bmVkIG1fcGFydDsKLSAgICAgICAgdW5zaWduZWQgbV9zdGF0ZTsKLSAgICAgICAgdW5zaWduZWQg
bV9jbGFzc2ljU3RhdGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIFJlbmRlclRoZW1lV2luQ0UgOiBw
dWJsaWMgUmVuZGVyVGhlbWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOwotICAgICAgICB+UmVuZGVyVGhlbWVXaW5DRSgpOwot
Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7Ci0KLSAgICAgICAgLy8g
QSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJv
dXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
SG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgICAgIC8vIFN5c3Rl
bSBmb250cy4KLSAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3Io
Q1NTVmFsdWVJRCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3go
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0g
ICAgICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKLSAgICAgICAgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShzdHlsZSk7IH0KLQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0K
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0gICAgICAgIHsgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29y
YXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdGhl
bWVDaGFuZ2VkKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0IHsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5l
clNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgc3Rh
dGljIHZvaWQgc2V0V2ViS2l0SXNCZWluZ1VubG9hZGVkKCk7Ci0KLSAgICAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAj
aWYgRU5BQkxFKFZJREVPKQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNr
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICAjZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlclRoZW1lV2luQ0Uo
KTsKLQotICAgICAgICB1bnNpZ25lZCBkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVyT2JqZWN0
Kik7Ci0gICAgICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7Ci0KLSAg
ICAgICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqKTsKLSAgICB9OwotCi19
OwotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDgxMTQ1ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLURhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCi06IG1fdGltZXIodGhpcywg
JkRhdGFiYXNlVGhyZWFkOjp0aW1lckZpcmVkKQotewotfQotCi1EYXRhYmFzZVRocmVhZDo6fkRh
dGFiYXNlVGhyZWFkKCkKLXsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1p
bmF0aW9uKCkKLXsKLSAgICBtX3F1ZXVlLmNsZWFyKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUaHJl
YWQ6OnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9xdWV1ZS5p
c0VtcHR5KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnRpbWVyRmlyZWQoVGltZXI8RGF0
YWJhc2VUaHJlYWQ+KikKLXsKLSAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2sgPSBtX3F1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIHRh
c2stPnBlcmZvcm1UYXNrKCk7Ci0gICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKLSAgICAg
ICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KDApOwotICAgIH0KLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBh
c3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQotewotICAgIG1fcXVldWUuYXBwZW5kKHRhc2sp
OwotICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVJbW1lZGlhdGVUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQotewotICAgIHRhc2stPnBlcmZvcm1UYXNr
KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERh
dGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBEZXF1ZTxSZWZQdHI8RGF0YWJhc2VUYXNrPiA+IHJl
c2VydmVkVGFza3M7Ci0gICAgZm9yIChEZXF1ZTxSZWZQdHI8RGF0YWJhc2VUYXNrPiA+Ojpjb25z
dF9pdGVyYXRvciBpID0gbV9xdWV1ZS5iZWdpbigpOyBpICE9IG1fcXVldWUuZW5kKCk7ICsraSkg
ewotICAgICAgICBpZiAoKCppKS0+ZGF0YWJhc2UoKSAhPSBkYXRhYmFzZSkKLSAgICAgICAgICAg
IHJlc2VydmVkVGFza3MuYXBwZW5kKCppKTsKLSAgICB9Ci0KLSAgICBtX3F1ZXVlLnN3YXAocmVz
ZXJ2ZWRUYXNrcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Bl
bihEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqIGRhdGFiYXNl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRX
aW5DRS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNF
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjFjYzEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlVGhyZWFkV2luQ0VfaAotI2RlZmluZSBEYXRhYmFz
ZVRocmVhZFdpbkNFX2gKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIERhdGFiYXNl
OwotICAgIGNsYXNzIERhdGFiYXNlVGFzazsKLQotICAgIGNsYXNzIERhdGFiYXNlVGhyZWFkOiBw
dWJsaWMgV1RGOjpSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7Ci0KLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YWJhc2VUaHJlYWQpOyB9Ci0gICAgICAgIH5EYXRhYmFzZVRocmVh
ZCgpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZv
aWQgcmVxdWVzdFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgIGJvb2wgdGVybWluYXRpb25SZXF1ZXN0
ZWQoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzUmVmUHRyPERhdGFi
YXNlVGFzaz4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzUmVmUHRy
PERhdGFiYXNlVGFzaz4pOwotICAgICAgICB2b2lkIHVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERh
dGFiYXNlKik7Ci0gICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKik7Ci0g
ICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSBjb25zdCB7IHJldHVy
biBjdXJyZW50VGhyZWFkKCk7IH0KLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRGF0
YWJhc2VUaHJlYWQoKTsKLQotICAgICAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8RGF0YWJhc2VU
aHJlYWQ+Kik7Ci0KLSAgICAgICAgRGVxdWU8UmVmUHRyPERhdGFiYXNlVGFzaz4gPiBtX3F1ZXVl
OwotICAgICAgICBUaW1lcjxEYXRhYmFzZVRocmVhZD4gbV90aW1lcjsKLSAgICB9OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEYXRhYmFzZVRocmVhZFdpbkNFX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVhZFdpbkNF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVhZFdpbkNFLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlODk2Zi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVRocmVhZC5o
IgotCi0jaW5jbHVkZSAiU3RvcmFnZVRhc2suaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFk
KCkKLTogbV90aW1lcih0aGlzLCAmU3RvcmFnZVRocmVhZDo6dGltZXJGaXJlZCkKLXsKLX0KLQot
U3RvcmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQotewotfQotCi1ib29sIFN0b3JhZ2VUaHJl
YWQ6OnN0YXJ0KCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFk
Ojp0aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VUaHJlYWQ+KikKLXsKLSAgICBpZiAoIW1fcXVldWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlVGFzaz4gdGFzayA9IG1fcXVldWUu
Zmlyc3QoKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLSAgICAgICAgbV9xdWV1ZS5y
ZW1vdmVGaXJzdCgpOwotICAgICAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotfQotCi12b2lkIFN0b3JhZ2VUaHJl
YWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQotewot
ICAgIG1fcXVldWUuYXBwZW5kKFN0b3JhZ2VUYXNrOjpjcmVhdGVJbXBvcnQoYXJlYSkpOwotICAg
IGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYVN5bmM+IGFyZWEpCi17Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU3RvcmFnZVRhc2s6OmNy
ZWF0ZVN5bmMoYXJlYSkpOwotICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBt
X3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFkOjp0ZXJtaW5h
dGUoKQotewotICAgIG1fcXVldWUuY2xlYXIoKTsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLX0KLQot
dm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWluYXRlKCkKLXsKLSAgICBtX3F1ZXVlLmNs
ZWFyKCk7Ci0gICAgbV90aW1lci5zdG9wKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVhZFdp
bkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRXaW5DRS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzU3M2FlLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVhZFdpbkNFLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0KLSNpZm5kZWYgU3RvcmFnZVRocmVhZFdpbkNFX2gKLSNkZWZpbmUgU3RvcmFnZVRo
cmVhZFdpbkNFX2gKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFN0b3JhZ2VBcmVh
U3luYzsKLSAgICBjbGFzcyBTdG9yYWdlVGFzazsKLQotICAgIGNsYXNzIFN0b3JhZ2VUaHJlYWQg
OiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlVGhyZWFkPiB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlVGhyZWFkPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgU3RvcmFnZVRocmVhZCk7IH0KLQotICAgICAgICB+U3RvcmFnZVRocmVhZCgpOwot
ICAgICAgICBib29sIHN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVJbXBvcnQoUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKLSAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKLSAgICAg
ICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTdG9y
YWdlVGhyZWFkKCk7Ci0KLSAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VUaHJl
YWQ+Kik7Ci0KLSAgICAgICAgRGVxdWU8UmVmUHRyPFN0b3JhZ2VUYXNrPiA+IG1fcXVldWU7Ci0g
ICAgICAgIFRpbWVyPFN0b3JhZ2VUaHJlYWQ+IG1fdGltZXI7Ci0gICAgfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU3RvcmFnZVRocmVhZFdpbkNFX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggZjE0NDYzZi4uNDk4NTE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNC0wOS0x
OSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92
ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAg
KiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNF
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVu
dUNsaWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQv
RHJhZ0NsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3Vw
cG9ydC9EcmFnQ2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2Uv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5n
Q29udGV4dFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9y
dC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5j
ZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJWaWV3LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJWaWV3Lmg6IFJlbW92ZWQuCisKIDIwMTQtMDkt
MTUgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dp
bkNhaXJvXSBNYWtlIGl0IGVhc2llciB0byBlbmFibGUvZGlzYWJsZSBHU3RyZWFtZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luQ0UuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtV2luQ0UuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGMw
MWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbkNFLmNtYWtlCisrKyAv
ZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS93aW4iCi0gICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2Uvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgot
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3dpbiIKLSAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vd2luIgotCi0gICAgd2luY2UKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9y
dAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIHdpbmNlL1dlYlZpZXcuY3Bw
Ci0gICAgd2luY2UvV2ViVmlldy5oCi0KLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAK
LSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5j
ZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAotICAgIHdpbmNlL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAKLSAgICB3aW5jZS9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKLSkKLQotc2V0KFdlYktpdF9MSUJS
QVJZX1RZUEUgU1RBVElDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jZi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZwppbmRleCBiZDhjNjc3Li4zMDliZTcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nm
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA5LTE5ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0
cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHA6CisKIDIwMTQtMDItMTcgIFNl
cmdpbyBDb3JyZWlhICA8c2VyZ2lvLmNvcnJlaWFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBS
ZXBsYWNlIHVzZXMgb2YgUGFzc093blB0ci9Pd25QdHIgd2l0aCBzdGQ6OnVuaXF1ZV9wdHIgaW4g
V2ViQ29yZS9pbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2YvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGIvU291cmNlL1dlYktpdC9jZi9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKaW5kZXggNjIzMzNkOS4uMDRmZTczMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnRDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnRDRi5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgogCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpCisjaWYgUExBVEZPUk0o
V0lOKQogI2lmbmRlZiBXVEZfVVNFX0NHCiAjZGVmaW5lIFdURl9VU0VfQ0cgMQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
d2luY2UvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWQ4ZTFkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCisrKyAvZGV2L251bGwK
QEAgLTEsMjI4MyArMCwwIEBACi0yMDE0LTAzLTEyICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgotCi0gICAgICAgIFJlbmFtZSBERUZJTkVfU1RBVElDX0xPQ0FMIHRv
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NjEyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCi0KLSAgICAgICAgRm9yIG5ldyBjb2RlIHVzZSBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VD4gaW5zdGVhZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp1
c2VyQWdlbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0aWFsaXplKToK
LQotMjAxNC0wMy0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgotCi0g
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4cG9zZSB0aGUgY29uc29sZSBvYmplY3QgaW4gSlNDb250
ZXh0cyB0byBpbnRlcmFjdCB3aXRoIFdlYiBJbnNwZWN0b3IKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk0NAotCi0gICAgICAgIFJldmlld2VkIGJ5
IEdlb2ZmcmV5IEdhcmVuLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgVXBkYXRlIG5hbWVzcGFjZXMuCi0KLTIwMTQtMDItMjQgIFJlbmF0
YSBIb2RvdmFuICA8cmhvZG92YW4udS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotICAg
ICAgICBHZXQgcmlkIG9mIHRoZSB1bnVzZWQgJ2ltbWVkaWF0ZScgcGFyYW1ldGVycyBmcm9tIHJl
cGFpbnQgcmVsYXRlZCBmdW5jdGlvbnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyOTExMQotCi0gICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ci4KLQotICAgICAgICBSZW1vdmluZyB0aGUgJ2ltbWVkaWF0ZScgcGFyYW1ldGVycyBmcm9tIHJl
cGFpbnQgcmVsYXRlZCBmdW5jdGlvbnMgLSBhY2NvcmluZwotICAgICAgICB0byB0aGUgRklYTUUg
aW4gUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoKSAtIHNpbmNlIHRoZXkgaGF2ZSBu
byBlZmZlY3QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5j
cHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlUm9vdFZp
ZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTQtMDItMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgot
Ci0gICAgICAgIENoYW5nZSBUZXh0SXRlcmF0b3IgdG8gdXNlIFN0cmluZ1ZpZXcsIHByZXBhcmlu
ZyB0byB3ZWFuIGl0IGZyb20gZGVwcmVjYXRlZENoYXJhY3RlcnMKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODIzMwotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyk6IFVzZSBTdHJpbmdWaWV3LgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRXaW5DRTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOiBEaXR0by4KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBEaXR0by4KLQotMjAxNC0wMi0wNiAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgotCi0gICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEFkZCBDb25zb2xlIHN1cHBvcnQgdG8gSlNDb250ZXh0IEluc3BlY3Rpb24KLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk0MQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1
Y3VyQGFkb2JlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HIGZsYWcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNzgzMwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgotCi0gICAgICAg
IFJlbW92ZSB0aGUgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSBjb25kaXRpb25hbHMgZnJv
bSB0aGUgY29kZSBiYXNlIGFuZCBtYWtlIEFDCi0gICAgICAgIG1hbmRhdG9yeS4KLQotICAgICAg
ICBBbm90aGVyIHBhdGNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gcmVtb3ZlIHRoZSBmbGFnIHN1cHBv
cnQgZnJvbSB0aGUgV2luQ0UgYnVpbGQgc3lzdGVtLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMjUgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgYW4gdW51c2VkIEZyYW1l
TG9hZGVyQ2xpZW50IGZ1bmN0aW9uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjc2MjgKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5n
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0y
MDE0LTAxLTE3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAg
ICAgUmVtb3ZlIGFub3RoZXIgdW51c2VkIEZyYW1lTG9hZGVyQ2xpZW50IGNhbGxiYWNrCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcxOTIKLQotICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTE3ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIGRpZFBlcmZvcm1GaXJzdE5h
dmlnYXRpb24gZnJvbSBhbGwgRnJhbWVMb2FkZXJDbGllbnQgc3ViY2xhc3NlcwotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTkwCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0xNiAgUGV0ZXIgTW9sbmFyICA8cG1vbG5h
ci51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0gICAgICAgIFJlbW92ZSB3b3JrYXJv
dW5kIGZvciBjb21waWxlcnMgbm90IHN1cHBvcnRpbmcgZXhwbGljaXQgb3ZlcnJpZGUgY29udHJv
bAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTEx
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgIE5vdyBh
bGwgY29tcGlsZXJzIHN1cHBvcnQgZXhwbGljaXQgb3ZlcnJpZGUgY29udHJvbCwgdGhpcyB3b3Jr
YXJvdW5kIGNhbiBiZSByZW1vdmVkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEzLTEyLTAzICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogUHVzaCBS
ZW1vdGUgSW5zcGVjdG9yIGRlYnVnZ2luZyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaW50byBKYXZh
U2NyaXB0Q29yZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI0NjEzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0xMS0w
NCAgWmh1YW5nIFpoaWdhbmcgIDx6aHVhbmd6Z0Bjbi5mdWppdHN1LmNvbT4KLQotICAgICAgICBD
aGFuZ2Ugc3RydWN0dXJlIG9mIGZyYW1lIHRyZWUgaW4gV0lOQ0UgcG9ydC4KLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTA3OQotCi0gICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdl
YlZpZXc6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3Lmg6Ci0KLTIwMTMtMTEtMDMg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTkNF
XSBSZXBsYWNlIE93blB0ciB3aXRoIEdESU9iamVjdAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjcwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3
OjpwYWludCk6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVQYWludCk6Ci0gICAgICAgICogV2Vi
Vmlldy5oOgotCi0yMDEzLTExLTAyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgotCi0gICAgICAgIEFkZCBPVkVSUklERSBrZXl3b3JkIHRvIFdlYkNvcmVTdXBwb3J0IGNs
YXNzZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MzY3MgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIEFsc28g
YWxpZ24gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgd2l0aCB0aGUgYmFzZSBjbGFzc2VzCi0gICAg
ICAgIGFuZCByZW1vdmUgdXNlbGVzcyBmdW5jdGlvbnMuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudFdpbkNFOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRXaW5DRTo6d2lsbFBlcmZv
cm1EcmFnU291cmNlQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudFdpbkNFOjph
Y3Rpb25NYXNrRm9yRHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRXaW5DRTo6c3Rh
cnREcmFnKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDoKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNl
KToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJt
aXRGb3JtKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNF
Lmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNF
Lmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMy0xMS0w
MiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBWYXJp
b3VzIHNtYWxsIFdpbkNFIGJ1aWxkIGZpeGVzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6Ci0gICAgICAgICog
V2ViVmlldy5jcHA6Ci0KLTIwMTMtMTAtMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
LQotICAgICAgICBSZW1vdmUgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uIGZyb20gdGhlIFdL
QnVuZGxlUGFnZVVJQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjIzMDkKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0x
MC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIENUVEU6IERPTVdy
YXBwZXJXb3JsZHMgc2hvdWxkIGJlIHBhc3NlZCBhcm91bmQgYnkgcmVmZXJlbmNlCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyMDYKLQotICAgICAg
ICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDkt
MzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5y
ZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1MzkyNy4KLQotICAgICAgICAqIFdlYlZp
ZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6V2ViVmlldyk6Ci0KLTIwMTMtMDktMzAgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBX
aW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1NTI4OS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JO
ZXdXaW5kb3dBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKLQot
MjAxMy0wOS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAg
ICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTU0MTc4LgotCi0gICAgICAg
ICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojp3bmRQcm9jKToKLQotMjAxMy0wOS0y
NiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgcmVuYW1lIEtVUkwg
dG8gVVJMCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjIxNAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBt
YW55IGZpbGVzOiBSZW5hbWVkLCB1c2luZyBzY3JpcHQuCi0KLTIwMTMtMDktMTYgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdW51c2VkIGZ1bmN0
aW9uIGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCBmcm9tIEVkaXRvckNsaWVudC4K
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTQ2NAot
Ci0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDgtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgotCi0gICAgICAgIEZyYW1lOjp0cmVlIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2Ug
aW5zdGVhZCBvZiBhIHBvaW50ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMDI1OQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcu
Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmNyZWF0ZUZyYW1l
KToKLSAgICAgICAgVXNlIHRyZWUoKS4gaW5zdGVhZCBvZiB0cmVlKCktPi4KLQotMjAxMy0wOC0x
OSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+Ci0KLSAgICAgICAgPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzExOTkxOD4gRnJhbWU6OnNlbGVjdGlvbigpIHNob3VsZCByZXR1cm4g
YSByZWZlcmVuY2UKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAg
ICBtX3NlbGVjdGlvbiBpcyBuZXZlciBOVUxMIHNvIHJldHVybiBhIHJlZmVyZW5jZSBmcm9tIEZy
YW1lOjpzZWxlY3Rpb24oKS4gQWxzbyByZW1vdmVkIHNvbWUKLSAgICAgICAgdW5uZWNlc3Nhcnkg
bnVsbCBjaGVja3MgYW5kIGFzc2VydCBkaWZmIHRzIGV4cG9zZWQgYXMgYSByZXN1bHQuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0K
LTIwMTMtMDgtMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAg
ICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5ODU5PiBGcmFtZTo6bG9hZGVyKCkgc2hvdWxk
IHJldHVybiBhIHJlZmVyZW5jZQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVO
ZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFOjpyZWZlcnJlcik6Ci0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAg
ICAgIChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLSAg
ICAgICAgKFdlYlZpZXc6OnJlbG9hZCk6Ci0gICAgICAgIChXZWJWaWV3OjpzdG9wKToKLQotMjAx
My0wNy0yNSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+Ci0KLSAgICAgICAgQ2hy
b21lQ2xpZW50Ojpmb2N1c2VkTm9kZUNoYW5nZWQoKSBzaG91bGQgYmUgZm9jdXNlZEVsZW1lbnRD
aGFuZ2VkKCkuCi0gICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzExOTExMD4KLQotICAgICAg
ICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDYtMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0
ZXIgcjE1MjA2NS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
LmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OkFYU3RhcnRGcmFtZUxv
YWQpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6QVhGaW5pc2hGcmFtZUxv
YWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIw
MTMtMDUtMTkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAg
ICBSZW1vdmUgQ2hyb21lQ2xpZW50Ojp3ZWJWaWV3KCkKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjA1NAotCi0gICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgotCi0gICAgICAgIFRoaXMgYmxhdGFudGx5IGhvcnJpYmxlIGxheWVyIHZpb2xh
dGlvbiB3YXMgb25seSB1c2VkIHRvIGtub3cgaWYgYSBDaHJvbWVDbGllbnQgaXMgYW4gZW1wdHkK
LSAgICAgICAgY2xpZW50IG9yIG5vdC4gV2UgYWxyZWFkeSBoYXZlIGEgKHNsaWdodGx5IGxlc3Mg
aG9ycmlibGUpIHdheSB0byBkbyB0aGF0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMy0w
NS0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIEZy
YW1lOjplZGl0b3IoKSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYwMzcKLQotICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVk
aXRpbmdLZXlib2FyZEV2ZW50KToKLQotMjAxMy0wNC0yOSAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOiBBZGRlZCBt
aXNzaW5nIGhlYWRlci4KLSAgICAgICAgKiBXZWJWaWV3Lmg6IERpdHRvLgotCi0yMDEzLTA0LTI1
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViIElu
c3BlY3RvcjogQ29uc29sZU1lc3NhZ2Ugc2hvdWxkIGluY2x1ZGUgbGluZSBhbmQgY29sdW1uIG51
bWJlciB3aGVyZSBwb3NzaWJsZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE0OTI5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVy
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6YWRkTWVzc2FnZVRvQ29uc29sZSk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0wNC0x
OCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJl
dmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTQ4NTQ1LgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYlZpZXcuY3BwOgot
Ci0yMDEzLTA0LTE1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNDgzNzMuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0KLTIwMTMtMDQtMDYg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZp
ZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE0NTg0OS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLQotMjAxMy0wMy0xNSAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEhpZGUgTWFpblJlc291cmNlTG9hZGVy
IGZyb20gdGhlIG91dHNpZGUgd29ybGQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTk3MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChGcmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAx
My0wMy0xNSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgotCi0gICAgICAg
IFJlcGxhY2Ugc3RhdGljX2Nhc3RzIHdpdGggdG8qIGhlbHBlciBmdW5jdGlvbnMuCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI0MDEKLQotICAgICAg
ICBSZXZpZXdlZCBieSBTdGVwaGVuIENoZW5uZXkuCi0KLSAgICAgICAgdG8qIGhlbHBlciBmdW5j
dGlvbnMgYXJlIHByZWZlcnJlZCBvdmVyIHN0YXRpY19jYXN0IGNhbGxzIHNpbmNlIHRoZXkKLSAg
ICAgICAgaGVscCB0byBjYXRjaCBiYWQgY2FzdHMgZWFzaWx5IG9uIHRoZSB0ZXN0aW5nIGluZnJh
c3RydWN0dXJlLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlZGly
ZWN0RGF0YVRvUGx1Z2luKToKLQotMjAxMy0wMy0xNCAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAg
PHJlZ29AaWdhbGlhLmNvbT4KLQotICAgICAgICBBZGQgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZCBzZXR0aW5nIHRvIFdlYkNvcmU6OlBhZ2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTQwNAotCi0gICAgICAgIFJldmlld2VkIGJ5IFRv
bnkgQ2hhbmcuCi0KLSAgICAgICAgVXNlIG5ldyBzZXR0aW5ncyBmb3Igc21hcnRJbnNlcnREZWxl
dGVFbmFibGVkIGFuZAotICAgICAgICBzZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmlzU2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZCk6Ci0KLTIwMTMtMDItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgRGlzYWJsZSBkZWxldGUgYnV0dG9uIGNvbnRyb2xsZXIgb24gbm9u
LU1hYyBwb3J0cyBhbmQgZGVsZXRlIEVkaXRvckNsaWVudDo6c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5
NTM0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0KToK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAo
RWRpdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEzLTAyLTAzICBLd2FuZ1lvbmcgQ2hvaSAgPGt5MC5j
aG9pQHNhbXN1bmcuY29tPgotCi0gICAgICAgIEZpeCBidWlsZCB3YXJuaW5nIGFmdGVyIHIxNDE0
NzMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODc4
MgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4KLQotICAgICAgICBGaXggLVd1
bnVzZWQtcGFyYW1ldGVyIGJ1aWxkIHdhcm5pbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdp
bkNFOjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKLQotMjAxMy0wMS0zMSAgRW5y
aWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFdlYktpdDI6IHByb3Zp
ZGUgbmV3IGJ1bmRsZSBBUElzIHRvIGFsbG93IGJ1bmRsZSBjbGllbnRzIHRvIGJlIG5vdGlmaWVk
IG9mIHBhc3RlYm9hcmQgYWNjZXNzLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4Mzk2LgotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5MjA0NjE+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICBB
ZGRzIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdCBvZiB0aGUgbmV3IEVkaXRvckNsaWVu
dCBtZXRob2RzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
Y3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6d2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6Omdl
dENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDEtMjQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXgg
YWZ0ZXIgcjEzOTA3OC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTMtMDEtMjIgIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBVc2UgYSBwbGF0Zm9y
b20gc3RyYXRlZ3kgZm9yIGxvY2FsIHN0b3JhZ2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzYwMAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJl
YXMgS2xpbmcuCi0KLSAgICAgICAgVXBkYXRlIGZvciBuZXcgc3RvcmFnZSBzdHJhdGVneS4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVTdG9yYWdlU3RyYXRlZ3kpOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTMtMDEtMTggIFNlb2tqdSBLd29u
ICA8c2Vva2p1Lmt3b25AZ21haWwuY29tPgotCi0gICAgICAgIEFkZCBleHBsaWNpdCBrZXl3b3Jk
IHRvIGNvbnN0cnVjdG9ycyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBJbnNwZWN0b3JDbGllbnQKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzI1NQotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4KLQotICAgICAgICBBZGQgZXhwbGljaXQg
a2V5d29yZCB0byBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG9uZSBhcmd1bWVudAotICAgICAgICBp
biBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0b3JDbGllbnQuCi0g
ICAgICAgIEFuZCBmaXggc29tZSBjb2Rpbmcgc3R5bGUuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoSW5zcGVjdG9yQ2xpZW50V2lu
Q0UpOgotCi0yMDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KLQotICAg
ICAgICBSZW1vdmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWREYXRhYmFzZSBtZWNoYW5pc20u
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyOTIu
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQot
MjAxMi0xMi0yMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI4MDgzNzc+IE5ldHdvcmsgcHJvY2VzcyBzaG91bGQgcmVzcGVj
dCBjb29raWUgYWNjZXB0IHBvbGljeQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1Njg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAg
ICAgICBDb29raWVzU3RyYXRlZ3kgbm8gbG9uZ2VyIGhhcyBub3RpZnlDb29raWVzQ2hhbmdlZCgp
LiBUaGlzIHBvcnQgZGlkbid0IHVzZSBpdCBhbnl3YXkuCi0KLTIwMTItMTItMjIgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgQWRkIGEgc2VwYXJhdGUgY2xh
c3MgZm9yIG5ldHdvcmtpbmcgcmVsYXRlZCBzdG9yYWdlCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NzYKLQotICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNGb3JE
T00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9N
KToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5hYmxlZCk6Ci0g
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFJhd0Nvb2tpZXMp
OgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZSk6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAg
Q29va2llIGZ1bmN0aW9ucyBub3cgdGFrZSBhIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbm90IGEg
TmV0d29ya2luZ0NvbnRleHQuCi0KLTIwMTItMTItMTggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9ucyBmcm9t
IENvb2tpZXNTdHJhdGVneQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA1MzY5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTIt
MTItMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBS
ZW5hbWUgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkIHRvIGNvbnZlcnRNYWluUmVzb3VyY2VM
b2FkVG9Eb3dubG9hZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MTIyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAg
ICAgICBVcGRhdGUgZm9yIFdlYkNvcmUgY2hhbmdlcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAg
KEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTEyLTE1ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KLQotICAgICAgICBSZS1sYW5kaW5nIHBhdGNoIGZvciAiSW50cm9kdWNp
bmcgdGhlIERhdGFiYXNlU3RyYXRlZ3kgYW5kIGRhdGFiYXNlIHNlcnZlcnMiLgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTM0LgotCi0gICAgICAg
IE5vdCByZXZpZXdlZC4KLQotICAgICAgICBNZXJnZWQgZnJvbSByMTM3NzY3LiBQcmV2aW91c2x5
IHJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6Y3JlYXRlRGF0YWJhc2VTdHJhdGVneSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
KToKLQotMjAxMi0xMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNzc2Ny4KLSAgICAgICAg
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM3NzY3Ci0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwNjIKLQotICAgICAgICBCcm9rZSBN
YWMgYnVpbGRzLiAoUmVxdWVzdGVkIGJ5IG1sYW0gb24gI3dlYmtpdCkuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFKToKLQotMjAxMi0xMi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+Ci0KLSAgICAgICAgSW50cm9kdWNpbmcgdGhlIERhdGFiYXNlU3RyYXRlZ3kgYW5kIGRh
dGFiYXNlIHNlcnZlcnMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDQ5MzQuCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAg
ICAgICBUaGUgZGF0YWJhc2Ugc2VydmVyIGlzIGN1cnJlbnRseSBhIHBsYWNlaG9sZGVyIHRoYXQg
ZG9lcyBub3RoaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZURh
dGFiYXNlU3RyYXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmg6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTIt
MTItMTEgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KLQotICAgICAgICBXZWIgSW5z
cGVjdG9yOiBDb25zb2xlVHlwZXMgc2hvdWxkIG5vdCBleHBvc2UgTWVzc2FnZVR5cGUgLSBpdCBz
aG91bGQgYmUgcHJpdmF0ZSB0byBpbnNwZWN0b3IuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM3MQotCi0gICAgICAgIFJldmlld2VkIGJ5IFBhdmVs
IEZlbGRtYW4uCi0KLSAgICAgICAgRHJvcHMgV2ViQ29yZTo6TWVzc2FnZVR5cGUgZnJvbSB0aGUg
YWRkTWVzc2FnZVRvQ29uc29sZSBtZXRob2QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
OjphZGRNZXNzYWdlVG9Db25zb2xlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTExLTI5
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFtXSzJdIEZv
cndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcwotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29v
a2llc0ZvckRPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6c2V0Q29va2ll
c0Zyb21ET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNFbmFi
bGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UmF3
Q29va2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29va2ll
KToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVBbGxD
b29raWVzKToKLQotMjAxMi0xMS0yNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1
bS5vcmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6OmxvYWQoKSBpbnRvIG9u
ZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0Ci0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEKLQotICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3
Ojpsb2FkKToKLQotMjAxMi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4KLSAg
ICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM1Nzg2Ci0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMzNzkKLQotICAgICAgICBJ
dCBtYWRlIDMgcGx1Z2luIHRlc3RzIHRpbWVvdXQgb24gc2V2ZXJhbCBwbGF0Zm9ybXMgKFJlcXVl
c3RlZAotICAgICAgICBieSBPc3N5IG9uICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViVmlldy5j
cHA6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yNiAgSmFtZXMgU2ltb25z
ZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVM
b2FkZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEK
LQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5j
cHA6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yMCAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEzNTI5NS4KLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMTM1Mjk1Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDI4MzQKLQotICAgICAgICBUaGlzIHBhdGNoIGNhdXNlcyBhc3NlcnRpb24gdG8gc29tZSBs
YXlvdXQgdGVzdHMgb24gY2hyb21pdW0KLSAgICAgICAgKFJlcXVlc3RlZCBieSBqaWFubGkgb24g
I3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6Omxv
YWQpOgotCi0yMDEyLTExLTIwICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9y
Zz4KLQotICAgICAgICBDb25zb2xpZGF0ZSBGcmFtZUxvYWRlcjo6bG9hZCgpIGludG8gb25lIGZ1
bmN0aW9uIHRha2luZyBhIEZyYW1lTG9hZFJlcXVlc3QKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6Omxv
YWQpOgotCi0yMDEyLTEwLTI0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KLQot
ICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3IgbG9hZGVyIGN1c3RvbWl6YXRpb24uCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyNzgKLQotICAgICAg
ICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UpOgotCi0yMDEyLTEwLTIzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgotCi0gICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBzaGFyZWQgd29ya2VycwotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTY1Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Y3JlYXRlU2hhcmVkV29ya2VyU3RyYXRlZ3kpOgotICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3kpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTItMTAtMTAg
IEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFtXSzJdIEFjdGl2YXRlIHBs
dWdpbnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBzbmFwc2hvdAotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgzMjgKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzEyNDI2NjgxPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVjcmVhdGVQbHVnaW4pOiBTdHViIGltcGxl
bWVudGF0aW9uIG9mIHJlY3JlYXRlUGx1Z2luKCkuCi0KLTIwMTItMTAtMDcgIENhaW8gTWFyY2Vs
byBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KLQotICAg
ICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9y
cwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQK
LQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAxMi0xMC0wNCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KLQotICAgICAgICBTdGFuZGFyZGl6ZSBvbiAiZmx1
c2giIHRlcm1pbm9sb2d5IGZvciBjb21wb3NpdGluZyBsYXllciBmbHVzaGluZy9zeW5jaW5nCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODMyMQotCi0g
ICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICBSZW5hbWUgY29tcG9z
aXRpbmctcmVsYXRlZCBtZXRob2RzIHRoYXQgcmVmZXIgdG8gInN5bmNpbmciIHRvIGluc3RlYWQK
LSAgICAgICAgcmVmZXIgdG8gImZsdXNoaW5nIi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKToKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgot
Ci0yMDEyLTA5LTI4ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50
ZWwuY29tPgotCi0gICAgICAgIENvZGUgaW5zaWRlIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93
TUlNRVR5cGUoKSBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQg
V0sgcG9ydHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3NTQ3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICBOZXds
eSBhZGRlZCBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpjYW5TaG93TUlNRVR5cGUoKSBmdW5j
dGlvbiBpcyB1c2VkCi0gICAgICAgIGluc2lkZSBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmNhblNob3dNSU1FVHlwZSgpLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmNhblNob3dNSU1FVHlwZSk6Ci0KLTIwMTItMDktMjUgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTM5NwotICAgICAgICBOZWVkIHRvIG1lcmdlIGRpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dCBhbmQgCi0gICAgICAgIGRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dAotICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
MDc5MTY4MD4KLQotICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgIFJl
bW92ZSBkaXNwYXRjaERpZEZpcnN0TGF5b3V0LCAKLSAgICAgICAgZGlzcGF0Y2hEaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQsIGFuZCAKLSAgICAgICAgZGlzcGF0Y2hEaWROZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQuIFRoZWlyIGZ1bmN0aW9uYWxpdHkgCi0gICAgICAgIGlzIG5v
dyByZXBsYWNlZCBieSBkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzKQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZExheW91dCk6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAo
RnJhbWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDgtMjggIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMjY5MTQuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEy
NjkxNAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUy
MzkKLQotICAgICAgICBpdCBicmVha3MgZXZlcnl0aGluZyBhbmQgZml4ZXMgbm90aGluZyAoUmVx
dWVzdGVkIGJ5IHBpemxvIG9uCi0gICAgICAgICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEyLTA4LTI4ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+Ci0KLSAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTItMDgtMjcgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxMjY4MzYuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzEyNjgzNgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTUxNjMKLQotICAgICAgICBCcm9rZSBhbGwgQXBwbGUgcG9ydHMsIEVGTCwgYW5kIFF0LiAo
UmVxdWVzdGVkIGJ5IHRrZW50IG9uCi0gICAgICAgICN3ZWJraXQpLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEyLTA4LTI3ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+Ci0K
LSAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTItMDgtMTMgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW2Nocm9taXVtXSByZWxlYXNlIEZy
YW1lTG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQgcmVmcHRyIHVwb24gUGx1Z2luIERv
Y3VtZW50IGRldGFjaC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzMjgzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAg
ICAgQ2hhbmdlIHRoZSBjbGllbnQgcmVkaXJlY3REYXRhVG9QbHVnaW4gbWV0aG9kKHMpIHRvIGV4
cGVjdCB0aGUgcG9zc2liaWxpdHkgb2YKLSAgICAgICAgYSBOVUxMIGFyZ3VtZW50LCBrZWVwaW5n
IGV4aXN0aW5nIGJlaGF2aW91ciBvdGhlcndpc2UuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgotCi0yMDEyLTA3LTIzICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgotCi0gICAgICAgIFVuaWZ5IG51bVRv
dWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQgYW5kIG5lZWRUb3VjaEV2ZW50cyBpbiB0aGUgY2hyb21l
IGNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEwMDYKLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVt
b3ZlIG51bVRvdWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQgc3R1Yi4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTItMDctMTcgIFZpdmVrIEdhbGF0
YWdlICA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+Ci0KLSAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmVmYWN0b3IgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkgdG8gYWNjZXB0
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxMTk2Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KLQotICAgICAgICBSZWZhY3RvcmluZyBJbnNwZWN0b3JDbGllbnRzLiBJbnNwZWN0b3JD
bGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZAotICAgICAgICBub3cgcmV0dXJuaW5nIHRoZSBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdp
bkNFOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChJbnNwZWN0b3JDbGllbnRXaW5DRSk6Ci0K
LTIwMTItMDUtMzEgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+Ci0KLSAg
ICAgICAgUkVHUkVTU0lPTihyMTE3NTcyKTogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFz
eW5jLXJlbW92ZS1mcmFtZS5odG1sIGNyYXNoZXMgb24gTWFjCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Njg1OQotCi0gICAgICAgIFJldmlld2VkIGJ5
IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyk6Ci0KLTIwMTItMDUtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjEx
NTkyNi4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotCi0yMDEyLTA1LTMwICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0Ug
YnVpbGQgZml4IGFmdGVyIHIxMTc0NzAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoRWRpdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA1
LTE4ICBNT1JJVEEgSGFqaW1lIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgQW5vdGhl
ciB1bnJldmlld2VkIGF0dGVtcHQgdG8gZml4IGJ1aWxkIGJyZWFrYWdlIG9uIHIxMTc1NzIuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6ZnJhbWVXaWxsRGV0YWNoUGFnZSk6Ci0KLTIwMTIt
MDUtMTggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTE1Ci0gICAgICAgIFN0YWxl
IGZyYW1lIGluIFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkZWQKLQotICAg
ICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5D
RTo6ZnJhbWVXaWxsRGV0YWNoUGFnZSk6Ci0KLTIwMTItMDUtMTcgIEhpcm9ub3JpIEJvbm8gIDxo
Ym9ub0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW1JlZmFjdG9yaW5nXSBNb3ZlIHBsYXRmb3Jt
LXNwZWNpZmljIGNvZGUgaW4gRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uIHRvIHRo
ZSBXZWJLaXQgbGF5ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2NTkxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAg
ICAgIFRoaXMgY2hhbmdlIGFkZHMgYSBUZXh0Q2hlY2tlckNsaWVudDo6c2hvdWxkRXJhc2VNYXJr
ZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24KLSAgICAgICAgZnVuY3Rpb24gdG8gcmVtb3ZlIHBsYXRm
b3JtLXNwZWNpZmljIGNvZGUgZnJvbSBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24K
LSAgICAgICAgZnVuY3Rpb24uCi0KLSAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5j
cHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRFcmFzZU1hcmtl
cnNBZnRlckNoYW5nZVNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRX
aW5DRSk6Ci0KLTIwMTItMDUtMDQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4K
LQotICAgICAgICBEb24ndCByZXF1aXJlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIG1hbnVmYWN0dXJl
IGEgY29tbWl0RGF0YSgpIGNhbGwgZm9yIGVtcHR5IGRvY3VtZW50cy4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTMzCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEyLTA0LTE4ICBKb24gSG9uZXljdXR0
ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+Ci0KLSAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudCgpIHNob3VsZCBiZSBnaXZlbiBtb3JlCi0gICAgICAg
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtIGJlaW5nIHN1Ym1pdHRlZAotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyOTcKLQotICAgICAgICBSZXZp
ZXdlZCBieSBBbmR5IEVzdGVzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQpOgotICAgICAgICBVcGRhdGVkIG1ldGhvZCBk
ZWNsYXJhdGlvbi4KLQotMjAxMi0wMy0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KLQotICAgICAgICBbV2luQ0VdIENvcnJlY3QgPHd0Zi8qLmg+IGluY2x1ZGUgcGF0
aHMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjcx
MwotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIE1vZGlmeSB0
aGUgI2luY2x1ZGUgZGVjbGFyYXRpb25zIGZvciBzZXZlcmFsIFdpbkNFLXJlbGF0ZWQgZmlsZXMK
LSAgICAgICAgc28gdGhhdCB0aGUgd3RmIHR5cGVzIGFyZSBpbmNsdWRlZCB1c2luZyB0aGUgZnVs
bCBwYXRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgICogV2ViVmlldy5oOgot
Ci0yMDEyLTAzLTI4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAg
ICAgUmVtb3ZlIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZSBjYWxsYmFjaywgc2luY2Ugbm8K
LSAgICAgICAgcG9ydCBpbXBsZW1lbnRzIGl0LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MzkKLQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkg
UHJvc2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UpOgotCi0yMDEyLTAzLTE5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yICJtYWdpYyIgaWZyYW1lCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTU5MAotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbW92ZSBGcmFtZUxvYWRlckNsaWVudCBtZXRo
b2RzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNv
bT4KLQotICAgICAgICBTZXBhcmF0ZSBOT1RJRklDQVRJT05TIGFuZCBMRUdBQ1lfTk9USUZJQ0FU
SU9OUwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA5
MjIKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDM1MDgyPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEppYW4gTGkuCi0KLSAgICAgICAgWW91IGNhbiBpbmNsdWRlIGVpdGhlciBOT1RJRklDQVRJ
T05TIG9yIExFR0FDWV9OT1RJRklDQVRJT05TIGFuZCBoYXZlIGEgY29tcGxldGUgQVBJLgotICAg
ICAgICBMRUdBQ1lfTk9USUZJQ0FUSU9OUyBzaG91bGQgY292ZXIgYWxsIG9mIHRoZSBwcmV2aW91
cyBmdW5jdGlvbmFsaXR5LCBhbmQgTk9USUZJQ0FUSU9OUyB3aWxsIGNvdmVyIHRoZQotICAgICAg
ICBuZXcgQVBJLiBUaGVyZWZvcmUsIEFQSXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gdGhlIHR3
byB3aWxsIGhhdmU6Ci0gICAgICAgICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxF
KExFR0FDWV9OT1RJRklDQVRJT05TKQotCi0gICAgICAgIFRoaXMgcGF0Y2ggaW5pdGlhbGx5IHNl
dHMgYm90aCB0byBiZSBleGFjdGx5IHRoZSBzYW1lLiBBcyBvdGhlciBidWdzIHdpdGggcGF0Y2hl
cyBiZWdpbiB0byBtaWdyYXRlIHRvCi0gICAgICAgIHRoZSBuZXcgQVBJLCB0aGUgZGVmaW5lcyB3
aWxsIGJlZ2luIHRvIHNwbGl0LiBUaGlzIGFsbG93cyBwb3J0cyB0byBkZWNpZGUgd2hpY2ggc2V0
IG9mIEFQSXMgdG8gaW5jbHVkZS4KLQotICAgICAgICBVcGRhdGUgZXZlcnl0aGluZyB0byBiZSAj
aWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAo
Q2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+ICYmIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+Ci0KLSAg
ICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4NTMKLQotICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDMtMDkg
IEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbmFtZSBOb3RpZmljYXRp
b25QcmVzZW50ZXIgdG8gTm90aWZpY2F0aW9uQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDQ4OAotICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTA5NjU1NTg+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFybyBIYXJhLgotCi0gICAgICAg
IFJlZmFjdG9yIHRvIHVzZSByZW5hbWVkIFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkNsaWVudC4KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hy
b21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAyLTI2ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFA
Y2hyb21pdW0ub3JnPgotCi0gICAgICAgIE1vdmUgQ2hyb21lQ2xpZW50OjpzaG93Q29udGV4dE1l
bnUoKSB0byBDb250ZXh0TWVudUNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0MjcKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAg
ICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wMi0yNCAgU2hpbnlhIEthd2FuYWthICA8
c2hpbnlha0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgU3BlbGxDaGVja1JlcXVlc3QgbmVlZHMg
dG8ga25vdyB0aGUgY29udGV4dCB3aGVyZSB0aGUgc3BlbGxjaGVjayBoYXBwZW5lZC4KLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MzIwCi0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6Ci0KLTIwMTItMDItMjMgIFBhdHJpY2sgR2Fuc3Rl
cmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWls
ZCBmaXggYWZ0ZXIgcjEwODQ2Mi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDItMjEg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIHRoZSBy
ZW1haW5pbmcgdXNlcyBvZiBDU1NTdHlsZURlY2xhcmF0aW9uIGluIEVkaXRvcgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5MzkKLQotICAgICAgICBS
ZXZpZXdlZCBieSBFbnJpY2EgQ2FzdWNjaS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6
OnNob3VsZEFwcGx5U3R5bGUpOgotCi0yMDEyLTAyLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFJlbW92ZSB0aGUgcmVtYWluaW5nIHVzZXMgb2YgQ1NTU3R5
bGVEZWNsYXJhdGlvbiBpbiBFZGl0b3IKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4OTM5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRW5yaWNhIENhc3Vj
Y2kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRBcHBseVN0eWxlKToKLQot
MjAxMi0wMi0yMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgR2V0IHJpZCBvZiB0aGUgTG9jYWxpemF0aW9uU3RyYXRlZ3kKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzI0Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICBSZW1vdmUgYSB1c2VsZXNzICNpbmNsdWRlIG9m
IExvY2FsaXphdGlvblN0cmF0ZWd5LmguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEyLTAyLTE1ICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4
IGFmdGVyIHIxMDc2MDYuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRl
UGFzdGVib2FyZFN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UpOgotCi0y
MDEyLTAyLTE1ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBOb3RpZnkgQ2hyb21lQ2xpZW50IHdoZW4gdG91Y2gtZXZlbnQgaGFuZGxlcnMg
YXJlIGluc3RhbGxlZC9yZW1vdmVkLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzc0NDAKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIg
YW5kIFJ5b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpudW1Ub3VjaEV2
ZW50SGFuZGxlcnNDaGFuZ2VkKToKLQotMjAxMS0xMi0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgotCi0gICAgICAgIE1vcmUgUGxhdGZvcm1FdmVudCBjbGVhbnVwCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDgzMQotCi0gICAgICAgIFJl
dmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAg
ICAgKFdlYlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgotICAgICAgICBVcGRhdGUgdG8gdXNlIG5l
dyBuYW1lcywgYWNjZXNzIHN0eWxlLgotCi0yMDExLTEyLTE2ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJlbmFtZSByZWdpc3RlckNvbW1hbmRGb3IoVW5kb3xS
ZWRvKSB0byByZWdpc3RlcihVbmRvfFJlZG8pU3RlcAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDgKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lzdGVyVW5kb1N0ZXAp
OgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVnaXN0ZXJSZWRvU3RlcCk6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0x
Mi0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIEdpdmUgUGxhdGZv
cm1FdmVudHMgYSBiYXNlIGNsYXNzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NDY4NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nv
bi4KLQotICAgICAgICBBZGQgYSBiYXNlIGNsYXNzIGZvciBQbGF0Zm9ybU1vdXNlRXZlbnQsIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCwgUGxhdGZvcm1XaGVlbEV2ZW50Ci0gICAgICAgIGFuZCBQbGF0
Zm9ybUdlc3R1cmVFdmVudCBhbmQgbW92ZSBUeXBlIGVudW1lcmF0aW9uIGFuZCBtb2RpZmllcnMg
ZG93biB0byBpdC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNF
LmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6
OmhhbmRsZUtleURvd24pOgotICAgICAgICAoV2ViVmlldzo6aGFuZGxlS2V5UHJlc3MpOgotICAg
ICAgICAoV2ViVmlldzo6aGFuZGxlS2V5VXApOgotCi0yMDExLTEyLTE2ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIE9ubHkgRWRpdENvbW1hbmRDb21wb3NpdGlv
biBzaG91bGQgaW1wbGVtZW50IHVuYXBwbHkgYW5kIHJlYXBwbHkKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDkwCi0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpyZWdpc3RlckNv
bW1hbmRGb3JVbmRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lz
dGVyQ29tbWFuZEZvclJlZG8pOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMTItMTQgIEppbmcgWmhhbyAgPGppbmd6aGFvQGNocm9taXVtLm9y
Zz4KLQotICAgICAgICBPcGVuaW5nIHR3byBwb3B1cCBtZW51cyBieSBkaXNwYXRjaEV2ZW50KCkg
bWFrZXMgcHJvYmxlbXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MzMwNAotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6Omhhc09wZW5lZFBvcHVwKTogTm90IGltcGxlbWVudGVk
LgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6IE92ZXJyaWRl
cyBoYXNPcGVuZWRQb3B1cCgpLgotCi0yMDExLTExLTMwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZSBhbiB1bm5lZWRlZCBhcmd1bWVudCBmcm9t
IEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0ODYKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFz
IEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRvd25sb2Fk
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0g
ICAgICAgIFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2UuCi0KLTIwMTEtMTEtMjYgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxMDExOTMuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzEwMTE5MwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMxNTgKLQotICAgICAgICBCcmVha3MgV2luZG93cyBhbmQgUXQgbWluaW1hbC4gKFJlcXVl
c3RlZCBieSBwZmVsZG1hbiBvbgotICAgICAgICAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTIyICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KLQotICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUg
SW5zcGVjdG9yOjpicmluZ1RvRnJvbnQgZnJvbSB0aGUgcHJvdG9jb2wuCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzNwotCi0gICAgICAgIFJldmll
d2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdp
bkNFOjpicmluZ0Zyb250ZW5kVG9Gcm9udCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0yMSAgQW5kcmVhcyBLbGluZyAgPGtsaW5n
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIg
cjEwMDg3NC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6
Ci0KLSAgICAgICAgICAgIEFkZCBXZWJDb3JlOjpGcmFtZSogcGFyYW1ldGVyIHRvIHJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oKS4KLQotMjAxMS0xMS0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIEhvc3RXaW5kb3cgc2NyZWVuVG9XaW5kb3cvd2lu
ZG93VG9TY3JlZW4gc2hvdWxkIGJlIHNjcmVlblRvUm9vdFZpZXcvcm9vdFZpZXdUb1NjcmVlbgot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzOTcKLQot
ICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnRXaW5DRTo6cm9vdFZpZXdUb1NjcmVlbik6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dFdpbkNFOjpzY3JlZW5Ub1Jvb3RWaWV3KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+Ci0KLSAgICAgICAgSG9zdFdpbmRvdyBpbnZhbGlkYXRpb24gZnVuY3Rpb25z
IHNob3VsZCB1c2Ugcm9vdCB2aWV3IGNvb3JkaW5hdGVzCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMzOAotCi0gICAgICAgIFJldmlld2VkIGJ5IERh
biBCZXJuc3RlaW4uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlUm9v
dFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNv
bnRlbnRzQW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6
aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9t
ZUNsaWVudFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEtMDQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTkNFXSBVc2UgZGVmYXVsdCBMb2NhbGl6YXRpb25TdHJh
dGVneQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0
OTUKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFVzZSBMb2Nh
bGl6YXRpb25TdHJhdGVneSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiB1c2luZyBhIGNvcHkgb2Yg
dGhlIHN0cmluZ3MgaW4gV2ViS2l0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMTEtMDIgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJv
bWl1bS5vcmc+Ci0KLSAgICAgICAgWFNTQXVkaXRvciBpcyBzaWxlbnQKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTczCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaWREZXRlY3RYU1MpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMS0xMS0wMiAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0K
LSAgICAgICAgPGlucHV0PWZpbGUgbXVsdGlwbGU+IGRlZmF1bHQgdGV4dCB1c2VzIHNpbmd1bGFy
IGluc3RlYWQgb2YgcGx1cmFsCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTMxOQotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzNzkwMjE+Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6ZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTEwLTI4ICBKb2No
ZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJlbmFtZSBhIG51
bWJlciBvZiBtZXRob2RzIG1lbnRpb25pbmcgSmF2YVNjcmlwdCB0byBqdXN0IFNjcmlwdCBpbnN0
ZWFkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEw
NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3
LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OldlYlZpZXcpOgotCi0yMDExLTEwLTA3ICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4IGFmdGVyIHI5NTYwNC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpp
c0xpbmtWaXNpdGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjphZGRWaXNp
dGVkTGluayk6Ci0KLTIwMTEtMDktMjQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
LQotICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc2Nwot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wOS0yMSAgQW5kcmFz
IEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KLQotICAgICAgICBbUXRdIFJlbW92ZSBR
dCBzcGVjaWZpYyBjb2RlIGZyb20gY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzAyCi0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmFkZFZpc2l0ZWRMaW5rKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTA5LTE3ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhh
aXBAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50IEJhY2tGb3J3YXJk
TGlzdC1yZWxhdGVkIG1ldGhvZHMgYXJlIHVuc3VlZAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTMKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KLQotICAgICAgICBSZW1vdmUgRnJhbWVMb2FkZXJDbGllbnQgbWV0aG9kcyB0aGF0
IHdlcmUgYWRkZWQgYnkgcjUxNjI5LCBzaW5jZSBvbmx5ICAgICAgICAKLSAgICAgICAgdGhlIG9s
ZCAoc2luY2UtZGVsZXRlZCkgQW5kcm9pZCBwb3J0IG5lZWRlZCB0aGVtLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA5LTE1ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIEVOQUJMRShEQVRB
QkFTRSkgdG8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjA1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0w
OC0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBXaW5DRSBi
dWlsZCBmaXggYXR0ZW1wdCBhZnRlciByOTQwODAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjpzY3JvbGxSZWN0SW50b1ZpZXcpOgotCi0yMDExLTA4LTMwICBLYXVzdHViaCBBdHJhd2Fs
a2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgotCi0gICAgICAgIFRoZSB1bnVzZWQgU2Nyb2xs
VmlldyogYXJndW1lbnQgY2FuIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgIHNj
cm9sbFJlY3RJbnRvVmlldy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3MTE3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTE3
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KLQotICAgICAgICBNYWtlIFdlYkNvcmUg
a2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBkZXZpY2Ugc2NhbGUgZmFjdG9yCi0KLSAgICAgICAg
Rml4ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvNjY0MTM+IFdlYkNvcmUgcmVxdWlyZXMgZXZlcnkg
V2ViS2l0IHBvcnQgdG8ga2VlcCB0cmFjayBvZiB0aGUKLSAgICAgICAgZGV2aWNlIHNjYWxlIGZh
Y3RvcgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIFJlbW92ZWQgZGV2aWNlU2NhbGVGYWN0
b3IuCi0KLTIwMTEtMDgtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+Ci0K
LSAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBh
Z2UgZG9lcyBub3QgaGF2ZSBlbm91Z2ggcGFyYW1ldGVycwotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjUKLQotICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJh
bnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTEwICBBZGFtIFJvYmVuICA8YXJv
YmVuQGFwcGxlLmNvbT4KLQotICAgICAgICBDbGVhciB1cCBzY2FsZSBmYWN0b3IgdGVybWlub2xv
Z3kKLQotICAgICAgICBXZWJLaXQgYnkgYW5kIGxhcmdlIGRlYWxzIHdpdGggdHdvIHNjYWxlIGZh
Y3RvcnM6IG9uZSBpbnRyaW5zaWMgdG8gdGhlIGRldmljZSBvbiB3aGljaCB0aGUKLSAgICAgICAg
c29mdHdhcmUgaXMgcnVubmluZywgYW5kIG9uZSB0aGF0IGlzIHBlci1QYWdlIGFuZCBjYW4gYmUg
Y29udHJvbGxlZCB2aWEgQVBJIGNhbGxzLiBUaGlzCi0gICAgICAgIHBhdGNoIG5hbWVzIHRoZSBm
b3JtZXIgImRldmljZVNjYWxlRmFjdG9yIiBhbmQgdGhlIGxhdHRlciAicGFnZVNjYWxlRmFjdG9y
IiwgYW5kIG1ha2VzIHRoZQotICAgICAgICBjb2RlIHVzZSB0aG9zZSBuYW1lcy4gSXQgc2hvdWxk
IGludHJvZHVjZSBubyBiZWhhdmlvciBjaGFuZ2VzLgotCi0gICAgICAgIEZpeGVzIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzU1Nzg3PiBXZWJLaXQgdXNlcyBtdWx0aXBsZSBjb25mbGljdGluZyBuYW1l
cyB0byByZWZlciB0byB0aGUKLSAgICAgICAgZGV2aWNlIHNjYWxlIGZhY3RvcgotCi0gICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotCi0yMDExLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBOb2RlIHBhcmFtZXRlciBm
cm9tIHRoZSBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodAotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1NDkKLQotICAgICAgICBSZXZpZXdlZCBieSBZ
dXJ5IFNlbWlraGF0c2t5LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRXaW5DRTo6aGln
aGxpZ2h0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5o
OgotCi0yMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVt
Lm9yZz4KLQotICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBhdHRy
aWJ1dGUgaW4gYW5jaG9ycy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY0NTgwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzdGFydERvd25sb2FkKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDct
MTUgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQotICAgICAgICBSRUdSRVNTSU9O
OiBNb3VzZSBjdXJzb3IgZG9lc27igJl0IGhpZGUgd2hlbiBmdWxsIHNjcmVlbiB2aWRlbyBIVUQg
aGlkZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0
NjE1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKTogQWRkZWQg
dGhpcyBzdHViLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6
Ci0KLTIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KLQot
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZh
aWwgd2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE3NwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVk
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA2LTMwICBLZW50YXJvIEhhcmEgIDxoYXJha2Vu
QGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCi0KLSAgICAg
ICAgQ2hhbmdlIHRoZSBsYWJlbCBvZiBhbiBIVE1MNSBmaWxlIGNob29zZXIgYnV0dG9uIHRvICJD
aG9vc2UgRmlsZXMiCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00OTI0NQotCi0gICAgICAgIFdlIHNob3VsZCBub3RpZnkgY2FwYWJpbGl0eSBvZiBtdWx0
aXBsZSBmaWxlcyB0byB1c2Vycy4KLQotICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2lucHV0LWZp
bGUtbGFiZWwuaHRtbAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmZpbGVCdXR0
b25DaG9vc2VGaWxlTGFiZWwpOiBVcGRhdGVkIHRoZSBkZXNjcmlwdGlvbiBmb3IgIkNob29zZSBG
aWxlIi4KLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpmaWxlQnV0dG9uQ2hvb3Nl
TXVsdGlwbGVGaWxlc0xhYmVsKTogUmV0dXJucyBhICJDaG9vc2UgRmlsZXMiIGxhYmVsLgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEt
MDYtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgV2luQ0Ug
YnVpbGQgZml4IGFmdGVyIHI4OTI5My4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6Omhh
bmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLQotMjAxMS0wNi0xOCAgRGltaXRyaSBHbGF6a292
ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgotCi0gICAgICAgIFNlcGFyYXRlIGNvbmNlcm5zIG9mIGxvYWRpbmcgZmlsZSBpY29ucyBh
bmQgY2hvb3NpbmcgZmlsZXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjkzMQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6bG9hZEljb25G
b3JGaWxlcyk6IFJlbmFtZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgUmVu
YW1lIEZyYW1lTG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvciB0byB1
c2UgdGhlIHBhc3QgdGVuc2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNTE2Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA1LTEzICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCi0KLSAg
ICAgICAgQ2FuJ3QgaG9yaXpvbnRhbGx5IHNjcm9sbCBpZnJhbWVzIGFuZCBvdmVyZmxvdyBiZWNh
dXNlIHdoZWVsIGV2ZW50cyBhcmUgYWx3YXlzIGFjY2VwdGVkCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDc3OQotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
V2luQ0U6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbik6IERlZmF1bHQgaW1wbCBvZiBuZXcg
Q2hyb21lQ2xpZW50IG1ldGhvZAotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6
bnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6IERlZmF1bHQgaW1wbCBvZiBuZXcgQ2hyb21l
Q2xpZW50IG1ldGhvZAotCi0yMDExLTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbmFt
ZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9uCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgotCi0yMDExLTA1LTA0ICBD
cmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KLQotICAgICAgICBFeHBvc2UgV2ViVmlldyBkaXJlY3RseSB0aHJvdWdoIENocm9t
ZUNsaWVudC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ5OTAyCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgot
ICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6d2ViVmlldyk6Ci0KLTIwMTEtMDUt
MDQgIFRhbyBCYWkgIDxtaWNoYWVsYmFpQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBLaWx6ZXIuCi0KLSAgICAgICAgUG9wdWxhdGUgdG91Y2gtaWNvbiB1cmwgdG8g
RnJhbWVMb2FkZXJDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5MTQzCi0KLSAgICAgICAgUmVzcGVjdCB0aGUgaW50ZXJmYWNlIGNoYW5nZSBp
biBGcmFtZUxvYWRlckNsaWVudC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaERpZENoYW5nZUljb25zKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDUtMDEgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTl0gVW5yZXZpZXdlZCBidWlsZGZp
eCBhZnRlciByODU0MzQuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZp
ZXc6OnBhaW50KToKLQotMjAxMS0wNC0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjg0NTc0LgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnRXaW5DRTo6Y2FuQ29weUN1dCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudFdpbkNFOjpjYW5QYXN0ZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMS0wNC0xOSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9t
aXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgotCi0gICAgICAg
IFdlYiBJbnNwZWN0b3I6IFJlbmFtZSBsZW5ndGhSZWNlaXZlZCB0byBlbmNvZGVkRGF0YUxlbmd0
aC9kYXRhTGVuZ3RoCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01ODg4MwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotCi0yMDExLTA0LTA0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29t
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBbUmVmYWN0
b3JpbmddIFNwZWxsQ2hlY2tpbmdSZXN1bHQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggVGV4dENo
ZWNraW5nUmVzdWx0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjA4NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
aDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlcXVlc3RDaGVja2luZ09m
U3RyaW5nKToKLQotMjAxMS0wNC0wNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgIFJFR1JF
U1NJT04gKFdlYktpdDIpOiBDYXBzLUxvY2sgaW5kaWNhdG9yIHNvbWV0aW1lcyBkb2Vzbid0IGFw
cGVhciBpbiBXZWJLaXQyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTIzMAotICAgICAgICA8cmRhcjovL3Byb2JsZW0vODc4MDk4OT4KLQotICAgICAg
ICAqIFdlYlZpZXcuY3BwOiAoV2ViVmlldzo6aGFuZGxlS2V5RG93bik6IE1vdmVkIENhcHMgTG9j
ayBoYW5kbGluZyBmcm9tIFdlYktpdHMgdG8gV2ViQ29yZSwKLSAgICAgICAgYmVjYXVzZSBXZWJL
aXQgc2hvdWxkbid0IGJlIHNtYXJ0LgotCi0yMDExLTAzLTMxICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4
IGZvciByODI1ODAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmg6IFN0cmluZ1dpdGhEaXJlY3Rpb24gaXMgaW4gV2ViQ29yZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpbiBXVEYgbmFt
ZXNwYWNlLgotCi0yMDExLTAzLTMxICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIDx0aXRsZT4gc2hv
dWxkIHN1cHBvcnQgZGlyIGF0dHJpYnV0ZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NjEKLQotICAgICAgICBVcGRhdGUgdG8gbmV3IEZyYW1lTG9h
ZGVyQ2xpZW50IGludGVyZmFjZS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OnNldFRpdGxlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4K
LQotICAgICAgICBbV0lOQ0VdIFVzZSBhIGFwcHJvcHJpYXRlIHVzZXIgYWdlbnQgc3RyaW5nCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3NQotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAg
ICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnVzZXJBZ2VudCk6Ci0KLTIwMTEt
MDMtMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAg
VW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAgKiBDTWFrZUxpc3RzV2luQ0Uu
dHh0OiBBZGRlZCBtaXNzaW5nIGluY2x1ZGUgZGlyZWN0b3J5LgotCi0yMDExLTAzLTI1ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQ
ZXRlcnNvbi4KLQotICAgICAgICBSRUdSRVNTSU9OIChyNzA3NDgpOiBsYXRlc3QgbmlnaHRseSBi
dWlsZHMga2lsbHMgQUNfUXVpY2tUaW1lLmpzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTAxNgotCi0gICAgICAgIFVwZGF0ZSBvYmplY3RDb250ZW50
VHlwZSgpIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aGUKLSAgICAgICAgc2hvdWxkUHJlZmVy
UGx1Z0luc0ZvckltYWdlcyBmbGFnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6Om9iamVjdENvbnRlbnRUeXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI4MTkxNiBhbmQgcjgxOTE3LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC84MTkxNgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC84MTkx
NwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNzEK
LQotICAgICAgICBicm9rZSBhIHRlc3Qgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgUXVp
Y2tUaW1lIGluc3RhbGxlZAotICAgICAgICAoUmVxdWVzdGVkIGJ5IGVzdGVzIG9uICN3ZWJraXQp
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om9iamVjdENvbnRlbnRU
eXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
Ci0KLTIwMTEtMDMtMjQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJFR1JFU1NJT04gKHI3MDc0OCk6
IGxhdGVzdCBuaWdodGx5IGJ1aWxkcyBraWxscyBBQ19RdWlja1RpbWUuanMKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MDE2Ci0KLSAgICAgICAgVXBk
YXRlIG9iamVjdENvbnRlbnRUeXBlKCkgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIHRoZQotICAg
ICAgICBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzIGZsYWcuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b2JqZWN0Q29udGVudFR5cGUpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0wNyAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBD
YXJsc3Nvbi4KLQotICAgICAgICBSZXBsYWNlIFdlYktpdDIncyBkZWNpZGVQb2xpY3lGb3JNSU1F
VHlwZSB3aXRoIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTgyNwotCi0gICAgICAgIFJlbmFtZWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUgdG8gZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZQotICAgICAgICBhbmQgcGFzcyB0aGUgZW50aXJlIHJlc3Bv
bnNlLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIE1JTUVUeXBlLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0w
My0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1v
dmluZyBhbiBpbmNsdWRlIG9mIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oIHRoYXQgSXZlIGp1c3Qg
YWRkZWQuIEl0J3MgYWxyZWFkeSBpbmNsdWRlZAotICAgICAgICB2aWEgQ2hyb21lQ2xpZW50LmgK
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEt
MDMtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0Mik6IFRh
YiBrZXlzIG5vIGxvbmdlciBvYnNlcnZlIEZ1bGwgS2V5Ym9hcmQgQWNjZXNzCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTYzMwotICAgICAgICA8cmRh
cjovL3Byb2JsZW0vODk2MzAyMz4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmNwcDogKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmtleWJvYXJkVUlNb2Rl
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAg
ICBJbXBsZW1lbnQga2V5Ym9hcmRVSU1vZGUoKSBpbnN0ZWFkIG9mIHRhYnNUb0xpbmtzKCkuIE5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBzaW5jZQotICAgICAgICB0aGlzIHBsYXRmb3JtIGRv
ZXNuJ3Qgb2JzZXJ2ZSBvciBoYXZlIGZ1bGwga2V5Ym9hcmQgYWNjZXNzIHN0YXRlLgotCi0yMDEx
LTAzLTAyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KLQotICAgICAg
ICBXaW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5oOiBBZGQgYSBuZWVkZWQgaW5jbHVkZS4KLQotMjAxMS0wMy0wMiAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgV2luQ0UgYnVp
bGQgZml4LiBIYXZlIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFIGluaGVyaXQgZnJvbSBDb29raWVz
U3RyYXRlZ3ksCi0gICAgICAgIGFuZCBpbXBsZW1lbnQgdGhlIG5lZWRlZCBtZXRob2RzLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSk6Ci0g
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6bm90aWZ5Q29va2llc0NoYW5nZWQpOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIw
MTEtMDItMjggIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVtb3ZlIHRoZSBzdXBwb3J0IG9mIEZyYW1l
Ojppc0NvbnRlbnRFZGl0YWJsZSBhbmQgaXRzIGRlcGVuZGVuY2llcy4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkyCi0KLSAgICAgICAgUmVtb3Zl
IHRoZSBXZWJLaXQgc2lkZSBpbXBsZW1lbnRhdGlvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTE5ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJv
bWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgotCi0gICAg
ICAgIEVuc3VyZSBsb2FkaW5nIGhhcyBzdG9wcGVkIGluIEhpc3RvcnlDb250cm9sbGVyOjpnb1Rv
SXRlbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ1
MTcKLQotICAgICAgICBBZGQgYSBGcmFtZUxvYWRlckNsaWVudCBjYWxsYmFjayBmb3Igd2hldGhl
ciB0byBzdG9wIGxvYWRpbmcgYmVmb3JlIGdvVG9JdGVtLgotCi0gICAgICAgIFRlc3Q6IGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9mb3J3YXJkLXRvLWZyYWdtZW50LWZpcmVzLW9ubG9hZC5odG1sCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkU3RvcExvYWRpbmdG
b3JIaXN0b3J5SXRlbSk6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0xMCAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdv
c3RpbmlAb3BlbmJvc3NhLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgot
Ci0gICAgICAgIEhUTUw1IDxkZXRhaWxzPiBhbmQgPHN1bW1hcnk+OiBsb2NhbGl6ZWQgdGV4dAot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyNjAKLQot
ICAgICAgICBUaGUgbWV0aG9kIGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQgd2FzIGFkZGVkIHRv
IExvY2FsaXphdGlvblN0cmF0ZWd5IGNsYXNzLiBJdCBpcyB1c2VkIHRvCi0gICAgICAgIHByb3Zp
ZGUgdGhlIGRlZmF1bHQgbGFiZWwgdG8gYmUgdXNlZCBieSBhIDxkZXRhaWxzPiB0YWcgdGhhdCBo
YXMgbm8gPHN1bW1hcnk+IGNoaWxkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMDEtMjYgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgot
Ci0gICAgICAgIFJlZmFjdG9yaW5nOiBFeHRyYWN0IFRleHRDaGVja2VyQ2xpZW50IGZyb20gRWRp
dG9yQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MzIxMwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnRleHRDaGVja2VyKToKLQotMjAx
MS0wMi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIEFkZCBFZGl0b3JDbGllbnQgY2FsbGJhY2tz
IHRvIG92ZXJyaWRlIGlzRE9NUGFzdGVBbGxvd2VkIGFuZCBqYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjQxNwotCi0gICAgICAgIEFkZGVkIHR3byBjYWxsYmFjayBmdW5jdGlvbnMsIGNhbkNvcHlDdXQg
YW5kIGNhblBhc3RlIHRvIEVkaXRvckNsaWVudC4gVGhleSBhcmUgY3VycmVudGx5Ci0gICAgICAg
IG5vdCBpbXBsZW1lbnRlZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlD
dXQpOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhblBhc3Rl
KTogQWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoK
LQotMjAxMS0wMi0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERv
Y3VtZW50V3JpdGVyLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA0ODkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5p
c2hlZExvYWRpbmcpOgotCi0yMDExLTAyLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgUmVtb3Zl
IG9ycGhhbiBjb2RlIGZyb20gb2xkIHBhcnNlcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5ODQKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotCi0yMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5j
b20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQgRGFyaW4gQWRsZXIuCi0KLSAg
ICAgICAgV2ViS2l0MjogZHJhZyBhbmQgZHJvcCBzdXBwb3J0IG9uIFdpbmRvd3MuCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjc3NQotCi0gICAgICAg
IFJlbW92ZWQgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayBmcm9tIERyYWdDbGllbnQuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTA2ICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBS
b2JpbnNvbi4KLQotICAgICAgICBbV0lOQ0VdIEZyYW1lTG9hZGVyQ2xpZW50IGNhbGxzIGxvYWRV
UkxJbkNoaWxkRnJhbWUgb24gdGhlIGNoaWxkJ3MgZnJhbWUgbG9hZGVyCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5NgotCi0gICAgICAgICogV2Vi
Vmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6IFVzZSBjb3JlRnJhbWUg
aW5zdGVhZCBvZiBjaGlsZEZyYW1lLgotCi0yMDExLTAyLTAzICBBZGFtIExhbmdsZXkgIDxhZ2xA
Y2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAg
ICAgUGx1bWIgbWl4ZWQgc2NyaXB0IFVSTCB0byBGcmFtZUxvYWRlckNsaWVudAotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzODQKLQotICAgICAgICBS
ZWdyZXNzaW9ucyBjb3ZlcmVkIGJ5IGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50LyoK
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRSdW5JbnNlY3VyZUNv
bnRlbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0Uu
aDoKLQotMjAxMS0wMi0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Igcjc3Mzk4LgotCi0gICAg
ICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpwYWludCk6Ci0KLTIwMTEtMDEt
MjggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgotCi0gICAgICAgIDxzZWxlY3Q+IGNhbid0IGRpc3BsYXkgcmlnaHQtdG8t
bGVmdCAocnRsKSBsYW5ndWFnZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5Nzg1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzZWxlY3RJ
dGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKTogQWRkZWQuCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMS0yNSAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gRW5zdXJlIGxheW91dGVkIGZyYW1lIHdo
ZW4gcGFpbnRpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMTA4Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OnBh
aW50KToKLQotMjAxMS0wMS0wNCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6IEFkZGVkIG1pc3Npbmcgc2Vt
aWNvbG9uLgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMi0yOSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FA
d2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3IgV2luQ0UgYWZ0
ZXIgcjczODAyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50V2luQ0U6OmN1c3Rv
bWl6ZU1lbnUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2lu
Q0UuaDoKLQotMjAxMC0xMi0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFdlYktpdDIgbmVlZHMgdG8g
bWlycm9yIHRoZSBmcmFtZSB0cmVlIGluIHRoZSBVSVByb2Nlc3MKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTQ2Ci0KLSAgICAgICAgLSBBZGQgY2xp
ZW50IGZ1bmN0aW9ucyB0byBub3RpZnkgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGFkZGVkIG9yCi0g
ICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlIGNhY2hlLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFNhdmVUb1BhZ2VDYWNoZSk6Ci0gICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAt
MTItMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgRWRpdG9yLmggZG9lc24ndCBuZWVkIHRvIGlu
Y2x1ZGUgU2VsZWN0aW9uQ29udHJvbGxlci5oCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ0MQotCi0gICAgICAgIFJlbmFtZWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RURpcmVjdGlvbiB0byBTZWxlY3Rpb25EaXJlY3Rpb24uCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTAtMTAt
MjggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgT2phbiBWYWZhaS4KLQotICAgICAgICBzcGVsbGNoZWNrIGRvZXMgbm90IGNoZWNrIHBh
c3RlZCB0ZXh0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDA5MgotCi0gICAgICAgIEFkZGVkIGEgc3R1YiBpbXBsZW1lbW50YXRpb24uCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0
OjpFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMC0xMi0wNyAg
TWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+Ci0KLSAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjczMzkyLgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC83MzM5MgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICBUaGlzIGNvbW1pdCBjYXVzZWQgY3Jhc2hlcyBvbiB0
aGUgR1RLKyBib3RzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Zmlu
aXNoZWRMb2FkaW5nKToKLQotMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21p
dW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgVXBk
YXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEwLTEyLTA2ICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMg
S2xpbmcuCi0KLSAgICAgICAgW1dJTkNFXSBBZGQgYnVpbGQgc3lzdGVtCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDUyMgotCi0gICAgICAgICogQ01h
a2VMaXN0c1dpbkNFLnR4dDogQWRkZWQuCi0KLTIwMTAtMTItMDEgIEppYSBQdSAgPGpwdUBhcHBs
ZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgU3Vw
cG9ydCBtdWx0aXBsZSBjb3JyZWN0aW9uIGNhbmRpZGF0ZXMgcGFuZWwgZm9yIG1pc3NwZWxsZWQg
d29yZCBvbiBNYWMgT1MgWC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwMTM3Ci0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTY4MDU5PgotCi0gICAg
ICAgIEFkb3B0ZWQgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZSBkZWZpbmVkIGluIGJhc2UgY2xhc3Mu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpnZXRHdWVzc2VzRm9yV29yZCk6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMS0zMCAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gQWRkIFdlYlZpZXcKLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMjE2Ci0KLSAgICAgICAg
KiBXZWJWaWV3LmNwcDogQWRkZWQuCi0gICAgICAgICogV2ViVmlldy5oOiBBZGRlZC4KLQotMjAx
MC0xMS0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAg
ICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjcxNTQxLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMS0wOCAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg2
ODUKLSAgICAgICAgTm90aWZ5IFVJIHByb2Nlc3MgYWJvdXQgZm9jdXNlZCBmcmFtZQotCi0gICAg
ICAgIEFkZGVkIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgQ2hyb21lQ2xpZW50
IG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmZvY3VzZWRGcmFtZUNoYW5n
ZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIw
MTAtMTEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHI3MTA0MS4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudFdpbkNFOjpzaG93Q29udGV4dE1lbnUpOgotCi0yMDEwLTEwLTMwICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZp
eCBhZnRlciByNzA1NzQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
dHJhbnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0KLTIwMTAtMTAtMjkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ4NTc2Ci0gICAgICAgIExldCBXZWJLaXQyIGNsaWVudCBrbm93IHdoZW4gYSBmcmFtZSBpcyBh
IGZyYW1lc2V0Ci0KLSAgICAgICAgQWRkZWQgYSBibGFuayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
bmV3IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldCk6Ci0KLTIwMTAtMTAtMjYgIEplbm4g
QnJhaXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
RG1pdHJ5IFRpdG92LgotCi0gICAgICAgIFJlc291cmNlIHRyYWNraW5nIGZhaWx1cmUgd2hlbiB0
cnlpbmcgdG8gbW92ZSBhIGZyYW1lIGJldHdlZW4gZG9jdW1lbnRzCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcxMwotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBhZ2UpOgot
ICAgICAgICBFbXB0eSBtZXRob2QuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5oOgotCi0yMDEwLTEwLTI1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KLQotICAg
ICAgICBSZXBsYWNlIF9jb3VudG9mIHdpdGggV1RGX0FSUkFZX0xFTkdUSAotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyMjkKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLQotMjAxMC0xMC0yMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KLQotICAgICAgICBXZWJLaXQyIG5lZWRzIHRvIHBhc3MgdGhlIGN1cnJlbnQgZXZlbnQg
bW9kaWZpZXIgZmxhZ3Mgd2hlbiByZXF1ZXN0aW5nIGEgbmV3IHdpbmRvdwotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDAKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRvdyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIEFkZCBOYXZpZ2F0aW9uQWN0aW9uIHBhcmFtZXRl
ci4KLQotMjAxMC0xMC0yMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gSW1w
bGVtZW50IEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudAotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTgKLQotICAgICAgICBDb3B5IHRo
ZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBFRkwgcG9ydC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTAtMTUgIE5pa29sYXMgWmlt
bWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGly
ayBTY2h1bHplLgotCi0gICAgICAgIFJlcGxhY2Ugc29tZSBTdHJpbmc6OmZvcm1hdCgpIHVzYWdl
cyBieSBTdHJpbmdDb25jYXRlbmF0ZSBpbiBXZWJLaXQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzE0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6aW1hZ2VUaXRsZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
bXVsdGlwbGVGaWxlVXBsb2FkVGV4dCk6Ci0KLTIwMTAtMDktMjggIEplbm4gQnJhaXRod2FpdGUg
IDxqZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92
LgotCi0gICAgICAgIEFkZGVkIG9sZFBhZ2UgcGFyYW0gdG8gRnJhbWVMb2FkZXJDbGllbnQ6OmRp
ZFRyYW5zZmVyQ2hpbGRGcmFtZVRvTmV3RG9jdW1lbnQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjY2MwotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmRpZFRyYW5zZmVyQ2hpbGRGcmFtZVRvTmV3RG9jdW1lbnQpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0w
OS0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEFkZCBQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYz
NzEKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNw
cDogQ29waWVkIGZyb20gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLmg6IENvcGllZCBmcm9tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmguCi0KLTIwMTAtMDktMjMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBB
ZGQgQ2hyb21lQ2xpZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ2Mjk0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQuCi0KLSAgICAgICAgQnVpbGQgZml4
IGZvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTCk6IEFkZCBtaXNzaW5nIG1ldGhvZC4K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIw
MTAtMDktMjEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgIldpbkNFIiB0byBjbGFz
c25hbWUgZm9yIGFsbCBXZWJDb3JlU3VwcG9ydCBjbGFzc2VzIHRvIG1hdGNoIGZpbGVuYW1lLgot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYxNzUKLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwOiBSZW5h
bWUgQ29udGV4dE1lbnVDbGllbnQgdG8gQ29udGV4dE1lbnVDbGllbnRXaW5DRS4KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmg6IERpdHRvLgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IFJlbmFtZSBEcmFnQ2xpZW50
IHRvIERyYWdDbGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
V2luQ0UuaDogRGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2lu
Q0UuY3BwOiBSZW5hbWUgRWRpdG9yQ2xpZW50IHRvIEVkaXRvckNsaWVudFdpbkNFLgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6IERpdHRvLgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDogUmVuYW1lIEluc3BlY3Rv
ckNsaWVudCB0byBJbnNwZWN0b3JDbGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOiBEaXR0by4KLQotMjAxMC0wOS0yMCAgUGF0cmljayBH
YW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IFJvYmVuLgotCi0gICAgICAgIEFkZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTY4MgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIw
MTAtMDktMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBbV0lOQ0VdIEFkZCBtaXNzaW5n
IEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6YmxvY2tlZEVycm9yCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTY4MAotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpibG9ja2VkRXJyb3IpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oOgotCi0yMDEw
LTA5LTEzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBG
cmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ1NDc0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RnJh
bWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UpOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnVzZXJBZ2VudCk6
Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6cmVmZXJyZXIp
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5o
OiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpj
cmVhdGUpOgotCi0yMDEwLTA4LTMxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgot
Ci0gICAgICAgIEFkZCBFZGl0b3JDbGllbnRXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MjIKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6RWRpdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp+RWRp
dG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhv
ZFN0YXRlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5n
ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c3BlbGxD
aGVja2VyRG9jdW1lbnRUYWcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3Vs
ZEJlZ2luRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkRW5k
RWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4
dCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQ
YXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojppc0VkaXRhYmxlKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2FuVW5kbyk6Ci0gICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudDo6Y2FuUmVkbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6dW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVkbyk6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZSk6Ci0gICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudDo6cGFnZURlc3Ryb3llZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcpOgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bik6Ci0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgot
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVu
dCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRl
eHRGaWVsZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUlu
VGV4dEFyZWEpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmxlYXJuV29yZCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp3
aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDgtMzEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4uCi0KLSAgICAgICAgQWRkIERyYWdDbGllbnRXaW5DRQotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MjEKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAoV2ViS2l0
OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6Ci0gICAgICAg
IChXZWJLaXQ6OkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6Ci0gICAg
ICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToKLSAgICAgICAgKFdl
YktpdDo6RHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludCk6Ci0gICAgICAg
IChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdD
bGllbnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xp
ZW50OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RHJhZ0NsaWVudFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA4LTMxICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBDb250ZXh0TWVudUNsaWVudFdpbkNFCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDgyMAotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHA6IEFkZGVk
LgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Q29udGV4dE1lbnVDbGllbnQp
OgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVEZXN0cm95
ZWQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZy
b21EZWZhdWx0SXRlbXMpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVu
dDo6ZG93bmxvYWRVUkwpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29w
eUltYWdlVG9DbGlwYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
c2VhcmNoV2l0aEdvb2dsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50Ojps
b29rVXBJbkRpY3Rpb25hcnkpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
c3BlYWspOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6c3RvcFNwZWFraW5n
KToKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6OmlzU3BlYWtpbmcpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDogQWRkZWQuCi0K
LTIwMTAtMDgtMjggIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgSW5zcGVjdG9yQ2xp
ZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0ODE5Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5j
cHA6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNs
aWVudCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6fkluc3BlY3RvckNsaWVu
dCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVk
KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRl
bmQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnJlbGVhc2VGcm9udGVuZFBh
Z2UpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6Ci0gICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6Ci0gICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKToKLSAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgotICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDogQWRkZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODFiMWY3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmlj
ayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDaHJvbWVDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKLSNpbmNs
dWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkljb24uaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRlICJQ
b3B1cE1lbnVXaW4uaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVXaW4uaCIKLSNpbmNsdWRl
ICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNocm9tZUNsaWVudFdpbkNF
OjpDaHJvbWVDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KHdl
YlZpZXcpCi17Ci0gICAgQVNTRVJUKG1fd2ViVmlldyk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50
V2luQ0U6OmNocm9tZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLUZsb2F0
UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6d2luZG93UmVjdCgpCi17Ci0gICAgaWYgKCFtX3dlYlZp
ZXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICBt
X3dlYlZpZXctPmZyYW1lUmVjdCgmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50V2luQ0U6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OnBh
Z2VSZWN0KCkKLXsKLSAgICByZXR1cm4gd2luZG93UmVjdCgpOwotfQotCi12b2lkIENocm9tZUNs
aWVudFdpbkNFOjpmb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnRXaW5DRTo6dW5mb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotUGFnZSogQ2hyb21lQ2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNob3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OmNhblJ1bk1vZGFsKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5D
RTo6cnVuTW9kYWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21l
Q2xpZW50V2luQ0U6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnRvb2xiYXJzVmlzaWJsZSgpCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRTdGF0
dXNiYXJWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBD
aHJvbWVDbGllbnRXaW5DRTo6c3RhdHVzYmFyVmlzaWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNl
dFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsYmFyc1Zpc2libGUoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9tZUNsaWVudFdp
bkNFOjpzZXRNZW51YmFyVmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6Om1lbnViYXJWaXNpYmxlKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRX
aW5DRTo6c2V0UmVzaXphYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6Y2xvc2VXaW5kb3dTb29uKCkKLXsKLSAgICBQb3N0TWVz
c2FnZVcobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUoKSwgV01fQ0xPU0UsIDAsIDApOwotfQotCi1i
b29sIENocm9tZUNsaWVudFdpbkNFOjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCi17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnRha2VGb2N1cyhG
b2N1c0RpcmVjdGlvbikKLXsKLSAgICB1bmZvY3VzKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50
V2luQ0U6OmZvY3VzZWRFbGVtZW50Q2hhbmdlZChFbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpmb2N1c2VkRnJhbWVDaGFuZ2Vk
KEZyYW1lKikKLXsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6Y2FuUnVuQmVmb3JlVW5s
b2FkQ29uZmlybVBhbmVsKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDaHJvbWVD
bGllbnRXaW5DRTo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBydW5KYXZhU2NyaXB0Q29uZmlybShm
cmFtZSwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fd2ViVmlldy0+cnVuSmF2YVNjcmlwdEFs
ZXJ0KG1lc3NhZ2UpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpydW5KYXZhU2NyaXB0
Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gbV93
ZWJWaWV3LT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsKLX0KLQotYm9vbCBDaHJvbWVD
bGllbnRXaW5DRTo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KQotewotICAg
IHJldHVybiBtX3dlYlZpZXctPnJ1bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZSwgZGVmYXVsdFZh
bHVlLCByZXN1bHQpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRTdGF0dXNiYXJU
ZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBD
aHJvbWVDbGllbnRXaW5DRTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUtleWJvYXJkVUlNb2RlIENo
cm9tZUNsaWVudFdpbkNFOjprZXlib2FyZFVJTW9kZSgpCi17Ci0gICAgcmV0dXJuIEtleWJvYXJk
QWNjZXNzVGFic1RvTGlua3M7Ci19Ci0KLUludFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OndpbmRv
d1Jlc2l6ZXJSZWN0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmludmFsaWRhdGVSb290
Vmlldyhjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IENocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAgIFJFQ1QgcmVjdCA9IHVwZGF0ZVJlY3Q7Ci0gICAg
SW52YWxpZGF0ZVJlY3QobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUoKSwgJnJlY3QsIEZBTFNFKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Nj
cm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAgIGludmFsaWRhdGVDb250ZW50
c0FuZFJvb3RWaWV3KHVwZGF0ZVJlY3QpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpz
Y3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3Qg
SW50UmVjdCYpCi17Ci0gICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcocmVjdFRvU2Ny
b2xsKTsKLX0KLQotSW50UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6cm9vdFZpZXdUb1NjcmVlbihj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IENocm9tZUNsaWVudFdpbkNFOjpzY3JlZW5Ub1Jv
b3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQotUGxhdGZvcm1QYWdlQ2xpZW50IENocm9tZUNs
aWVudFdpbkNFOjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmNvbnRl
bnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzY3JvbGxiYXJzTW9k
ZURpZENoYW5nZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnRXaW5DRTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJl
c3VsdCYsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpw
cmludChGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpleGNlZWRlZERhdGFiYXNlUXVv
dGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBEYXRhYmFzZURldGFpbHMpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVk
TWF4QXBwQ2FjaGVTaXplKGludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90
YShTZWN1cml0eU9yaWdpbiosIGludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpuZWVk
VG91Y2hFdmVudHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0K
LXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwg
R3JhcGhpY3NMYXllciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXIqIGxvYWRlcikKLXsKLSAgICBs
b2FkZXItPm5vdGlmeUZpbmlzaGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMp
KTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6
c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0TGFzdFNldEN1cnNvclRvQ3Vy
cmVudEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVD
bGllbnRXaW5DRTo6QVhTdGFydEZyYW1lTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6QVhGaW5pc2hGcmFtZUxvYWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNlbGVjdEl0
ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdy
aXRpbmdEaXJlY3Rpb24oKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDaHJvbWVD
bGllbnRXaW5DRTo6aGFzT3BlbmVkUG9wdXAoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFBvcHVwTWVudT4gQ2hyb21l
Q2xpZW50V2luQ0U6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgY29u
c3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTWVudVdpbihjbGllbnQpKTsKLX0K
LQotUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IENocm9tZUNsaWVudFdpbkNFOjpjcmVhdGVT
ZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVXaW4oY2xpZW50KSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2YzU2OGE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dh
LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIENocm9tZUNsaWVudFdpbkNFX2gKLSNkZWZpbmUgQ2hyb21lQ2xpZW50V2luQ0Vf
aAotCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0KLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBDaHJvbWVDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3Jl
OjpDaHJvbWVDbGllbnQgewotcHVibGljOgotICAgIENocm9tZUNsaWVudFdpbkNFKFdlYlZpZXcq
IHdlYlZpZXcpOwotCi0gICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVj
dCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3Qo
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBmb2N1cygpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCB1bmZvY3VzKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuVGFr
ZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgdGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZp
cnR1YWwgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKFdlYkNvcmU6OkZyYW1l
Kikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUaGUgRnJhbWUgcG9pbnRlciBwcm92aWRlcyB0aGUgQ2hy
b21lQ2xpZW50IHdpdGggY29udGV4dCBhYm91dCB3aGljaAotICAgIC8vIEZyYW1lIHdhbnRzIHRv
IGNyZWF0ZSB0aGUgbmV3IFBhZ2UuICBBbHNvLCB0aGUgbmV3bHkgY3JlYXRlZCB3aW5kb3cKLSAg
ICAvLyBzaG91bGQgbm90IGJlIHNob3duIHRvIHRoZSB1c2VyIHVudGlsIHRoZSBDaHJvbWVDbGll
bnQgb2YgdGhlIG5ld2x5Ci0gICAgLy8gY3JlYXRlZCBQYWdlIGhhcyBpdHMgc2hvdyBtZXRob2Qg
Y2FsbGVkLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlV2luZG93KFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgY2FuUnVuTW9kYWwoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHRvb2xiYXJzVmlzaWJsZSgpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHN0YXR1c2JhclZpc2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRN
ZW51YmFyVmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbWVudWJhclZp
c2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNpemFibGUoYm9vbCkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShKU0M6Ok1l
c3NhZ2VTb3VyY2UsIEpTQzo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2Fn
ZSwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBXVEY6
OlN0cmluZyYgc291cmNlSUQpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNhblJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBydW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkNv
cmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3dTb29u
KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkNv
cmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYkNv
cmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5n
JiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIC8vIE1ldGhvZHMgdXNlZCBieSBIb3N0V2luZG93LgotICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmll
dyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNs
aWVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFu
Z2VkKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29y
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VN
b3Zlcyhib29sKSBvdmVycmlkZTsKLSAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5k
b3cuCi0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3Jl
OjpUZXh0RGlyZWN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJD
b3JlOjpGcmFtZSopIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB2
aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3Qg
V1RGOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSwgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzKSBvdmVy
cmlkZTsKLSNlbmRpZgotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNh
dGlvbiBjYWNoZSBmYWlscyB0byBzYXZlIGEgY2FjaGUgb2JqZWN0Ci0gICAgLy8gYmVjYXVzZSBz
dG9yaW5nIGl0IHdvdWxkIGdyb3cgdGhlIGRhdGFiYXNlIGZpbGUgcGFzdCBpdHMgZGVmaW5lZCBt
YXhpbXVtCi0gICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBvbiB0
aGUgZGV2aWNlLgotICAgIC8vIFRoZSBjaHJvbWUgY2xpZW50IHdvdWxkIG5lZWQgdG8gdGFrZSBz
b21lIGFjdGlvbiBzdWNoIGFzIGV2aWN0aW5nIHNvbWUKLSAgICAvLyBvbGQgY2FjaGVzLgotICAg
IHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQp
IG92ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlv
biBjYWNoZSBvcmlnaW4gcXVvdGEgaXMgcmVhY2hlZC4gVGhpcwotICAgIC8vIG1lYW5zIHRoYXQg
dGhlIHJlc291cmNlcyBhdHRlbXB0aW5nIHRvIGJlIGNhY2hlZCB2aWEgdGhlIG1hbmlmZXN0IGFy
ZQotICAgIC8vIG1vcmUgdGhhbiBhbGxvd2VkIG9uIHRoaXMgb3JpZ2luLiBUaGlzIGNhbGxiYWNr
IGFsbG93cyB0aGUgY2hyb21lIGNsaWVudAotICAgIC8vIHRvIHRha2UgYWN0aW9uLCBzdWNoIGFz
IHByb21wdGluZyB0aGUgdXNlciB0byBhc2sgdG8gaW5jcmVhc2UgdGhlIHF1b3RhCi0gICAgLy8g
Zm9yIHRoaXMgb3JpZ2luLgotICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNo
ZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCB0b3RhbFNwYWNl
TmVlZGVkKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29y
ZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPikgb3ZlcnJpZGU7Ci0g
ICAgLy8gQXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbG9hZCBhbiBpY29uIGZvciBzcGVjaWZpZWQg
ZmlsZW5hbWVzLgotICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3Rv
cjxXVEY6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopIG92ZXJyaWRlOwotCi0g
ICAgLy8gUGFzcyAwIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5
ZXIuCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZy
YW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIC8vIFNldHMgYSBm
bGFnIHRvIHNwZWNpZnkgdGhhdCB0aGUgbmV4dCB0aW1lIGNvbnRlbnQgaXMgZHJhd24gdG8gdGhl
IHdpbmRvdywKLSAgICAvLyB0aGUgY2hhbmdlcyBhcHBlYXIgb24gdGhlIHNjcmVlbiBpbiBzeW5j
aHJvbnkgd2l0aCB1cGRhdGVzIHRvIEdyYXBoaWNzTGF5ZXJzLgotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgLy8g
U2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSB2aWV3IG5lZWRzIHRvIGJlIHVwZGF0ZWQs
IHNvIHdlIG5lZWQKLSAgICAvLyB0byBkbyBhbiBlYWdlciBsYXlvdXQgYmVmb3JlIHRoZSBkcmF3
aW5nLgotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJz
b3IoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgQVhTdGFydEZyYW1lTG9hZCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBBWEZpbmlzaEZyYW1lTG9hZCgpIG92ZXJyaWRlOwotCi0j
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRz
KGJvb2wpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdy
aXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Vs
ZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShXZWJD
b3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2Vi
Q29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0K
LXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBDaHJvbWVDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3Bw
IGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdp
bkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZTdmMy4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUg
IkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db250ZXh0TWVudUNsaWVu
dFdpbkNFOjpDb250ZXh0TWVudUNsaWVudFdpbkNFKFdlYlZpZXcgKndlYlZpZXcpCi0gICAgOiBt
X3dlYlZpZXcod2ViVmlldykKLXsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpj
b250ZXh0TWVudURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLVBhc3NPd25Q
dHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q2xpZW50V2luQ0U6OmN1c3RvbWl6ZU1lbnUoUGFz
c093blB0cjxDb250ZXh0TWVudT4gbWVudSkKLXsKLSAgICByZXR1cm4gbWVudTsKLX0KLQotdm9p
ZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0
TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpkb3dubG9hZFVSTChjb25zdCBVUkwm
IHVybCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xp
ZW50V2luQ0U6OnNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6bG9va1VwSW5EaWN0
aW9uYXJ5KEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRl
eHRNZW51Q2xpZW50V2luQ0U6OnNwZWFrKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpzdG9wU3BlYWtpbmco
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ29udGV4dE1lbnVDbGllbnRX
aW5DRTo6aXNTcGVha2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1NTVlNi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29udGV4dE1lbnVDbGll
bnRXaW5DRV9oCi0jZGVmaW5lIENvbnRleHRNZW51Q2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAi
Q29udGV4dE1lbnVDbGllbnQuaCIKLQotY2xhc3MgV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIENvbnRleHRNZW51Q2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6Q29u
dGV4dE1lbnVDbGllbnQgewotcHVibGljOgotICAgIENvbnRleHRNZW51Q2xpZW50V2luQ0UoV2Vi
VmlldyopOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q29udGV4dE1lbnU+IGN1c3Rv
bWl6ZU1lbnUoUGFzc093blB0cjxXZWJDb3JlOjpDb250ZXh0TWVudT4pIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb3JlOjpDb250ZXh0TWVu
dUl0ZW0qLCBjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudSopIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IFdlYkNvcmU6OkZyYW1lKikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGljdGlvbmFyeShXZWJDb3JlOjpGcmFt
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzcGVhayhjb25zdCBXVEY6OlN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtpbmcoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTcGVha2luZygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdl
YlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gQ29udGV4dE1lbnVDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJiNDM5MTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9X
ZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFy
b2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdDbGllbnRXaW5D
RS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIERyYWdDbGllbnRXaW5DRTo6d2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFn
RGF0YSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEcmFnQ2xpZW50V2lu
Q0U6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJ
bnRQb2ludCYsIENsaXBib2FyZCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIERyYWdDbGllbnRXaW5DRTo6YWN0aW9uTWFza0ZvckRyYWcoRHJh
Z0RhdGEmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdEZXN0aW5h
dGlvbkFjdGlvbkFueTsKLX0KLQotRHJhZ1NvdXJjZUFjdGlvbiBEcmFnQ2xpZW50V2luQ0U6OmRy
YWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7Ci19Ci0KLXZvaWQg
RHJhZ0NsaWVudFdpbkNFOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRHJhZ0NsaWVudFdpbkNFOjpkcmFnQ29udHJvbGxlckRl
c3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xp
ZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVu
dFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTFjNDMuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0Uu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRHJhZ0NsaWVudFdp
bkNFX2gKLSNkZWZpbmUgRHJhZ0NsaWVudFdpbkNFX2gKLQotI2luY2x1ZGUgIkRyYWdDbGllbnQu
aCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERyYWdDbGllbnRXaW5DRSA6IHB1Ymxp
YyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBl
cmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
LCBXZWJDb3JlOjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVy
Zm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJD
b3JlOjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291
cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6
RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJhbWUmLCBib29sID0gZmFs
c2UpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVk
KCkgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERy
YWdDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZWJjODJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQotICogIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogIENvcHlyaWdodCAoQykgMjAxMCBQ
YXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50
V2luQ0UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVbmRvU3Rl
cC5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1FZGl0b3JDbGllbnRXaW5DRTo6RWRpdG9yQ2xpZW50V2lu
Q0UoV2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotewotfQotCi1F
ZGl0b3JDbGllbnRXaW5DRTo6fkVkaXRvckNsaWVudFdpbkNFKCkKLXsKLX0KLQotdm9pZCBFZGl0
b3JDbGllbnRXaW5DRTo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGREZWxl
dGVSYW5nZShSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgRWRp
dG9yQ2xpZW50V2luQ0U6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpz
aG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3Vs
ZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGll
bnRXaW5DRTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmlu
aXR5LCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldCosIFdlYkNvcmU6OlJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVkaXRv
ckNsaWVudFdpbkNFOjpkaWRCZWdpbkVkaXRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6ZGlkRW5kRWRpdGluZygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBFZGl0b3JDbGllbnRXaW5DRTo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJD
b3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+ID4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50V2luQ0U6OnJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVu
ZG9TdGVwPikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVu
dFdpbkNFOjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3Rl
cD4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5D
RTo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlDdXQoV2ViQ29yZTo6RnJhbWUqLCBi
b29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotfQot
Ci1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5QYXN0ZShXZWJDb3JlOjpGcmFtZSosIGJvb2wg
ZGVmYXVsdFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci19Ci0KLWJv
b2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhblVuZG8oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpj
YW5SZWRvKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dW5kbygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVkbygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkSW5zZXJ0
Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
cGFnZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xp
ZW50V2luQ0U6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCi17Ci0gICAgUGFnZSogcGFnZSA9
IG1fd2ViVmlldy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
OwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXctPnBhZ2UoKTsKLSAgICBp
ZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFnZS0+c2V0dGlu
Z3MoKS5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50V2luQ0U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0b2dnbGVHcmFtbWFy
Q2hlY2tpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSA9
IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtleSA9IDEgPDwgMjsKLQotc3Ry
dWN0IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWduZWQgdmlydHVhbEtleTsKLSAgICB1bnNpZ25l
ZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0cnVjdCBLZXlQcmVz
c0VudHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7
Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlEb3duRW50cnkg
a2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7IFZLX0xFRlQsICAgMCwgICAgICAgICAgICAgICAg
ICAiTW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgQ3RybEtleSwgICAgICAg
ICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgMCwgICAgICAgICAg
ICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVJpZ2h0QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSwg
ICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVdvcmRSaWdodEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgMCwgICAg
ICAgICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVVwQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9SLCAgU2hp
ZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZURvd24i
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAg
U2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBh
Z2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9S
LCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgMCwgICAgICAgICAgICAgICAgICAiTW92
ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hP
TUUsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgU2hpZnRLZXksICAgICAgICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwKLSAgICB7IFZL
X0hPTUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgQ3RybEtleSB8IFNoaWZ0S2V5
LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKLQotICAg
IHsgVktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAg
ICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAot
ICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50
IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwg
U2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9
LAotCi0gICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJk
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgIFNoaWZ0
S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndh
cmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgIEN0
cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdv
cmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICB7ICdCJywgICAg
ICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9n
Z2xlSXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgVktf
RVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAg
ICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfVEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAg
ICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgLy8gSXQncyBub3QgcXVpdGUgY2xl
YXIgd2hldGhlciBjbGlwYm9hcmQgc2hvcnRjdXRzIGFuZCBVbmRvL1JlZG8gc2hvdWxkIGJlIGhh
bmRsZWQKLSAgICAvLyBpbiB0aGUgYXBwbGljYXRpb24gb3IgaW4gV2ViS2l0LiBXZSBjaG9zZSBX
ZWJLaXQgZm9yIG5vdy4KLSAgICB7ICdDJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiQ29w
eSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdWJywg
ICAgICAgQ3RybEtleSwgICAgICAgICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7ICdYJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAi
Q3V0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdB
JywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiU2VsZWN0QWxsIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwgQ3RybEtleSwgICAgICAgICAg
ICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0RFTEVURSwgU2hpZnRLZXksICAgICAgICAgICAiQ3V0IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwgU2hpZnRLZXksICAgICAg
ICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7ICdaJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVW5kbyIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdaJywgICAgICAgQ3RybEtleSB8IFNo
aWZ0S2V5LCAiUmVkbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
fTsKLQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7Ci0g
ICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAgICAg
ICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAgICAg
Ikluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAn
XHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIklu
c2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLX07Ci0KLWNvbnN0
IGNoYXIqIEVkaXRvckNsaWVudFdpbkNFOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2Fy
ZEV2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQpOwotCi0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25D
b21tYW5kc01hcCA9IDA7Ci0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtl
eVByZXNzQ29tbWFuZHNNYXAgPSAwOwotCi0gICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsK
LSAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFy
Kj47Ci0gICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPjsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgoa2V5RG93bkVudHJpZXMpOyArK2kpCi0gICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAt
PnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3duRW50cmllc1tp
XS52aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKLQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa2V5UHJlc3NFbnRyaWVzKTsgKytpKQot
ICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5t
b2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVByZXNzRW50
cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAg
IGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5Owot
ICAgIGlmIChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7Ci0g
ICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5Owot
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewot
ICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZlbnQtPmtleUNvZGUoKTsK
LSAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkg
OiAwOwotICAgIH0KLQotICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldmVudC0+
Y2hhckNvZGUoKTsKLSAgICByZXR1cm4gbWFwS2V5ID8ga2V5UHJlc3NDb21tYW5kc01hcC0+Z2V0
KG1hcEtleSkgOiAwOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5n
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBOb2RlKiBub2RlID0g
ZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0K
LSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50ID0gZXZlbnQtPmtleUV2
ZW50KCk7Ci0gICAgaWYgKCFrZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ym9vbCBjYXJldEJyb3dzaW5nID0gZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJs
ZWQoKTsKLSAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBzd2l0Y2ggKGtleUV2ZW50
LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAg
ICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8g
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbkxlZnQsCi0gICAgICAgICAg
ICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0
ZXJHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92
ZSwKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uUmlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFu
dWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKLSAgICAg
ICAgICAgICAgICAgICAgRGlyZWN0aW9uQmFja3dhcmQsCi0gICAgICAgICAgICAgICAgICAgIGtl
eUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0
eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLAotICAgICAgICAg
ICAgICAgICAgICBEaXJlY3Rpb25Gb3J3YXJkLAotICAgICAgICAgICAgICAgICAgICBrZXlFdmVu
dC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCi0g
ICAgICAgICAgICAgICAgICAgIFVzZXJUcmlnZ2VyZWQpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZy
YW1lLT5lZGl0b3IoKS5jb21tYW5kKGludGVycHJldEtleUV2ZW50KGV2ZW50KSk7Ci0KLSAgICBp
ZiAoa2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAg
ICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUg
dG8gZGVjaWRlIGhvdyBjb21tYW5kcyB0aGF0IGp1c3QgaW5zZXJ0IHRleHQgaWYgZXhlY3V0ZWQg
dmlhIEVkaXRvciBzaG91bGQgYmUgdHJlYXRlZCwKLSAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQg
dXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIg
dGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQK
LSAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVu
dGVyKS4KLSAgICAgICAgcmV0dXJuICFjb21tYW5kLmlzVGV4dEluc2VydGlvbigpICYmIGNvbW1h
bmQuZXhlY3V0ZShldmVudCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbW1hbmQuZXhlY3V0ZShldmVu
dCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3Ig
Y29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2
aW91cgotICAgIGlmIChldmVudC0+Y2hhckNvZGUoKSA8ICcgJykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJl
c3NlZAotICAgIGlmIChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5pbnNl
cnRUZXh0KGV2ZW50LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2ZW50KTsKLX0KLQotdm9pZCBFZGl0
b3JDbGllbnRXaW5DRTo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
LXsKLSAgICBpZiAoaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQpKQotICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhFbGVtZW50KikKLXsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KikKLXsKLX0KLQotdm9pZCBFZGl0b3JDbGll
bnRXaW5DRTo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKQotewotfQotCi1ib29s
IEVkaXRvckNsaWVudFdpbkNFOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCos
IEtleWJvYXJkRXZlbnQqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFZGl0b3JD
bGllbnRXaW5DRTo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0ZXh0RGlk
Q2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNl
bGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEVkaXRvckNsaWVudFdpbkNFOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0
IFN0cmluZyYgdGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRv
ckNsaWVudFdpbkNFOjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRv
ckNsaWVudFdpbkNFOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIGlucHV0V29yZCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgaW1w
bGVtZW50ZWQgdXNpbmcgY3VzdG9taXplZCBhbGdvcml0aG1zIGZvciB0aGUgcGFydGljdWxhciBi
cm93c2VyLgotICAgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoU3RyaW5nVklldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50Kiwg
aW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdp
bkNFOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgR3JhbW1hckRldGFpbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xp
ZW50V2luQ0U6OnNob3dTcGVsbGluZ1VJKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50V2luQ0U6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3Qg
U3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OndpbGxTZXRJbnB1
dE1ldGhvZFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQx
ODRkMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBFZGl0b3JDbGllbnRXaW5DRV9oCi0jZGVmaW5lIEVkaXRvckNsaWVudFdpbkNFX2gKLQot
I2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50Lmgi
Ci0KLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBFZGl0b3JD
bGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQsIHB1YmxpYyBXZWJDb3Jl
OjpUZXh0Q2hlY2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRWRpdG9yQ2xpZW50V2luQ0UoV2Vi
VmlldyopOwotICAgIH5FZGl0b3JDbGllbnRXaW5DRSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHBh
Z2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVS
YW5nZShXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBz
cGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwg
V2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQqLCBXZWJDb3JlOjpS
YW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2Vi
Q29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gPiYgcGFzdGVib2FyZERhdGEpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OlVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUmVkb1N0
ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgY2FuQ29weUN1dChXZWJDb3JlOjpGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUGFzdGUoV2ViQ29yZTo6RnJhbWUq
LCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNh
blVuZG8oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHVuZG8oKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVkbygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJv
YXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJD
b3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVu
ZEVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0
ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoV2ViQ29yZTo6RWxlbWVu
dCosIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChXZWJDb3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKFdlYkNvcmU6OkVsZW1l
bnQqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBXVEY6
OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV1RG
OjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKFN0cmluZ1ZpZXcsIGludCosIGludCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV1RGOjpT
dHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RG
OjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoU3RyaW5nVmlldywgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQq
LCBpbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRl
dGFpbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzcGVs
bGluZ1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4
dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRD
aGVja2luZ1JlcXVlc3Q+KSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlRleHRD
aGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KLQot
cHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBXZWJDb3Jl
OjpLZXlib2FyZEV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChX
ZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0KLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVkaXRvckNsaWVudFdpbkNFX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YzYxZGJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFdpbkNF
LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCi0jaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmgiCi0jaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5o
IgotI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKLSNpbmNsdWRlICJXZWJLaXRWZXJzaW9uLmgiCi0j
aW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRShXZWJWaWV3KiB2
aWV3KQotICAgIDogbV93ZWJWaWV3KHZpZXcpCi0gICAgLCBtX3BsdWdpblZpZXcoMCkKLXsKLSAg
ICBBU1NFUlQobV93ZWJWaWV3KTsKLX0KLQotRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6fkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UoKQotewotfQotCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6dXNlckFnZW50KGNvbnN0IFVSTCYpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgdXNlckFnZW50U3RyaW5nLCAoKSk7Ci0KLSAgICBpZiAodXNlckFnZW50
U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyB3ZWJLaXRWZXJzaW9uID0gU3RyaW5n
Ojpmb3JtYXQoIiVkLiVkIiwgV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJT
SU9OKTsKLSAgICAgICAgdXNlckFnZW50U3RyaW5nID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAg
KCIsIHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0
VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIE1vYmlsZSBTYWZhcmkvIiwgd2ViS2l0VmVy
c2lvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVzZXJBZ2VudFN0cmluZzsKLX0KLQotUGFzc1Jl
ZlB0cjxEb2N1bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlRG9jdW1l
bnRMb2FkZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBT
dWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCi17Ci0gICAgcmV0dXJuIERvY3VtZW50TG9h
ZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAobV9wbHVnaW5WaWV3KSB7Ci0g
ICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewotICAgICAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKLSAgICAg
ICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbG9hZGVyLT5jb21taXREYXRhKGRhdGEsIGxlbmd0aCk7Ci19Ci0KLWJvb2wg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFNlbmRS
ZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjphc3NpZ25JZGVu
dGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBEb2N1bWVudExvYWRlciosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90
aWZpY2F0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmcmFtZUxvYWRlckRl
c3Ryb3llZCgpCi17Ci0gICAgbV93ZWJWaWV3ID0gMDsKLSAgICBtX2ZyYW1lID0gMDsKLSAgICBk
ZWxldGUgdGhpczsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERp
ZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZv
clJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1
bmN0aW9uKQotewotICAgIGlmIChjYW5TaG93TUlNRVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkp
Ci0gICAgICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci0gICAgZWxzZQotICAgICAgICBw
b2xpY3lGdW5jdGlvbihQb2xpY3lEb3dubG9hZCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oY29uc3QgTmF2
aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiwgRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lG
dW5jdGlvbikKLXsKLSAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lVc2UpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1
bmN0aW9uKQotewotICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24pCi17Ci0gICAgcG9s
aWN5RnVuY3Rpb24oUG9saWN5VXNlKTsKLX0KLQotUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVs
ZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotUGFz
c1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlRnJhbWUoY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJn
aW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3LT5jcmVh
dGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgcmVmZXJyZXIsIGFsbG93c1Njcm9sbGlu
ZywgbWFyZ2luV2lkdGgsIG1hcmdpbkhlaWdodCwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRn
ZXQpCi17Ci0gICAgbV9wbHVnaW5WaWV3ID0gdG9QbHVnaW5WaWV3KHBsdWdpbldpZGdldCk7Ci0g
ICAgaWYgKHBsdWdpbldpZGdldCkKLSAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9
IGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1lbnQq
LCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1PYmplY3RD
b250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvYmplY3RDb250ZW50VHlwZShjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBzaG91bGRQcmVmZXJQbHVn
SW5zRm9ySW1hZ2VzKQotewotICAgIHJldHVybiBGcmFtZUxvYWRlcjo6ZGVmYXVsdE9iamVjdENv
bnRlbnRUeXBlKHVybCwgbWltZVR5cGUsIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpOwot
fQotCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKERPTVdyYXBwZXJXb3JsZCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Omhhc1dlYlZp
ZXcoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmcmFtZUxvYWRDb21wbGV0ZWQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZXN0b3JlVmlld1N0
YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QK
LXsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpk
aWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJ1bkluc2VjdXJlQ29udGVudChTZWN1
cml0eU9yaWdpbiosIGNvbnN0IFVSTCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6Om1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmb3JjZUxheW91
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpmb3JjZUxheW91dEZvck5vbkhUTUwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0Q29waWVzT25TY3JvbGwoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkZXRhY2hlZEZyb21QYXJlbnQzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRp
c3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50
UmVkaXJlY3QoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IFVS
TCYsIGRvdWJsZSwgZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBh
Z2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlk
UmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFn
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaFdpbGxDbG9zZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNl
aXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZENoYW5n
ZUljb25zKFdlYkNvcmU6Okljb25UeXBlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkTGF5b3V0KExh
eW91dE1pbGVzdG9uZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFNob3coKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuY2VsUG9saWN5Q2hlY2so
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OndpbGxD
aGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgc2V0VGl0bGUoZG9jdW1lbnRMb2FkZXItPnRp
dGxlKCksIGRvY3VtZW50TG9hZGVyLT51cmwoKSk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gKE1JTUVUeXBlUmVnaXN0cnk6OmNhblNob3dN
SU1FVHlwZSh0eXBlKQotICAgICAgICAgICAgfHwgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBs
dWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQodHlwZSkpOwotfQotCi1ib29sIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcmKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpnZW5lcmF0ZWRN
SU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopCi17Ci0gICAgaWYgKCFt
X3BsdWdpblZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGx1Z2luVmlldy0+ZGlkRmlu
aXNoTG9hZGluZygpOwotICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAgbV9oYXNTZW50UmVzcG9u
c2VUb1BsdWdpbiA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkRmluaXNoTG9hZCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwcmVwYXJlRm9y
RGF0YVNvdXJjZVJlcGxhY2VtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mLCBjb25zdCBVUkwmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNo
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEZh
aWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VF
cnJvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVu
dExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmLCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hE
aWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAg
IGRpc3BhdGNoRGlkRmFpbExvYWQoZXJyb3IpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjb252
ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1SZXNvdXJjZUVycm9yIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3Vy
Y2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQot
Ci1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbm5vdFNob3dVUkxFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6aW50
ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3Ig
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsK
LX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaWxlRG9lc05vdEV4
aXN0RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLWJvb2wgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCi17Ci0gICAgcmV0dXJuICEoZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7Ci19Ci0KLWJvb2wg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuQ2FjaGVQYWdlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoQ3Jl
YXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRN
YWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQotewotICAgIGlmICghbV9wbHVnaW5WaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOwotICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAg
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWROYW1lICovKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dXBkYXRlR2xvYmFsSGlz
dG9yeSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzYXZlUGxh
dGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp0cmFuc2l0aW9uVG9Db21t
aXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJhbnNpdGlvblRvQ29tbWl0
dGVkRm9yTmV3UGFnZSgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAg
ICBBU1NFUlQocGFnZSk7Ci0KLSAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZSA9PSBwYWdl
LT5tYWluRnJhbWUoKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7Ci0KLSAgICBSZWZQdHI8
RnJhbWVWaWV3PiBmcmFtZVZpZXc7Ci0gICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAgICAgIFJF
Q1QgcmVjdDsKLSAgICAgICAgbV93ZWJWaWV3LT5mcmFtZVJlY3QoJnJlY3QpOwotICAgICAgICBm
cmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSgqbV9mcmFtZSwgSW50UmVjdChyZWN0KS5zaXpl
KCkpOwotICAgIH0gZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSgq
bV9mcmFtZSk7Ci0KLSAgICBtX2ZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7Ci0KLSAgICBpZiAo
bV9mcmFtZS0+b3duZXJSZW5kZXJlcigpKQotICAgICAgICBtX2ZyYW1lLT5vd25lclJlbmRlcmVy
KCktPnNldFdpZGdldChmcmFtZVZpZXcpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKQotewotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkKLXsKLX0KLQotUGFz
c1JlZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIEZyYW1lTmV0
d29ya2luZ0NvbnRleHRXaW5DRTo6Y3JlYXRlKG1fZnJhbWUsIHVzZXJBZ2VudChVUkwoKSkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYTE3MzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNr
IEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRXaW5DRV9o
Ci0jZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgRnJhbWVMb2FkZXJDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVMb2FkZXJDbGllbnRXaW5DRShXZWJWaWV3Kik7Ci0g
ICAgdmlydHVhbCB+RnJhbWVMb2FkZXJDbGllbnRXaW5DRSgpOwotICAgIHZpcnR1YWwgdm9pZCBm
cmFtZUxvYWRlckRlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgV2ViVmlldyogd2ViVmlldygp
IGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1dlYlZp
ZXcoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRp
b24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Zm9yY2VMYXlvdXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JO
b25IVE1MKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwo
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQyKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nICBpZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
LCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhh
bmRsZU9ubG9hZEV2ZW50cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25z
dCBXZWJDb3JlOjpVUkwmLCBkb3VibGUsIGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFdlYkNvcmU6
OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpJY29uVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkTGF5b3V0KFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCBXZWJDb3JlOjpGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNv
cmU6Ok5hdmlnYXRpb25BY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hTaG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93
QWN0aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPiwgY29u
c3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4s
IFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWxQb2xpY3lDaGVjaygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVu
dChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPikgb3ZlcnJpZGUgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkZvcm1TdGF0ZT4sIFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShXZWJDb3JlOjpEb2N1
bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRF
cnJvcihXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NTdGFydGVkTm90
aWZpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGlt
YXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50
KiwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50
IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6VVJMJiwg
Y29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpT
dHJpbmc+JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjcmVhdGVQbHVnaW4oV2ViQ29yZTo6V2lkZ2V0Kikgb3ZlcnJpZGUgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2lu
V2lkZ2V0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0
PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3Jl
OjpIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFdlYkNvcmU6OlVSTCYgYmFzZVVSTCwgY29uc3Qg
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxX
VEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdURjo6U3Ry
aW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRPTVdyYXBwZXJX
b3JsZCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlm
aWNhdGlvbihib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6T2JqZWN0Q29u
dGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RG
OjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9v
bCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUgPSBTdHJp
bmcoKSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5n
ZVRpdGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIq
LCBpbnQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVH
bG9iYWxIaXN0b3J5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhp
c3RvcnlSZWRpcmVjdExpbmtzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEdv
VG9IaXN0b3J5SXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZERldGVjdFhTUyhjb25zdCBXZWJDb3JlOjpVUkwmLCBib29sIGRpZEJsb2NrRW50aXJlUGFnZSkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2FuY2VsbGVk
RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRl
ZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dN
SU1FVHlwZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OlJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRmFsbEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNhblNob3dNSU1F
VHlwZShjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBjYW5TaG93TUlNRVR5cGVBc0hUTUwoY29uc3QgV1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29u
c3QgV1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5n
IGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkQ29tcGxldGVkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0
ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlN1YnN0aXR1dGVEYXRhJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRp
dGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpV
UkwmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgdXNlckFnZW50KGNvbnN0
IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9y
bURhdGFUb0NhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3Jl
OjpDYWNoZWRGcmFtZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9D
b21taXR0ZWRGb3JOZXdQYWdlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2F2
ZVRvUGFnZUNhY2hlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVGcm9t
UGFnZUNhY2hlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRCZWNv
bWVGcmFtZXNldChib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBh
Z2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNl
dEZyYW1lKFdlYkNvcmU6OkZyYW1lICpmcmFtZSkgeyBtX2ZyYW1lID0gZnJhbWU7IH0KLSAgICBX
ZWJDb3JlOjpGcmFtZSAqZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgV2ViVmlldyogbV93ZWJWaWV3OwotICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwotICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLQotICAgIC8vIFBsdWdpbiB2
aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KLSAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7Ci0gICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBGcmFtZUxvYWRlckNsaWVudFdpbkNFX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjJiNmNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVy
IDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhbWVOZXR3
b3JraW5nQ29udGV4dFdpbkNFLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OkZyYW1lTmV0
d29ya2luZ0NvbnRleHRXaW5DRShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
KQotICAgIDogRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkKLSAgICAsIG1fdXNlckFnZW50
KHVzZXJBZ2VudCkKLXsKLX0KLQotU3RyaW5nIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6
dXNlckFnZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2VyQWdlbnQ7Ci19Ci0KLVN0cmlu
ZyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnJlZmVycmVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCkucmVmZXJyZXIoKTsKLX0KLQotV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmJsb2NrZWRFcnJvcihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJD
b3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTU3NzU1Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2lu
Q0VfaAotI2RlZmluZSBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0VfaAotCi0jaW5jbHVkZSAi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0d29y
a2luZ0NvbnRleHQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRT4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV1RG
OjpTdHJpbmcmIHVzZXJBZ2VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFKGZyYW1lLCB1c2VyQWdlbnQpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgV1RGOjpTdHJpbmcgcmVmZXJyZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZyYW1lTmV0
d29ya2luZ0NvbnRleHRXaW5DRShXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3Ry
aW5nJiB1c2VyQWdlbnQpOwotCi0gICAgV1RGOjpTdHJpbmcgbV91c2VyQWdlbnQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEZyYW1lTmV0d29ya2luZ0NvbnRleHRX
aW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjYTcwYjkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFdpbkNF
LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUluc3BlY3RvckNsaWVudFdpbkNFOjpJbnNw
ZWN0b3JDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV9pbnNwZWN0ZWRXZWJW
aWV3KHdlYlZpZXcpCi17Ci19Ci0KLUluc3BlY3RvckNsaWVudFdpbkNFOjp+SW5zcGVjdG9yQ2xp
ZW50V2luQ0UoKQotewotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjppbnNwZWN0b3JE
ZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCi1JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIEluc3BlY3RvckNsaWVudFdpbkNFOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVj
dG9yQ29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpjbG9zZUluc3BlY3Rv
ckZyb250ZW5kKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudFdpbkNFOjpicmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXaW5DRTo6aGlnaGxpZ2h0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpoaWRl
SGlnaGxpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEluc3BlY3Rv
ckNsaWVudFdpbkNFOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDg2NDZkNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEluc3BlY3RvckNsaWVudFdpbkNFX2gKLSNkZWZpbmUgSW5zcGVj
dG9yQ2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yRm9yd2FyZGluZy5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgSW5zcGVjdG9yQ2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50LCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnNwZWN0b3JDbGllbnRXaW5DRShXZWJWaWV3Kik7
Ci0gICAgfkluc3BlY3RvckNsaWVudFdpbkNFKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVj
dG9yRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbnNwZWN0b3JG
cm9udGVuZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9u
dCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7
Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRXaW5DRV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
NjUxOTM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UuaCIKLQotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKLSNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLCBwbGF0Zm9ybVN0cmF0
ZWdpZXMsICgpKTsKLX0KLQotUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OlBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFKCkKLXsKLSAgICBzZXRQbGF0Zm9ybVN0cmF0ZWdpZXModGhpcyk7Ci19Ci0KLUNv
b2tpZXNTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUNvb2tpZXNTdHJh
dGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLURhdGFiYXNlU3RyYXRlZ3kqIFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KCkKLXsKLSAgICByZXR1
cm4gdGhpczsKLX0KLQotTG9hZGVyU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpj
cmVhdGVMb2FkZXJTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVBhc3RlYm9h
cmRTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJh
dGVneSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsdWdpblN0cmF0ZWd5KiBQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlUGx1Z2luU3RyYXRlZ3koKQotewotICAgIHJldHVybiB0aGlz
OwotfQotCi1TaGFyZWRXb3JrZXJTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNy
ZWF0ZVNoYXJlZFdvcmtlclN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotU3Rv
cmFnZVN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlU3RvcmFnZVN0cmF0
ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotVmlzaXRlZExpbmtTdHJhdGVneSogUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKQotewotICAg
IHJldHVybiB0aGlzOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tp
ZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBXZWJDb3JlOjpjb29r
aWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCi17Ci0gICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21E
T00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOwotfQotCi1ib29sIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwp
Ci17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24sIGZpcnN0UGFy
dHksIHVybCk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBmaXJzdFBhcnR5
LCB1cmwpOwotfQotCi1ib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRSYXdDb29raWVz
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBy
YXdDb29raWVzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29v
a2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
c2Vzc2lvbiwgdXJsLCBjb29raWVOYW1lKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6cmVmcmVzaFBsdWdpbnMoKQotewotICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnJlZnJlc2goKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdpbkluZm8+JiBvdXRQbHVnaW5z
KQotewotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7Ci0KLSAgICBvdXRQbHVnaW5z
LnJlc2l6ZShwbHVnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBs
dWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBs
dWdpbnNbaV07Ci0KLSAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5hbWUg
PSBwYWNrYWdlLT5uYW1lKCk7Ci0gICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1l
KCk7Ci0gICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7Ci0KLSAgICAg
ICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNr
YWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKLQotICAgICAgICBpbmZvLm1pbWVzLnJlc2VydmVD
YXBhY2l0eShtaW1lVG9EZXNjcmlwdGlvbnMuc2l6ZSgpKTsKLQotICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQo
KTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+
a2V5OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgbWlt
ZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUp
OwotCi0gICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG91dFBsdWdpbnNbaV0gPSBpbmZvOwotICAgIH0KLX0KLQotYm9vbCBQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6aXNMaW5rVmlzaXRlZChQYWdlKiBwYWdlLCBMaW5rSGFzaCBoYXNoLCBj
b25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQotewotICAgIHJldHVybiBwYWdlLT5ncm91
cCgpLmlzTGlua1Zpc2l0ZWQoaGFzaCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UqIHBhZ2UsIExpbmtIYXNoIGhhc2gpCi17Ci0gICAgcGFn
ZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGlua0hhc2goaGFzaCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgg
Yi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNzllOWMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRV9oCi0jZGVmaW5lIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFX2gKLQot
I2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3RyYXRlZ3ku
aCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgotI2luY2x1ZGUgIlBsdWdpblN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiU2hhcmVkV29y
a2VyU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJW
aXNpdGVkTGlua1N0cmF0ZWd5LmgiCi0KLWNsYXNzIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFIDog
cHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29r
aWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6RGF0YWJhc2VTdHJhdGVneSwgcHJpdmF0ZSBX
ZWJDb3JlOjpMb2FkZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpTaGFyZWRXb3JrZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpT
dG9yYWdlU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi1wcml2YXRlOgotICAgIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFKCk7Ci0KLSAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0
ZWdpZXMKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2ll
c1N0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpEYXRhYmFzZVN0cmF0
ZWd5KiBjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0
cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSog
Y3JlYXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNo
YXJlZFdvcmtlclN0cmF0ZWd5KiBjcmVhdGVTaGFyZWRXb3JrZXJTdHJhdGVneSgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RvcmFnZVN0cmF0ZWd5KiBjcmVhdGVTdG9yYWdlU3Ry
YXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRl
Z3kqIGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkNv
cmU6OkNvb2tpZXNTdHJhdGVneQotICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oY29u
c3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiwgY29uc3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmLCBj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29raWVz
KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViQ29yZTo6RGF0YWJhc2VTdHJhdGVneQotICAg
IC8vIC0gVXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQotICAgIC8vIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSosIFZl
Y3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiYpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViQ29yZTo6
VmlzaXRlZExpbmtTdHJhdGVneQotICAgIHZpcnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNv
cmU6OlBhZ2UqLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3Qg
V1RGOjpBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRl
ZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBvdmVycmlkZTsKLX07Ci0K
LSNlbmRpZiAvLyBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmZTAzOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlICJDaHJvbWVDbGllbnRXaW5DRS5oIgotI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50V2luQ0UuaCIKLSNpbmNsdWRlICJEcmFnQ2xpZW50V2lu
Q0UuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlZpZXdXaW5k
b3dDbGFzc05hbWUgPSBMIldlYlZpZXdXaW5kb3dDbGFzcyI7Ci0KLQotTFJFU1VMVCBDQUxMQkFD
SyBXZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBpZiAoV2ViVmlldyogd2ViVmlldyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KEdldFdpbmRvd0xvbmcoaFduZCwgMCkpKQotICAgICAg
ICByZXR1cm4gd2ViVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
Ci0KLSAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VJbnRvQnVmZmVy
KGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotCi1XZWJWaWV3OjpXZWJWaWV3KEhXTkQgaHduZCwgdW5zaWduZWQgZmVhdHVyZXMp
Ci0gICAgOiBtX2ZyYW1lKDApCi0gICAgLCBtX3BhZ2UoMCkKLSAgICAsIG1fcGFyZW50V2luZG93
SGFuZGxlKGh3bmQpCi0gICAgLCBtX2VuYWJsZURvdWJsZUJ1ZmZlcihmZWF0dXJlcyAmIEVuYWJs
ZURvdWJsZUJ1ZmZlcmluZykKLXsKLSAgICBSRUNUIHJjQ2xpZW50OwotICAgIEdldENsaWVudFJl
Y3QoaHduZCwgJnJjQ2xpZW50KTsKLQotICAgIG1fd2luZG93SGFuZGxlID0gQ3JlYXRlV2luZG93
KGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lLCAwLCBXU19DSElMRCwKLSAgICAgICAgQ1dfVVNFREVG
QVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgaHduZCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5k
bGUoKSwgMCk7Ci0KLSAgICBTZXRXaW5kb3dMb25nKG1fd2luZG93SGFuZGxlLCAwLCByZWludGVy
cHJldF9jYXN0PExPTkc+KHRoaXMpKTsKLQotICAgIE1vdmVXaW5kb3cobV93aW5kb3dIYW5kbGUs
IDAsIDAsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20sIFRSVUUpOwotICAgIFNob3dX
aW5kb3cobV93aW5kb3dIYW5kbGUsIFNXX1NIT1cpOwotCi0gICAgUGFnZTo6UGFnZUNsaWVudHMg
cGFnZUNsaWVudHM7Ci0gICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gbmV3IFdlYktpdDo6
Q2hyb21lQ2xpZW50V2luQ0UodGhpcyk7Ci0gICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGll
bnQgPSBuZXcgV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudFdpbkNFKHRoaXMpOwotICAgIHBhZ2VD
bGllbnRzLmVkaXRvckNsaWVudCA9IG5ldyBXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFKHRoaXMp
OwotICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgV2ViS2l0OjpEcmFnQ2xpZW50V2lu
Q0UoKTsKLSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcgV2ViS2l0OjpJbnNw
ZWN0b3JDbGllbnRXaW5DRSh0aGlzKTsKLSAgICBtX3BhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50
cyk7Ci0KLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3BhZ2UtPnNldHRpbmdzKCk7Ci0gICAg
c2V0dGluZ3Muc2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLnNldERl
ZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3Muc2V0TWluaW11bUZvbnRTaXplKDgpOwot
ICAgIHNldHRpbmdzLnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoOCk7Ci0gICAgc2V0dGluZ3Mu
c2V0U2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy5zZXRMb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkodHJ1ZSk7Ci0KLSAgICBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UqIGxv
YWRlckNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UodGhpcyk7Ci0g
ICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUobV9wYWdlLCAwLCBsb2FkZXJD
bGllbnQpOwotICAgIG1fZnJhbWUgPSBmcmFtZS5nZXQoKTsKLSAgICBsb2FkZXJDbGllbnQtPnNl
dEZyYW1lKG1fZnJhbWUpOwotCi0gICAgbV9wYWdlLT5tYWluRnJhbWUoKS5pbml0KCk7Ci0KLSAg
ICBpZiAodmlldygpKSB7Ci0gICAgICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICAgICAgZnJhbWVS
ZWN0KCZ3aW5kb3dSZWN0KTsKLSAgICAgICAgdmlldygpLT5yZXNpemUoSW50UmVjdCh3aW5kb3dS
ZWN0KS5zaXplKCkpOwotICAgIH0KLX0KLQotV2ViVmlldzo6fldlYlZpZXcoKQotewotICAgIGRl
bGV0ZSBtX3BhZ2U7Ci0gICAgRGVzdHJveVdpbmRvdyhtX3dpbmRvd0hhbmRsZSk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6aW5pdGlhbGl6ZShISU5TVEFOQ0UgaW5zdGFuY2VIYW5kbGUpCi17Ci0gICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgV1RGOjppbml0aWFsaXplTWFpblRocmVh
ZCgpOwotICAgIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0aWFsaXplKCk7Ci0KLSAgICBX
ZWJDb3JlOjpzZXRJbnN0YW5jZUhhbmRsZShpbnN0YW5jZUhhbmRsZSk7Ci0KLSAgICBXTkRDTEFT
UyB3YzsKLSAgICB3Yy5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2MubHBmbldu
ZFByb2MgICAgPSBXZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYzsKLSAgICB3Yy5jYkNsc0V4dHJhICAg
ICA9IDA7Ci0gICAgd2MuY2JXbmRFeHRyYSAgICAgPSBzaXplb2Yodm9pZCAqKTsKLSAgICB3Yy5o
SW5zdGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlOwotICAgIHdjLmhJY29uICAgICAgICAgID0g
MDsKLSAgICB3Yy5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAg
ICB3Yy5oYnJCYWNrZ3JvdW5kICA9IDA7Ci0gICAgd2MubHBzek1lbnVOYW1lICAgPSAwOwotICAg
IHdjLmxwc3pDbGFzc05hbWUgID0ga1dlYlZpZXdXaW5kb3dDbGFzc05hbWU7Ci0KLSAgICBSZWdp
c3RlckNsYXNzKCZ3Yyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYW51cCgpCi17Ci0gICAgVW5y
ZWdpc3RlckNsYXNzKGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lLCBXZWJDb3JlOjppbnN0YW5jZUhh
bmRsZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxGcmFtZT4gV2ViVmlldzo6Y3JlYXRlRnJhbWUoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsCi0gICAgYm9vbCAvKmFsbG93c1Nj
cm9sbGluZyovLCBpbnQgLyptYXJnaW5XaWR0aCovLCBpbnQgLyptYXJnaW5IZWlnaHQqLywgRnJh
bWUqIHBhcmVudEZyYW1lKQotewotICAgIFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRSAq
bG9hZGVyQ2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRSh0aGlzKTsK
LSAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZSwgb3du
ZXJFbGVtZW50LCBsb2FkZXJDbGllbnQpOwotICAgIGxvYWRlckNsaWVudC0+c2V0RnJhbWUoY2hp
bGRGcmFtZS5nZXQoKSk7Ci0KLSAgICBwYXJlbnRGcmFtZS0+dHJlZSgpLmFwcGVuZENoaWxkKGNo
aWxkRnJhbWUpOwotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS5zZXROYW1lKG5hbWUpOwotICAgIGNo
aWxkRnJhbWUtPmluaXQoKTsKLQotICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5
IGhhdmUgcnVuIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBw
YWdlIGFscmVhZHkuCi0gICAgaWYgKCFjaGlsZEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1
cmwsIHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsKLQotICAgIC8vIFRoZSBmcmFtZSdzIG9u
bG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAg
aWYgKCFjaGlsZEZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnJ1bkph
dmFTY3JpcHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgV2ViVmlldzo6cnVuSmF2YVNjcmlwdFByb21wdChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWV3
OjpmcmFtZVJlY3QoUkVDVCogcmVjdCkgY29uc3QKLXsKLSAgICBHZXRXaW5kb3dSZWN0KG1fd2lu
ZG93SGFuZGxlLCByZWN0KTsKLX0KLQotRnJhbWVWaWV3KiBXZWJWaWV3Ojp2aWV3KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnZpZXcoKSA6IDA7Ci19Ci0KLXZvaWQg
V2ViVmlldzo6bG9hZChMUENXU1RSIHVybCkKLXsKLSAgICBsb2FkKFN0cmluZyh1cmwpKTsKLX0K
LQotdm9pZCBXZWJWaWV3Ojpsb2FkKGNvbnN0IFN0cmluZyAmdXJsKQotewotICAgIGxvYWQoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0KHVybCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmxvYWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0ICZyZXF1ZXN0KQotewotICAgIGZyYW1lKCktPmxv
YWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdChmcmFtZSgpLCByZXF1ZXN0KSk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6cmVsb2FkKCkKLXsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS5yZWxvYWQoKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpzdG9wKCkKLXsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS5zdG9w
QWxsTG9hZGVycygpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBoREMsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdmlldygpOwot
ICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNsaXBSZ24g
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55
KCksIGNsaXBSZWN0Lm1heFgoKSwgY2xpcFJlY3QubWF4WSgpKSk7Ci0gICAgU2VsZWN0Q2xpcFJn
bihoREMsIGNsaXBSZ24uZ2V0KCkpOwotCi0gICAgZnJhbWVWaWV3LT51cGRhdGVMYXlvdXRBbmRT
dHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoaERDKTsK
LSAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgY2xpcFJlY3QpOwotfQotCi1ib29sIFdlYlZpZXc6
OmhhbmRsZVBhaW50KEhXTkQgaFduZCkKLXsKLSAgICBSRUNUIHVwZGF0ZVJlY3Q7Ci0gICAgaWYg
KCFHZXRVcGRhdGVSZWN0KGhXbmQsICZ1cGRhdGVSZWN0LCBmYWxzZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFBBSU5UU1RSVUNUIHBzOwotICAgIEhEQyBoREMgPSBCZWdpblBhaW50
KG1fd2luZG93SGFuZGxlLCAmcHMpOwotCi0gICAgSW50UmVjdCBjbGlwUmVjdCh1cGRhdGVSZWN0
KTsKLQotICAgIGlmIChtX2VuYWJsZURvdWJsZUJ1ZmZlcikgewotICAgICAgICBpZiAoIW1fZG91
YmxlQnVmZmVyREMpIHsKLSAgICAgICAgICAgIFJFQ1QgcmNDbGllbnQ7Ci0gICAgICAgICAgICBH
ZXRDbGllbnRSZWN0KG1fd2luZG93SGFuZGxlLCAmcmNDbGllbnQpOwotCi0gICAgICAgICAgICBt
X2RvdWJsZUJ1ZmZlckRDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoaERD
KSk7Ci0gICAgICAgICAgICBtX2RvdWJsZUJ1ZmZlckJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChoREMsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0
b20pKTsKLSAgICAgICAgICAgIFNlbGVjdE9iamVjdChtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBt
X2RvdWJsZUJ1ZmZlckJpdG1hcC5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYWludCht
X2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVjdCk7Ci0KLSAgICAgICAgQml0Qmx0KGhEQywg
Y2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0Lmhl
aWdodCgpLCBtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0Lnko
KSwgU1JDQ09QWSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhaW50KGhEQywgY2xpcFJlY3QpOwot
Ci0gICAgRW5kUGFpbnQobV93aW5kb3dIYW5kbGUsICZwcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzdGF0aWMgTE9ORyBnbG9i
YWxDbGlja0NvdW50OwotICAgIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQcmV2UG9pbnQ7Ci0gICAg
c3RhdGljIE1vdXNlQnV0dG9uIGdsb2JhbFByZXZCdXR0b247Ci0gICAgc3RhdGljIExPTkcgZ2xv
YmFsUHJldk1vdXNlRG93blRpbWU7Ci0KLSAgICAvLyBDcmVhdGUgb3VyIGV2ZW50LgotICAgIC8v
IE9uIFdNX01PVVNFTEVBVkUgd2UgbmVlZCB0byBjcmVhdGUgYSBtb3VzZW91dCBldmVudCwgc28g
d2UgZm9yY2UgdGhlIHBvc2l0aW9uCi0gICAgLy8gb2YgdGhlIGV2ZW50IHRvIGJlIGF0IChNSU5T
SE9SVCwgTUlOU0hPUlQpLgotICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50KGhXbmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIGJvb2wgaW5zaWRlVGhyZXNob2xkID0g
YWJzKGdsb2JhbFByZXZQb2ludC54KCkgLSBtb3VzZUV2ZW50LnBvc2l0aW9uKCkueCgpKSA8IDo6
R2V0U3lzdGVtTWV0cmljcyhTTV9DWERPVUJMRUNMSykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGFicyhnbG9iYWxQcmV2UG9pbnQueSgpIC0gbW91c2VFdmVudC5wb3NpdGlvbigpLnko
KSkgPCA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1lET1VCTEVDTEspOwotICAgIExPTkcgbWVzc2Fn
ZVRpbWUgPSAwOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKG1lc3NhZ2Ug
PT0gV01fTEJVVFRPTkRPV04gfHwgbWVzc2FnZSA9PSBXTV9NQlVUVE9ORE9XTiB8fCBtZXNzYWdl
ID09IFdNX1JCVVRUT05ET1dOKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IHN1cmUgaWYg
dGhpcyBpcyB0aGUgInJpZ2h0IiB3YXkgdG8gZG8gdGhpcwotICAgICAgICAvLyBidXQgd2l0aG91
dCB0aGlzIGNhbGwsIHdlIG5ldmVyIGJlY29tZSBmb2N1c2VkIHNpbmNlIHdlIGRvbid0IGFsbG93
Ci0gICAgICAgIC8vIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIG1vdXNlIGV2ZW50cy4KLSAgICAg
ICAgU2V0Rm9jdXMobV93aW5kb3dIYW5kbGUpOwotCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBtb3ZlRXZlbnQoaFduZCwgV01fTU9VU0VNT1ZFLCAwLCBsUGFyYW0sIGZhbHNlKTsKLSAgICAg
ICAgbW92ZUV2ZW50LnNldENsaWNrQ291bnQoMCk7Ci0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQobW92ZUV2ZW50KTsKLQotICAg
ICAgICAvLyBBbHdheXMgc3RhcnQgY2FwdHVyaW5nIGV2ZW50cyB3aGVuIHRoZSBtb3VzZSBnb2Vz
IGRvd24gaW4gb3VyIEhXTkQuCi0gICAgICAgIFNldENhcHR1cmUobV93aW5kb3dIYW5kbGUpOwot
Ci0gICAgICAgIGlmIChpbnNpZGVUaHJlc2hvbGQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9PSBn
bG9iYWxQcmV2QnV0dG9uKQotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCsrOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgY2xpY2sgY291bnQuCi0gICAgICAgICAg
ICBnbG9iYWxDbGlja0NvdW50ID0gMTsKLSAgICAgICAgZ2xvYmFsUHJldk1vdXNlRG93blRpbWUg
PSBtZXNzYWdlVGltZTsKLSAgICAgICAgZ2xvYmFsUHJldkJ1dHRvbiA9IG1vdXNlRXZlbnQuYnV0
dG9uKCk7Ci0gICAgICAgIGdsb2JhbFByZXZQb2ludCA9IG1vdXNlRXZlbnQucG9zaXRpb24oKTsK
LQotICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xvYmFsQ2xpY2tDb3VudCk7Ci0g
ICAgICAgIGhhbmRsZWQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhhbmRs
ZU1vdXNlUHJlc3NFdmVudChtb3VzZUV2ZW50KTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgPT0g
V01fTEJVVFRPTkRCTENMSyB8fCBtZXNzYWdlID09IFdNX01CVVRUT05EQkxDTEsgfHwgbWVzc2Fn
ZSA9PSBXTV9SQlVUVE9OREJMQ0xLKSB7Ci0gICAgICAgIGdsb2JhbENsaWNrQ291bnQrKzsKLSAg
ICAgICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGdsb2JhbENsaWNrQ291bnQpOwotICAgICAg
ICBoYW5kbGVkID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3Vz
ZVByZXNzRXZlbnQobW91c2VFdmVudCk7Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlID09IFdNX0xC
VVRUT05VUCB8fCBtZXNzYWdlID09IFdNX01CVVRUT05VUCB8fCBtZXNzYWdlID09IFdNX1JCVVRU
T05VUCkgewotICAgICAgICAvLyBSZWNvcmQgdGhlIGdsb2JhbCBwb3NpdGlvbiBhbmQgdGhlIGJ1
dHRvbiBvZiB0aGUgdXAuCi0gICAgICAgIGdsb2JhbFByZXZCdXR0b24gPSBtb3VzZUV2ZW50LmJ1
dHRvbigpOwotICAgICAgICBnbG9iYWxQcmV2UG9pbnQgPSBtb3VzZUV2ZW50LnBvc2l0aW9uKCk7
Ci0gICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9iYWxDbGlja0NvdW50KTsKLSAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZVJlbGVh
c2VFdmVudChtb3VzZUV2ZW50KTsKLSAgICAgICAgUmVsZWFzZUNhcHR1cmUoKTsKLSAgICB9IGVs
c2UgaWYgKG1lc3NhZ2UgPT0gV01fTU9VU0VNT1ZFKSB7Ci0gICAgICAgIGlmICghaW5zaWRlVGhy
ZXNob2xkKQotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIG1vdXNl
RXZlbnQuc2V0Q2xpY2tDb3VudChnbG9iYWxDbGlja0NvdW50KTsKLSAgICAgICAgaGFuZGxlZCA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91c2VNb3ZlZChtb3VzZUV2ZW50
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5k
bGVNb3VzZVdoZWVsKEhXTkQgaFduZCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9v
bCBpc0hvcml6b250YWwpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoaFdu
ZCwgd1BhcmFtLCBsUGFyYW0sIGlzSG9yaXpvbnRhbCk7Ci0gICAgcmV0dXJuIGZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci19Ci0KLWJvb2wgV2Vi
Vmlldzo6aGFuZGxlS2V5RG93bihXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRh
LCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgdmlydHVhbEtleUNvZGUsIGtleURhdGEs
IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIHN5c3RlbUtleURvd24pOwotICAgIGJvb2wgaGFu
ZGxlZCA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGtleUV2ZW50KTsKLQotICAgIC8v
IFRoZXNlIGV2ZW50cyBjYW5ub3QgYmUgY2FuY2VsZWQsIGFuZCB3ZSBoYXZlIG5vIGRlZmF1bHQg
aGFuZGxpbmcgZm9yIHRoZW0uCi0gICAgLy8gRklYTUU6IG1hdGNoIElFIGxpc3QgbW9yZSBjbG9z
ZWx5LCBzZWUgPGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY5
MzguYXNweD4uCi0gICAgaWYgKHN5c3RlbUtleURvd24gJiYgdmlydHVhbEtleUNvZGUgIT0gVktf
UkVUVVJOKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFuZGxlZCkgewotICAg
ICAgICBNU0cgbXNnOwotICAgICAgICBpZiAoIXN5c3RlbUtleURvd24pCi0gICAgICAgICAgICA6
OlBlZWtNZXNzYWdlKCZtc2csIG1fd2luZG93SGFuZGxlLCBXTV9DSEFSLCBXTV9DSEFSLCBQTV9S
RU1PVkUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxl
ZDsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlQcmVzcyhXUEFSQU0gY2hhckNvZGUsIExQ
QVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgY2hhckNvZGUsIGtl
eURhdGEsIFBsYXRmb3JtRXZlbnQ6OkNoYXIsIHN5c3RlbUtleURvd24pOwotICAgIC8vIElFIGRv
ZXMgbm90IGRpc3BhdGNoIGtleXByZXNzIGV2ZW50IGZvciBXTV9TWVNDSEFSLgotICAgIGlmIChz
eXN0ZW1LZXlEb3duKQotICAgICAgICByZXR1cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxl
QWNjZXNzS2V5KGtleUV2ZW50KTsKLSAgICBpZiAoZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZl
bnQoa2V5RXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlVcChXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQ
QVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50IGtleUV2ZW50KG1fd2luZG93SGFuZGxlLCB2aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwg
UGxhdGZvcm1FdmVudDo6S2V5VXAsIHN5c3RlbUtleURvd24pOwotCi0gICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBy
ZXR1cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoa2V5RXZlbnQpOwotfQotCi1MUkVT
VUxUIFdlYlZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICBp
ZiAodmlldygpKSB7Ci0gICAgICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgICAgICBjYXNlIFdN
X1BBSU5UOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZVBhaW50KGhXbmQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0gICAgICAgIGNhc2Ug
V01fTEJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046Ci0gICAgICAgIGNh
c2UgV01fUkJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoKLSAgICAg
ICAgY2FzZSBXTV9NQlVUVE9OREJMQ0xLOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6
Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoK
LSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICBpZiAodmlldygpLT5kaWRG
aXJzdExheW91dCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVNb3VzZUV2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICAgICAgICAgIGlmICh2aWV3KCktPmRpZEZp
cnN0TGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZU1vdXNlV2hlZWwo
aFduZCwgd1BhcmFtLCBsUGFyYW0sIHdQYXJhbSAmIE1LX1NISUZUKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKLSAgICAgICAgICAgIGhhbmRsZWQg
PSBoYW5kbGVLZXlEb3duKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgV01fS0VZRE9XTjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5k
bGVLZXlEb3duKHdQYXJhbSwgbFBhcmFtLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUtl
eVVwKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgV01fS0VZVVA6Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5VXAod1BhcmFt
LCBsUGFyYW0sIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01f
U1lTQ0hBUjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVLZXlQcmVzcyh3UGFyYW0sIGxQ
YXJhbSwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX0NIQVI6
Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5UHJlc3Mod1BhcmFtLCBsUGFyYW0sIGZh
bHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAg
ICAgICAgICBQb3N0TWVzc2FnZShtX3BhcmVudFdpbmRvd0hhbmRsZSwgV01fQ0xPU0UsIHdQYXJh
bSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGhhbmRsZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkNjk2Ni4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVy
IDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdfaAotI2RlZmluZSBXZWJWaWV3X2gKLQot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
RnJhbWU7Ci1jbGFzcyBQYWdlOwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OwotY2xhc3MgVVJMOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotfQotCi1jbGFz
cyBXZWJWaWV3IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZlYXR1cmVzIHsKLSAgICAgICAgTm9GZWF0
dXJlID0gMCwKLSAgICAgICAgRW5hYmxlRG91YmxlQnVmZmVyaW5nID0gMSA8PCAwCi0gICAgfTsK
LQotICAgIFdlYlZpZXcoSFdORCBod25kLCB1bnNpZ25lZCBmZWF0dXJlcyA9IEVuYWJsZURvdWJs
ZUJ1ZmZlcmluZyk7Ci0gICAgfldlYlZpZXcoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoSElOU1RBTkNFIGluc3RhbmNlSGFuZGxlKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7
Ci0KLSAgICBIV05EIHdpbmRvd0hhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93SGFuZGxl
OyB9Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsg
fQotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KLSAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKLQotICAgIHZvaWQgbG9hZChMUENX
U1RSIHVybCk7Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFdURjo6U3RyaW5nICZ1cmwpOwotICAgIHZv
aWQgbG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgJnJlcXVlc3QpOwotICAgIHZv
aWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICB2b2lkIGZyYW1lUmVjdChSRUNU
KiByZWN0KSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNyZWF0ZUZy
YW1lKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3Jl
OjpIVE1MRnJhbWVPd25lckVsZW1lbnQqLCAKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHJl
ZmVycmVyLCBib29sIGFsbG93U2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5I
ZWlnaHQsIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0
IERpYWxvZwotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFdURjo6U3RyaW5nJiBt
ZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFdURjo6U3RyaW5n
JiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgV1RGOjpTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5n
JiByZXN1bHQpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHdlYlZp
ZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKTsKLSAgICBMUkVTVUxUIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwotCi0gICAgYm9vbCBoYW5kbGVQYWludChIV05EIGhXbmQpOwotICAgIGJvb2wgaGFuZGxlTW91
c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSk7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVdoZWVsKEhXTkQgaFduZCwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSwgYm9vbCBpc0hvcml6b250YWwpOwotICAgIGJvb2wgaGFuZGxlS2V5
RG93bihXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtl
eURvd24pOwotICAgIGJvb2wgaGFuZGxlS2V5UHJlc3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0g
a2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKTsKLSAgICBib29sIGhhbmRsZUtleVVwKFdQQVJB
TSB2aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bik7Ci0K
LSAgICB2b2lkIHBhaW50KEhEQyBoREMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0
KTsKLQotICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwotICAgIFdlYkNvcmU6OlBhZ2UqIG1f
cGFnZTsKLSAgICBIV05EIG1fcGFyZW50V2luZG93SGFuZGxlOwotICAgIEhXTkQgbV93aW5kb3dI
YW5kbGU7Ci0gICAgYm9vbCBtX2VuYWJsZURvdWJsZUJ1ZmZlcjsKLSAgICBHRElPYmplY3Q8SERD
PiBtX2RvdWJsZUJ1ZmZlckRDOwotICAgIEdESU9iamVjdDxIQklUTUFQPiBtX2RvdWJsZUJ1ZmZl
ckJpdG1hcDsKLX07Ci0KLSNlbmRpZiAvLyBXZWJWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zV2luQ0UuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNFLmNtYWtl
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3YTQ4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCww
IEBACi1pbmNsdWRlKE9wdGlvbnNXaW5kb3dzKQotCi1zZXQoUE9SVF9GQUxMQkFDSyBXaW4pCi0K
LWFkZF9kZWZpbml0aW9ucygtRF9DRV9DUlRfQUxMT1dfV0lOX01JTk1BWCkKLWFkZF9kZWZpbml0
aW9ucygtRFdURl9VU0VfRVhQT1JUX01BQ1JPUz0wKQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1VT
RV9XSU5HREk9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfV0lOSU5FVD0xKQotYWRkX2Rl
ZmluaXRpb25zKC1EV0lOQ0VCQVNJQykKLWFkZF9kZWZpbml0aW9ucygtREpTX05PX0VYUE9SVCkK
LWFkZF9kZWZpbml0aW9ucygtREhBVkVfQUNDRVNTSUJJTElUWT0wKQotYWRkX2RlZmluaXRpb25z
KC1ESlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT049MHgyMDAwMDApCi0KLWlmIChO
T1QgM1JEUEFSVFlfRElSKQotICAgIGlmIChFWElTVFMgJEVOVntXRUJLSVRUSElSRFBBUlRZRElS
fSkKLSAgICAgICAgc2V0KDNSRFBBUlRZX0RJUiAkRU5We1dFQktJVFRISVJEUEFSVFlESVJ9KQot
ICAgIGVsc2UgKCkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiWW91IG11c3QgcHJvdmlk
ZSBhIHRoaXJkIHBhcnR5IGRpcmVjdG9yeSBmb3IgV2luQ0UgcG9ydC4iKQotICAgIGVuZGlmICgp
Ci1lbmRpZiAoKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7M1JEUEFSVFlfRElSfS9jZS1jb21w
YXQpCi1hZGRfc3ViZGlyZWN0b3J5KCR7M1JEUEFSVFlfRElSfSAiJHtDTUFLRV9DVVJSRU5UX0JJ
TkFSWV9ESVJ9LzNyZHBhcnR5IikKLQotV0VCS0lUX09QVElPTl9CRUdJTigpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQT1JUIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVFBESVIgT0ZGKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOU1BFQ1RPUiBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBPTikKLVdFQktJVF9PUFRJT05f
RU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UgYi9T
b3VyY2UvY21ha2UvV2ViS2l0UGFja2FnaW5nLmNtYWtlCmluZGV4IDVmOWIzMTguLjk2OWRjMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGlmIChO
T1QgREVGSU5FRCBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTKQogICAgICAgICAgICAgIi9xdC8i
ICIvUXQvIiAicXRcXFxcLiIgIlF0XFxcXC4iCiAgICAgICAgICAgICAiL3F0NC8iICIvUXQ0LyIg
InF0NFxcXFwuIiAiUXQ0XFxcXC4iCiAgICAgICAgICAgICAiL3dpbi8iICIvV2luLyIgIndpblxc
XFwuIiAiV2luXFxcXC4iCi0gICAgICAgICAgICAiL3dpbmNlLyIgIi9XaW5jZS8iICJ3aW5jZVxc
XFwuIiAiV2luY2VcXFxcLiIKICAgICAgICAgICAgICIvd3hjb2RlLyIgIi9XeGNvZGUvIiAid3hj
b2RlXFxcXC4iICJXeGNvZGVcXFxcLiIKICAgICAgICAgICAgICIvV2ViS2l0TGlicmFyaWVzLyIK
ICAgICAgICAgICAgICIvRW5nbGlzaFxcXFwubHByb2ovIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5weSBiL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQucHkKaW5k
ZXggNDQxZmExOS4uZDNjYTkxYiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5weQorKysgYi9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkLnB5CkBAIC01MSw3ICs1MSw2
IEBAIGRlZiBfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJnZXRfcGxhdGZvcm0sIGZpbGUp
OgogICAgICAgICAoIm9wZW5nbCIsIFtdKSwKICAgICAgICAgKCJvcGVudHlwZSIsIFtdKSwKICAg
ICAgICAgKCJvcGVudmciLCBbXSksCi0gICAgICAgICgid2luY2UiLCBbXSksCiAgICAgICAgICgi
d3giLCBbXSksCiAKICAgICAgICAgIyBEaXJlY3RvcmllcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGJ1
aWxkcyBvbiBvbmx5IHNvbWUgYm90cy4KQEAgLTg0LDcgKzgzLDYgQEAgZGVmIF9zaG91bGRfZmls
ZV90cmlnZ2VyX2J1aWxkKHRhcmdldF9wbGF0Zm9ybSwgZmlsZSk6CiAgICAgICAgIChyIi9MSUNF
TlNFW14vXSskIiwgW10pLAogICAgICAgICAociJBUk0oPzp2Nyk/XC4oPzpjcHB8aCkkIiwgW10p
LAogICAgICAgICAociJNSVBTXC4oPzpjcHB8aCkkIiwgW10pLAotICAgICAgICAociJXaW5DRVwu
KD86Y3BwfGh8bW0pJCIsIFtdKSwKICAgICAgICAgKHIiXC4oPzpia2x8bWspJCIsIFtdKSwKIAog
ICAgICAgICAjIFBhdHRlcm5zIHRoYXQgc2hvdWxkIHRyaWdnZXIgYnVpbGRzIG9uIG9ubHkgc29t
ZSBib3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRlc3QucHkKaW5kZXggNTI2M2Qz
Yy4uOTk4NzdjNyAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weQorKysgYi9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0ZXN0LnB5CkBAIC00
OSw3ICs0OSw2IEBAIGNsYXNzIFNob3VsZEJ1aWxkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIChbIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9mb28iXSwgWyJt
YWMtbGVvcGFyZCIsICJtYWMtbGlvbiIsICAibWFjLW1vdW50YWlubGlvbiIsICJtYWMtc25vd2xl
b3BhcmQiXSksCiAgICAgICAgIChbIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93
aW4vZm9vIl0sIFtdKSwKICAgICAgICAgKFsiU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIiwgIlNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5o
Il0sIFsibWFjLWxlb3BhcmQiLCAibWFjLWxpb24iLCAgIm1hYy1tb3VudGFpbmxpb24iLCAibWFj
LXNub3dsZW9wYXJkIl0pLAotICAgICAgICAoWyJTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW5DRS5oIl0sIFtdKSwKICAgICAgICAgKFsiVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvTGVha3NWaWV3ZXIvTGVha3NW
aWV3ZXIuanMiXSwgW10pLAogICAgIF0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ01ha2VMaXN0cy50
eHQgYi9Ub29scy9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2ZiMDk2Li40ZDRkNTk3IDEwMDY0NAot
LS0gYS9Ub29scy9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9DTWFrZUxpc3RzLnR4dApAQCAt
MTYsOCArMTYsNiBAQCBlbHNlaWYgKCIke1BPUlR9IiBTVFJFUVVBTCAiR1RLIikKICAgICBpZiAo
RU5BQkxFX1gxMV9UQVJHRVQpCiAgICAgICAgIGFkZF9zdWJkaXJlY3RvcnkoRHVtcFJlbmRlclRy
ZWUvVGVzdE5ldHNjYXBlUGx1Z0luKQogICAgIGVuZGlmICgpCi1lbHNlaWYgKCIke1BPUlR9IiBT
VFJFUVVBTCAiV2luQ0UiKQotICAgIGFkZF9zdWJkaXJlY3RvcnkoV2luQ0VMYXVuY2hlcikKIGVu
ZGlmICgpCiAKIGlmIChFTkFCTEVfV0VCS0lUMiBBTkQgRU5BQkxFX0FQSV9URVNUUykKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxOGRlNWQ5Li44
N2NjYzdiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzkgQEAKKzIwMTQtMDktMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQucHk6CisgICAgICAgIChfc2hv
dWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weToKKyAgICAgICAgKFNob3Vs
ZEJ1aWxkVGVzdCk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
Q29weU1lZGl1bSk6CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
ZGlycy5wbToKKyAgICAgICAgKGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAo
YnVpbHREeWxpYlBhdGhGb3JOYW1lKToKKyAgICAgICAgKGlzQXBwbGVXaW5XZWJLaXQpOgorICAg
ICAgICAobGF1bmNoZXJQYXRoKToKKyAgICAgICAgKGxhdW5jaGVyTmFtZSk6CisgICAgICAgIChz
aG91bGRSZW1vdmVDTWFrZUNhY2hlKToKKyAgICAgICAgKGNtYWtlQmFzZWRQb3J0QXJndW1lbnRz
KToKKyAgICAgICAgKGNtYWtlQmFzZWRQb3J0TmFtZSk6CisgICAgICAgIChpc0NNYWtlQnVpbGQp
OgorICAgICAgICAoaXNXaW5DRSk6IERlbGV0ZWQuCisgICAgICAgIChkZXRlcm1pbmVJc1dpbkNF
KTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHk6CisgICAg
ICAgICh0ZXN0X2FwYWNoZV9jb25maWdfZmlsZV9uYW1lX2Zvcl9wbGF0Zm9ybSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb25maWcuaDoKKyAgICAgICAgKiBXaW5DRUxhdW5jaGVyL0NNYWtl
TGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIFdpbkNFTGF1bmNoZXIvbWFpbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogZ3RrL21hbmlmZXN0LnR4dDoKKwogMjAxNC0wOS0xOSAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gZ2Vu
ZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSBzaG91bGQgcmVjZWl2ZSB0aGUg
bGlzdCBvZiBmaWxlcyBmcm9tIHRoZSBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERhdGFPYmplY3QuY3BwCmluZGV4IGEzMzAzNmIuLjIzNWQ0ODkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAKQEAgLTI2OSw3ICsyNjksNiBAQCBTVERN
RVRIT0RJTVAgRFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRldGMsIFNU
R01FRElVTSogcG1lZGl1bSwgQgogdm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01F
RElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKQog
ewogICAgIHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgY2Fz
ZSBUWU1FRF9IR0xPQkFMOgogICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IHN0YXRpY19jYXN0
PEhHTE9CQUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCwgcEZtdFNyYy0+Y2ZG
b3JtYXQsIDApKTsKICAgICAgICAgYnJlYWs7CkBAIC0yODUsNyArMjg0LDYgQEAgdm9pZCBEUlRE
YXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1l
ZFNyYywgRk9STUFURVQKICAgICBjYXNlIFRZTUVEX0ZJTEU6CiAgICAgICAgIHBNZWRTcmMtPmxw
c3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQT0xFU1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRT
cmMtPmxwc3pGaWxlTmFtZSwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKICAgICBjYXNlIFRZTUVEX0lTVFJFQU06CiAgICAgICAgIHBNZWREZXN0LT5wc3Rt
ID0gcE1lZFNyYy0+cHN0bTsKICAgICAgICAgcE1lZFNyYy0+cHN0bS0+QWRkUmVmKCk7CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CmluZGV4IGQ5NmQ5ODcuLmFiZWE2MTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC05Niw3ICs5
Niw2IEBAIFVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdIFtvcHRpb25zIHRvIHBhc3MgdG8g
YnVpbGQgc3lzdGVtXQogICAtLWVmbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQg
dGhlIEVGTCBwb3J0CiAgIC0tZ3RrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0
aGUgR1RLKyBwb3J0CiAgIC0td2luY2Fpcm8gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB1
c2luZyBDYWlybyAocmF0aGVyIHRoYW4gQ29yZUdyYXBoaWNzKSBvbiBXaW5kb3dzCi0gIC0td2lu
Y2UgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgV2luQ0UgcG9ydAogCiAgIC0t
aW5zcGVjdG9yLWZyb250ZW5kICAgICAgICAgICAgICBDb3B5IFdlYiBJbnNwZWN0b3IgdXNlciBp
bnRlcmZhY2UgcmVzb3VyY2VzIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkKIApAQCAtMjQyLDExICsy
NDEsOSBAQCBpZiAoaXNJbnNwZWN0b3JGcm9udGVuZCgpKSB7CiBpZiAoaXNDTWFrZUJ1aWxkKCkp
IHsKIAogICAgICMgQnkgZGVmYXVsdCB3ZSBidWlsZCB1c2luZyBhbGwgb2YgdGhlIGF2YWlsYWJs
ZSBDUFVzLgotICAgIGlmICghaXNXaW5DRSgpKSB7Ci0gICAgICAgICRtYWtlQXJncyAuPSAoJG1h
a2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAuIG51bWJlck9mQ1BVcygpIGlmICRtYWtlQXJncyAh
fiAvLWpccypcZCsvOwotICAgICAgICBteSAkbWF4Q1BVTG9hZCA9IG1heENQVUxvYWQoKSBpZiAk
bWFrZUFyZ3MgIX4gLy1sXHMqXGQrXC4/XGQqLzsKLSAgICAgICAgJG1ha2VBcmdzIC49ICIgLWwi
IC4gbWF4Q1BVTG9hZCgpIGlmIGRlZmluZWQgJG1heENQVUxvYWQ7Ci0gICAgfQorICAgICRtYWtl
QXJncyAuPSAoJG1ha2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAuIG51bWJlck9mQ1BVcygpIGlm
ICRtYWtlQXJncyAhfiAvLWpccypcZCsvOworICAgIG15ICRtYXhDUFVMb2FkID0gbWF4Q1BVTG9h
ZCgpIGlmICRtYWtlQXJncyAhfiAvLWxccypcZCtcLj9cZCovOworICAgICRtYWtlQXJncyAuPSAi
IC1sIiAuIG1heENQVUxvYWQoKSBpZiBkZWZpbmVkICRtYXhDUFVMb2FkOwogCiAgICAgIyBXZSBy
ZW1vdmUgQ01ha2VDYWNoZSB0byBhdm9pZCB0aGUgYm90cyB0byByZXVzZSBjYWNoZWQgZmxhZ3Mg
d2hlbgogICAgICMgd2UgZW5hYmxlIG5ldyBmZWF0dXJlcy4gVGhpcyBmb3JjZXMgYSByZWNvbmZp
Z3VyYXRpb24uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3Rv
cnkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkKaW5kZXggMGEyMDdmYy4u
NzVhMDBmZmYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVjdG9y
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkKQEAgLTUwLDcgKzUw
LDYgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10KICAgLS1lZmwgICAgICAgICAgICAg
ICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIEVGTCBwb3J0CiAgIC0tZ3RrICAg
ICAgICAgICAgICAgICBGaW5kIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBHVEsrIHBvcnQK
ICAgLS13aW5jYWlybyAgICAgICAgICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdXNp
bmcgQ2Fpcm8gKHJhdGhlciB0aGFuIENvcmVHcmFwaGljcykgb24gV2luZG93cwotICAtLXdpbmNl
ICAgICAgICAgICAgICAgRmluZCB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciB0aGUgV2luQ0UgcG9y
dAogCiBFaXRoZXIgLS1jb25maWd1cmF0aW9uIG9yIC0tdG9wLWxldmVsIGlzIHJlcXVpcmVkLgog
RU9GCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdGRpcnMucG0KaW5kZXggODk4MGUzYi4uMjhiNGQ2MiAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5w
bQpAQCAtMTA2LDcgKzEwNiw2IEBAIG15ICRubVBhdGg7CiBteSAkb3NYVmVyc2lvbjsKIG15ICRn
ZW5lcmF0ZURzeW07CiBteSAkaXNHdGs7Ci1teSAkaXNXaW5DRTsKIG15ICRpc1dpbkNhaXJvOwog
bXkgJGlzV2luNjQ7CiBteSAkaXNFZmw7CkBAIC0zOTcsNyArMzk2LDYgQEAgc3ViIGFyZ3VtZW50
c0ZvckNvbmZpZ3VyYXRpb24oKQogICAgIHB1c2goQGFyZ3MsICctLWd0aycpIGlmIGlzR3RrKCk7
CiAgICAgcHVzaChAYXJncywgJy0tZWZsJykgaWYgaXNFZmwoKTsKICAgICBwdXNoKEBhcmdzLCAn
LS13aW5jYWlybycpIGlmIGlzV2luQ2Fpcm8oKTsKLSAgICBwdXNoKEBhcmdzLCAnLS13aW5jZScp
IGlmIGlzV2luQ0UoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1pbnNwZWN0b3ItZnJvbnRlbmQnKSBp
ZiBpc0luc3BlY3RvckZyb250ZW5kKCk7CiAgICAgcmV0dXJuIEBhcmdzOwogfQpAQCAtODExLDkg
KzgwOSw2IEBAIHN1YiBidWlsdER5bGliUGF0aEZvck5hbWUKICAgICBpZiAoaXNFZmwoKSkgewog
ICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci9saWIvbGliZXdlYmtpdDIu
c28iOwogICAgIH0KLSAgICBpZiAoaXNXaW5DRSgpKSB7Ci0gICAgICAgIHJldHVybiAiJGNvbmZp
Z3VyYXRpb25Qcm9kdWN0RGlyLyRsaWJyYXJ5TmFtZSI7Ci0gICAgfQogICAgIGlmIChpc0lPU1dl
YktpdCgpKSB7CiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLyRsaWJy
YXJ5TmFtZS5mcmFtZXdvcmsvJGxpYnJhcnlOYW1lIjsKICAgICB9CkBAIC05NjIsMTggKzk1Nyw2
IEBAIHN1YiBpc0d0aygpCiAgICAgcmV0dXJuICRpc0d0azsKIH0KIAotc3ViIGlzV2luQ0UoKQot
ewotICAgIGRldGVybWluZUlzV2luQ0UoKTsKLSAgICByZXR1cm4gJGlzV2luQ0U7Ci19Ci0KLXN1
YiBkZXRlcm1pbmVJc1dpbkNFKCkKLXsKLSAgICByZXR1cm4gaWYgZGVmaW5lZCgkaXNXaW5DRSk7
Ci0gICAgJGlzV2luQ0UgPSBjaGVja0ZvckFyZ3VtZW50QW5kUmVtb3ZlRnJvbUFSR1YoIi0td2lu
Y2UiKTsKLX0KLQogIyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBkZWJpYW4sIHVidW50dSwgbGluc3Bp
cmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgogc3ViIGlzRGViaWFuQmFzZWQoKQogewpAQCAtMTEx
MCw3ICsxMDkzLDcgQEAgc3ViIGlzQXBwbGVNYWNXZWJLaXQoKQogCiBzdWIgaXNBcHBsZVdpbldl
YktpdCgpCiB7Ci0gICAgcmV0dXJuIChpc0N5Z3dpbigpIHx8IGlzV2luZG93cygpKSAmJiAhaXNX
aW5DYWlybygpICYmICFpc0d0aygpICYmICFpc1dpbkNFKCk7CisgICAgcmV0dXJuIChpc0N5Z3dp
bigpIHx8IGlzV2luZG93cygpKSAmJiAhaXNXaW5DYWlybygpICYmICFpc0d0aygpOwogfQogCiBz
dWIgaU9TU2ltdWxhdG9yRGV2aWNlc1BhdGgKQEAgLTEzNDMsNyArMTMyNiw3IEBAIHN1YiByZWxh
dGl2ZVNjcmlwdHNEaXIoKQogc3ViIGxhdW5jaGVyUGF0aCgpCiB7CiAgICAgbXkgJHJlbGF0aXZl
U2NyaXB0c1BhdGggPSByZWxhdGl2ZVNjcmlwdHNEaXIoKTsKLSAgICBpZiAoaXNHdGsoKSB8fCBp
c0VmbCgpIHx8IGlzV2luQ0UoKSkgeworICAgIGlmIChpc0d0aygpIHx8IGlzRWZsKCkpIHsKICAg
ICAgICAgcmV0dXJuICIkcmVsYXRpdmVTY3JpcHRzUGF0aC9ydW4tbGF1bmNoZXIiOwogICAgIH0g
ZWxzaWYgKGlzQXBwbGVXZWJLaXQoKSkgewogICAgICAgICByZXR1cm4gIiRyZWxhdGl2ZVNjcmlw
dHNQYXRoL3J1bi1zYWZhcmkiOwpAQCAtMTM1OCw4ICsxMzQxLDYgQEAgc3ViIGxhdW5jaGVyTmFt
ZSgpCiAgICAgICAgIHJldHVybiAiU2FmYXJpIjsKICAgICB9IGVsc2lmIChpc0FwcGxlV2luV2Vi
S2l0KCkpIHsKICAgICAgICAgcmV0dXJuICJXaW5MYXVuY2hlciI7Ci0gICAgfSBlbHNpZiAoaXNX
aW5DRSgpKSB7Ci0gICAgICAgIHJldHVybiAiV2luQ0VMYXVuY2hlciI7CiAgICAgfQogfQogCkBA
IC0xNzAwLDkgKzE2ODEsNiBAQCBzdWIgY21ha2VDYWNoZVBhdGgoKQogc3ViIHNob3VsZFJlbW92
ZUNNYWtlQ2FjaGUoQCkKIHsKICAgICBteSAoJGNhY2hlRmlsZVBhdGgsIEBidWlsZEFyZ3MpID0g
QF87Ci0gICAgaWYgKGlzV2luQ0UoKSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAg
ICBpZiAoIWlzR3RrKCkpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0xODk0LDIxICsxODcyLDE5
IEBAIHN1YiBidWlsZENNYWtlUHJvamVjdE9yRXhpdCgkJCQkQCkKIAogc3ViIGNtYWtlQmFzZWRQ
b3J0QXJndW1lbnRzKCkKIHsKLSAgICByZXR1cm4gKCctRyAiVmlzdWFsIFN0dWRpbyA4IDIwMDUg
U1RBTkRBUkRTREtfNTAwIChBUk1WNEkpIicpIGlmIGlzV2luQ0UoKTsKICAgICByZXR1cm4gKCk7
CiB9CiAKIHN1YiBjbWFrZUJhc2VkUG9ydE5hbWUoKQogewogICAgIHJldHVybiAiRWZsIiBpZiBp
c0VmbCgpOwotICAgIHJldHVybiAiV2luQ0UiIGlmIGlzV2luQ0UoKTsKICAgICByZXR1cm4gIkdU
SyIgaWYgaXNHdGsoKTsKICAgICByZXR1cm4gIiI7CiB9CiAKIHN1YiBpc0NNYWtlQnVpbGQoKQog
ewotICAgIHJldHVybiBpc0VmbCgpIHx8IGlzV2luQ0UoKSB8fCBpc0d0aygpOworICAgIHJldHVy
biBpc0VmbCgpIHx8IGlzR3RrKCk7CiB9CiAKIHN1YiBwcm9tcHRVc2VyCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggMzdhMmE0ZS4uYTE0ZTY4MSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMjMxLDcgKzIzMSw3IEBAIG15IEBm
ZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMiLCBk
ZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZm9udExvYWRFdmVudHNTdXBwb3J0IH0sCiAKICAgICB7
IG9wdGlvbiA9PiAiZnRwZGlyIiwgZGVzYyA9PiAiVG9nZ2xlIEZUUCBEaXJlY3Rvcnkgc3VwcG9y
dCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVFBESVIiLCBkZWZhdWx0ID0+ICFpc1dpbkNF
KCksIHZhbHVlID0+IFwkZnRwRGlyU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
RlRQRElSIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGZ0cERpclN1cHBvcnQgfSwKIAogICAg
IHsgb3B0aW9uID0+ICJmdWxsc2NyZWVuLWFwaSIsIGRlc2MgPT4gIlRvZ2dsZSBGdWxsc2NyZWVu
IEFQSSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZVTExTQ1JFRU5fQVBJIiwg
ZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzRWZsKCkgfHwgaXNHdGsoKSksIHZh
bHVlID0+IFwkZnVsbHNjcmVlbkFQSVN1cHBvcnQgfSwKQEAgLTI3Niw3ICsyNzYsNyBAQCBteSBA
ZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9JTlBVVF9UWVBFX1dFRUsiLCBk
ZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkaW5wdXRUeXBlV2Vla1N1cHBvcnQgfSwKIAogICAgIHsg
b3B0aW9uID0+ICJpbnNwZWN0b3IiLCBkZXNjID0+ICJUb2dnbGUgSW5zcGVjdG9yIHN1cHBvcnQi
LAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5TUEVDVE9SIiwgZGVmYXVsdCA9PiAhaXNXaW5D
RSgpLCB2YWx1ZSA9PiBcJGluc3BlY3RvclN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5B
QkxFX0lOU1BFQ1RPUiIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRpbnNwZWN0b3JTdXBwb3J0
IH0sCiAKICAgICB7IG9wdGlvbiA9PiAibGVnYWN5LW5vdGlmaWNhdGlvbnMiLCBkZXNjID0+ICJU
b2dnbGUgTGVnYWN5IE5vdGlmaWNhdGlvbnMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRsZWdh
Y3lOb3RpZmljYXRpb25zU3VwcG9ydCB9LApAQCAtMzc4LDcgKzM3OCw3IEBAIG15IEBmZWF0dXJl
cyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWR19GT05UUyIsIGRlZmF1bHQgPT4gMSwg
dmFsdWUgPT4gXCRzdmdGb250c1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJzeXN0ZW0t
bWFsbG9jIiwgZGVzYyA9PiAiVG9nZ2xlIHN5c3RlbSBhbGxvY2F0b3IgaW5zdGVhZCBvZiBUQ21h
bGxvYyIsCi0gICAgICBkZWZpbmUgPT4gIlVTRV9TWVNURU1fTUFMTE9DIiwgZGVmYXVsdCA9PiBp
c1dpbkNFKCksIHZhbHVlID0+IFwkc3lzdGVtTWFsbG9jU3VwcG9ydCB9LAorICAgICAgZGVmaW5l
ID0+ICJVU0VfU1lTVEVNX01BTExPQyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzeXN0ZW1N
YWxsb2NTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAidGVtcGxhdGUtZWxlbWVudCIsIGRl
c2MgPT4gIlRvZ2dsZSBIVE1MVGVtcGxhdGVFbGVtZW50IHN1cHBvcnQiLAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCR0
ZW1wbGF0ZUVsZW1lbnRTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9w
b3J0X3Rlc3RjYXNlLnB5CmluZGV4IDY0Y2M3ZjIuLmVlMDI1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC01NzAsNyArNTcwLDcgQEAgTU9D
SyBvdXRwdXQgb2YgY2hpbGQgcHJvY2VzcwogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2Zp
bGVfZm9yX3BsYXRmb3JtKHBvcnQsICdsaW51eDInLCAnZGViaWFuLWh0dHBkLTIuMi5jb25mJykK
IAogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdt
YWMnLCAnYXBhY2hlMi4yLWh0dHBkLmNvbmYnKQotICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmln
X2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdhcGFjaGUyLjItaHR0cGQuY29uZicp
ICAjIHdpbjMyIGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0Zm9ybS4gIEFwcGxlV2luL1dpbkNh
aXJvL1dpbkNFIHBvcnRzIGFsbCB1c2UgY3lnd2luLgorICAgICAgICBzZWxmLl9hc3NlcnRfY29u
ZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdhcGFjaGUyLjItaHR0cGQuY29u
ZicpICAjIHdpbjMyIGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0Zm9ybS4gIEFwcGxlV2luL1dp
bkNhaXJvIHBvcnRzIGFsbCB1c2UgY3lnd2luLgogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmln
X2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdiYXJmJywgJ2FwYWNoZTIuMi1odHRwZC5jb25mJykK
IAogICAgIGRlZiB0ZXN0X3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29uZmlnLmgKaW5kZXggZTVmMTllZi4uNTc5MDlhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9jb25maWcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oCkBAIC01
Myw3ICs1Myw3IEBACiAjaWZuZGVmIF9XSU5TT0NLQVBJXwogI2RlZmluZSBfV0lOU09DS0FQSV8g
Ly8gUHJldmVudCBpbmNsdXNpb24gb2Ygd2luc29jay5oIGluIHdpbmRvd3MuaAogI2VuZGlmCi0j
ZWxpZiAhT1MoV0lOQ0UpCisjZWxzZQogI2RlZmluZSBXVEZfVVNFX0NHIDEKICN1bmRlZiBXVEZf
VVNFX0NBSVJPCiAjdW5kZWYgV1RGX1VTRV9DVVJMCmRpZmYgLS1naXQgYS9Ub29scy9XaW5DRUxh
dW5jaGVyL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvV2luQ0VMYXVuY2hlci9DTWFrZUxpc3RzLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5ZmM2MS4uMDAwMDAwMAotLS0gYS9U
b29scy9XaW5DRUxhdW5jaGVyL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjgg
KzAsMCBAQAotc2V0KFdpbkNFTGF1bmNoZXJfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dF
QktJVF9ESVJ9L3dpbmNlIgotICAgICIke1dFQkNPUkVfRElSfSIKLSAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrIgotICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS90ZXh0IgotICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgIiR7REVSSVZF
RF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgIiR7V1RGX0RJUn0iCi0gICAgIiR7
REVSSVZFRF9TT1VSQ0VTX0RJUn0iCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0iCi0pCi0KLXNl
dChXaW5DRUxhdW5jaGVyX1NPVVJDRVMKLSAgICAke1RPT0xTX0RJUn0vV2luQ0VMYXVuY2hlci9t
YWluLmNwcAotKQotCi1zZXQoV2luQ0VMYXVuY2hlcl9MSUJSQVJJRVMKLSAgICBXZWJLaXQKLSkK
LQotaW5jbHVkZV9kaXJlY3Rvcmllcygke1dpbkNFTGF1bmNoZXJfSU5DTFVERV9ESVJFQ1RPUklF
U30pCi1hZGRfZXhlY3V0YWJsZShXaW5DRUxhdW5jaGVyIFdJTjMyICR7V2luQ0VMYXVuY2hlcl9T
T1VSQ0VTfSkKLWFkZF9kZXBlbmRlbmNpZXMoV2luQ0VMYXVuY2hlciBXZWJLaXQpCi10YXJnZXRf
bGlua19saWJyYXJpZXMoV2luQ0VMYXVuY2hlciAke1dpbkNFTGF1bmNoZXJfTElCUkFSSUVTfSkK
LXNldF90YXJnZXRfcHJvcGVydGllcyhXaW5DRUxhdW5jaGVyIFBST1BFUlRJRVMgRk9MREVSICJU
b29scyIpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoV2luQ0VMYXVuY2hlciBQUk9QRVJUSUVTIFJV
TlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllfRElSfSIpCmRpZmYgLS1naXQg
YS9Ub29scy9XaW5DRUxhdW5jaGVyL21haW4uY3BwIGIvVG9vbHMvV2luQ0VMYXVuY2hlci9tYWlu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmMmE1MS4uMDAwMDAwMAotLS0g
YS9Ub29scy9XaW5DRUxhdW5jaGVyL21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9n
YUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5j
bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLXN0YXRpYyBj
b25zdCBMUENXU1RSIGtNYWluV2luZG93VGl0bGUgPSBMIldlYktpdCBmb3IgV2luQ0UiOwotc3Rh
dGljIGNvbnN0IExQQ1dTVFIga01haW5XaW5kb3dDbGFzc05hbWUgPSBMIk1haW5XaW5kb3dDbGFz
cyI7Ci0KLQotc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1l
c3NhZ2UpIHsKLSAgICBjYXNlIFdNX0RFU1RST1k6Ci0gICAgICAgIFBvc3RRdWl0TWVzc2FnZSgw
KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRGVmV2lu
ZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLWludCBBUElFTlRSWSBfdFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwg
SElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQVFNUUiBscENtZExpbmUsIGludCBuQ21kU2hvdykK
LXsKLSAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcmV2SW5zdGFuY2UpOwotCi0gICAgQ29J
bml0aWFsaXplRXgoMCwgQ09JTklUX01VTFRJVEhSRUFERUQpOwotICAgIFdlYlZpZXc6OmluaXRp
YWxpemUoaEluc3RhbmNlKTsKLQotICAgIExQQ1dTVFIgaG9tZVVybCA9IGxwQ21kTGluZTsKLSAg
ICBib29sIGVuYWJsZURvdWJsZUJ1ZmZlciA9IHRydWU7Ci0gICAgYm9vbCBmdWxsc2NyZWVuID0g
ZmFsc2U7Ci0KLSAgICBpZiAoaG9tZVVybFswXSA9PSAnLScpIHsKLSAgICAgICAgZm9yICg7ICpo
b21lVXJsICYmICpob21lVXJsICE9ICcgJzsgKytob21lVXJsKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKCpob21lVXJsKSB7Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBl
bmFibGVEb3VibGVCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW4gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoKmhvbWVVcmwp
Ci0gICAgICAgICAgICArK2hvbWVVcmw7Ci0gICAgfQotCi0gICAgRFdPUkQgc3R5bGVzID0gV1Nf
VklTSUJMRTsKLQotICAgIGlmICghZnVsbHNjcmVlbikgewotICAgICAgICBzdHlsZXMgfD0gV1Nf
Q0FQVElPTgotICAgICAgICAgICAgfCBXU19NQVhJTUlaRUJPWAotICAgICAgICAgICAgfCBXU19N
SU5JTUlaRUJPWAotICAgICAgICAgICAgfCBXU19PVkVSTEFQUEVECi0gICAgICAgICAgICB8IFdT
X1NZU01FTlUKLSAgICAgICAgICAgIHwgV1NfVEhJQ0tGUkFNRTsKLSAgICB9Ci0KLSAgICBXTkRD
TEFTU1cgd2M7Ci0gICAgd2Muc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJB
VzsKLSAgICB3Yy5scGZuV25kUHJvYyAgICA9IFduZFByb2M7Ci0gICAgd2MuY2JDbHNFeHRyYSAg
ICAgPSAwOwotICAgIHdjLmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Yy5oSW5zdGFuY2UgICAg
ICA9IGhJbnN0YW5jZTsKLSAgICB3Yy5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2MuaEN1cnNv
ciAgICAgICAgPSAwOwotICAgIHdjLmhickJhY2tncm91bmQgID0gc3RhdGljX2Nhc3Q8SEJSVVNI
PihHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCkpOwotICAgIHdjLmxwc3pNZW51TmFtZSAgID0g
MDsKLSAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtNYWluV2luZG93Q2xhc3NOYW1lOwotICAgIFJl
Z2lzdGVyQ2xhc3MoJndjKTsKLQotICAgIEhXTkQgaE1haW5XaW5kb3cgPSBDcmVhdGVXaW5kb3dX
KGtNYWluV2luZG93Q2xhc3NOYW1lLCBrTWFpbldpbmRvd1RpdGxlLCBzdHlsZXMsCi0gICAgICAg
IENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0YW5jZSwgMCk7
Ci0KLSAgICBpZiAoZnVsbHNjcmVlbikgewotICAgICAgICBTZXRXaW5kb3dQb3MoaE1haW5XaW5k
b3csIEhXTkRfVE9QTU9TVCwgMCwgMCwgR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTiksCi0g
ICAgICAgICAgICBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZU0NSRUVOKSwgU1dQX1NIT1dXSU5ET1cp
OwotICAgIH0KLQotICAgIFNob3dXaW5kb3coaE1haW5XaW5kb3csIG5DbWRTaG93KTsKLSAgICBV
cGRhdGVXaW5kb3coaE1haW5XaW5kb3cpOwotCi0gICAgV1RGOjpPd25QdHI8V2ViVmlldz4gd2Vi
VmlldyA9IFdURjo6YWRvcHRQdHIobmV3IFdlYlZpZXcoaE1haW5XaW5kb3csIGVuYWJsZURvdWJs
ZUJ1ZmZlciA/IFdlYlZpZXc6OkVuYWJsZURvdWJsZUJ1ZmZlcmluZyA6IFdlYlZpZXc6Ok5vRmVh
dHVyZSkpOwotICAgIHdlYlZpZXctPmxvYWQoaG9tZVVybCk7Ci0KLSAgICAvLyBNYWluIG1lc3Nh
Z2UgbG9vcDoKLSAgICBNU0cgbXNnOwotICAgIEJPT0wgYlJldDsKLSAgICB3aGlsZSAoYlJldCA9
IEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCkpIHsKLSAgICAgICAgaWYgKGJSZXQgPT0gLTEpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGVycm9yIGFuZCBwb3NzaWJseSBleGl0
LgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsK
LSAgICAgICAgICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHdlYlZpZXcuY2xlYXIoKTsKLSAgICBEZXN0cm95V2luZG93KGhNYWluV2luZG93KTsKLQot
ICAgIFdlYlZpZXc6OmNsZWFudXAoKTsKLSAgICBDb1VuaW5pdGlhbGl6ZSgpOwotCi0gICAgcmV0
dXJuIG1zZy53UGFyYW07Ci19CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvbWFuaWZlc3QudHh0IGIv
VG9vbHMvZ3RrL21hbmlmZXN0LnR4dAppbmRleCAyYWYwNjAyLi44NDIyMzM0IDEwMDY0NAotLS0g
YS9Ub29scy9ndGsvbWFuaWZlc3QudHh0CisrKyBiL1Rvb2xzL2d0ay9tYW5pZmVzdC50eHQKQEAg
LTQsNyArNCw2IEBAIGV4Y2x1ZGUgQ2hhbmdlTG9nCiBleGNsdWRlIE1ha2VmaWxlCiBleGNsdWRl
IFBsYXRmb3JtRWZsLmNtYWtlCiBleGNsdWRlIFBsYXRmb3JtV2luLmNtYWtlCi1leGNsdWRlIFBs
YXRmb3JtV2luQ0UuY21ha2UKIGV4Y2x1ZGUgdGFncyQKIGV4Y2x1ZGUgfiQKIGV4Y2x1ZGUgXC4j
JApAQCAtNDEsNyArNDAsNyBAQCBleGNsdWRlIFwueGNjb25maWckCiBleGNsdWRlIFwueGNvZGVw
cm9qJAogCiAjIEV4Y2x1ZGUgZGlyZWN0b3JpZXMgZnJvbSBvdGhlciBwb3J0cwotZXhjbHVkZSAu
KlwvKG1hY3xpb3N8Y2Z8Y2d8Y29jb2F8Q29jb2F8b2JqY3xhdmZvdW5kYXRpb258Y2F8Y3VybHxl
Zmx8d2lufHdpbmNlKVwvLiokCitleGNsdWRlIC4qXC8obWFjfGlvc3xjZnxjZ3xjb2NvYXxDb2Nv
YXxvYmpjfGF2Zm91bmRhdGlvbnxjYXxjdXJsfGVmbHx3aW4pXC8uKiQKIAogZGlyZWN0b3J5IFNv
dXJjZQogZXhjbHVkZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMKQEAgLTUzLDcgKzUyLDYg
QEAgZXhjbHVkZSBTb3VyY2UvYm1hbGxvYwogZXhjbHVkZSBTb3VyY2UvY21ha2UvRUZMSGVscGVy
cy5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSQKIGV4
Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNXaW5kb3dzLmNtYWtlJAotZXhjbHVkZSBTb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNFLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc0Fw
cGxlV2luLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSQKIGV4
Y2x1ZGUgU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyJAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238373</attachid>
            <date>2014-09-19 05:30:45 -0700</date>
            <delta_ts>2014-09-19 05:41:25 -0700</delta_ts>
            <desc>WIP patch for EWS</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>595136</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzZlMmY5Li5kZjIwNTE0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTQtMDktMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFr
ZToKKwogMjAxNC0wOS0xNyAgUmVuYXRvIE5hZ3kgIDxybmFneUBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgW0VGTF1bR1RLXSBSZW1vdmUgV2ViS2l0MSByZWxhdGVkIGNvZGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCA0MTJlZGY1Li4wYzcwYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmNhY2hlRmx1
c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogY29uZmlnLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbU90aGVyVGhyZWFkKToKKyAgICAgICAgKEpTQzo6c3dhcElmQmFj
a3dhcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNw
cDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorCiAyMDE0LTA5
LTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCByb2xsb3V0IHIxNzM3MzEuIEJyb2tlIG11bHRpcGxlIGJ1aWxkcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCmluZGV4IDA4N2QzMWMu
LjMyMjhhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuaApAQCAtMTExOSw4ICsxMTE5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVudCArIHBhZ2UpOwogCiAgICAgICAg
ICAgICBsaW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAg
ICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FDSEVfU1lOQ19BTEwpOwogI2Vs
c2UKICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTXY3QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TXY3QXNzZW1ibGVyLmgKaW5kZXggZmZjMzA5MC4uNjQ3ZmViMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMjQxMCw4ICsyNDEw
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVu
dCArIHBhZ2UpOwogCiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1cnJlbnQsIGVuZCk7Ci0jZWxp
ZiBPUyhXSU5DRSkKLSAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUsIENBQ0hFX1NZ
TkNfQUxMKTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2lu
ZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCmluZGV4IDI3
NjE2MjQuLjQ1OTY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTM5LDEyICszOSwxMiBA
QAogI2RlZmluZSBXSU5WRVIgMHgwNTAyCiAjZW5kaWYKIAotI2lmICFDT01QSUxFUihNU1ZDN19P
Ul9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUikKIC8v
IFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAjaW5jbHVkZSBvZiBzdGRs
aWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYgX0NSVF9SQU5EX1MKICNk
ZWZpbmUgX0NSVF9SQU5EX1MKICNlbmRpZgotI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9M
T1dFUikgJiYgIU9TKFdJTkNFKQorI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUgog
CiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggMDY1NGZmZS4uMTI2OWYwYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBA
IC02OSwxOCArNjksNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBJZkJhY2t3YXJkcyh2b2lkKiYgYmVnaW4sIHZvaWQq
JiBlbmQpCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKGJlZ2luIDw9IGVuZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIHN0ZDo6c3dhcChiZWdpbiwgZW5kKTsKLSNlbHNlCi1VTlVTRURfUEFSQU0o
YmVnaW4pOwotVU5VU0VEX1BBUkFNKGVuZCk7Ci0jZW5kaWYKLX0KLQogI2lmIE9TKERBUldJTikK
IHR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7CiAjZWxpZiBPUyhXSU5ET1dTKQpA
QCAtMjQ4LDEyICsyMzYsMTAgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJl
bnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIAogICAgIHZvaWQq
IHJlZ2lzdGVyc0JlZ2luID0gJnJlZ2lzdGVyczsKICAgICB2b2lkKiByZWdpc3RlcnNFbmQgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcmVnaXN0ZXJzICsgMSkpKTsKLSAgICBzd2Fw
SWZCYWNrd2FyZHMocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0VuZCk7CiAgICAgY29uc2VydmF0
aXZlUm9vdHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKICAgICB2b2lkKiBzdGFja0JlZ2luID0gc3RhY2tDdXJyZW50Owog
ICAgIHZvaWQqIHN0YWNrRW5kID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCk7Ci0g
ICAgc3dhcElmQmFja3dhcmRzKHN0YWNrQmVnaW4sIHN0YWNrRW5kKTsKICAgICBjb25zZXJ2YXRp
dmVSb290cy5hZGQoc3RhY2tCZWdpbiwgc3RhY2tFbmQsIGppdFN0dWJSb3V0aW5lcywgY29kZUJs
b2Nrcyk7CiB9CiAKQEAgLTQ1Myw3ICs0MzksNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRo
ZXJGcm9tT3RoZXJUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLAog
CiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIocmVncyk7
CiAgICAgdm9pZCogc3RhY2tCYXNlID0gdGhyZWFkLT5zdGFja0Jhc2U7Ci0gICAgc3dhcElmQmFj
a3dhcmRzKHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKICAgICBzdGFja1BvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrUG9pbnRlcikpKTsKICAgICBjb25z
ZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgKaW5kZXggNTVmOWU3Ny4uNjM2YzJmYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTU1LDEyICs1NSw2IEBA
CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQotLy8gRnJvbSBw
a2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZpbGUgZnJvbSB0aGUgUGxhdGZvcm0gQnVpbGRlcikK
LSNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgwN0YKLWV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxp
bXBvcnQpIHZvaWQgQ2FjaGVSYW5nZUZsdXNoKExQVk9JRCBwQWRkciwgRFdPUkQgZHdMZW5ndGgs
IERXT1JEIGR3RmxhZ3MpOwotI2VuZGlmCi0KICNkZWZpbmUgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhD
TFVTSVZFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAwOTQ5M2FhLi42OTU4NzAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2Vu
ZGlmCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNW
QykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNpbmNsdWRlIDxtbXN5c3RlbS5oPgogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KQEAgLTExMDksNyArMTEwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIC8vIGJlIGluIGEg
c2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVp
cmVzIG9iamVjdAogLy8gdW53aW5kaW5nLgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmlu
ZWQoX0RFQlVHKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmluZWQo
X0RFQlVHKQogI2RlZmluZSBUUlkgICAgICAgX190cnkgewogI2RlZmluZSBFWENFUFQoeCkgfSBf
X2V4Y2VwdCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB4OyB9CiAjZWxzZQpAQCAtMTE0
MSw3ICsxMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2VuZGlmCiAK
ICNpZiBPUyhXSU5ET1dTKQotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDeWd3aW4gY2FsbHMgOjpT
ZXRFcnJvck1vZGUoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyksIHdoaWNoIHdlIHdpbGwgaW5oZXJp
dC4gVGhpcyBpcyBiYWQgZm9yCiAgICAgLy8gdGVzdGluZy9kZWJ1Z2dpbmcsIGFzIGl0IGNhdXNl
cyB0aGUgcG9zdC1tb3J0ZW0gZGVidWdnZXIgbm90IHRvIGJlIGludm9rZWQuIFdlIHJlc2V0IHRo
ZQogICAgIC8vIGVycm9yIG1vZGUgaGVyZSB0byB3b3JrIGFyb3VuZCBDeWd3aW4ncyBiZWhhdmlv
ci4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1MjIyPi4KQEAgLTExNTUsNyArMTE1NCw2IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX0FTU0VSVCwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJlcG9ydE1vZGUo
X0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9GSUxFKTsKICNlbmRpZgotI2VuZGlmCiAKICAgICB0
aW1lQmVnaW5QZXJpb2QoMSk7CiAjZW5kaWYKQEAgLTExNzAsNyArMTE2OCw2IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICNlbmRpZgogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChjaGFyKiB0aW1lb3V0U3RyaW5nID0g
Z2V0ZW52KCJKU0NfdGltZW91dCIpKSB7CiAgICAgICAgIGlmIChzc2NhbmYodGltZW91dFN0cmlu
ZywgIiVsZiIsICZzX2Rlc2lyZWRUaW1lb3V0KSAhPSAxKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KApAQCAtMTE3OSw3ICsxMTc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0VGhyZWFkTWFp
biwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KLSNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA0OWExYzM2Li5hZjU3MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQwLDEwICs0MCw2IEBACiAjaW5j
bHVkZSAiSlNSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCi0jaWYgT1MoV0lOQ0UpCi1leHRlcm4g
IkMiIHRpbWVfdCB0aW1lKHRpbWVfdCogdGltZXIpOyAvLyBQcm92aWRlZCBieSBsaWJjZS4KLSNl
bmRpZgotCiAjaWYgSEFWRShTWVNfVElNRV9IKQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggZjBkZGY5
OC4uNDcxOGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
QEAgLTEwNSw3ICsxMDUsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcs
IEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGJvb2wgb3Zl
cnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQog
ewotI2lmICFPUyhXSU5DRSkKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihu
YW1lKTsKICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTQsNyArMTEzLDYgQEAgYm9vbCBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMoVCYgdmFyaWFi
bGUsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlICVzPSVzXG4iLCBuYW1lLCBz
dHJpbmdWYWx1ZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0OTE0MTk3Li4xMzk2MzQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNjYsMTEgKzI2Niw5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVy
ID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOwogCiAgICAgICAgIFN0
cmluZ1ByaW50U3RyZWFtIHBhdGhPdXQ7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBjb25zdCBj
aGFyKiBwcm9maWxlclBhdGggPSBnZXRlbnYoIkpTQ19QUk9GSUxFUl9QQVRIIik7CiAgICAgICAg
IGlmIChwcm9maWxlclBhdGgpCiAgICAgICAgICAgICBwYXRoT3V0LnByaW50KHByb2ZpbGVyUGF0
aCwgIi8iKTsKLSNlbmRpZgogICAgICAgICBwYXRoT3V0LnByaW50KCJKU0NQcm9maWxlLSIsIGdl
dEN1cnJlbnRQcm9jZXNzSUQoKSwgIi0iLCBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPmRhdGFiYXNl
SUQoKSwgIi5qc29uIik7CiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+cmVnaXN0ZXJU
b1NhdmVBdEV4aXQocGF0aE91dC50b0NTdHJpbmcoKS5kYXRhKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0UmVnRXhwLmNwcAppbmRleCA5Mjg2Y2UxLi5hYjhkMWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KICNlbmRpZgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIU9TKFdJTkNFKQorI2lm
IENPTVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjaW5jbHVkZSA8bW1zeXN0ZW0u
aD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xNTAsNyArMTUwLDcgQEAgR2xvYmFsT2JqZWN0
OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGEKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRo
ZSByZWFsTWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKIC8vIHVud2luZGluZy4KIAotI2lm
IENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykgJiYgIU9TKFdJTkNFKQorI2lmIENP
TVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykKICNkZWZpbmUgVFJZICAgICAgIF9fdHJ5
IHsKICNkZWZpbmUgRVhDRVBUKHgpIH0gX19leGNlcHQgKEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRM
RVIpIHsgeDsgfQogI2Vsc2UKQEAgLTE2MywxMiArMTYzLDEwIEBAIGludCByZWFsTWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewog
I2lmIE9TKFdJTkRPV1MpCi0jaWYgIU9TKFdJTkNFKQogICAgIC8vIEN5Z3dpbiBjYWxscyA6OlNl
dEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKSwgd2hpY2ggd2Ugd2lsbCBpbmhlcml0
LiBUaGlzIGlzIGJhZCBmb3IKICAgICAvLyB0ZXN0aW5nL2RlYnVnZ2luZywgYXMgaXQgY2F1c2Vz
IHRoZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlciBub3QgdG8gYmUgaW52b2tlZC4gV2UgcmVzZXQgdGhl
CiAgICAgLy8gZXJyb3IgbW9kZSBoZXJlIHRvIHdvcmsgYXJvdW5kIEN5Z3dpbidzIGJlaGF2aW9y
LiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUyMjI+LgogICAgIDo6U2V0RXJyb3JNb2RlKDAp
OwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9ERUJVRykKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCmluZGV4IGM3NmE5YTguLjMwMmI1ZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKQEAgLTkyLDcgKzky
LDYgQEAgdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBv
aW50ZXIpCiAKIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDaGVjayBmb3Ig
SlNDX0NPREVfUFJPRklMSU5HLgogICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0g
Z2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKICAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2Rl
KQpAQCAtMTE5LDcgKzExOCw2IEBAIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9y
KFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgIEFTU0VSVCghc190cmFja2VyKTsK
ICAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigpOwogICAgIGFs
bG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwotI2VuZGlmCiB9CiAKIHZvaWQq
IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggN2Q2
OTc2YS4uNjc2MWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0
IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorICAgICAgICAq
IHd0Zi9Bc3NlcnRpb25zLmg6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYvQ3VycmVudFRpbWUuY3BwOgor
ICAgICAgICAoV1RGOjpsb3dSZXNVVENUaW1lKToKKyAgICAgICAgKiB3dGYvRGF0YUxvZy5jcHA6
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6Z2V0TG9jYWxUaW1l
KToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToKKyAgICAgICAgKiB3dGYvRmFz
dE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisgICAgICAgICog
d3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiB3dGYvUkFNU2l6ZS5jcHA6CisgICAgICAgIChXVEY6
OmNvbXB1dGVSQU1TaXplKToKKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyU2VlZC5oOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKToKKyAgICAgICAgKiB3
dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrQm91
bmRzOjppc0dyb3dpbmdEb3dud2FyZCk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgor
ICAgICAgICAod3RmX2JzZWFyY2gpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdHJpbmdFeHRy
YXMuaDoKKyAgICAgICAgKHN0cm5pY21wKTogRGVsZXRlZC4KKyAgICAgICAgKHN0cmljbXApOiBE
ZWxldGVkLgorICAgICAgICAoc3RyZHVwKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFk
U3BlY2lmaWMuaDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdU
Rjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9XaW5kb3dzRXh0cmFzLmg6
CisgICAgICAgIChXVEY6OmdldFJlZ2lzdHJ5VmFsdWUpOgorICAgICAgICAoV1RGOjpnZXRXaW5k
b3dQb2ludGVyKToKKyAgICAgICAgKFdURjo6c2V0V2luZG93UG9pbnRlcik6CisgICAgICAgICog
d3RmL2R0b2EvdXRpbHMuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmZvcm1hdCk6CisKIDIwMTQtMDktMTggIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERvdCBub3QgYWxs
b3cgdG8gY3JlYXRlIGRlbGV0ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvY29uZmlnLmggYi9Tb3VyY2UvV1RGL2NvbmZpZy5oCmluZGV4IDVjMjIz
MTYuLjI5MDNjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvY29uZmlnLmgKKysrIGIvU291cmNl
L1dURi9jb25maWcuaApAQCAtNDQsNyArNDQsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmICFD
T01QSUxFUihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZD
N19PUl9MT1dFUikKIC8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAj
aW5jbHVkZSBvZiBzdGRsaWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYg
X0NSVF9SQU5EX1MKICNkZWZpbmUgX0NSVF9SQU5EX1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXgg
MzQxYmQwMS4uNmQ5ZDk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAK
ICNlbmRpZgogI2VuZGlmIC8vIFVTRShDRikKIAotI2lmIENPTVBJTEVSKE1TVkMpICYmICFPUyhX
SU5DRSkKKyNpZiBDT01QSUxFUihNU1ZDKQogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAK
QEAgLTEyMiwyMCArMTIyLDcgQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNv
bnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBpZiAoX3ZzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgYXJncykg
IT0gLTEpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgICAgICAvLyBXaW5DRSBvbmx5IHN1
cHBvcnRzIHdpZGUgY2hhcnMKLSAgICAgICAgICAgICAgICB3Y2hhcl90KiB3aWRlQnVmZmVyID0g
KHdjaGFyX3QqKW1hbGxvYyhzaXplICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgICAgICAg
ICBpZiAod2lkZUJ1ZmZlciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWRlQnVmZmVyW2ldID0gYnVmZmVyW2ldKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ1cod2lkZUJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
ZnJlZSh3aWRlQnVmZmVyKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJp
bmdBKGJ1ZmZlcik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xOTYsNyArMTgzLDcgQEAgc3Rh
dGljIHZvaWQgcHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiAK
IHN0YXRpYyB2b2lkIHByaW50Q2FsbFNpdGUoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uKQogewotI2lmIE9TKFdJTkRPV1MpICYmICFPUyhXSU5DRSkgJiYg
ZGVmaW5lZChfREVCVUcpCisjaWYgT1MoV0lORE9XUykgJiYgZGVmaW5lZChfREVCVUcpCiAgICAg
X0NydERiZ1JlcG9ydChfQ1JUX1dBUk4sIGZpbGUsIGxpbmUsIE5VTEwsICIlc1xuIiwgZnVuY3Rp
b24pOwogI2Vsc2UKICAgICAvLyBCeSB1c2luZyB0aGlzIGZvcm1hdCwgd2hpY2ggbWF0Y2hlcyB0
aGUgZm9ybWF0IHVzZWQgYnkgTVNWQyBmb3IgY29tcGlsZXIgZXJyb3JzLCBkZXZlbG9wZXJzCkBA
IC0yMzUsNyArMjIyLDcgQEAgdm9pZCBXVEZHZXRCYWNrdHJhY2Uodm9pZCoqIHN0YWNrLCBpbnQq
IHNpemUpCiB7CiAjaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmICFkZWZpbmVkKF9fVUNM
SUJDX18pKQogICAgICpzaXplID0gYmFja3RyYWNlKHN0YWNrLCAqc2l6ZSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjZWxpZiBPUyhXSU5ET1dTKQogICAgIC8vIFRoZSBDYXB0
dXJlU3RhY2tCYWNrVHJhY2UgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIFhQLCBidXQgaXQgaXMg
bm90IGRlZmluZWQKICAgICAvLyBpbiB0aGUgV2luZG93cyBTZXJ2ZXIgMjAwMyBSMiBQbGF0Zm9y
bSBTREsuIFNvLCB3ZSdsbCBncmFiIHRoZSBmdW5jdGlvbgogICAgIC8vIHRocm91Z2ggR2V0UHJv
Y0FkZHJlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKaW5kZXggZjRjODkyYS4uZjhhMTA1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuaApAQCAtMTk2LDE0ICsxOTYsNiBAQCBleHRlcm4gIkMiIHsKICAgRXhwcmVzc2lvbnMg
aW5zaWRlIHRoZW0gYXJlIGV2YWx1YXRlZCBpbiBkZWJ1ZyBidWlsZHMgb25seS4KICovCiAKLSNp
ZiBPUyhXSU5DRSkKLS8qIEZJWE1FOiBXZSBpbmNsdWRlIHRoaXMgaGVyZSBvbmx5IHRvIGF2b2lk
IGEgY29uZmxpY3Qgd2l0aCB0aGUgQVNTRVJUIG1hY3JvLiAqLwotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSN1bmRlZiBtaW4KLSN1bmRlZiBtYXgKLSN1bmRlZiBFUlJPUgotI2VuZGlmCi0KICNpZiBP
UyhXSU5ET1dTKQogLyogRklYTUU6IENoYW5nZSB0byB1c2Ugc29tZXRoaW5nIG90aGVyIHRoYW4g
QVNTRVJUIHRvIGF2b2lkIHRoaXMgY29uZmxpY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBwbGF0Zm9y
bSAqLwogI3VuZGVmIEFTU0VSVApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXRvbWljcy5o
IGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDRlNjMwYzIuLjc4NzY4MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9BdG9t
aWNzLmgKQEAgLTc0LDExICs3NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogI2lmIE9TKFdJTkRPV1Mp
CiBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgdW5zaWduZWQqIGxvY2F0
aW9uLCB1bnNpZ25lZCBleHBlY3RlZCwgdW5zaWduZWQgbmV3VmFsdWUpCiB7Ci0jaWYgT1MoV0lO
Q0UpCi0gICAgcmV0dXJuIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHJlaW50ZXJwcmV0X2Nh
c3Q8TE9ORyo+KGNvbnN0X2Nhc3Q8dW5zaWduZWQqPihsb2NhdGlvbikpLCBzdGF0aWNfY2FzdDxM
T05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0gc3RhdGljX2Nh
c3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2Vsc2UKICAgICByZXR1cm4gSW50ZXJsb2NrZWRDb21wYXJl
RXhjaGFuZ2UocmVpbnRlcnByZXRfY2FzdDxMT05HIHZvbGF0aWxlKj4obG9jYXRpb24pLCBzdGF0
aWNfY2FzdDxMT05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0g
c3RhdGljX2Nhc3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2VuZGlmCiB9CiAKIGlubGluZSBib29sIHdl
YWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlvbiwgdm9pZCogZXhwZWN0ZWQs
IHZvaWQqIG5ld1ZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUu
Y3BwIGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCmluZGV4IDk5MGNhYTEuLjQxMWU2
NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCkBAIC03MiwxMSArNzIsNyBAQCBzdGF0aWMgZG91
YmxlIGxvd1Jlc1VUQ1RpbWUoKQogewogICAgIEZJTEVUSU1FIGZpbGVUaW1lOwogCi0jaWYgT1Mo
V0lOQ0UpCi0gICAgR2V0Q3VycmVudEZUKCZmaWxlVGltZSk7Ci0jZWxzZQogICAgIEdldFN5c3Rl
bVRpbWVBc0ZpbGVUaW1lKCZmaWxlVGltZSk7Ci0jZW5kaWYKIAogICAgIC8vIEFzIHBlciBXaW5k
b3dzIGRvY3VtZW50YXRpb24gZm9yIEZJTEVUSU1FLCBjb3B5IHRoZSByZXN1bHRpbmcgRklMRVRJ
TUUgc3RydWN0dXJlIHRvIGEKICAgICAvLyBVTEFSR0VfSU5URUdFUiBzdHJ1Y3R1cmUgdXNpbmcg
bWVtY3B5ICh1c2luZyBtZW1jcHkgaW5zdGVhZCBvZiBkaXJlY3QgYXNzaWdubWVudCBjYW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5jcHAKaW5kZXggMjliZWQxNS4uZWEwNGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRGF0YUxvZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAKQEAgLTM1LDEy
ICszNSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQot
I2lmbmRlZiBfSU9OQkYKLSNkZWZpbmUgX0lPTkJGIDB4MDAwNAotI2VuZGlmCi0jZW5kaWYKLQog
I2RlZmluZSBEQVRBX0xPR19UT19GSUxFIDAKIAogLy8gU2V0IHRvIDEgdG8gdXNlIHRoZSB0ZW1w
IGRpcmVjdG9yeSBmcm9tIGNvbmZzdHIgaW5zdGVhZCBvZiBoYXJkY29kZWQgZGlyZWN0b3J5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYv
RGF0ZU1hdGguY3BwCmluZGV4IDZlZTM2ZDMuLjM3Y2YzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAg
LTEyMSw3ICsxMjEsNiBAQCBzdGF0aWMgY29uc3QgaW50IGZpcnN0RGF5T2ZNb250aFsyXVsxMl0g
PSB7CiAgICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMw
NSwgMzM1fQogfTsKIAotI2lmICFPUyhXSU5DRSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRMb2Nh
bFRpbWUoY29uc3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKIHsKICNp
ZiBDT01QSUxFUihNSU5HVykKQEAgLTEzMiw3ICsxMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Z2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1Y3QgdG0qIGxvY2FsVE0p
CiAgICAgbG9jYWx0aW1lX3IobG9jYWxUaW1lLCBsb2NhbFRNKTsKICNlbmRpZgogfQotI2VuZGlm
CiAKIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKIHsKQEAgLTQyNCwxMSArNDIyLDcgQEAgc3Rh
dGljIHZvaWQgVW5peFRpbWVUb0ZpbGVUaW1lKHRpbWVfdCB0LCBMUEZJTEVUSU1FIHBmdCkKICAq
Lwogc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQodGltZV90IGxvY2FsVGltZSwgZG91
YmxlIHV0Y09mZnNldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBVTlVTRURfUEFSQU0obG9jYWxU
aW1lKTsKLSAgICBVTlVTRURfUEFSQU0odXRjT2Zmc2V0KTsKLSAgICByZXR1cm4gMDsKLSNlbGlm
IE9TKFdJTkRPV1MpCisjaWYgT1MoV0lORE9XUykKICAgICBGSUxFVElNRSB1dGNGaWxlVGltZTsK
ICAgICBVbml4VGltZVRvRmlsZVRpbWUobG9jYWxUaW1lLCAmdXRjRmlsZVRpbWUpOwogICAgIFNZ
U1RFTVRJTUUgdXRjU3lzdGVtVGltZSwgbG9jYWxTeXN0ZW1UaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cAppbmRleCA3OThjMWRjLi4zMTM1NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtMTE4LDEx
ICsxMTgsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogI2lmIE9TKFdJTkRPV1MpCiAKLS8vIFRMU19P
VVRfT0ZfSU5ERVhFUyBpcyBub3QgZGVmaW5lZCBvbiBXaW5DRS4KLSNpZm5kZWYgVExTX09VVF9P
Rl9JTkRFWEVTCi0jZGVmaW5lIFRMU19PVVRfT0ZfSU5ERVhFUyAweGZmZmZmZmZmCi0jZW5kaWYK
LQogc3RhdGljIERXT1JEIGlzRm9yaWJpZGRlblRsc0luZGV4ID0gVExTX09VVF9PRl9JTkRFWEVT
Owogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzQWxsb3dWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TFBWT0lEPigwKTsgLy8gTXVzdCBiZSB6ZXJvLgogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzRm9y
YmlkZGVuVmFsdWUgPSByZWludGVycHJldF9jYXN0PExQVk9JRD4oMSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURl
ZmluZXMuaAppbmRleCBkZjc2YTdhLi42MDMyODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgK
QEAgLTIzOSw3ICsyMzksNyBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVk
IHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQogI2VuZGlmIC8qIFBM
QVRGT1JNKE1BQykgKi8KIAogLyogLS0tLS0tLS0tIEFwcGxlIFdpbmRvd3MgcG9ydCAtLS0tLS0t
LS0gKi8KLSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykKKyNpZiBQTEFURk9STShXSU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAKICNpZiAh
ZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpCiAjZGVmaW5lIEVOQUJMRV9GVUxMU0NSRUVO
X0FQSSAxCkBAIC0yNTMsMjYgKzI1Myw3IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBh
bHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVm
aW5lIEVOQUJMRV9XRUJHTCAxCiAjZW5kaWYKIAotI2VuZGlmIC8qIFBMQVRGT1JNKFdJTikgJiYg
IU9TKFdJTkNFKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAqLwotCi0vKiAtLS0tLS0tLS0gV2lu
Q0UgcG9ydCAtLS0tLS0tLS0gKi8KLS8qIFdpbkNFIHBvcnQgaXMgYSBzcGVjaWFsaXphdGlvbiBv
ZiBQTEFURk9STShXSU4pLiAqLwotLyogUExBVEZPUk0oV0lOKSBpcyBhbHdheXMgZW5hYmxlZCB3
aGVuIGJ1aWxkaW5nIGZvciB0aGUgV2luQ0UgcG9ydC4gKi8KLSNpZiBQTEFURk9STShXSU4pICYm
IE9TKFdJTkNFKQotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RSQUdfU1VQUE9SVCkKLSNkZWZpbmUg
RU5BQkxFX0RSQUdfU1VQUE9SVCAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9GVFBE
SVIpCi0jZGVmaW5lIEVOQUJMRV9GVFBESVIgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFC
TEVfSU5TUEVDVE9SKQotI2RlZmluZSBFTkFCTEVfSU5TUEVDVE9SIDAKLSNlbmRpZgotCi0jZW5k
aWYgLyogUExBVEZPUk0oV0lOKSAmJiBPUyhXSU5DRSkgKi8KKyNlbmRpZiAvKiBQTEFURk9STShX
SU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pICovCiAKIC8qIC0tLS0tLS0tLSBXaW5kb3dzIENB
SVJPIHBvcnQgLS0tLS0tLS0tICovCiAvKiBQTEFURk9STShXSU5fQ0FJUk8pIGlzIGEgc3BlY2lh
bGl6YXRpb24gb2YgUExBVEZPUk0oV0lOKS4gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCmluZGV4IGE1NzY2
NzIuLmJhMTI3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaApAQCAtNzksMTcgKzc5LDkgQEAgaW5saW5l
IHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwg
c2l6ZV90IGNvbW1pdFNpemUKICAgICByZXR1cm4gYmFzZTsKIH0KIAotaW5saW5lIHZvaWQgT1NB
bGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90IHJl
bGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJhc2UsIHNpemVfdCBkZWNvbW1pdFNpemUpCitpbmxp
bmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNl
LCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqLCBzaXplX3QpCiB7CiAgICAgQVNTRVJUKGRlY29t
bWl0QmFzZSA+PSByZWxlYXNlQmFzZSAmJiAoc3RhdGljX2Nhc3Q8Y2hhcio+KGRlY29tbWl0QmFz
ZSkgKyBkZWNvbW1pdFNpemUpIDw9IChzdGF0aWNfY2FzdDxjaGFyKj4ocmVsZWFzZUJhc2UpICsg
cmVsZWFzZVNpemUpKTsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBPbiBtb3N0IHBsYXRmb3JtcyB3
ZSBjYW4gYWN0dWFsbHkgc2tpcCB0aGlzIGZpbmFsIGRlY29tbWl0OyByZWxlYXNpbmcgdGhlIFZN
IHdpbGwKLSAgICAvLyBpbXBsaWNpdGx5IGRlY29tbWl0IGFueSBwaHlzaWNhbCBtZW1vcnkgaW4g
dGhlIHJlZ2lvbi4gVGhpcyBpcyBub3QgdHJ1ZSBvbiBXSU5DRS4KLSAgICBkZWNvbW1pdChkZWNv
bW1pdEJhc2UsIGRlY29tbWl0U2l6ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1p
dEJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1pdFNpemUpOwotI2VuZGlmCiAgICAgcmVs
ZWFzZURlY29tbWl0dGVkKHJlbGVhc2VCYXNlLCByZWxlYXNlU2l6ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDUzMjc3OGUuLmI2MDA3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMzk0LDExICszOTQsNiBA
QAogI2RlZmluZSBXVEZfT1NfU09MQVJJUyAxCiAjZW5kaWYKIAotLyogT1MoV0lOQ0UpIC0gV2lu
ZG93cyBDRTsgbm90ZSB0aGF0IGZvciB0aGlzIHBsYXRmb3JtIE9TKFdJTkRPV1MpIGlzIGFsc28g
ZGVmaW5lZCAqLwotI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKLSNkZWZpbmUgV1RGX09TX1dJTkNF
IDEKLSNlbmRpZgotCiAvKiBPUyhXSU5ET1dTKSAtIEFueSB2ZXJzaW9uIG9mIFdpbmRvd3MgKi8K
ICNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKICNkZWZpbmUgV1RGX09TX1dJ
TkRPV1MgMQpAQCAtNjAwLDcgKzU5NSw3IEBACiAKICNlbmRpZiAvKiBPUyhEQVJXSU4pICovCiAK
LSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaWYgT1MoV0lORE9XUykKIAogI2RlZmlu
ZSBIQVZFX1NZU19USU1FQl9IIDEKICNkZWZpbmUgSEFWRV9BTElHTkVEX01BTExPQyAxCkBAIC02
NTUsOCArNjUwLDcgQEAKIC8qIFRoZSBKSVQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGFsbCB4
ODYsIHg4Ni02NCwgQVJNICYgTUlQUyBwbGF0Zm9ybXMgZXhjZXB0IEFSTXY3ayBhbmQgV2luZG93
cy4gKi8KICNpZiAhZGVmaW5lZChFTkFCTEVfSklUKSBcCiAgICAgJiYgKENQVShYODYpIHx8IENQ
VShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKSBcCi0gICAg
JiYgIUNQVShBUFBMRV9BUk1WN0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgJiYgIU9TKFdJTkNFKQorICAgICYmICFDUFUo
QVBQTEVfQVJNVjdLKQogI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogCkBAIC05NDMsNyAr
OTM3LDcgQEAKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgog
Ci0jaWYgIWRlZmluZWQoV1RGX1VTRV9JTUxBTkdfRk9OVF9MSU5LMikgJiYgIU9TKFdJTkNFKQor
I2lmICFkZWZpbmVkKFdURl9VU0VfSU1MQU5HX0ZPTlRfTElOSzIpCiAjZGVmaW5lIFdURl9VU0Vf
SU1MQU5HX0ZPTlRfTElOSzIgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5k
ZXggY2IyYzUyNi4uNzRjOWViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1X
aW4uY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUsMTUg
KzUsOSBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIHdpbi9SdW5Mb29wV2luLmNwcAog
KQogCi1pZiAoV0lOQ0UpCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICAgICBt
bXRpbWVyCi0gICAgKQotZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAg
ICAgICAgd2lubW0KLSAgICApCi1lbmRpZiAoKQorbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwor
ICAgIHdpbm1tCispCiAKIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCiAgICAgIiR7REVSSVZFRF9T
T1VSQ0VTX1dURl9ESVJ9L1dURkhlYWRlckRldGVjdGlvbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUkFNU2l6ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAppbmRleCA1
MGI1MjIyLi5hNmQxZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcApAQCAtNjEsMTMgKzYxLDYgQEAgc3RhdGlj
IHNpemVfdCBjb21wdXRlUkFNU2l6ZSgpCiAgICAgaWYgKHBhZ2VzID09IC0xIHx8IHBhZ2VTaXpl
ID09IC0xKQogICAgICAgICByZXR1cm4gcmFtU2l6ZUd1ZXNzOwogICAgIHJldHVybiBwYWdlcyAq
IHBhZ2VTaXplOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgTUVNT1JZU1RBVFVTIHN0YXR1czsKLSAg
ICBzdGF0dXMuZHdMZW5ndGggPSBzaXplb2Yoc3RhdHVzKTsKLSAgICBHbG9iYWxNZW1vcnlTdGF0
dXMoJnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1cy5kd1RvdGFsUGh5cyA8PSAwKQotICAgICAgICBy
ZXR1cm4gcmFtU2l6ZUd1ZXNzOwotICAgIHJldHVybiBzdGF0dXMuZHdUb3RhbFBoeXM7CiAjZWxp
ZiBPUyhXSU5ET1dTKQogICAgIE1FTU9SWVNUQVRVU0VYIHN0YXR1czsKICAgICBzdGF0dXMuZHdM
ZW5ndGggPSBzaXplb2Yoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JhbmRv
bU51bWJlclNlZWQuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaAppbmRleCAx
M2FkNDhlLi5hNjVkN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJT
ZWVkLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oCkBAIC00NSw5ICs0
NSw2IEBAIGlubGluZSB2b2lkIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQogewog
I2lmIE9TKERBUldJTikKICAgICAvLyBPbiBEYXJ3aW4gd2UgdXNlIGFyYzRyYW5kb20gd2hpY2gg
aW5pdGlhbGlzZXMgaXRzZWxmLgotI2VsaWYgT1MoV0lOQ0UpCi0gICAgLy8gaW5pdGlhbGl6ZSBy
YW5kKCkKLSAgICBzcmFuZChHZXRUaWNrQ291bnQoKSk7CiAjZWxpZiBDT01QSUxFUihNU1ZDKSAm
JiBkZWZpbmVkKF9DUlRfUkFORF9TKQogICAgIC8vIE9uIFdpbmRvd3Mgd2UgdXNlIHJhbmRfcyB3
aGljaCBpbml0aWFsaXNlcyBpdHNlbGYKICNlbGlmIE9TKFVOSVgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5j
cHAKaW5kZXggMWM4Njc1MC4uZjMwOGFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3Rh
Y2tCb3VuZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmNwcApAQCAtMTI0
LDE2ICsxMjQsNiBAQCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICAvLyBzdGFj
a09yaWdpbi5BbGxvY2F0aW9uQmFzZSBwb2ludHMgdG8gdGhlIHJlc2VydmVkIHN0YWNrIG1lbW9y
eSBiYXNlIGFkZHJlc3MuCiAKICAgICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFj
a09yaWdpbi5CYXNlQWRkcmVzcykgKyBzdGFja09yaWdpbi5SZWdpb25TaXplOwotI2lmIE9TKFdJ
TkNFKQotICAgIFNZU1RFTV9JTkZPIHN5c3RlbUluZm87Ci0gICAgR2V0U3lzdGVtSW5mbygmc3lz
dGVtSW5mbyk7Ci0gICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7Ci0K
LSAgICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gc3RhY2tNZW1vcnk7Ci0gICAgVmlydHVhbFF1
ZXJ5KG1fb3JpZ2luLCAmc3RhY2tNZW1vcnksIHNpemVvZihzdGFja01lbW9yeSkpOwotCi0gICAg
bV9ib3VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihtX29yaWdpbikgLSBzdGFja01lbW9yeS5SZWdp
b25TaXplICsgcGFnZVNpemU7Ci0jZWxzZQogICAgIC8vIFRoZSBzdGFjayBvbiBXaW5kb3dzIGNv
bnNpc3RzIG91dCBvZiB0aHJlZSBwYXJ0cyAodW5jb21taXR0ZWQgbWVtb3J5LCBhIGd1YXJkIHBh
Z2UgYW5kIHByZXNlbnQKICAgICAvLyBjb21taXR0ZWQgbWVtb3J5KS4gVGhlIDMgcmVnaW9ucyBo
YXZlIGRpZmZlcmVudCBCYXNlQWRkcmVzc2VzIGJ1dCBhbGwgaGF2ZSB0aGUgc2FtZSBBbGxvY2F0
aW9uQmFzZQogICAgIC8vIHNpbmNlIHRoZXkgYXJlIGFsbCBmcm9tIHRoZSBzYW1lIFZpcnR1YWxB
bGxvYy4gVGhlIDMgcmVnaW9ucyBhcmUgbGFpZCBvdXQgaW4gbWVtb3J5IChmcm9tIGhpZ2ggdG8K
QEAgLTE3Myw3ICsxNjMsNiBAQCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICBB
U1NFUlQoZW5kT2ZTdGFjayA9PSBjb21wdXRlZEVuZCk7CiAjZW5kaWYgLy8gTkRFQlVHCiAgICAg
bV9ib3VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihlbmRPZlN0YWNrKSArIGd1YXJkUGFnZS5SZWdp
b25TaXplOwotI2VuZGlmIC8vIE9TKFdJTkNFKQogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgK
aW5kZXggYjU3YWFlMi4uMTc5Y2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC05OCwxMSArOTgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0dyb3dpbmdEb3dud2FyZCgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV9vcmlnaW4gJiYgbV9ib3VuZCk7Ci0jaWYgT1MoV0lOQ0UpCi0gICAg
ICAgIHJldHVybiBtX29yaWdpbiA+IG1fYm91bmQ7Ci0jZWxzZQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggYzFm
NDVlMC4uYTAxODcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgK
KysrIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKQEAgLTI5NywzMSArMjk3LDYgQEAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNDb21waWxhdGlvblRocmVhZCgpOwogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAotI2lmIE9TKFdJTkNFKQotLy8gV2luZG93cyBDRSBDUlQgaGFzIGRvZXMg
bm90IGltcGxlbWVudCBic2VhcmNoKCkuCi1pbmxpbmUgdm9pZCogd3RmX2JzZWFyY2goY29uc3Qg
dm9pZCoga2V5LCBjb25zdCB2b2lkKiBiYXNlLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplLCBp
bnQgKCpjb21wYXJlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0gICAgY29uc3Qg
Y2hhciogZmlyc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSk7Ci0KLSAgICB3aGls
ZSAoY291bnQpIHsKLSAgICAgICAgc2l6ZV90IHBvcyA9IChjb3VudCAtIDEpID4+IDE7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGl0ZW0gPSBmaXJzdCArIHBvcyAqIHNpemU7Ci0gICAgICAgIGludCBj
b21wYXJlUmVzdWx0ID0gY29tcGFyZShpdGVtLCBrZXkpOwotICAgICAgICBpZiAoIWNvbXBhcmVS
ZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oaXRlbSk7Ci0gICAg
ICAgIGlmIChjb21wYXJlUmVzdWx0IDwgMCkgewotICAgICAgICAgICAgY291bnQgLT0gKHBvcyAr
IDEpOwotICAgICAgICAgICAgZmlyc3QgKz0gKHBvcyArIDEpICogc2l6ZTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjb3VudCA9IHBvczsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotI2RlZmluZSBic2VhcmNoKGtleSwgYmFzZSwgY291bnQsIHNpemUsIGNvbXBhcmUpIHd0Zl9i
c2VhcmNoKGtleSwgYmFzZSwgY291bnQsIHNpemUsIGNvbXBhcmUpCi0jZW5kaWYKLQogLy8gVGhp
cyB2ZXJzaW9uIG9mIHBsYWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgogZW51bSBOb3ROdWxs
VGFnIHsgTm90TnVsbCB9OwogaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51
bGxUYWcsIHZvaWQqIGxvY2F0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5n
RXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAppbmRleCAxMDNlMTczLi5i
MWFlYTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaApAQCAtNjksMjUgKzY5LDYgQEAgaW5saW5lIGRv
dWJsZSB3dGZfdnNucHJpbnRmKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFy
KiBmb3JtYXQsIHZhX2wKIC8vIHZzbnByaW50ZiBkb2VzIG5vdCBudWxsIHRlcm1pbmF0ZSB0aGUg
YnVmZmVyLiBXZWJLaXQgY2FuIHJlbHkgb24gdGhlIG51bGwgdGVybWluYXRpb24uCiAjZGVmaW5l
IHZzbnByaW50ZihidWZmZXIsIGNvdW50LCBmb3JtYXQsIGFyZ3MpIHd0Zl92c25wcmludGYoYnVm
ZmVyLCBjb3VudCwgZm9ybWF0LCBhcmdzKQogCi0jaWYgT1MoV0lOQ0UpCi0KLWlubGluZSBpbnQg
c3RybmljbXAoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hhciogc3RyaW5nMiwgc2l6ZV90
IGNvdW50KQotewotICAgIHJldHVybiBfc3RybmljbXAoc3RyaW5nMSwgc3RyaW5nMiwgY291bnQp
OwotfQotCi1pbmxpbmUgaW50IHN0cmljbXAoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hh
ciogc3RyaW5nMikKLXsKLSAgICByZXR1cm4gX3N0cmljbXAoc3RyaW5nMSwgc3RyaW5nMik7Ci19
Ci0KLWlubGluZSBjaGFyKiBzdHJkdXAoY29uc3QgY2hhciogc3RyU291cmNlKQotewotICAgIHJl
dHVybiBfc3RyZHVwKHN0clNvdXJjZSk7Ci19Ci0KLSNlbmRpZgotCiBpbmxpbmUgaW50IHN0cm5j
YXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IGxlbikKIHsKICAg
ICByZXR1cm4gX3N0cm5pY21wKHMxLCBzMiwgbGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZFNwZWNpZmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmlu
ZGV4IDFkY2IzNzguLmY0MDQwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNw
ZWNpZmljLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtMTU4LDEx
ICsxNTgsNiBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0cikKIAog
I2VsaWYgT1MoV0lORE9XUykKIAotLy8gVExTX09VVF9PRl9JTkRFWEVTIGlzIG5vdCBkZWZpbmVk
IG9uIFdpbkNFLgotI2lmbmRlZiBUTFNfT1VUX09GX0lOREVYRVMKLSNkZWZpbmUgVExTX09VVF9P
Rl9JTkRFWEVTIDB4ZmZmZmZmZmYKLSNlbmRpZgotCiAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
VExTIGtleXMgdGhhdCBjYW4gYmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1
bWUgdGhhdDoKIC8vIDEpIE9uY2UgdGhlIGluc3RhbmNlIG9mIFRocmVhZFNwZWNpZmljPD4gaXMg
Y3JlYXRlZCwgaXQgd2lsbCBub3QgYmUgZGVzdHJ1Y3RlZCB1bnRpbCB0aGUgcHJvZ3JhbSBkaWVz
LgogLy8gMikgV2UgZG8gbm90IG5lZWQgdG8gaG9sZCBtYW55IGluc3RhbmNlcyBvZiBUaHJlYWRT
cGVjaWZpYzw+IGRhdGEuIFRoaXMgZml4ZWQgbnVtYmVyIHNob3VsZCBiZSBmYXIgZW5vdWdoLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggZTcyYWZmZi4uMmU5NzY4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCkBAIC05NCw2ICs5NCw3IEBACiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgi
CiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCisjaW5jbHVkZSA8cHJvY2Vz
cy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTA3LDEwICsxMDgsNiBAQAogI2luY2x1ZGUg
IlRocmVhZFNwZWNpZmljLmgiCiAjZW5kaWYKIAotI2lmICFPUyhXSU5DRSkKLSNpbmNsdWRlIDxw
cm9jZXNzLmg+Ci0jZW5kaWYKLQogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5o
PgogI2VuZGlmCkBAIC0yMTgsMTcgKzIxNSw5IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAg
ICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCA9IDA7CiAgICAgT3duUHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2Nh
dGlvbiA9IGFkb3B0UHRyKG5ldyBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oZW50cnlQb2ludCwg
ZGF0YSkpOwotI2lmIE9TKFdJTkNFKQotICAgIC8vIFRoaXMgaXMgc2FmZSBvbiBXSU5DRSwgc2lu
Y2UgQ1JUIGlzIGluIHRoZSBjb3JlIGFuZCBpbm5hdGVseSBtdWx0aXRocmVhZGVkLgotICAgIC8v
IE9uIGRlc2t0b3AgV2luZG93cywgbmVlZCB0byB1c2UgX2JlZ2ludGhyZWFkZXggKG5vdCBhdmFp
bGFibGUgb24gV2luQ0UpIGlmIHVzaW5nIGFueSBDUlQgZnVuY3Rpb25zCi0gICAgSEFORExFIHRo
cmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZCgwLCAwLCAoTFBUSFJFQURfU1RBUlRfUk9VVElORSl3
dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAoTFBEV09SRCkmdGhyZWFk
SWRlbnRpZmllcik7Ci0jZWxzZQogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwg
aW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKLSNlbmRpZgogICAgIGlm
ICghdGhyZWFkSGFuZGxlKSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwOiAlbGQi
LCBlbnRyeVBvaW50LCBkYXRhLCA6OkdldExhc3RFcnJvcigpKTsKLSNlbGlmICFIQVZFKEVSUk5P
X0gpCisjaWYgIUhBVkUoRVJSTk9fSCkKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAuIiwgZW50cnlQb2ludCwg
ZGF0YSk7CiAjZWxzZQogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhyZWFk
IGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQb2ludCwgZGF0YSwg
ZXJybm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV2luZG93c0V4dHJhcy5oIGIvU291
cmNlL1dURi93dGYvV2luZG93c0V4dHJhcy5oCmluZGV4IDE2YmM4NjUuLjA2MWRiNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dpbmRvd3NFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9XaW5kb3dzRXh0cmFzLmgKQEAgLTM5LDM0ICszOSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAog
aW5saW5lIEhSRVNVTFQgZ2V0UmVnaXN0cnlWYWx1ZShIS0VZIGhrZXksIExQQ1dTVFIgcHN6U3Vi
S2V5LCBMUENXU1RSIHBzelZhbHVlLCBMUERXT1JEIHBkd1R5cGUsIExQVk9JRCBwdkRhdGEsIExQ
RFdPUkQgcGNiRGF0YSkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBIS0VZIGtleTsKLSAgICBpZiAo
OjpSZWdPcGVuS2V5RXhXKGhrZXksIHBzelN1YktleSwgMCwgMCwgJmtleSkgIT0gRVJST1JfU1VD
Q0VTUykKLSAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMSURfTkFNRTsKLSAgICBIUkVTVUxUIHJl
c3VsdCA9IDo6UmVnUXVlcnlWYWx1ZUV4VyhrZXksIHBzelZhbHVlLCAwLCBwZHdUeXBlLCBzdGF0
aWNfY2FzdDxMUEJZVEU+KHB2RGF0YSksIHBjYkRhdGEpOwotICAgIDo6UmVnQ2xvc2VLZXkoa2V5
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKICAgICByZXR1cm4gOjpTSEdldFZhbHVlVyho
a2V5LCBwc3pTdWJLZXksIHBzelZhbHVlLCBwZHdUeXBlLCBwdkRhdGEsIHBjYkRhdGEpOwotI2Vu
ZGlmCiB9CiAKIGlubGluZSB2b2lkKiBnZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGlu
ZGV4KQogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
Pig6OkdldFdpbmRvd0xvbmcoaFduZCwgaW5kZXgpKTsKLSNlbHNlCiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCBpbmRleCkpOwotI2Vu
ZGlmCiB9CiAKIGlubGluZSB2b2lkKiBzZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGlu
ZGV4LCB2b2lkKiB2YWx1ZSkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oOjpTZXRXaW5kb3dMb25nKGhXbmQsIGluZGV4LCByZWludGVycHJldF9j
YXN0PExPTkc+KHZhbHVlKSkpOwotI2Vsc2UKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oOjpTZXRXaW5kb3dMb25nUHRyKGhXbmQsIGluZGV4LCByZWludGVycHJldF9jYXN0PExP
TkdfUFRSPih2YWx1ZSkpKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2R0b2EvdXRpbHMuaCBiL1NvdXJjZS9XVEYvd3RmL2R0b2Ev
dXRpbHMuaAppbmRleCA1YzQxNDgyLi45ZTJmYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9kdG9hL3V0aWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oCkBAIC00OSw3
ICs0OSw3IEBACiBkZWZpbmVkKF9fQVJNRUxfXykgfHwgXAogZGVmaW5lZChfTUlQU19BUkNIX01J
UFMzMlIyKQogI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJ
T05TIDEKLSNlbGlmIENQVShNSVBTKSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQ
UEM2NExFKSB8fCBPUyhXSU5DRSkgfHwgQ1BVKFNINCkgfHwgQ1BVKFMzOTApIHx8IENQVShTMzkw
WCkgfHwgQ1BVKElBNjQpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoSFBQQSkK
KyNlbGlmIENQVShNSVBTKSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQUEM2NExF
KSB8fCBDUFUoU0g0KSB8fCBDUFUoUzM5MCkgfHwgQ1BVKFMzOTBYKSB8fCBDUFUoSUE2NCkgfHwg
Q1BVKEFMUEhBKSB8fCBDUFUoQVJNNjQpIHx8IENQVShIUFBBKQogI2RlZmluZSBET1VCTEVfQ09O
VkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKICNlbGlmIGRlZmluZWQoX01fSVg4
NikgfHwgZGVmaW5lZChfX2kzODZfXykKICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTU4LDggKzU4
LDYgQEAgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQogI2Vsc2UKICN1bmRlZiBET1VCTEVf
Q09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TCiAjZW5kaWYgIC8vIF9XSU4zMgot
I2VsaWYgZGVmaW5lZChXSU5DRSkgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotI2RlZmluZSBET1VC
TEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKICNlbHNlCiAjZXJyb3Ig
VGFyZ2V0IGFyY2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3Vi
bGUtQ29udmVyc2lvbi4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDA4
MDNjMmQuLmY2OWVjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTQ1MiwyOSAr
NDUyLDYgQEAgVmVjdG9yPFVDaGFyPiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkgY29uc3QKIAogU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQogewotI2lmIE9TKFdJTkNFKQotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChh
cmdzLCBmb3JtYXQpOwotCi0gICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOwotCi0gICAgaW50
IGJ1ZmZlclNpemUgPSAyNTY7Ci0gICAgYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGludCB3cml0dGVuID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlclNpemUsIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZhX2VuZChhcmdzKTsKLQotICAg
ICAgICBpZiAod3JpdHRlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiIik7Ci0g
ICAgICAgIGlmICh3cml0dGVuID4gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZlci5kYXRhKCkpLCB3cml0
dGVuKTsKLSAgICAgICAgCi0gICAgICAgIGJ1ZmZlclNpemUgPDw9IDE7Ci0gICAgICAgIGJ1ZmZl
ci5yZXNpemUoYnVmZmVyU2l6ZSk7Ci0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0g
ICAgfQotCi0jZWxzZQogICAgIHZhX2xpc3QgYXJnczsKICAgICB2YV9zdGFydChhcmdzLCBmb3Jt
YXQpOwogCkBAIC01MDksNyArNDg2LDYgQEAgU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQogICAgIHZhX2VuZChhcmdzKTsKICAgICAKICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0
YSgpKSwgbGVuKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgU3RyaW5nOjpudW1iZXIoaW50IG51bWJl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA5OTA5NmMzLi5iY2Y1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQ5IEBACisyMDE0LTA5LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0NETVByaXZhdGVNZWRpYVBsYXllci5jcHA6CisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFr
ZTogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgor
ICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvaWNv
bi93aW5jZS9JY29uRGF0YWJhc2VXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29u
dGV4dE1lbnVFdmVudEZvcktleSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAg
ICAgICogcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdEYXRhVHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL0NvbnRleHRNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om1heUZp
bGxXaXRoU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9y
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZVV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
SUJQaXhlbERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RElCUGl4ZWxEYXRhOjpzZXRSR0JB
Qml0bWFwQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc0FscGhhQmxlbmRTdXBwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OmFscGhhQmxlbmRJZlN1cHBvcnRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ljb25XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZv
ckZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmluaXRHRElGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJvdW5kc0ZvckdESUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjp3aWR0aEZvckdESUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpzY3JpcHRGb250UHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udENhY2hlV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZv
cm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9H
bHlwaFBhZ2VUcmVlTm9kZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFkaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJEYXRhV2luY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFn
ZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9N
ZWRpYVBsYXllclByaXZhdGVXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5D
RS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJp
dG1hcC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hh
cmVkQml0bWFwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
U2ltcGxlRm9udERhdGFXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0NPTVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250
ZXh0TWVudUl0ZW1XaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVt
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0
TWVudUZyb21JdGVtcyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmFnTGFiZWxGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OnN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Mb2dn
aW5nV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0xldmVsU3RyaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkT3duZXJXbmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0
ZUZvckNvcHlBbmRQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXRoUmVtb3ZlQmFkRlNDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2xvYmFsSERyb3BDb250ZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1lc3NhZ2VUb0V2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNl
RXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BsYXRm
b3JtU2NyZWVuV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUluZm9Gb3JXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdp
bjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnVXaW46OnduZFByb2MpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3Jv
bGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6
cGFpbnRCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaW1lcldpbmRvd1duZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6
ZU9mZlNjcmVlblRpbWVyV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXVlVGltZXJQcm9j
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Nv
ZnRMaW5raW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d2luZG93c1ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vz
c29yQXJjaGl0ZWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmFyY2hpdGVjdHVyZVRva2VuRm9y
VUFTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5WaWV3Tm9uZS5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJh
c2VXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rv
cmllcyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5zL3dp
bi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwT2Zmc2NyZWVuUGFp
bnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlclBsdWdpblZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNl
VGhyZWFkV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvRGF0YWJh
c2VUaHJlYWRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvU3RvcmFn
ZVRocmVhZFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL1N0b3Jh
Z2VUaHJlYWRXaW5DRS5oOiBSZW1vdmVkLgorCiAyMDE0LTA5LTE4ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEb3Qgbm90IGFsbG93
IHRvIGNyZWF0ZSBkZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BTb3VyY2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBs
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZh
dGVNZWRpYVBsYXllci5jcHAKaW5kZXggYWM2ZjQ2Zi4uMTI3MWE3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0
ZU1lZGlhUGxheWVyLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBP
UyhXSU5DRSkKKyNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DRS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDZlODkxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdp
bkNFLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dp
bmNlIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZSIKLSAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4iCi0gICAgIiR7M1JEUEFSVFlfRElS
fS9saWJqcGVnIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlicG5nIgotICAgICIkezNSRFBBUlRZ
X0RJUn0vbGlieG1sMi9pbmNsdWRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlieHNsdC9pbmNs
dWRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vc3FsaXRlIgotICAgICIkezNSRFBBUlRZX0RJUn0v
emxpYiIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgcGFnZS93aW4vRnJh
bWVHZGlXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCi0KLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25X
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW50UmVjdFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5j
cHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9HcmFkaWVudFdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVy
V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvU2hhcmVkQml0bWFwLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBs
ZUZvbnREYXRhV2luY2UuY3BwCi0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvblN0dWIuY3BwCi0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vQ3JlZGVudGlhbFN0b3JhZ2VXaW4uY3BwCi0g
ICAgcGxhdGZvcm0vbmV0d29yay93aW4vUHJveHlTZXJ2ZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0v
bmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93
aW4vU29ja2V0U3RyZWFtSGFuZGxlV2luLmNwcAotCi0gICAgcGxhdGZvcm0vdGV4dC9Mb2NhbGVO
b25lLmNwcAotCi0gICAgcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAotCi0gICAg
cmVuZGVyaW5nL1JlbmRlclRoZW1lV2luY2UuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVf
TElCUkFSSUVTCi0gICAgY3J5cHQzMgotICAgIGlwaGxwYXBpCi0gICAgbGlianBlZwotICAgIGxp
YnBuZwotICAgIGxpYnhtbDIKLSAgICBsaWJ4c2x0Ci0gICAgc3FsaXRlCi0gICAgd2luaW5ldAot
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5k
ZXggZjE5NTNkNi4uZDY2MzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBBWE9iamVjdENhY2hl
OjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQogfQogICAgIAogICAgIAotI2lmICFQTEFURk9STShXSU4p
IHx8IE9TKFdJTkNFKQorI2lmICFQTEFURk9STShXSU4pCiBBWElEIEFYT2JqZWN0Q2FjaGU6OnBs
YXRmb3JtR2VuZXJhdGVBWElEKCkgY29uc3QKIHsKICAgICBzdGF0aWMgQVhJRCBsYXN0VXNlZElE
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggODZj
NTViYS4uNDY2ODI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTc3MCw4ICs3NzAsNiBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSkucmlnaHQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OiB7Ci0gICAgICAgIC8vIFZpc3VhbCB3b3JkIG1vdmVtZW50IHJlbGllcyBvbiBp
c1dvcmRUZXh0QnJlYWsgd2hpY2ggaXMgbm90IGltcGxlbWVudGVkIGluIFdpbkNFIGFuZCBRVC4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTM2
LgogICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1f
ZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0
KCk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSksIHNraXBzU3BhY2VXaGVu
TW92aW5nUmlnaHQpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzRmZDllYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi93aW5jZS9JY29uRGF0YWJhc2VXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSWNvbkRh
dGFiYXNlLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnQuaCIKLSNpbmNsdWRlICJJY29u
UmVjb3JkLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQ
b29sLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBJY29uRGF0YWJhc2UqIHNoYXJlZEljb25EYXRhYmFzZSA9IDA7Ci0KLS8v
IEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCi1JY29uRGF0YWJh
c2UmIGljb25EYXRhYmFzZSgpCi17Ci0gICAgaWYgKCFzaGFyZWRJY29uRGF0YWJhc2UpCi0gICAg
ICAgIHNoYXJlZEljb25EYXRhYmFzZSA9IG5ldyBJY29uRGF0YWJhc2U7Ci0gICAgcmV0dXJuICpz
aGFyZWRJY29uRGF0YWJhc2U7Ci19Ci0KLUljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKCkge30K
LUljb25EYXRhYmFzZTo6fkljb25EYXRhYmFzZSgpIHt9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpz
ZXRDbGllbnQoSWNvbkRhdGFiYXNlQ2xpZW50Kikge30KLQotYm9vbCBJY29uRGF0YWJhc2U6Om9w
ZW4oY29uc3QgU3RyaW5nJiBwYXRoKSB7IHJldHVybiBmYWxzZTsgfQotdm9pZCBJY29uRGF0YWJh
c2U6OmNsb3NlKCkge30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkge30K
LQotSW1hZ2UqIEljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIDA7IH0KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWFkSWNvbkZv
clBhZ2VVUkxGcm9tRGlzayhjb25zdCBTdHJpbmcmKSB7fQotU3RyaW5nIEljb25EYXRhYmFzZTo6
aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gU3RyaW5nKCk7IH0KLUlt
YWdlKiBJY29uRGF0YWJhc2U6OmRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmKSB7IHJldHVybiAw
O30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0
cmluZyYpIHt9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpIHt9Ci12b2lkIEljb25E
YXRhYmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpIHt9Ci0KLUljb25Mb2FkRGVjaXNpb24gSWNvbkRhdGFiYXNlOjps
b2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIERvY3VtZW50TG9hZGVyKikgeyBy
ZXR1cm4gSWNvbkxvYWRObzsgfQotYm9vbCBJY29uRGF0YWJhc2U6Omljb25EYXRhS25vd25Gb3JJ
Y29uVVJMKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXZvaWQgSWNvbkRhdGFi
YXNlOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkge30KLWJvb2wgSWNvbkRhdGFiYXNlOjppc0Vu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi12b2lkIEljb25EYXRhYmFzZTo6c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpIHt9Ci1ib29sIEljb25EYXRhYmFzZTo6
aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotdm9p
ZCBJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCkge30KLXZvaWQgSWNvbkRhdGFi
YXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6Y2hlY2tJ
bnRlZ3JpdHlCZWZvcmVPcGVuaW5nKCkge30KLQotLy8gU3VwcG9ydCBmb3IgV2ViQ29yZVN0YXRp
c3RpY3MgaW4gV2ViS2l0Ci1zaXplX3QgSWNvbkRhdGFiYXNlOjpwYWdlVVJMTWFwcGluZ0NvdW50
KCkgeyByZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRhYmFzZTo6cmV0YWluZWRQYWdlVVJMQ291
bnQoKSB7cmV0dXJuIDA7IH0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudCgp
IHsgcmV0dXJuIDA7IH0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhE
YXRhKCkgeyByZXR1cm4gMDsgfQotCi1ib29sIEljb25EYXRhYmFzZTo6aXNPcGVuKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLVN0cmluZyBJY29uRGF0YWJhc2U6OmRhdGFiYXNlUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci1TdHJpbmcgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0
YWJhc2VGaWxlbmFtZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1MDJiMjRlLi40ZDk2
ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yODI0LDcgKzI4MjQs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogCiAg
ICAgc3RhdGljIGNvbnN0IGludCBrQ29udGV4dE1lbnVNYXJnaW4gPSAxOwogCi0jaWYgT1MoV0lO
RE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAgICAgaW50IHJpZ2h0QWxpZ25l
ZCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9NRU5VRFJPUEFMSUdOTUVOVCk7CiAjZWxzZQogICAg
IGludCByaWdodEFsaWduZWQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBmZTVh
M2Q1Li5iODU4NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIGJvb2wgU2V0dGluZ3M6OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxzZTsKIAogLy8gTk9U
RXMKIC8vICAxKSBFZGl0aW5nTWFjQmVoYXZpb3IgY29tcHJpc2VzIFRpZ2VyLCBMZW9wYXJkLCBT
bm93TGVvcGFyZCBhbmQgaU9TIGJ1aWxkcywgYXMgd2VsbCBhcyBRdFdlYktpdCB3aGVuIGJ1aWx0
IG9uIE1hYzsKLS8vICAyKSBFZGl0aW5nV2luZG93c0JlaGF2aW9yIGNvbXByaXNlcyBXaW4zMiBh
bmQgV2luQ0UgYnVpbGRzLCBhcyB3ZWxsIGFzIFF0V2ViS2l0IGFuZCBDaHJvbWl1bSB3aGVuIGJ1
aWx0IG9uIFdpbmRvd3M7CisvLyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMg
V2luMzIgYnVpbGQ7CiAvLyAgMykgRWRpdGluZ1VuaXhCZWhhdmlvciBjb21wcmlzZXMgYWxsIHVu
aXgtYmFzZWQgc3lzdGVtcywgYnV0IERhcndpbi9NYWNPUyAoYW5kIHRoZW4gYWJ1c2luZyB0aGUg
dGVybWlub2xvZ3kpOwogLy8gOTkpIE1hY0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFs
bGJhY2suCiBzdGF0aWMgRWRpdGluZ0JlaGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9y
UGxhdGZvcm0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5k
bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAK
aW5kZXggNjBiN2YyMC4uNjQ0MmVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRXZlbnRIYW5kbGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVu
dEhhbmRsZXJXaW4uY3BwCkBAIC05NCwxMSArOTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZl
bnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CiAj
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVyPiBFdmVudEhh
bmRsZXI6OmNyZWF0ZURyYWdnaW5nRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKLSNpZiBPUyhXSU5D
RSkKLSAgICByZXR1cm4gMDsKLSNlbHNlCiAgICAgcmV0dXJuIERhdGFUcmFuc2Zlcjo6Y3JlYXRl
Rm9yRHJhZ0FuZERyb3AoKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZXh0TWVudS5oCmluZGV4IGZmOWQzNmIuLmM4ZTJhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGV4dE1lbnUuaApAQCAtOTIsOSArOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9u
OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uOwotI2lmIE9TKFdJTkNFKQotICAgICAgICB1bnNpZ25lZCBtX2l0ZW1Db3VudDsKLSNl
bmRpZgogI2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5V
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDVmMWUxZGQuLjgxOTFj
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApAQCAtMjAxLDcgKzIwMSw3
IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JJbWFnZShGcmFtZSYgZnJhbWUsIE5v
ZGUmIG5vZGUsIEludFJlY3QmIGltYWdlUmVjCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZy
b21TbmFwc2hvdChzbmFwc2hvdE5vZGUoZnJhbWUsIG5vZGUpLCAmbm9kZSk7CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICghUExBVEZPUk0oV0lOKSB8fCBPUyhXSU5DRSkpCisjaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKQogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZvckxpbmsoVVJMJiwgY29uc3QgU3RyaW5nJiwgRm9udFJlbmRlcmluZ01vZGUpCiB7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXgg
NDNjZjg3Ni4uYTgxMzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAt
MTk3LDcgKzE5Nyw3IEBAIENTdHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpOwogdWludDY0X3Qg
Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpCisjaWYgUExBVEZPUk0oV0lOKQogU3RyaW5nIGxvY2Fs
VXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdVc2VyU3BlY2lm
aWNTdG9yYWdlRGlyZWN0b3J5KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBiZmE5ZDBmLi4yMjBiMzY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBA
IC02NzYsMTEgKzY3Niw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29saWRDb2xv
cigpCiB7CiAgICAgaWYgKCFtX2NoZWNrZWRGb3JTb2xpZENvbG9yICYmIGZyYW1lQ291bnQoKSA+
IDApIHsKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7Ci0gICAgICAgIC8vIFdJTkNFIFBP
UlQ6IGNoZWNrRm9yU29saWRDb2xvcigpIGRvZXNuJ3Qgc2V0IG1fY2hlY2tlZEZvclNvbGlkQ29s
b3IgdW50aWwKLSAgICAgICAgLy8gaXQgZ2V0cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBm
aW5hbCBkZWNpc2lvbi4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIEFTU0VSVChtX2NoZWNrZWRG
b3JTb2xpZENvbG9yKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gbV9pc1NvbGlkQ29sb3Ig
JiYgIW1fY3VycmVudEZyYW1lOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250R2x5cGhzLmNwcAppbmRleCBhOGNhZDQ0Li41MjBiNDU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcApAQCAtMzk0LDIwICsz
OTQsMTAgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6Z2x5
cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcihjb25zdAogICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IGZhbGxiYWNrUGFnZSAmJiBmYWxsYmFja1BhZ2UtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpID8g
ZmFsbGJhY2tQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBjaGFyYWN0ZXJGb250RGF0
YS0+bWlzc2luZ0dseXBoRGF0YSgpOwogICAgICAgICAvLyBDYWNoZSBpdCBzbyB3ZSBkb24ndCBo
YXZlIHRvIGRvIHN5c3RlbSBmYWxsYmFjayBhZ2FpbiBuZXh0IHRpbWUuCiAgICAgICAgIGlmICh2
YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgIC8v
IG1pc3NpbmdHbHlwaERhdGEgcmV0dXJucyBhIG51bGwgY2hhcmFjdGVyLCB3aGljaCBpcyBub3Qg
c3VpdGFibGUgZm9yIEdESSB0byBkaXNwbGF5LgotICAgICAgICAgICAgLy8gQWxzbywgc29tZXRp
bWVzIHdlIGNhbm5vdCBtYXAgYSBmb250IGZvciB0aGUgY2hhcmFjdGVyIG9uIFdJTkNFLCBidXQg
R0RJIGNhbiBzdGlsbAotICAgICAgICAgICAgLy8gZGlzcGxheSB0aGUgY2hhcmFjdGVyLCBwcm9i
YWJseSBiZWNhdXNlIHRoZSBmb250IHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZCBjb3JyZWN0bHku
Ci0gICAgICAgICAgICAvLyBTbyB3ZSBqdXN0IGFsd2F5cyBzZXQgdGhlIGdseXBoIHRvIGJlIHNh
bWUgYXMgdGhlIGNoYXJhY3RlciwgYW5kIGxldCBHREkgc29sdmUgaXQuCi0gICAgICAgICAgICBw
YWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgYywgY2hhcmFjdGVyRm9udERhdGEuZ2V0
KCkpOwotICAgICAgICAgICAgY2hhcmFjdGVyRm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVM
ZXZlbChzdGQ6Om1heChjaGFyYWN0ZXJGb250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCks
IG5vZGUtPmxldmVsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKICAgICAgICAgICAgIHBh
Z2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRh
KTsKICAgICAgICAgICAgIGRhdGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChz
dGQ6Om1heChkYXRhLmZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2
ZWwoKSkpOwogICAgICAgICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
ICYmIGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgIT0gSG9yaXpv
bnRhbCAmJiAhZGF0YS5mb250RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFBbmRQYWdlRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0
aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
LCBkYXRhLCBmYWxsYmFja1BhZ2UsIHBhZ2VOdW1iZXIpOwotI2VuZGlmCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogICAgIH0KQEAgLTQxNiwx
NSArNDA2LDggQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6
Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcihjb25zdAogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBuaWNlciB0byB1c2UgdGhlIG1pc3NpbmcgZ2x5cGggZnJvbSB0aGUgbGFzdCByZXNvcnQg
Zm9udCBpbnN0ZWFkLgogICAgIEdseXBoRGF0YSBkYXRhID0gcHJpbWFyeVNpbXBsZUZvbnREYXRh
KGRlc2NyaXB0aW9uKS0+bWlzc2luZ0dseXBoRGF0YSgpOwogICAgIGlmICh2YXJpYW50ID09IE5v
cm1hbFZhcmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJv
dXQgV0lOQ0UgR0RJIGhhbmRsaW5nIG5lYXIgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyIGFib3Zl
LgotICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgYywgZGF0YS5mb250
RGF0YSk7Ci0gICAgICAgIGRhdGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChz
dGQ6Om1heChkYXRhLmZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2
ZWwoKSkpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocGFnZS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpLCBwYWdlKTsKLSNlbHNlCiAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsKICAgICAgICAgZGF0YS5m
b250RGF0YS0+c2V0TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEt
Pm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7Ci0jZW5kaWYKICAgICB9
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDgy
MDMzYTAuLjk3ZTg1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTIzLDkgKzIzLDcgQEAKICAqLwogCiAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgYWxsIHBvcnRzIHN3aXRjaCB0byB1c2luZyB0aGlz
IGZpbGUuCi0jaWYgVVNFKFdJTkdESSkKLSNpbmNsdWRlICJ3aW5jZS9Gb250UGxhdGZvcm1EYXRh
LmgiCi0jZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJmcmVldHlwZS9Gb250UGxhdGZvcm1EYXRh
LmgiCiAjZWxzZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oCmluZGV4IGUxYTllNmIuLmZiZGFlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0yNyw2ICsy
Nyw0IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNlbGlmIFVTRShDQUlSTykK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VsaWYgVVNFKFdJTkdESSkKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFXaW5jZS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggYTdmNGIxZS4uNDA5
YTU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcApAQCAtNjYsOSArNjYsNiBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCiAjZW5kaWYKLSNlbGlmIE9TKFdJTkNFKQotI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVdpbkNFLmgiCi0jZGVmaW5lIFBsYXRmb3JtTWVkaWFF
bmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlCiAjZWxpZiBQTEFURk9STShXSU4pICYm
ICFVU0UoR1NUUkVBTUVSKQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGQzMDI3MjIuLjJmNzhmZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aApAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgog
Ci0jaWYgKFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSkKKyNpZiBQTEFURk9STShXSU4pCiAj
aW5jbHVkZSA8dXNwMTAuaD4KICNlbmRpZgogCkBAIC0yMzAsMTAgKzIzMCw4IEBAIHB1YmxpYzoK
IAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTeXN0ZW1Gb250OyB9Ci0jaWYgIU9TKFdJTkNFKSAvLyBkaXNhYmxlIHVudXNlZCBt
ZW1iZXJzIHRvIHNhdmUgc3BhY2UKICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZv
bnRQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNv
bnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hlOyB9Ci0jZW5kaWYKICAgICBzdGF0aWMgdm9pZCBz
ZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxk
QXBwbHlNYWNBc2NlbnRIYWNrKCk7CiAgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5n
TWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7
CkBAIC0yNTQsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CiAKLSNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpKQorI2lm
IChQTEFURk9STShXSU4pCiAgICAgdm9pZCBpbml0R0RJRm9udCgpOwogICAgIHZvaWQgcGxhdGZv
cm1Db21tb25EZXN0cm95KCk7CiAgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKQEAgLTMzNiwxMSArMzM0LDkgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRG
T1JNKFdJTikKICAgICBib29sIG1faXNTeXN0ZW1Gb250OwotI2lmICFPUyhXSU5DRSkgLy8gZGlz
YWJsZSB1bnVzZWQgbWVtYmVycyB0byBzYXZlIHNwYWNlCiAgICAgbXV0YWJsZSBTQ1JJUFRfQ0FD
SEUgbV9zY3JpcHRDYWNoZTsKICAgICBtdXRhYmxlIFNDUklQVF9GT05UUFJPUEVSVElFUyogbV9z
Y3JpcHRGb250UHJvcGVydGllczsKICNlbmRpZgotI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0
aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVXRpbGl0aWVzLmNwcAppbmRleCBkMDljNWE0Li5mN2QwYWM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuY3BwCkBAIC00MDgsNyArNDA4LDYgQEAgYm9vbCByZW5hbWVGb250KGNvbnN0
IFNoYXJlZEJ1ZmZlciYgZm9udERhdGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIFZlY3Rvcjxj
aGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIC8vIFJlbmFtZSB0aGUg
Zm9udCBhbmQgaW5zdGFsbCB0aGUgbmV3IGZvbnQgZGF0YSBpbnRvIHRoZSBzeXN0ZW0KIEhBTkRM
RSByZW5hbWVBbmRBY3RpdmF0ZUZvbnQoY29uc3QgU2hhcmVkQnVmZmVyJiBmb250RGF0YSwgY29u
c3QgU3RyaW5nJiBmb250TmFtZSkKIHsKQEAgLTQyNiw2ICs0MjUsNSBAQCBIQU5ETEUgcmVuYW1l
QW5kQWN0aXZhdGVGb250KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZm9udERhdGEsIGNvbnN0IFN0cmlu
ZyYgZm9udE5hbQogCiAgICAgcmV0dXJuIGZvbnRIYW5kbGU7CiB9Ci0jZW5kaWYKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVXRpbGl0aWVzLmgKaW5kZXggYWI4MzllMC4uODMyYTRhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRp
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVV0aWxpdGllcy5oCkBAIC0zNywxMCArMzcsNiBAQCBzdHJ1Y3QgQmlnRW5kaWFuVVNob3J0
Owogc3RydWN0IEVPVFByZWZpeDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKFdJTkNF
KQotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDggVUludDg7Ci0jZW5kaWYKLQogc3RydWN0IEVPVEhl
YWRlciB7CiAgICAgRU9USGVhZGVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5jcHAKaW5kZXggZTlhMGY5Yi4uMGE4NjVi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBp
eGVsRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJ
QlBpeGVsRGF0YS5jcHAKQEAgLTkxLDEyICs5MSwxMCBAQCB2b2lkIERJQlBpeGVsRGF0YTo6c2V0
UkdCQUJpdG1hcEFscGhhKEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIHVuc2lnbmVk
CiAgICAgQVNTRVJUKHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7CiAKICAgICBJbnRS
ZWN0IGRyYXdSZWN0KGRzdFJlY3QpOwotI2lmICFPUyhXSU5DRSkKICAgICBYRk9STSB0cmFuczsK
ICAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFucyk7CiAgICAgSW50U2l6ZSB0cmFuc2Zv
cm1lZFBvc2l0aW9uKHRyYW5zLmVEeCwgdHJhbnMuZUR5KTsKICAgICBkcmF3UmVjdC5tb3ZlKHRy
YW5zZm9ybWVkUG9zaXRpb24pOwotI2VuZGlmCiAKICAgICBpbnQgcGl4ZWxEYXRhV2lkdGggPSBw
aXhlbERhdGEuc2l6ZSgpLndpZHRoKCk7CiAgICAgaW50IHBpeGVsRGF0YUhlaWdodCA9IHBpeGVs
RGF0YS5zaXplKCkuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YmQ5NWRhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HRElFeHRyYXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdESUV4dHJhcy5oIgotCi0jaW5jbHVkZSAiU29mdExp
bmtpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgT1MoV0lOQ0UpCi1TT0ZUX0xJ
TktfTElCUkFSWShjb3JlZGxsKQotU09GVF9MSU5LX09QVElPTkFMKGNvcmVkbGwsIEFscGhhQmxl
bmQsIEJPT0wsIEFQSUVOVFJZLCAoSERDIGhkY0Rlc3QsIGludCBuWE9yaWdpbkRlc3QsIGludCBu
WU9yaWdpbkRlc3QsIGludCBuV2lkdGhEZXN0LCBpbnQgbkhlaWdodERlc3QsIEhEQyBoZGNTcmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgblhPcmlnaW5TcmMsIGludCBuWU9yaWdpblNyYywgaW50IG5XaWR0aFNyYywgaW50IG5I
ZWlnaHRTcmMsIEJMRU5ERlVOQ1RJT04gYmxlbmRGdW5jdGlvbikpCi0KLUFscGhhQmxlbmRQb2lu
dGVyVHlwZSBBbHBoYUJsZW5kUG9pbnRlcigpCi17Ci0gICAgcmV0dXJuIEFscGhhQmxlbmRQdHIo
KTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmgKaW5kZXggMDE2NjEyNC4uYzkx
MjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dE
SUV4dHJhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElF
eHRyYXMuaApAQCAtMzIsMzEgKzMyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYg
Qk9PTCAoQVBJRU5UUlkgKkFscGhhQmxlbmRQb2ludGVyVHlwZSkgKEhEQyBoZGNEZXN0LCBpbnQg
blhPcmlnaW5EZXN0LCBpbnQgbllPcmlnaW5EZXN0LCBpbnQgbldpZHRoRGVzdCwgaW50IG5IZWln
aHREZXN0LCBIREMgaGRjU3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG5YT3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMsIGludCBuV2lkdGhT
cmMsIGludCBuSGVpZ2h0U3JjLCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb24pOwogCi0jaWYg
T1MoV0lOQ0UpCi1BbHBoYUJsZW5kUG9pbnRlclR5cGUgQWxwaGFCbGVuZFBvaW50ZXIoKTsKLSNl
bmRpZgotCiBpbmxpbmUgYm9vbCBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpCiB7Ci0jaWYgT1MoV0lO
Q0UpCi0gICAgcmV0dXJuIEFscGhhQmxlbmRQb2ludGVyKCk7Ci0jZWxzZQogICAgIHJldHVybiB0
cnVlOwotI2VuZGlmCiB9CiAKIGlubGluZSBib29sIGFscGhhQmxlbmRJZlN1cHBvcnRlZChIREMg
aGRjRGVzdCwgaW50IG5YT3JpZ2luRGVzdCwgaW50IG5ZT3JpZ2luRGVzdCwgaW50IG5XaWR0aERl
c3QsIGludCBuSGVpZ2h0RGVzdCwgSERDIGhkY1NyYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgblhPcmlnaW5TcmMsIGludCBuWU9yaWdpblNyYywgaW50IG5XaWR0aFNy
YywgaW50IG5IZWlnaHRTcmMsIEJMRU5ERlVOQ1RJT04gYmxlbmRGdW5jdGlvbikKIHsKLSNpZiBP
UyhXSU5DRSkKLSAgICBBbHBoYUJsZW5kUG9pbnRlclR5cGUgYWxwaGFCbGVuZFBvaW50ZXIgPSBB
bHBoYUJsZW5kUG9pbnRlcigpOwotICAgIGlmICghYWxwaGFCbGVuZFBvaW50ZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGFscGhhQmxlbmRQb2ludGVyKGhkY0Rlc3QsIG5YT3JpZ2lu
RGVzdCwgbllPcmlnaW5EZXN0LCBuV2lkdGhEZXN0LCBuSGVpZ2h0RGVzdCwgaGRjU3JjLCBuWE9y
aWdpblNyYywgbllPcmlnaW5TcmMsIG5XaWR0aFNyYywgbkhlaWdodFNyYywgYmxlbmRGdW5jdGlv
bik7Ci0jZWxzZQogICAgIEFscGhhQmxlbmQoaGRjRGVzdCwgblhPcmlnaW5EZXN0LCBuWU9yaWdp
bkRlc3QsIG5XaWR0aERlc3QsIG5IZWlnaHREZXN0LCBoZGNTcmMsIG5YT3JpZ2luU3JjLCBuWU9y
aWdpblNyYywgbldpZHRoU3JjLCBuSGVpZ2h0U3JjLCBibGVuZEZ1bmN0aW9uKTsKLSNlbmRpZgog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSWNvbldpbi5jcHAKaW5kZXggNTBjZjNlNS4uZjNiMGQwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcApAQCAtMjcsMTEg
KzI3LDYgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKLSNpZiBPUyhXSU5DRSkKLS8vIFNIR0ZJX1NIRUxMSUNPTlNJWkUgaXMgbm90IGF2
YWlsYWJsZSBvbiBXSU5DRQotI2RlZmluZSBTSEdGSV9TSEVMTElDT05TSVpFICAgICAgICAgMAot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBzaGVsbDMy
TXVsdGlwbGVGaWxlSWNvbkluZGV4ID0gNTQ7CkBAIC02NCw5ICs1OSw2IEBAIFBhc3NSZWZQdHI8
SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihzZmkuaEljb24pKTsKICAg
ICB9CiAKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gMDsKLSNlbHNlCiAgICAgV0NIQVIgYnVm
ZmVyW01BWF9QQVRIXTsKICAgICBVSU5UIGxlbmd0aCA9IDo6R2V0U3lzdGVtRGlyZWN0b3J5Vyhi
dWZmZXIsIFdURl9BUlJBWV9MRU5HVEgoYnVmZmVyKSk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC03
OSw3ICs3MSw2IEBAIFBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgaWYgKCE6OkV4dHJhY3RJY29uRXhX
KGJ1ZmZlciwgc2hlbGwzMk11bHRpcGxlRmlsZUljb25JbmRleCwgMCwgJmhJY29uLCAxKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGhJY29uKSk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHIpCkBAIC04NywxMiArNzgsOCBAQCB2b2lkIEljb246OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcikKICAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAg
ICBjb250ZXh0LT5kcmF3SWNvbihtX2hJY29uLCByLCBESV9OT1JNQUwpOwotI2Vsc2UKICAgICBM
b2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd0NvbnRleHQoY29udGV4dCwgcik7CiAgICAgRHJhd0lj
b25FeCh3aW5kb3dDb250ZXh0LmhkYygpLCByLngoKSwgci55KCksIG1faEljb24sIHIud2lkdGgo
KSwgci5oZWlnaHQoKSwgMCwgMCwgRElfTk9STUFMKTsKLSNlbmRpZgogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhV2luLmNwcAppbmRleCA2YzE0ODY2Li45NjU4NDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAK
QEAgLTk2LDEzICs5NiwxMSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0R0RJRm9udCgpCiAg
ICAgbV9hdmdDaGFyV2lkdGggPSB0ZXh0TWV0cmljcy50bUF2ZUNoYXJXaWR0aDsKICAgICBtX21h
eENoYXJXaWR0aCA9IHRleHRNZXRyaWNzLnRtTWF4Q2hhcldpZHRoOwogICAgIGZsb2F0IHhIZWln
aHQgPSBhc2NlbnQgKiAwLjU2ZjsgLy8gQmVzdCBndWVzcyBmb3IgeEhlaWdodCBpZiBubyB4IGds
eXBoIGlzIHByZXNlbnQuCi0jaWYgIU9TKFdJTkNFKQogICAgIEdMWVBITUVUUklDUyBnbTsKICAg
ICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwg
MSB9OwogICAgIERXT1JEIGxlbiA9IEdldEdseXBoT3V0bGluZShoZGMsICd4JywgR0dPX01FVFJJ
Q1MsICZnbSwgMCwgMCwgJmlkZW50aXR5KTsKICAgICBpZiAobGVuICE9IEdESV9FUlJPUiAmJiBn
bS5nbXB0R2x5cGhPcmlnaW4ueSA+IDApCiAgICAgICAgIHhIZWlnaHQgPSBnbS5nbXB0R2x5cGhP
cmlnaW4ueTsKLSNlbmRpZgogICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsK
ICAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0obWV0cmljcy5vdG1FTVNxdWFyZSk7CiAK
QEAgLTEyMSwxMCArMTE5LDggQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lk
dGhJbml0KCkKIAogdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSNp
ZiAhT1MoV0lOQ0UpCiAgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKICAgICBk
ZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKLSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0CkBAIC0yMDAsOSArMTk2LDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBo
KEdseXBoIGdseXBoKSBjb25zdAogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKLSNlbHNlCiAgICAgSFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRj
LCBHTV9BRFZBTkNFRCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywg
bV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7CkBAIC0yMTUsMzUgKzIwOCwyNCBAQCBGbG9hdFJlY3Qg
U2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAogCiAg
ICAgcmV0dXJuIEZsb2F0UmVjdChnZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi54LCAtZ2RpTWV0
cmljcy5nbXB0R2x5cGhPcmlnaW4ueSwKICAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCAr
IG1fc3ludGhldGljQm9sZE9mZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7IAotI2VuZGlm
CiB9CiAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogewogICAgIEhXbmREQyBoZGMoMCk7Ci0jaWYgIU9TKFdJTkNFKQogICAgIFNldEdy
YXBoaWNzTW9kZShoZGMsIEdNX0FEVkFOQ0VEKTsKLSNlbmRpZgogICAgIEhHRElPQkogb2xkRm9u
dCA9IFNlbGVjdE9iamVjdChoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwogCi0jaWYgT1Mo
V0lOQ0UpCi0gICAgV0NIQVIgYyA9IGdseXBoOwotICAgIFNJWkUgZm9udFNpemU7Ci0gICAgR2V0
VGV4dEV4dGVudFBvaW50MzJXKGhkYywgJmMsIDEsICZmb250U2l6ZSk7Ci0gICAgZmxvYXQgcmVz
dWx0ID0gZm9udFNpemUuY3ggKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyA3Mi5mOwotI2Vsc2UK
ICAgICBHTFlQSE1FVFJJQ1MgZ2RpTWV0cmljczsKICAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVu
dGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwogICAgIEdldEdseXBoT3V0bGlu
ZShoZGMsIGdseXBoLCBHR09fTUVUUklDUyB8IEdHT19HTFlQSF9JTkRFWCwgJmdkaU1ldHJpY3Ms
IDAsIDAsICZpZGVudGl0eSk7CiAgICAgZmxvYXQgcmVzdWx0ID0gZ2RpTWV0cmljcy5nbUNlbGxJ
bmNYICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCiAKICAgICBTZWxlY3RPYmplY3Qo
aGRjLCBvbGRGb250KTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAhT1MoV0lOQ0Up
CiBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIFNpbXBsZUZvbnREYXRhOjpzY3JpcHRGb250UHJvcGVy
dGllcygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKSB7CkBAIC0y
NjEsNiArMjQzLDUgQEAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2Ny
aXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdAogICAgIH0KICAgICByZXR1cm4gbV9zY3JpcHRGb250
UHJvcGVydGllczsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5D
RS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVX
aW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZWJlNGIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2lu
Q0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0q
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0qIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0qCi0qIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0q
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0q
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0qIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhE
QyBnX3NjcmVlbkRDOwotCi1zdGF0aWMgSU11bHRpTGFuZ3VhZ2UgKm11bHRpTGFuZ3VhZ2UgPSAw
Owotc3RhdGljIElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gMDsKLQotSU11bHRp
TGFuZ3VhZ2UqIEZvbnRDYWNoZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpCi17Ci0gICAg
aWYgKCFtdWx0aUxhbmd1YWdlKQotICAgICAgICBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0
aUxhbmd1YWdlLCAwLCBDTFNDVFhfSU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCAo
dm9pZCoqKSZtdWx0aUxhbmd1YWdlKTsKLQotICAgIHJldHVybiBtdWx0aUxhbmd1YWdlOwotfQot
Ci1JTUxhbmdGb250TGlua1R5cGUqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQot
ewotICAgIGlmICghbGFuZ0ZvbnRMaW5rKSB7Ci0gICAgICAgIGlmIChJTXVsdGlMYW5ndWFnZSog
bWxpID0gZ2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpKQotICAgICAgICAgICAgbWxpLT5RdWVy
eUludGVyZmFjZSgmbGFuZ0ZvbnRMaW5rKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFuZ0ZvbnRM
aW5rOwotfQotCi1zdGF0aWMgYm9vbCBjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKElNTGFu
Z0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rLCBIREMgaGRjLCBIRk9OVCBoZm9udCwgVUNoYXIg
Y2hhcmFjdGVyLCBjb25zdCB3Y2hhcl90KiBmYWNlTmFtZSkKLXsKLSNpZiBVU0UoSU1MQU5HX0ZP
TlRfTElOSzIpCi0gICAgVUlOVCB1bmljb2RlUmFuZ2VzOwotICAgIGlmIChTX09LICE9IGxhbmdG
b250TGluay0+R2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCAmdW5pY29kZVJhbmdlcywgMCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBWZWN0b3I8VU5JQ09ERVJBTkdFLCA2
ND4gZ2x5cGhzZXRCdWZmZXI7Ci0gICAgZ2x5cGhzZXRCdWZmZXIucmVzaXplKHVuaWNvZGVSYW5n
ZXMpOwotCi0gICAgaWYgKFNfT0sgIT0gbGFuZ0ZvbnRMaW5rLT5HZXRGb250VW5pY29kZVJhbmdl
cyhoZGMsICZ1bmljb2RlUmFuZ2VzLCBnbHlwaHNldEJ1ZmZlci5kYXRhKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gYSBiaW5hcnkgc2Vh
cmNoLiAoWW9uZyBMaTogVGhhdCdzIGVhc3kuIEJ1dCwgaXMgaXQgZ3VhcmFudGVlZCB0aGF0IHRo
ZSByYW5nZXMgYXJlIHNvcnRlZD8pCi0gICAgZm9yIChWZWN0b3I8VU5JQ09ERVJBTkdFLCA2ND46
OmNvbnN0X2l0ZXJhdG9yIGkgPSBnbHlwaHNldEJ1ZmZlci5iZWdpbigpOyBpICE9IGdseXBoc2V0
QnVmZmVyLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPndjVG8gPj0gY2hhcmFjdGVyKQot
ICAgICAgICAgICAgcmV0dXJuIGktPndjRnJvbSA8PSBjaGFyYWN0ZXI7Ci0gICAgfQotI2Vsc2UK
LSAgICBEV09SRCBmb250Q29kZVBhZ2VzID0gMCwgY2hhckNvZGVQYWdlcyA9IDA7Ci0gICAgSFJF
U1VMVCByZXN1bHQgPSBsYW5nRm9udExpbmstPkdldEZvbnRDb2RlUGFnZXMoaGRjLCBoZm9udCwg
JmZvbnRDb2RlUGFnZXMpOwotICAgIGlmIChyZXN1bHQgIT0gU19PSykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJlc3VsdCA9IGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhjaGFy
YWN0ZXIsICZjaGFyQ29kZVBhZ2VzKTsKLSAgICBpZiAocmVzdWx0ICE9IFNfT0spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGZvbnRDb2RlUGFnZXMgfD0gRm9udFBsYXRmb3JtRGF0YTo6
Z2V0S25vd25Gb250Q29kZVBhZ2VzKGZhY2VOYW1lKTsKLSAgICBpZiAoZm9udENvZGVQYWdlcyAm
IGNoYXJDb2RlUGFnZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udExp
bmtUeXBlKiBsYW5nRm9udExpbmssIEhEQyBoZGMsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHJl
ZkZvbnQsIERXT1JEIGNvZGVQYWdlTWFzaywgVUNoYXIgY2hhcmFjdGVyID0gMCkKLXsKLSAgICBI
Rk9OVCBtbGFuZ0ZvbnQ7Ci0KLSNpZiBVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBsYW5nRm9udExpbmstPk1hcEZvbnQoaGRjLCBjb2RlUGFnZU1hc2ssIGNoYXJh
Y3RlciwgJm1sYW5nRm9udCk7Ci0jZWxzZQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbGFuZ0ZvbnRM
aW5rLT5NYXBGb250KGhkYywgY29kZVBhZ2VNYXNrLCByZWZGb250Lmhmb250KCksICZtbGFuZ0Zv
bnQpOwotI2VuZGlmCi0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHJldHVy
biBtbGFuZ0ZvbnQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RFdP
UkQsIDQ+JiBnZXRDSktDb2RlUGFnZU1hc2tzKCkKLXsKLSAgICAvLyBUaGUgZGVmYXVsdCBvcmRl
ciBpbiB3aGljaCB3ZSBsb29rIGZvciBhIGZvbnQgZm9yIGEgQ0pLIGNoYXJhY3Rlci4gSWYgdGhl
IHVzZXIncyBkZWZhdWx0IGNvZGUgcGFnZSBpcwotICAgIC8vIG9uZSBvZiB0aGVzZSwgd2Ugd2ls
bCB1c2UgaXQgZmlyc3QuCi0gICAgc3RhdGljIGNvbnN0IFVJTlQgQ0pLQ29kZVBhZ2VzW10gPSB7
Ci0gICAgICAgIDkzMiwgLyogSmFwYW5lc2UgKi8KLSAgICAgICAgOTM2LCAvKiBTaW1wbGlmaWVk
IENoaW5lc2UgKi8KLSAgICAgICAgOTUwLCAvKiBUcmFkaXRpb25hbCBDaGluZXNlICovCi0gICAg
ICAgIDk0OSAgLyogS29yZWFuICovCi0gICAgfTsKLQotICAgIHN0YXRpYyBWZWN0b3I8RFdPUkQs
IDQ+IGNvZGVQYWdlTWFza3M7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0gICAgaWYg
KCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIElN
TGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJ
bnRlcmZhY2UoKTsKLSAgICAgICAgaWYgKCFsYW5nRm9udExpbmspCi0gICAgICAgICAgICByZXR1
cm4gY29kZVBhZ2VNYXNrczsKLQotICAgICAgICBVSU5UIGRlZmF1bHRDb2RlUGFnZTsKLSAgICAg
ICAgRFdPUkQgZGVmYXVsdENvZGVQYWdlTWFzayA9IDA7Ci0gICAgICAgIGlmIChHZXRMb2NhbGVJ
bmZvKExPQ0FMRV9VU0VSX0RFRkFVTFQsIExPQ0FMRV9SRVRVUk5fTlVNQkVSIHwgTE9DQUxFX0lE
RUZBVUxUQU5TSUNPREVQQUdFLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oJmRlZmF1bHRDb2Rl
UGFnZSksIHNpemVvZihkZWZhdWx0Q29kZVBhZ2UpKSkKLSAgICAgICAgICAgIGxhbmdGb250TGlu
ay0+Q29kZVBhZ2VUb0NvZGVQYWdlcyhkZWZhdWx0Q29kZVBhZ2UsICZkZWZhdWx0Q29kZVBhZ2VN
YXNrKTsKLQotICAgICAgICBpZiAoZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1swXSB8
fCBkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzFdIHx8IGRlZmF1bHRDb2RlUGFnZSA9
PSBDSktDb2RlUGFnZXNbMl0gfHwgZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1szXSkK
LSAgICAgICAgICAgIGNvZGVQYWdlTWFza3MuYXBwZW5kKGRlZmF1bHRDb2RlUGFnZU1hc2spOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoZGVmYXVsdENvZGVQYWdlICE9IENKS0NvZGVQYWdlc1tpXSkgewotICAgICAgICAgICAgICAg
IERXT1JEIGNvZGVQYWdlTWFzazsKLSAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPkNvZGVQ
YWdlVG9Db2RlUGFnZXMoQ0pLQ29kZVBhZ2VzW2ldLCAmY29kZVBhZ2VNYXNrKTsKLSAgICAgICAg
ICAgICAgICBjb2RlUGFnZU1hc2tzLmFwcGVuZChjb2RlUGFnZU1hc2spOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjb2RlUGFnZU1hc2tzOwotfQotCi0KLXN0
cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRh
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUo
ZmFtaWx5TmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBtX2Zh
bWlseU5hbWU7Ci0gICAgSGFzaFNldDx1bnNpZ25lZD4gbV90cmFpdHNNYXNrczsKLX07Ci0KLXN0
YXRpYyBpbnQgQ0FMTEJBQ0sgdHJhaXRzSW5GYW1pbHlFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBs
b2dGb250LCBDT05TVCBURVhUTUVUUklDKiBtZXRyaWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFN
IGxQYXJhbSkKLXsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKiBwcm9jRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VHJhaXRzSW5GYW1pbHlQcm9jRGF0YSo+KGxQYXJhbSk7Ci0KLSAgICB1bnNp
Z25lZCB0cmFpdHNNYXNrID0gMDsKLSAgICB0cmFpdHNNYXNrIHw9IGxvZ0ZvbnQtPmxmSXRhbGlj
ID8gRm9udFN0eWxlSXRhbGljTWFzayA6IEZvbnRTdHlsZU5vcm1hbE1hc2s7Ci0gICAgdHJhaXRz
TWFzayB8PSBGb250VmFyaWFudE5vcm1hbE1hc2s7Ci0gICAgTE9ORyB3ZWlnaHQgPSBGb250UGxh
dGZvcm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQobG9nRm9udC0+bGZXZWlnaHQsIHByb2NE
YXRhLT5tX2ZhbWlseU5hbWUpOwotICAgIHRyYWl0c01hc2sgfD0gd2VpZ2h0ID09IEZXX1RISU4g
PyBGb250V2VpZ2h0MTAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19FWFRSQUxJR0hUID8g
Rm9udFdlaWdodDIwME1hc2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfTElHSFQgPyBGb250V2Vp
Z2h0MzAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19OT1JNQUwgPyBGb250V2VpZ2h0NDAw
TWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19NRURJVU0gPyBGb250V2VpZ2h0NTAwTWFzayA6
Ci0gICAgICAgIHdlaWdodCA9PSBGV19TRU1JQk9MRCA/IEZvbnRXZWlnaHQ2MDBNYXNrIDoKLSAg
ICAgICAgd2VpZ2h0ID09IEZXX0JPTEQgPyBGb250V2VpZ2h0NzAwTWFzayA6Ci0gICAgICAgIHdl
aWdodCA9PSBGV19FWFRSQUJPTEQgPyBGb250V2VpZ2h0ODAwTWFzayA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGb250V2VpZ2h0OTAwTWFzazsKLSAgICBwcm9jRGF0YS0+bV90
cmFpdHNNYXNrcy5hZGQodHJhaXRzTWFzayk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgRm9u
dENhY2hlOjpwbGF0Zm9ybUluaXQoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Y29tSW5pdGlh
bGl6ZSgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpjb21VbmluaXRpYWxpemUoKQotewotICAg
IGlmIChsYW5nRm9udExpbmspIHsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIGxhbmdGb250TGluayA9IDA7Ci0gICAgfQotICAgIGlmIChtdWx0aUxhbmd1YWdlKSB7
Ci0gICAgICAgIG11bHRpTGFuZ3VhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbXVsdGlMYW5ndWFn
ZSA9IDA7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgU3RyaW5nIGZhbWlseU5h
bWU7Ci0gICAgV0NIQVIgbmFtZVtMRl9GQUNFU0laRV07Ci0KLSAgICBVQ2hhciBjaGFyYWN0ZXIg
PSBjaGFyYWN0ZXJzWzBdOwotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG9yaWdGb250ID0g
b3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBpZiAoSU1MYW5nRm9udExp
bmtUeXBlKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7Ci0gICAgICAg
IEhHRElPQkogb2xkRm9udCA9IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5EQywgT0JKX0ZPTlQp
OwotICAgICAgICBIRk9OVCBoZm9udCA9IDA7Ci0gICAgICAgIERXT1JEIGNvZGVQYWdlcyA9IDA7
Ci0gICAgICAgIFVJTlQgY29kZVBhZ2UgPSAwOwotICAgICAgICAvLyBUcnkgTUxhbmcgZm9udCBs
aW5raW5nIGZpcnN0LgotICAgICAgICBsYW5nRm9udExpbmstPkdldENoYXJDb2RlUGFnZXMoY2hh
cmFjdGVyLCAmY29kZVBhZ2VzKTsKLSAgICAgICAgaWYgKGNvZGVQYWdlcyAmJiB1X2dldEludFBy
b3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hBUl9VTklGSUVEX0lERU9HUkFQSCkpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBDSksgY2hhcmFjdGVyIG1heSBiZWxvbmcgdG8gbXVsdGlwbGUgY29kZSBw
YWdlcy4gV2Ugd2FudCB0bwotICAgICAgICAgICAgLy8gZG8gZm9udCBsaW5raW5nIGFnYWluc3Qg
YSBzaW5nbGUgb25lIG9mIHRoZW0sIHByZWZlcnJpbmcgdGhlIGRlZmF1bHQKLSAgICAgICAgICAg
IC8vIGNvZGUgcGFnZSBmb3IgdGhlIHVzZXIncyBsb2NhbGUuCi0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8RFdPUkQsIDQ+JiBDSktDb2RlUGFnZU1hc2tzID0gZ2V0Q0pLQ29kZVBhZ2VNYXNrcygp
OwotICAgICAgICAgICAgdW5zaWduZWQgbnVtQ29kZVBhZ2VzID0gQ0pLQ29kZVBhZ2VNYXNrcy5z
aXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ29kZVBhZ2Vz
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBoZm9udCA9IGNyZWF0ZU1MYW5nRm9udChsYW5nRm9u
dExpbmssIGdfc2NyZWVuREMsIG9yaWdGb250LCBDSktDb2RlUGFnZU1hc2tzW2ldKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWhmb250KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBoZm9udCk7Ci0gICAgICAg
ICAgICAgICAgR2V0VGV4dEZhY2UoZ19zY3JlZW5EQywgTEZfRkFDRVNJWkUsIG5hbWUpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGhmb250ICYmICEoY29kZVBhZ2VzICYgQ0pLQ29kZVBhZ2VNYXNr
c1tpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXNrZWQgYWJvdXQgYSBjb2RlIHBh
Z2UgdGhhdCBpcyBub3Qgb25lIG9mIHRoZSBjb2RlIHBhZ2VzCi0gICAgICAgICAgICAgICAgICAg
IC8vIHJldHVybmVkIGJ5IE1MYW5nLCBzbyB0aGUgZm9udCBtaWdodCBub3QgY29udGFpbiB0aGUg
Y2hhcmFjdGVyLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnND
aGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1l
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0
T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFu
Z0ZvbnRMaW5rLT5SZWxlYXNlRm9udChoZm9udCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
Zm9udCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhmb250ID0gY3JlYXRl
TUxhbmdGb250KGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgb3JpZ0ZvbnQsIGNvZGVQYWdlcywg
Y2hhcmFjdGVyKTsKLSAgICAgICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBoZm9udCk7
Ci0gICAgICAgICAgICBHZXRUZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9GQUNFU0laRSwgbmFtZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOwot
Ci0gICAgICAgIGlmIChoZm9udCkgewotICAgICAgICAgICAgZmFtaWx5TmFtZSA9IG5hbWU7Ci0g
ICAgICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2VGb250KGhmb250KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhOjptYXBLbm93bkZvbnQoY29kZVBhZ2Vz
LCBmYW1pbHlOYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIGZhbWlseU5hbWUgPSBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgp
OwotCi0gICAgaWYgKCFmYW1pbHlOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBGSVhNRTog
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIFRoYWkgZm9udCBwcm9ibGVtCi0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwotICAgICAgICBpZiAodWJs
b2NrX2dldENvZGUoYykgPT0gVUJMT0NLX1RIQUkgJiYgZm9udERlc2NyaXB0aW9uLndlaWdodCgp
ID4gRm9udFdlaWdodE5vcm1hbCkKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWln
aHQoRm9udFdlaWdodE5vcm1hbCk7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0
ID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUp
OwotICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+aGFzaCgpICE9IG9yaWdGb250Lmhhc2go
KSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBn
ZXRDYWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0YWluKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluKQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRl
ciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3
ZSdsbCBwaWNrCi0gICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0
aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZv
bnREZXNjLCBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpLCBmYWxzZSwgc2hv
dWxkUmV0YWluKTsKLX0KLQotUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSkpOwotfQotCi12
b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLSAgICBMT0dGT05UIGxv
Z0ZvbnQ7Ci0gICAgbG9nRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0gICAgdW5z
aWduZWQgZmFtaWx5TGVuZ3RoID0gc3RkOjptaW4oZmFtaWx5TmFtZS5sZW5ndGgoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KExGX0ZBQ0VTSVpFIC0gMSkpOwotICAgIG1lbWNweShsb2dGb250Lmxm
RmFjZU5hbWUsIGZhbWlseU5hbWUuY2hhcmFjdGVycygpLCBmYW1pbHlMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKLSAgICBsb2dGb250LmxmRmFjZU5hbWVbZmFtaWx5TGVuZ3RoXSA9IDA7Ci0gICAg
bG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKLQotICAgIFRyYWl0c0luRmFtaWx5UHJvY0Rh
dGEgcHJvY0RhdGEoZmFtaWx5TmFtZSk7Ci0gICAgRW51bUZvbnRGYW1pbGllc0V4KGdfc2NyZWVu
REMsICZsb2dGb250LCB0cmFpdHNJbkZhbWlseUVudW1Qcm9jLCByZWludGVycHJldF9jYXN0PExQ
QVJBTT4oJnByb2NEYXRhKSwgMCk7Ci0gICAgY29weVRvVmVjdG9yKHByb2NEYXRhLm1fdHJhaXRz
TWFza3MsIHRyYWl0c01hc2tzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGI5NDhmOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgot
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJPcGVuVHlwZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1i
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgQ3VzdG9tRm9udENhY2hlKiBnX2N1c3RvbUZvbnRDYWNoZSA9IDA7Ci0KLXZv
aWQgc2V0Q3VzdG9tRm9udENhY2hlKEN1c3RvbUZvbnRDYWNoZSogY2FjaGUpCi17Ci0gICAgZ19j
dXN0b21Gb250Q2FjaGUgPSBjYWNoZTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZv
bnRDdXN0b21QbGF0Zm9ybURhdGEoKQotewotICAgIGlmIChnX2N1c3RvbUZvbnRDYWNoZSAmJiAh
bV9uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgZ19jdXN0b21Gb250Q2FjaGUtPnVucmVnaXN0ZXJG
b250KG1fbmFtZSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9u
dE9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50LCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKQotewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzYzsKLSAgICBmb250RGVzYy5z
ZXRDb21wdXRlZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2Muc2V0U3BlY2lmaWVkU2l6ZShzaXpl
KTsKLSAgICBmb250RGVzYy5zZXRJdGFsaWMoaXRhbGljKTsKLSAgICBmb250RGVzYy5zZXRXZWln
aHQoYm9sZCA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgcmV0dXJu
IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2MsIG1fbmFtZSwgZmFsc2UpOwotfQotCi0vLyBDcmVh
dGVzIGEgdW5pcXVlIGFuZCB1bnByZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIgdG8gYXZv
aWQgY29sbGlzaW9ucyBhbmQgdG8KLS8vIG5vdCBhbGxvdyBhY2Nlc3MgZnJvbSBDU1MuCi1zdGF0
aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCkKLXsKLSAgICBHVUlEIGZvbnRVdWlkOwot
Ci0gICAgdW5zaWduZWQgaW50KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+
KCZmb250VXVpZCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoR1VJRCkgLyBzaXpl
b2YoaW50KSA7ICsraSkKLSAgICAgICAgKihwdHIgKyBpKSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpICsgMS4wKSk7Ci0KLSAgICBTdHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmZvbnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7Ci0gICAgQVNT
RVJUKGZvbnROYW1lLmxlbmd0aCgpIDwgTEZfRkFDRVNJWkUpOwotICAgIHJldHVybiBmb250TmFt
ZS5yZXBsYWNlKCcvJywgJ18nKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE+IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyJiBidWZm
ZXIpCi17Ci0gICAgU3RyaW5nIGZvbnROYW1lID0gY3JlYXRlVW5pcXVlRm9udE5hbWUoKTsKLQot
ICAgIFZlY3RvcjxjaGFyPiByZXdyaXR0ZW5Gb250RGF0YTsKLSAgICBpZiAoIXJlbmFtZUZvbnQo
YnVmZmVyLCBmb250TmFtZSwgcmV3cml0dGVuRm9udERhdGEpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGxvY2FsQnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjphZG9wdFZlY3RvcihyZXdyaXR0ZW5Gb250RGF0YSk7Ci0gICAgaWYgKCFnX2N1c3RvbUZv
bnRDYWNoZSB8fCAhZ19jdXN0b21Gb250Q2FjaGUtPnJlZ2lzdGVyRm9udChmb250TmFtZSwgbG9j
YWxCdWZmZXIuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+KGZvbnROYW1lKTsKLX0KLQot
Ym9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcm
IGZvcm1hdCkKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5
cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJvcGVudHlwZSIpOwotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ0MmQ3NDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotI2RlZmlu
ZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSAiRm9udFdpZHRoVmFy
aWFudC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGb250UGxh
dGZvcm1EYXRhOwotICAgIGNsYXNzIENhY2hlZEZvbnQ7Ci0gICAgY2xhc3MgU2hhcmVkQnVmZmVy
OwotCi0gICAgY2xhc3MgQ3VzdG9tRm9udENhY2hlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCByZWdpc3RlckZvbnQoY29uc3QgU3RyaW5nJiBmb250TmFtZSwgY29uc3QgU2hh
cmVkQnVmZmVyKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckZvbnQoY29u
c3QgU3RyaW5nJiBmb250TmFtZSkgPSAwOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEpOwotICAgIHB1YmxpYzoKLSAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwotCi0g
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRo
VmFyaWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJp
bmdNb2RlKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJp
bmcmKTsKLQotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShTaGFyZWRCdWZmZXImKTsKLSAgICB2b2lkIHNldEN1c3RvbUZvbnRDYWNoZShDdXN0b21Gb250
Q2FjaGUqKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjYTZjYTVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2gg
TW9iaWxlIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9u
dENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3dpbi9HRElPYmplY3QuaD4KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxt
bGFuZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWV4dGVybiBIREMgZ19zY3JlZW5EQzsK
LQotc3RhdGljIHdjaGFyX3Qgc29uZ1RpU3RyW10gPSB7IDB4NWI4YiwgMHg0ZjUzLCAwIH07Ci1z
dGF0aWMgd2NoYXJfdCBoZWlUaVN0cltdID0geyAweDllZDEsIDB4NGY1MywgMCB9OwotCi1jbGFz
cyBGb250RmFtaWx5Q29kZVBhZ2VJbmZvIHsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5Q29kZVBh
Z2VJbmZvKCkKLSAgICAgICAgOiBtX2NvZGVQYWdlKDApLCBtX2NvZGVQYWdlcygwKQotICAgIHsK
LSAgICB9Ci0gICAgRm9udEZhbWlseUNvZGVQYWdlSW5mbyhjb25zdCB3Y2hhcl90KiBmYW1pbHks
IFVJTlQgY29kZVBhZ2UpCi0gICAgICAgIDogbV9mYW1pbHkoZmFtaWx5KSwgbV9jb2RlUGFnZShj
b2RlUGFnZSksIG1fY29kZVBhZ2VzKDApCi0gICAgewotICAgIH0KLSAgICBEV09SRCBjb2RlUGFn
ZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX2NvZGVQYWdlcykgewotICAgICAgICAg
ICAgaWYgKElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0
Rm9udExpbmtJbnRlcmZhY2UoKSkKLSAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPkNvZGVQ
YWdlVG9Db2RlUGFnZXMobV9jb2RlUGFnZSwgJm1fY29kZVBhZ2VzKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbV9jb2RlUGFnZXM7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1fZmFtaWx5Owot
ICAgIFVJTlQgbV9jb2RlUGFnZTsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBEV09SRCBtX2NvZGVQ
YWdlczsKLX07Ci0KLWNsYXNzIEZvbnRGYW1pbHlDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBGb250
RmFtaWx5Q2hlY2tlcihjb25zdCB3Y2hhcl90KiBmYW1pbHkpCi0gICAgICAgIDogbV9leGlzdHMo
ZmFsc2UpCi0gICAgewotICAgICAgICBFbnVtRm9udEZhbWlsaWVzKGdfc2NyZWVuREMsIGZhbWls
eSwgZW51bUZvbnRGYW1Qcm9jLCAoTFBBUkFNKXRoaXMpOwotICAgIH0KLSAgICBib29sIGlzU3Vw
cG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9leGlzdHM7IH0KLXByaXZhdGU6Ci0gICAgYm9vbCBt
X2V4aXN0czsKLSAgICBzdGF0aWMgaW50IENBTExCQUNLIGVudW1Gb250RmFtUHJvYyhjb25zdCBM
T0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9u
dFR5cGUsIExQQVJBTSBsUGFyYW0pOwotfTsKLQotY2xhc3MgVmFsaWRGb250RmFtaWx5RmluZGVy
IHsKLXB1YmxpYzoKLSAgICBWYWxpZEZvbnRGYW1pbHlGaW5kZXIoKQotICAgIHsKLSAgICAgICAg
RW51bUZvbnRGYW1pbGllcyhnX3NjcmVlbkRDLCAwLCBlbnVtRm9udEZhbVByb2MsIChMUEFSQU0p
dGhpcyk7Ci0gICAgfQotICAgIGNvbnN0IFN0cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4g
bV9mYW1pbHk7IH0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5OwotICAgIHN0YXRpYyBp
bnQgQ0FMTEJBQ0sgZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29u
c3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSk7
Ci19OwotCi1jbGFzcyBGaXhlZFNpemVGb250RGF0YTogcHVibGljIFJlZkNvdW50ZWQ8Rml4ZWRT
aXplRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBMT0dGT05UIG1fZm9udDsKLSAgICBHRElPYmpl
Y3Q8SEZPTlQ+IG1faGZvbnQ7Ci0gICAgVEVYVE1FVFJJQyBtX21ldHJpY3M7Ci0gICAgRFdPUkQg
bV9jb2RlUGFnZXM7Ci0gICAgdW5zaWduZWQgbV93ZWlnaHQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsK
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHksIHVuc2lnbmVkIHdlaWdodCwgYm9vbCBpdGFsaWMpOwotcHJp
dmF0ZToKLSAgICBGaXhlZFNpemVGb250RGF0YSgpCi0gICAgICAgIDogbV9jb2RlUGFnZXMoMCkK
LSAgICAgICAgLCBtX3dlaWdodCgwKQotICAgICAgICAsIG1faXRhbGljKGZhbHNlKQotICAgIHsK
LSAgICAgICAgbWVtc2V0KCZtX2ZvbnQsIDAsIHNpemVvZihtX2ZvbnQpKTsKLSAgICAgICAgbWVt
c2V0KCZtX21ldHJpY3MsIDAsIHNpemVvZihtX21ldHJpY3MpKTsKLSAgICB9Ci19OwotCi1zdHJ1
Y3QgRml4ZWRTaXplRm9udERhdGFLZXkgewotICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gQXRvbWljU3RyaW5nKCksIHVuc2lnbmVkIHdlaWdodCA9
IDAsIGJvb2wgaXRhbGljID0gZmFsc2UpCi0gICAgICAgIDogbV9mYW1pbHkoZmFtaWx5KQotICAg
ICAgICAsIG1fd2VpZ2h0KHdlaWdodCkKLSAgICAgICAgLCBtX2l0YWxpYyhpdGFsaWMpCi0gICAg
ewotICAgIH0KLQotICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkgOiBtX3dlaWdodCgtMikgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2VpZ2h0ID09IC0yOyB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1fZmFtaWx5LCBvdGhlci5tX2ZhbWls
eSkKLSAgICAgICAgICAgICYmIG1fd2VpZ2h0ID09IG90aGVyLm1fd2VpZ2h0Ci0gICAgICAgICAg
ICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYzsKLSAgICB9Ci0KLSAgICBBdG9taWNTdHJp
bmcgbV9mYW1pbHk7Ci0gICAgdW5zaWduZWQgbV93ZWlnaHQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsK
LX07Ci0KLXN0cnVjdCBGaXhlZFNpemVGb250RGF0YUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBmb250KQotICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7Ci0gICAgICAgICAgICBDYXNlRm9sZGluZ0hhc2g6
Omhhc2goZm9udC5tX2ZhbWlseSksCi0gICAgICAgICAgICBmb250Lm1fd2VpZ2h0LAotICAgICAg
ICAgICAgLy8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZvbnQubV9pdGFsaWMpOwotICAgICAgICB9
OwotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29k
ZXMpPihoYXNoQ29kZXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZp
eGVkU2l6ZUZvbnREYXRhS2V5JiBhLCBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgYikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IEZp
eGVkU2l6ZUZvbnREYXRhS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGaXhlZFNp
emVGb250RGF0YUtleT4gewotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgZW1wdHlWYWx1
ZSgpCi0gICAgewotICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRml4ZWRT
aXplRm9udERhdGFLZXksIGtleSwgKG51bGxBdG9tKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0g
ICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGaXhlZFNpemVGb250
RGF0YUtleSYgc2xvdCkKLSAgICB7Ci0gICAgICAgIG5ldyAoJnNsb3QpIEZpeGVkU2l6ZUZvbnRE
YXRhS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Ci0gICAg
fQotfTsKLQotaW50IENBTExCQUNLIEZvbnRGYW1pbHlDaGVja2VyOjplbnVtRm9udEZhbVByb2Mo
Y29uc3QgTE9HRk9OVCBGQVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERX
T1JEIEZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQotewotICAgICgoRm9udEZhbWlseUNoZWNrZXIq
KWxQYXJhbSktPm1fZXhpc3RzID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IENBTExC
QUNLIFZhbGlkRm9udEZhbWlseUZpbmRlcjo6ZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQg
RkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250VHlwZSwg
TFBBUkFNIGxQYXJhbSkKLXsKLSAgICBpZiAobHBlbGYtPmxmQ2hhclNldCAhPSBTWU1CT0xfQ0hB
UlNFVCkgewotICAgICAgICAoKFZhbGlkRm9udEZhbWlseUZpbmRlciopbFBhcmFtKS0+bV9mYW1p
bHkgPSBTdHJpbmcobHBlbGYtPmxmRmFjZU5hbWUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXR5cGVkZWYgVmVjdG9yPEZvbnRGYW1pbHlDb2RlUGFnZUlu
Zm8+IEtub3duRm9udHM7Ci1zdGF0aWMgS25vd25Gb250cyYga25vd25Gb250cygpCi17Ci0gICAg
c3RhdGljIEtub3duRm9udHMgZm9udHM7Ci0gICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1
ZTsKLSAgICBpZiAoZmlyc3RUaW1lKSB7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAg
ICAgICBpZiAoRm9udFBsYXRmb3JtRGF0YTo6aXNTb25nVGlTdXBwb3J0ZWQoKSkKLSAgICAgICAg
ICAgIGZvbnRzLmFwcGVuZChGb250RmFtaWx5Q29kZVBhZ2VJbmZvKHNvbmdUaVN0ciwgOTM2KSk7
Ci0gICAgfQotICAgIHJldHVybiBmb250czsKLX0KLQotc3RhdGljIFN0cmluZyBnZXREZWZhdWx0
Rm9udEZhbWlseSgpCi17Ci0gICAgaWYgKEZvbnRGYW1pbHlDaGVja2VyKEwiVGFob21hIikuaXNT
dXBwb3J0ZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZyhMIlRhaG9tYSIpOwotCi0gICAgYm9v
bCBnb29kID0gZmFsc2U7Ci0gICAgU3RyaW5nIGZhbWlseTsKLSAgICBIS0VZIGtleTsKLSAgICBp
ZiAoUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgTCJTWVNURU1cXEdESVxcU3lzRm50
IiwgMCwgMCwgJmtleSkgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBEV09SRCBtYXhsZW4s
IHR5cGU7Ci0gICAgICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoa2V5LCBMIk5tIiwgMCwgJnR5cGUs
IDAsICZtYXhsZW4pID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKLSAgICAg
ICAgICAgICsrbWF4bGVuOwotICAgICAgICAgICAgaWYgKHdjaGFyX3QqIGJ1ZmZlciA9IG5ldyB3
Y2hhcl90W21heGxlbl0pIHsKLSAgICAgICAgICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGtl
eSwgTCJObSIsIDAsICZ0eXBlLCAoTFBCWVRFKWJ1ZmZlciwgJm1heGxlbikgPT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBTdHJpbmcoYnVmZmVyLCBtYXhs
ZW4pOwotICAgICAgICAgICAgICAgICAgICBnb29kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZGVsZXRlW10gYnVmZmVyOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci0gICAgfQotICAgIGlmIChnb29kKQotICAg
ICAgICByZXR1cm4gZmFtaWx5OwotCi0gICAgcmV0dXJuIFZhbGlkRm9udEZhbWlseUZpbmRlcigp
LmZhbWlseSgpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8Rml4ZWRTaXplRm9udERhdGFLZXksIFJl
ZlB0cjxGaXhlZFNpemVGb250RGF0YT4sIEZpeGVkU2l6ZUZvbnREYXRhS2V5SGFzaCwgRml4ZWRT
aXplRm9udERhdGFLZXlUcmFpdHM+IEZpeGVkU2l6ZUZvbnRDYWNoZTsKLUZpeGVkU2l6ZUZvbnRD
YWNoZSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZTsKLQotUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0
YT4gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
dW5zaWduZWQgd2VpZ2h0LCBib29sIGl0YWxpYykKLXsKLSAgICBGaXhlZFNpemVGb250RGF0YSog
Zm9udERhdGEgPSBuZXcgRml4ZWRTaXplRm9udERhdGEoKTsKLQotICAgIGZvbnREYXRhLT5tX3dl
aWdodCA9IHdlaWdodDsKLSAgICBmb250RGF0YS0+bV9pdGFsaWMgPSBpdGFsaWM7Ci0KLSAgICBM
T0dGT05UJiB3aW5Gb250ID0gZm9udERhdGEtPm1fZm9udDsKLSAgICAvLyBUaGUgc2l6ZSBoZXJl
IGxvb2tzIHVudXN1YWwuICBUaGUgbmVnYXRpdmUgbnVtYmVyIGlzIGludGVudGlvbmFsLgotICAg
IHdpbkZvbnQubGZIZWlnaHQgPSAtNzI7Ci0gICAgd2luRm9udC5sZldpZHRoID0gMDsKLSAgICB3
aW5Gb250LmxmRXNjYXBlbWVudCA9IDA7Ci0gICAgd2luRm9udC5sZk9yaWVudGF0aW9uID0gMDsK
LSAgICB3aW5Gb250LmxmVW5kZXJsaW5lID0gZmFsc2U7Ci0gICAgd2luRm9udC5sZlN0cmlrZU91
dCA9IGZhbHNlOwotICAgIHdpbkZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwotICAg
IHdpbkZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfREVGQVVMVF9QUkVDSVM7Ci0gICAgd2luRm9u
dC5sZlF1YWxpdHkgPSBDTEVBUlRZUEVfUVVBTElUWTsgLy9ERUZBVUxUX1FVQUxJVFk7Ci0gICAg
d2luRm9udC5sZkNsaXBQcmVjaXNpb24gPSBDTElQX0RFRkFVTFRfUFJFQ0lTOwotICAgIHdpbkZv
bnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKLSAgICB3
aW5Gb250LmxmSXRhbGljID0gaXRhbGljOwotICAgIHdpbkZvbnQubGZXZWlnaHQgPSBGb250UGxh
dGZvcm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQod2VpZ2h0LCBmYW1pbHkpOwotCi0gICAg
aW50IGxlbiA9IHN0ZDo6bWluKGZhbWlseS5sZW5ndGgoKSwgKHVuc2lnbmVkIGludClMRl9GQUNF
U0laRSAtIDEpOwotICAgIHdtZW1jcHkod2luRm9udC5sZkZhY2VOYW1lLCBmYW1pbHkuY2hhcmFj
dGVycygpLCBsZW4pOwotICAgIHdpbkZvbnQubGZGYWNlTmFtZVtsZW5dID0gTCdcMCc7Ci0KLSAg
ICBmb250RGF0YS0+bV9oZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0
KCZ3aW5Gb250KSk7Ci0KLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZ19zY3Jl
ZW5EQywgZm9udERhdGEtPm1faGZvbnQuZ2V0KCkpOwotCi0gICAgR2V0VGV4dE1ldHJpY3MoZ19z
Y3JlZW5EQywgJmZvbnREYXRhLT5tX21ldHJpY3MpOwotCi0gICAgaWYgKElNTGFuZ0ZvbnRMaW5r
VHlwZSogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkg
ewotICAgICAgICBsYW5nRm9udExpbmstPkdldEZvbnRDb2RlUGFnZXMoZ19zY3JlZW5EQywgZm9u
dERhdGEtPm1faGZvbnQuZ2V0KCksICZmb250RGF0YS0+bV9jb2RlUGFnZXMpOwotICAgICAgICBm
b250RGF0YS0+bV9jb2RlUGFnZXMgfD0gRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25vd25Gb250Q29k
ZVBhZ2VzKHdpbkZvbnQubGZGYWNlTmFtZSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGdf
c2NyZWVuREMsIG9sZEZvbnQpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKGZvbnREYXRhKTsKLX0K
LQotc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZUZpeGVkU2l6ZUZv
bnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCB1bnNpZ25lZCB3ZWlnaHQsIGJvb2wg
aXRhbGljKQotewotICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwg
aXRhbGljKTsKLSAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2Zp
eGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwot
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotc3RhdGljIExPTkcgdG9H
RElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKLXsKLSAgICBzdGF0aWMgTE9ORyBn
ZGlGb250V2VpZ2h0c1tdID0gewotICAgICAgICBGV19USElOLCAgICAgICAgLy8gRm9udFdlaWdo
dDEwMAotICAgICAgICBGV19FWFRSQUxJR0hULCAgLy8gRm9udFdlaWdodDIwMAotICAgICAgICBG
V19MSUdIVCwgICAgICAgLy8gRm9udFdlaWdodDMwMAotICAgICAgICBGV19OT1JNQUwsICAgICAg
Ly8gRm9udFdlaWdodDQwMAotICAgICAgICBGV19NRURJVU0sICAgICAgLy8gRm9udFdlaWdodDUw
MAotICAgICAgICBGV19TRU1JQk9MRCwgICAgLy8gRm9udFdlaWdodDYwMAotICAgICAgICBGV19C
T0xELCAgICAgICAgLy8gRm9udFdlaWdodDcwMAotICAgICAgICBGV19FWFRSQUJPTEQsICAgLy8g
Rm9udFdlaWdodDgwMAotICAgICAgICBGV19IRUFWWSAgICAgICAgLy8gRm9udFdlaWdodDkwMAot
ICAgIH07Ci0gICAgcmV0dXJuIGdkaUZvbnRXZWlnaHRzW2ZvbnRXZWlnaHRdOwotfQotCi1jbGFz
cyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgaW50IG1fcmVmZXJlbmNl
OwotICAgIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gbV9yb290Rm9udERhdGE7Ci0gICAgQXRv
bWljU3RyaW5nIG1fZmFtaWx5OwotICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlv
bjsKLSAgICBHRElPYmplY3Q8SEZPTlQ+IG1faGZvbnRTY2FsZWQ7Ci0gICAgaW50IG1fc2l6ZTsK
LSAgICBsb25nIG1fZm9udFNjYWxlZFdpZHRoOwotICAgIGxvbmcgbV9mb250U2NhbGVkSGVpZ2h0
OwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAgICBGb250UGxhdGZvcm1Qcml2YXRlRGF0YShpbnQg
c2l6ZSwgdW5zaWduZWQgd2VpZ2h0KQotICAgICAgICA6IG1fcmVmZXJlbmNlKDEpCi0gICAgICAg
ICwgbV9mYW1pbHkoRm9udFBsYXRmb3JtRGF0YTo6ZGVmYXVsdEZvbnRGYW1pbHkoKSkKLSAgICAg
ICAgLCBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX2ZvbnRTY2FsZWRXaWR0aCgwKQotICAgICAg
ICAsIG1fZm9udFNjYWxlZEhlaWdodCgwKQotICAgICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCi0g
ICAgewotICAgICAgICBtX3Jvb3RGb250RGF0YSA9IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKG1f
ZmFtaWx5LCB3ZWlnaHQsIGZhbHNlKTsKLSAgICB9Ci0gICAgRm9udFBsYXRmb3JtUHJpdmF0ZURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KQotICAgICAgICA6IG1fcmVmZXJlbmNlKDEpCi0gICAgICAgICwgbV9zaXpl
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fZm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCi0g
ICAgICAgICwgbV9mb250U2NhbGVkV2lkdGgoMCkKLSAgICAgICAgLCBtX2ZvbnRTY2FsZWRIZWln
aHQoMCkKLSAgICAgICAgLCBtX2Rpc2FibGVkKCFmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpKQotICAgIHsKLSAgICAgICAgbV9yb290Rm9udERhdGEgPSBGaXhlZFNpemVGb250RGF0YTo6
Y3JlYXRlKGZhbWlseSwgdG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSks
IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7Ci0gICAgfQotfTsKLQotRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBkZXNpcmVkRmFtaWx5LCBib29sIHVzZURlZmF1bHRGb250
SWZOb3RQcmVzZW50KQotewotICAgIFN0cmluZyBmYW1pbHkoZGVzaXJlZEZhbWlseSk7Ci0gICAg
aWYgKCFlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGRlZmF1bHRGb250RmFtaWx5KCkpICYmICFG
b250RmFtaWx5Q2hlY2tlcihmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCkpLmlzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZh
bWlseSwgU3RyaW5nKGhlaVRpU3RyKSkgJiYgaXNTb25nVGlTdXBwb3J0ZWQoKSkKLSAgICAgICAg
ICAgIGZhbWlseSA9IFN0cmluZyhzb25nVGlTdHIpOwotICAgICAgICBlbHNlIGlmICh1c2VEZWZh
dWx0Rm9udElmTm90UHJlc2VudCkKLSAgICAgICAgICAgIGZhbWlseSA9IGRlZmF1bHRGb250RmFt
aWx5KCk7Ci0gICAgfQotCi0gICAgbV9wcml2YXRlID0gbmV3IEZvbnRQbGF0Zm9ybVByaXZhdGVE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKLXsKLSAg
ICBpZiAoIXNpemUpCi0gICAgICAgIG1fcHJpdmF0ZSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBt
X3ByaXZhdGUgPSBuZXcgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEoKGludCkoc2l6ZSArIDAuNSks
IGJvbGQgPyBGV19CT0xEIDogRldfTk9STUFMKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZv
bnRQbGF0Zm9ybURhdGEoKQotewotICAgIGlmIChpc1ZhbGlkKCkgJiYgIS0tbV9wcml2YXRlLT5t
X3JlZmVyZW5jZSkgewotICAgICAgICBpZiAobV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+cmVm
Q291bnQoKSA9PSAyKSB7Ci0gICAgICAgICAgICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkobV9w
cml2YXRlLT5tX2ZhbWlseSwgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV93ZWlnaHQsIG1f
cHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faXRhbGljKTsKLSAgICAgICAgICAgIGdfZml4ZWRT
aXplRm9udENhY2hlLnJlbW92ZShrZXkpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBtX3By
aXZhdGU7Ci0gICAgfQotfQotCi1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpv
cGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgbykKLXsKLSAgICBpZiAoaXNWYWxpZCgp
ICYmICEtLW1fcHJpdmF0ZS0+bV9yZWZlcmVuY2UpCi0gICAgICAgIGRlbGV0ZSBtX3ByaXZhdGU7
Ci0KLSAgICBpZiAobV9wcml2YXRlID0gby5tX3ByaXZhdGUpCi0gICAgICAgICsrbV9wcml2YXRl
LT5tX3JlZmVyZW5jZTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotSEZPTlQgRm9udFBsYXRm
b3JtRGF0YTo6aGZvbnQoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1fZGlzYWJsZWQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaWYgKCFtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250KQotICAg
ICAgICBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250ID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVGb250SW5kaXJlY3QoJm1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udCkp
OwotCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQuZ2V0KCk7
Ci19Ci0KLUhGT05UIEZvbnRQbGF0Zm9ybURhdGE6OmdldFNjYWxlZEZvbnRIYW5kbGUoaW50IGhl
aWdodCwgaW50IHdpZHRoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpIHx8IG1fcHJpdmF0
ZS0+bV9kaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+
bV9oZm9udFNjYWxlZCB8fCBtX3ByaXZhdGUtPm1fZm9udFNjYWxlZEhlaWdodCAhPSBoZWlnaHQg
fHwgbV9wcml2YXRlLT5tX2ZvbnRTY2FsZWRXaWR0aCAhPSB3aWR0aCkgewotICAgICAgICBtX3By
aXZhdGUtPm1fZm9udFNjYWxlZEhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbV9wcml2YXRlLT5t
X2ZvbnRTY2FsZWRXaWR0aCA9IHdpZHRoOwotICAgICAgICBMT0dGT05UIGZvbnQgPSBtX3ByaXZh
dGUtPm1fcm9vdEZvbnREYXRhLT5tX2ZvbnQ7Ci0gICAgICAgIGZvbnQubGZIZWlnaHQgPSAtaGVp
Z2h0OwotICAgICAgICBmb250LmxmV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbV9wcml2YXRlLT5t
X2hmb250U2NhbGVkID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmZvbnQp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX2hmb250U2NhbGVkLmdldCgpOwot
fQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmRpc2NhcmRGb250SGFuZGxlKCkKLXsKLSAgICBp
ZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcHJpdmF0
ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQpIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX3Jvb3RG
b250RGF0YS0+bV9oZm9udCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChtX3ByaXZhdGUtPm1faGZvbnRTY2FsZWQpIHsKLSAgICAgICAgbV9wcml2YXRl
LT5tX2hmb250U2NhbGVkID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3QgVEVYVE1FVFJJQyYgRm9udFBsYXRmb3JtRGF0
YTo6bWV0cmljcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERh
dGEtPm1fbWV0cmljczsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc1N5c3RlbUZvbnQo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IEZvbnRQbGF0Zm9ybURhdGE6
OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fc2l6ZTsKLX0KLQotY29u
c3QgRm9udERlc2NyaXB0aW9uJiBGb250UGxhdGZvcm1EYXRhOjpmb250RGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZm9udERlc2NyaXB0aW9uOwotfQotCi1j
b25zdCBBdG9taWNTdHJpbmcmIEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9mYW1pbHk7Ci19Ci0KLWNvbnN0IExPR0ZPTlQmIEZvbnRQ
bGF0Zm9ybURhdGE6OmxvZ0ZvbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1f
cm9vdEZvbnREYXRhLT5tX2ZvbnQ7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNEaXNh
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFpc1ZhbGlkKCkgfHwgbV9wcml2YXRlLT5tX2Rp
c2FibGVkOwotfQotCi1EV09SRCBGb250UGxhdGZvcm1EYXRhOjpjb2RlUGFnZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2NvZGVQYWdlczsKLX0K
LQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc1NvbmdUaVN1cHBvcnRlZCgpCi17Ci0gICAgc3Rh
dGljIGJvb2wgZXhpc3RzID0gRm9udEZhbWlseUNoZWNrZXIoc29uZ1RpU3RyKS5pc1N1cHBvcnRl
ZCgpOwotICAgIHJldHVybiBleGlzdHM7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6bWFw
S25vd25Gb250KERXT1JEIGNvZGVQYWdlcywgU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgS25vd25G
b250cyYgZm9udHMgPSBrbm93bkZvbnRzKCk7Ci0gICAgZm9yIChLbm93bkZvbnRzOjppdGVyYXRv
ciBpID0gZm9udHMuYmVnaW4oKTsgaSAhPSBmb250cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChpLT5jb2RlUGFnZXMoKSAmIGNvZGVQYWdlcykgewotICAgICAgICAgICAgZmFtaWx5ID0gaS0+
bV9mYW1pbHk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLURXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmdldEtub3duRm9u
dENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpCi17Ci0gICAgS25vd25Gb250cyYgZm9u
dHMgPSBrbm93bkZvbnRzKCk7Ci0gICAgZm9yIChLbm93bkZvbnRzOjppdGVyYXRvciBpID0gZm9u
dHMuYmVnaW4oKTsgaSAhPSBmb250cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShpLT5tX2ZhbWlseSwgU3RyaW5nKGZhbWlseSkpKQotICAgICAgICAgICAgcmV0
dXJuIGktPmNvZGVQYWdlcygpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotY29uc3QgU3Ry
aW5nJiBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpCi17Ci0gICAgc3RhdGlj
IFN0cmluZyBmYW1pbHkoZ2V0RGVmYXVsdEZvbnRGYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGZhbWls
eTsKLX0KLQotTE9ORyBGb250UGxhdGZvcm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQoTE9O
RyBnZGlGb250V2VpZ2h0LCBjb25zdCBTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIGx1Y2lkYVN0cigiTHVjaWRhIEdyYW5kZSIpOwotICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHksIGx1Y2lkYVN0cikpIHsKLSAgICAgICAgaWYgKGdkaUZvbnRXZWlnaHQg
PT0gRldfTk9STUFMKQotICAgICAgICAgICAgcmV0dXJuIEZXX01FRElVTTsKLSAgICAgICAgaWYg
KGdkaUZvbnRXZWlnaHQgPT0gRldfQk9MRCkKLSAgICAgICAgICAgIHJldHVybiBGV19TRU1JQk9M
RDsKLSAgICB9Ci0gICAgcmV0dXJuIGdkaUZvbnRXZWlnaHQ7Ci19Ci0KLSNpZm5kZWYgTkRFQlVH
Ci1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzk0NjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRl
cm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBh
bnlvbmUgb3RoZXIgdGhhbgotICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNw
cC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRQbGF0
Zm9ybURhdGFfaAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSW1wbC5oPgotCi10eXBlZGVmIHN0cnVjdCB0YWdURVhUTUVUUklDVyBURVhU
TUVUUklDOwotdHlwZWRlZiBzdHJ1Y3QgdGFnTE9HRk9OVFcgTE9HRk9OVDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGE7Ci0KLSAgICBj
bGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLQotICAgIHB1YmxpYzoKLQotICAgICAgICBGb250UGxh
dGZvcm1EYXRhKCk6IG1fcHJpdmF0ZSgwKSB7fQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGZs
b2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKLQotICAgICAgICAvLyBVc2VkIGZv
ciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNoZSdzIGhhc2ggdGFibGVzLgotICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3By
aXZhdGUoKEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKikxKSB7fQotICAgICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKHVuc2lnbmVkKW1fcHJpdmF0ZSA9
PSAxOyB9Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgdXNlRGVm
YXVsdEZvbnRJZk5vdFByZXNlbnQgPSB0cnVlKTsKLQotICAgICAgICB+Rm9udFBsYXRmb3JtRGF0
YSgpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
bykgOiBtX3ByaXZhdGUoMCkgeyBvcGVyYXRvcj0obyk7IH0KLSAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG8pOwotCi0gICAgICAgIGlu
dCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9w
cml2YXRlKSAmIH4xOyB9Ci0gICAgICAgIEhGT05UIGhmb250KCkgY29uc3Q7Ci0gICAgICAgIGNv
bnN0IFRFWFRNRVRSSUMmIG1ldHJpY3MoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdDsKLSAgICAgICAgaW50IHNpemUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0IHsgcmV0dXJuICh1bnNpZ25lZCltX3ByaXZhdGU7IH0KLSAgICAgICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkoKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdCB7ICAgICByZXR1cm4gbV9wcml2
YXRlID09IG90aGVyLm1fcHJpdmF0ZTsgfQotICAgICAgICBIRk9OVCBnZXRTY2FsZWRGb250SGFu
ZGxlKGludCBoZWlnaHQsIGludCB3aWR0aCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IExPR0ZPTlQm
IGxvZ0ZvbnQoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgZGlzY2FyZEZvbnRIYW5kbGUoKTsKLSAgICAgICAgRFdPUkQgY29kZVBhZ2VzKCkg
Y29uc3Q7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNTb25nVGlTdXBwb3J0ZWQoKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgbWFwS25vd25Gb250KERXT1JEIGNvZGVQYWdlcywgU3RyaW5nJiBmYW1p
bHkpOwotICAgICAgICBzdGF0aWMgRFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2VzKGNvbnN0IHdj
aGFyX3QqIGZhbWlseSk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRGb250
RmFtaWx5KCk7Ci0gICAgICAgIHN0YXRpYyBMT05HIGFkanVzdGVkR0RJRm9udFdlaWdodChMT05H
IGdkaUZvbnRXZWlnaHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKLQotICAgICAgICBGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBIb3Jpem9udGFsOyB9IC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi0gICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0
aW9uKSB7IH0gLy8gRklYTUU6IEltcGxlbWVudC4KLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
U3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKiBtX3ByaXZhdGU7Ci0gICAgfTsKLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ZvbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDI4NDhjLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5D
RS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5o
IgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0
aEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSERDIGdfc2NyZWVuREMgPSBHZXRE
QygwKTsKLQotY2xhc3MgU2NyZWVuRGNSZWxlYXNlciB7Ci1wdWJsaWM6Ci0gICAgflNjcmVlbkRj
UmVsZWFzZXIoKQotICAgIHsKLSAgICAgICAgUmVsZWFzZURDKDAsIGdfc2NyZWVuREMpOwotICAg
IH0KLX07Ci0KLVNjcmVlbkRjUmVsZWFzZXIgcmVsZWFzZVNjcmVlbkRjOwotCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAg
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
LXsKLSAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUZXh0KGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwg
ZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7Ci19Ci0KLWNsYXNzIFRleHRSdW5Db21wb25lbnQgewot
cHVibGljOgotICAgIFRleHRSdW5Db21wb25lbnQoKSA6IG1fdGV4dFJ1bigwLCAwKSB7fQotICAg
IFRleHRSdW5Db21wb25lbnQoY29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQgbGVuZ3RoLCBjb25zdCBU
ZXh0UnVuJiBwYXJlbnRUZXh0UnVuLCBjb25zdCBGb250ICZmb250LCBpbnQgb2Zmc2V0KTsKLSAg
ICBUZXh0UnVuQ29tcG9uZW50KGludCBzcGFjZXMsIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvZmZz
ZXQpOwotICAgIH5UZXh0UnVuQ29tcG9uZW50KCkgeyBtX3RleHRSdW47IH0KLQotICAgIGJvb2wg
aXNTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VzOyB9Ci0gICAgaW50IHRleHRMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlcyA/IG1fc3BhY2VzIDogbV90ZXh0UnVuLmxlbmd0aCgp
OyB9Ci0KLSAgICBUZXh0UnVuIG1fdGV4dFJ1bjsKLSAgICBmbG9hdCBtX3dpZHRoOwotICAgIGlu
dCBtX29mZnNldDsKLSAgICBpbnQgbV9zcGFjZXM7Ci19OwotCi1UZXh0UnVuQ29tcG9uZW50OjpU
ZXh0UnVuQ29tcG9uZW50KGNvbnN0IFVDaGFyICpzdGFydCwgaW50IGxlbmd0aCwgY29uc3QgVGV4
dFJ1biYgcGFyZW50VGV4dFJ1biwgY29uc3QgRm9udCAmZm9udCwgaW50IG8pCi0gICAgOiBtX3Rl
eHRSdW4oc3RhcnQsIGxlbmd0aCwgMCwgMAotICAgICAgICAsIHBhcmVudFRleHRSdW4uYWxsb3dz
VHJhaWxpbmdFeHBhbnNpb24oKSA/IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gOiBU
ZXh0UnVuOjpGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbgotICAgICAgICAsIHBhcmVudFRleHRSdW4u
ZGlyZWN0aW9uKCkKLSAgICAgICAgLCBwYXJlbnRUZXh0UnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUo
KSkKLSAgICAsIG1fb2Zmc2V0KG8pCi0gICAgLCBtX3NwYWNlcygwKQotewotICAgIG1fdGV4dFJ1
bi5zZXRUYWJTaXplKHBhcmVudFRleHRSdW4uYWxsb3dUYWJzKCksIHBhcmVudFRleHRSdW4udGFi
U2l6ZSgpKTsKLQotICAgIFdpZHRoSXRlcmF0b3IgaXQoJmZvbnQsIG1fdGV4dFJ1bik7Ci0gICAg
aXQuYWR2YW5jZShtX3RleHRSdW4ubGVuZ3RoKCksIDApOwotICAgIG1fd2lkdGggPSBpdC5tX3J1
bldpZHRoU29GYXI7Ci19Ci0KLVRleHRSdW5Db21wb25lbnQ6OlRleHRSdW5Db21wb25lbnQoaW50
IHMsIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvKQotICAgIDogbV90ZXh0UnVuKDAsIDApCi0gICAg
LCBtX29mZnNldChvKQotICAgICwgbV9zcGFjZXMocykKLXsKLSAgICBtX3dpZHRoID0gcyAqIGZv
bnQucHJpbWFyeUZvbnQoKS0+d2lkdGhGb3JHbHlwaCgnICcpOwotfQotCi10eXBlZGVmIFZlY3Rv
cjxUZXh0UnVuQ29tcG9uZW50LCAxMjg+IFRleHRSdW5Db21wb25lbnRzOwotCi1zdGF0aWMgaW50
IGdlbmVyYXRlQ29tcG9uZW50cyhUZXh0UnVuQ29tcG9uZW50cyogY29tcG9uZW50cywgY29uc3Qg
Rm9udCAmZm9udCwgY29uc3QgVGV4dFJ1biAmcnVuKQotewotICAgIGludCBsZXR0ZXJTcGFjaW5n
ID0gZm9udC5sZXR0ZXJTcGFjaW5nKCk7Ci0gICAgaW50IHdvcmRTcGFjaW5nID0gZm9udC53b3Jk
U3BhY2luZygpOwotICAgIGludCBwYWRkaW5nID0gcnVuLmV4cGFuc2lvbigpOwotICAgIGludCBu
dW1TcGFjZXMgPSAwOwotICAgIGlmIChwYWRkaW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcnVuLmxlbmd0aCgpOyBpKyspCi0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1Nw
YWNlKHJ1bltpXSkpCi0gICAgICAgICAgICAgICAgKytudW1TcGFjZXM7Ci0gICAgfQotCi0gICAg
aW50IG9mZnNldCA9IDA7Ci0gICAgaWYgKGxldHRlclNwYWNpbmcpIHsKLSAgICAgICAgLy8gbmVl
ZCB0byBkcmF3IGV2ZXJ5IGxldHRlciBvbiBpdCdzIG93bgotICAgICAgICBpbnQgc3RhcnQgPSAw
OwotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1blswXSkpIHsKLSAgICAgICAgICAg
IGludCBhZGQgPSAwOwotICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAg
ICAgIGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0g
YWRkOwotICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gYWRkICsgbGV0dGVyU3BhY2luZyArIGNvbXBvbmVu
dHMtPmxhc3QoKS5tX3dpZHRoOwotICAgICAgICAgICAgc3RhcnQgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
ICAgIFVDaGFyIGNoID0gcnVuW2ldOwotICAgICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGNoKSAm
JiBVMTZfSVNfVFJBSUwocnVuW2ktMV0pKQotICAgICAgICAgICAgICAgIGNoID0gVTE2X0dFVF9T
VVBQTEVNRU5UQVJZKGNoLCBydW5baS0xXSk7Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlM
KGNoKSB8fCBVX0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTU5fTUFTSykKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuW2ldKSkg
ewotICAgICAgICAgICAgICAgIGludCBhZGQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChpIC0g
c3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0
UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBpIC0gc3RhcnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biwg
Zm9udCwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRz
LT5sYXN0KCkubV93aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChudW1TcGFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkID0g
cGFkZGluZy9udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwot
ICAgICAgICAgICAgICAgICAgICAtLW51bVNwYWNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwg
b2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHdvcmRTcGFjaW5nICsgYWRkICsg
Y29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGggKyBsZXR0ZXJTcGFjaW5nOwotICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoaSAtIHN0YXJ0ID4gMCkgewotICAgICAgICAgICAgICAgIGNv
bXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0
YXJ0LCBpIC0gc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvbnQsIG9mZnNldCkpOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBj
b21wb25lbnRzLT5sYXN0KCkubV93aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzdGFydCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5sZW5n
dGgoKSAtIHN0YXJ0ID4gMCkgewotICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRS
dW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwg
b2Zmc2V0KSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lk
dGg7Ci0gICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ICs9IGxldHRlclNwYWNpbmc7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBydW4ubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFj
ZShydW5baV0pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgLSBzdGFydCA+IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNo
YXJhY3RlcnMxNigpICsgc3RhcnQsIGkgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LCBvZmZzZXQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAg
ICAgICAgICBpZiAobnVtU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRp
bmcvbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIC09IGFkZDsKLSAgICAg
ICAgICAgICAgICAgICAgLS1udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIGZvbnQsIG9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBhZGQgKyBjb21wb25lbnRzLT5sYXN0KCku
bV93aWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ICs9IHdvcmRTcGFjaW5nOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5sZW5ndGgoKSAtIHN0YXJ0ID4g
MCkgewotICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVu
LmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7Ci0gICAg
ICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBpZiAodG8g
PCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLSAgICBpZiAoZnJvbSA8IDApCi0gICAg
ICAgIGZyb20gPSAwOwotCi0gICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKLSAgICBp
bnQgdyA9IGdlbmVyYXRlQ29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7Ci0KLSAg
ICBmbG9hdCB3aWR0aE9mRHJhd25UZXh0ID0gMDsKLSAgICBpbnQgY3VyUG9zID0gMDsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IChpbnQpY29tcG9uZW50cy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBUZXh0UnVuQ29tcG9uZW50JiBjb21wID0gY29tcG9uZW50cy5hdChpKTsKLSAgICAg
ICAgaW50IGxlbiA9IGNvbXAudGV4dExlbmd0aCgpOwotICAgICAgICBpbnQgY3VyRW5kID0gY3Vy
UG9zICsgbGVuOwotICAgICAgICBpZiAoY3VyUG9zIDwgdG8gJiYgZnJvbSA8IGN1ckVuZCAmJiAh
Y29tcC5pc1NwYWNlKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcHQgPSBwb2ludDsKLSAg
ICAgICAgICAgIGlmIChydW4ucnRsKCkpCi0gICAgICAgICAgICAgICAgcHQuc2V0WChwb2ludC54
KCkgKyB3IC0gY29tcC5tX29mZnNldCAtIGNvbXAubV93aWR0aCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcHQuc2V0WChwb2ludC54KCkgKyBjb21wLm1fb2Zmc2V0KTsKLSAg
ICAgICAgICAgIHdpZHRoT2ZEcmF3blRleHQgKz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29t
cC5tX3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1
clBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VyUG9zICs9IGxlbjsKLSAgICAgICAgaWYgKGZy
b20gPCBjdXJQb3MpCi0gICAgICAgICAgICBmcm9tID0gY3VyUG9zOwotICAgIH0KLSAgICByZXR1
cm4gd2lkdGhPZkRyYXduVGV4dDsKLX0KLQotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0Zv
ckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1
biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0
UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QK
LXsKLSAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJh
dGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKLSAgICByZXR1cm4gdzsKLX0K
LQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1M
LCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJl
cnMKLSAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtp
dC5vcmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgcG9zaXRp
b24gPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBUZXh0UnVuQ29tcG9uZW50cyBj
b21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAq
dGhpcywgcnVuKTsKLQotICAgIGlmIChwb3NpdGlvbiA+PSB3KQotICAgICAgICByZXR1cm4gcnVu
Lmxlbmd0aCgpOwotCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgaWYgKHJ1bi5ydGwoKSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0
KGkpOwotICAgICAgICAgICAgaW50IHhlID0gdyAtIGNvbXAubV9vZmZzZXQ7Ci0gICAgICAgICAg
ICBpbnQgeHMgPSB4ZSAtIGNvbXAubV93aWR0aDsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+
PSB4cykKLSAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsgKGNvbXAuaXNTcGFjZSgpCi0g
ICAgICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8aW50PigocG9zaXRpb24gLSB4ZSkgKiBj
b21wLm1fc3BhY2VzIC8gc3RkOjptYXgoMS5mLCBjb21wLm1fd2lkdGgpICsgMC41KQotICAgICAg
ICAgICAgICAgICAgICA6IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb21wLm1fdGV4
dFJ1biwgcG9zaXRpb24gLSB4cywgaW5jbHVkZVBhcnRpYWxHbHlwaHMpKTsKLQotICAgICAgICAg
ICAgb2Zmc2V0ICs9IGNvbXAudGV4dExlbmd0aCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBjb25zdCBUZXh0UnVuQ29tcG9uZW50JiBjb21wID0gY29tcG9uZW50cy5h
dChpKTsKLSAgICAgICAgICAgIGludCB4cyA9IGNvbXAubV9vZmZzZXQ7Ci0gICAgICAgICAgICBp
bnQgeGUgPSB4cyArIGNvbXAubV93aWR0aDsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSB4
ZSkgewotICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiAtIHhzID49IHhlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsgY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG9mZnNldCArIChjb21wLmlzU3BhY2UoKQotICAgICAgICAgICAgICAgICAg
ICA/IHN0YXRpY19jYXN0PGludD4oKHBvc2l0aW9uIC0geHMpICogY29tcC5tX3NwYWNlcyAvIHN0
ZDo6bWF4KDEuZiwgY29tcC5tX3dpZHRoKSArIDAuNSkKLSAgICAgICAgICAgICAgICAgICAgOiBv
ZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29tcC5tX3RleHRSdW4sIHBvc2l0aW9uIC0g
eHMsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
ZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJ1bi5sZW5ndGgoKTsKLX0KLQotCi1zdGF0aWMgZmxvYXQgY3Vyc29yVG9YKGNvbnN0IEZvbnQq
IGZvbnQsIGNvbnN0IFRleHRSdW5Db21wb25lbnRzJiBjb21wb25lbnRzLCBpbnQgd2lkdGgsIGJv
b2wgcnRsLCBpbnQgY3Vyc29yKQotewotICAgIGludCBzdGFydCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRl
eHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOwotICAgICAgICBpZiAoc3Rh
cnQgKyBjb21wLnRleHRMZW5ndGgoKSA8PSBjdXJzb3IpIHsKLSAgICAgICAgICAgIHN0YXJ0ICs9
IGNvbXAudGV4dExlbmd0aCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaW50IHhzID0gY29tcC5tX29mZnNldDsKLSAgICAgICAgaWYgKHJ0bCkKLSAgICAgICAg
ICAgIHhzID0gd2lkdGggLSB4cyAtIGNvbXAubV93aWR0aDsKLQotICAgICAgICBpbnQgcG9zID0g
Y3Vyc29yIC0gc3RhcnQ7Ci0gICAgICAgIGlmIChjb21wLmlzU3BhY2UoKSkgewotICAgICAgICAg
ICAgaWYgKHJ0bCkKLSAgICAgICAgICAgICAgICBwb3MgPSBjb21wLnRleHRMZW5ndGgoKSAtIHBv
czsKLSAgICAgICAgICAgIHJldHVybiB4cyArIHBvcyAqIGNvbXAubV93aWR0aCAvIGNvbXAubV9z
cGFjZXM7Ci0gICAgICAgIH0KLSAgICAgICAgV2lkdGhJdGVyYXRvciBpdChmb250LCBjb21wLm1f
dGV4dFJ1bik7Ci0gICAgICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgICAgICBpdC5h
ZHZhbmNlKHBvcywgJmdseXBoQnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHhzICsgaXQubV9ydW5X
aWR0aFNvRmFyOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLUZsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwdCwKLSAgICBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAg
ICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJhdGVDb21w
b25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKLQotICAgIGlmICghZnJvbSAmJiB0byA9
PSBydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpLCBwdC55KCks
IHcsIGgpOwotCi0gICAgZmxvYXQgeDEgPSBjdXJzb3JUb1godGhpcywgY29tcG9uZW50cywgdywg
cnVuLnJ0bCgpLCBmcm9tKTsKLSAgICBmbG9hdCB4MiA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25l
bnRzLCB3LCBydW4ucnRsKCksIHRvKTsKLSAgICBpZiAoeDIgPCB4MSkKLSAgICAgICAgc3RkOjpz
d2FwKHgxLCB4Mik7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCks
IHgyIC0geDEsIGgpOwotfQotCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JD
b21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4
cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dseXBoUGFnZVRyZWVOb2RlV2luQ0UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5D
RS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzU1ZjQuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5v
ZGVXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
RFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7Ci0KLXR5
cGVkZWYgdW5zaWduZWQgKCpmdW5jR2V0Q2hhckNvZGVQYWdlcykodW5zaWduZWQgc2hvcnQgYywg
dW5zaWduZWQmIGxhc3RQb3MpOwotZnVuY0dldENoYXJDb2RlUGFnZXMgZ2V0Q2hhckNvZGVQYWdl
cyA9IDA7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBpZiAobGVuZ3RoICE9IGJ1ZmZlckxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpKSB7Ci0gICAgICAgIERXT1JEIGZvbnRDb2RlUGFnZXMgPSBmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuY29kZVBhZ2VzKCk7Ci0gICAgICAgIGlmIChmb250Q29kZVBhZ2VzKSB7Ci0g
ICAgICAgICAgICBpZiAoZ2V0Q2hhckNvZGVQYWdlcykgewotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxhc3RQb3MgPSAwOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBEV09SRCBhY3R1YWxD
b2RlUGFnZXMgPSBnZXRDaGFyQ29kZVBhZ2VzKGJ1ZmZlcltpXSwgbGFzdFBvcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghYWN0dWFsQ29kZVBhZ2VzIHx8IChhY3R1YWxDb2RlUGFnZXMgJiBm
b250Q29kZVBhZ2VzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvcklu
ZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZz
ZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0Zv
bnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICBEV09SRCBhY3R1YWxDb2RlUGFnZXM7Ci0gICAgICAgICAgICAgICAg
ICAgIGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhidWZmZXJbaV0sICZhY3R1YWxDb2Rl
UGFnZXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbENvZGVQYWdlcyB8fCAoYWN0
dWFsQ29kZVBhZ2VzICYgZm9udENvZGVQYWdlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhE
YXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBzZXRH
bHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFkaWVudFdpbkNFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzM1ODgxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMo
Y29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYg
YikKLXsKLSAgICByZXR1cm4gYS5zdG9wIDwgYi5zdG9wOwotfQotCi1jb25zdCBWZWN0b3I8R3Jh
ZGllbnQ6OkNvbG9yU3RvcCwgMj4mIEdyYWRpZW50OjpnZXRTdG9wcygpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3N0b3BzU29ydGVkKSB7Ci0gICAgICAgIGlmIChtX3N0b3BzLnNpemUoKSkKLSAgICAg
ICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBj
b21wYXJlU3RvcHMpOwotICAgICAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1fc3RvcHM7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
KiBjLCBjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgYy0+ZmlsbFJlY3QociwgdGhpcyk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2OWYwMC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHRElFeHRyYXMuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKLSNpbmNs
dWRlICJTaGFyZWRCaXRtYXAuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1
ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVm
IHZvaWQgKCpGdW5jR3JhZGllbnRGaWxsUmVjdExpbmVhcikoSERDIGhkYywgY29uc3QgSW50UmVj
dCYgciwgY29uc3QgSW50UG9pbnQmIHAwLCBjb25zdCBJbnRQb2ludCYgcDEsIGNvbnN0IFZlY3Rv
cjxHcmFkaWVudDo6Q29sb3JTdG9wPiYgc3RvcHMpOwotdHlwZWRlZiB2b2lkICgqRnVuY0dyYWRp
ZW50RmlsbFJlY3RSYWRpYWwpKEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFBv
aW50JiBwMCwgY29uc3QgSW50UG9pbnQmIHAxLCBmbG9hdCByMCwgZmxvYXQgcjEsIGNvbnN0IFZl
Y3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYgc3RvcHMpOwotRnVuY0dyYWRpZW50RmlsbFJlY3RM
aW5lYXIgZ19saW5lYXJHcmFkaWVudEZpbGxlciA9IDA7Ci1GdW5jR3JhZGllbnRGaWxsUmVjdFJh
ZGlhbCBnX3JhZGlhbEdyYWRpZW50RmlsbGVyID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlz
WmVybyhkb3VibGUgZCkKLXsKLSAgICByZXR1cm4gZCA+IDAgPyBkIDw9IDEuRS0xMCA6IGQgPj0g
LTEuRS0xMDsKLX0KLQotLy8gc3RhYmxlUm91bmQgcm91bmRzIC0wLjUgdG8gMCwgd2hlcmUgbHJv
dW5kIHJvdW5kcyAtMC41IHRvIC0xLgotc3RhdGljIGlubGluZSBpbnQgc3RhYmxlUm91bmQoZG91
YmxlIGQpCi17Ci0gICAgaWYgKGQgPiAwKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihkICsgMC41KTsKLQotICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKLSAgICByZXR1
cm4gaSAtIGQgPiAwLjUgPyBpIC0gMSA6IGk7Ci19Ci0KLS8vIFVubGlrZSBlbmNsb3NpbmdJbnRS
ZWN0KCksIHRoaXMgZnVuY3Rpb24gZG9lcyBzdHJpY3Qgcm91bmRpbmcuCi1zdGF0aWMgaW5saW5l
IEludFJlY3Qgcm91bmRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICByZXR1cm4gSW50
UmVjdChzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIueSgpKSwgc3RhYmxlUm91bmQo
ci5tYXhYKCkpIC0gc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLm1heFkoKSkgLSBz
dGFibGVSb3VuZChyLnkoKSkpOwotfQotCi0vLyBSb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbgotY2xh
c3MgUm90YXRpb25UcmFuc2Zvcm0gewotcHVibGljOgotICAgIFJvdGF0aW9uVHJhbnNmb3JtKCkK
LSAgICAgICAgOiBtX2Nvc0EoMS4pCi0gICAgICAgICwgbV9zaW5BKDAuKQotICAgICAgICAsIG1f
cHJlU2hpZnRYKDApCi0gICAgICAgICwgbV9wcmVTaGlmdFkoMCkKLSAgICAgICAgLCBtX3Bvc3RT
aGlmdFgoMCkKLSAgICAgICAgLCBtX3Bvc3RTaGlmdFkoMCkKLSAgICB7Ci0gICAgfQotICAgIFJv
dGF0aW9uVHJhbnNmb3JtIG9wZXJhdG9yLSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSb3RhdGlv
blRyYW5zZm9ybSBydG47Ci0gICAgICAgIHJ0bi5tX2Nvc0EgPSBtX2Nvc0E7Ci0gICAgICAgIHJ0
bi5tX3NpbkEgPSAtbV9zaW5BOwotICAgICAgICBydG4ubV9wcmVTaGlmdFggPSBtX3Bvc3RTaGlm
dFg7Ci0gICAgICAgIHJ0bi5tX3ByZVNoaWZ0WSA9IG1fcG9zdFNoaWZ0WTsKLSAgICAgICAgcnRu
Lm1fcG9zdFNoaWZ0WCA9IG1fcHJlU2hpZnRYOwotICAgICAgICBydG4ubV9wb3N0U2hpZnRZID0g
bV9wcmVTaGlmdFk7Ci0gICAgICAgIHJldHVybiBydG47Ci0gICAgfQotICAgIHZvaWQgbWFwKGRv
dWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUqIHgyLCBkb3VibGUqIHkyKSBjb25zdAotICAgIHsK
LSAgICAgICAgeDEgKz0gbV9wcmVTaGlmdFg7Ci0gICAgICAgIHkxICs9IG1fcHJlU2hpZnRZOwot
ICAgICAgICAqeDIgPSB4MSAqIG1fY29zQSArIHkxICogbV9zaW5BICsgbV9wb3N0U2hpZnRYOwot
ICAgICAgICAqeTIgPSB5MSAqIG1fY29zQSAtIHgxICogbV9zaW5BICsgbV9wb3N0U2hpZnRZOwot
ICAgIH0KLSAgICB2b2lkIG1hcChpbnQgeDEsIGludCB5MSwgaW50KiB4MiwgaW50KiB5MikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHgxICs9IG1fcHJlU2hpZnRYOwotICAgICAgICB5MSArPSBtX3By
ZVNoaWZ0WTsKLSAgICAgICAgKngyID0gc3RhYmxlUm91bmQoeDEgKiBtX2Nvc0EgKyB5MSAqIG1f
c2luQSkgKyBtX3Bvc3RTaGlmdFg7Ci0gICAgICAgICp5MiA9IHN0YWJsZVJvdW5kKHkxICogbV9j
b3NBIC0geDEgKiBtX3NpbkEpICsgbV9wb3N0U2hpZnRZOwotICAgIH0KLQotICAgIGRvdWJsZSBt
X2Nvc0E7Ci0gICAgZG91YmxlIG1fc2luQTsKLSAgICBpbnQgbV9wcmVTaGlmdFg7Ci0gICAgaW50
IG1fcHJlU2hpZnRZOwotICAgIGludCBtX3Bvc3RTaGlmdFg7Ci0gICAgaW50IG1fcG9zdFNoaWZ0
WTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50UG9pbnQgbWFwUG9p
bnQoY29uc3QgSW50UG9pbnQmIHAsIGNvbnN0IFQmIHQpCi17Ci0gICAgaW50IHgsIHk7Ci0gICAg
dC5tYXAocC54KCksIHAueSgpLCAmeCwgJnkpOwotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1hcFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IFQmIHQpCi17Ci0gICAgZG91YmxlIHgsIHk7Ci0g
ICAgdC5tYXAocC54KCksIHAueSgpLCAmeCwgJnkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHN0
YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgVHJhbnNmb3JtLCBjbGFzcyBSZWN0LCBjbGFzcyBWYWx1ZT4gc3RhdGljIGlubGlu
ZSBSZWN0IG1hcFJlY3QoY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgVmFsdWUgeFs0XSwgeVs0XTsKLSAgICBWYWx1ZSBsLCB0LCByLCBiOwotICAg
IHIgPSByZWN0Lm1heFgoKSAtIDE7Ci0gICAgYiA9IHJlY3QubWF4WSgpIC0gMTsKLSAgICB0cmFu
c2Zvcm0ubWFwKHJlY3QueCgpLCByZWN0LnkoKSwgeCwgeSk7Ci0gICAgdHJhbnNmb3JtLm1hcChy
ZWN0LngoKSwgYiwgeCArIDEsIHkgKyAxKTsKLSAgICB0cmFuc2Zvcm0ubWFwKHIsIGIsIHggKyAy
LCB5ICsgMik7Ci0gICAgdHJhbnNmb3JtLm1hcChyLCByZWN0LnkoKSwgeCArIDMsIHkgKyAzKTsK
LSAgICBsID0gciA9IHhbM107Ci0gICAgdCA9IGIgPSB5WzNdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmICh4W2ldIDwgbCkKLSAgICAgICAgICAgIGwgPSB4
W2ldOwotICAgICAgICBlbHNlIGlmICh4W2ldID4gcikKLSAgICAgICAgICAgIHIgPSB4W2ldOwot
Ci0gICAgICAgIGlmICh5W2ldIDwgdCkKLSAgICAgICAgICAgIHQgPSB5W2ldOwotICAgICAgICBl
bHNlIGlmICh5W2ldID4gYikKLSAgICAgICAgICAgIGIgPSB5W2ldOwotICAgIH0KLQotICAgIHJl
dHVybiBJbnRSZWN0KGwsIHQsIHIgLSBsICsgMSwgYiAtIHQgKyAxKTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgVD4gc3RhdGljIGlubGluZSBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgVCYgdHJhbnNmb3JtKQotewotICAgIHJldHVybiBtYXBSZWN0PFQsIEludFJlY3Qs
IGludD4ocmVjdCwgdHJhbnNmb3JtKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlu
bGluZSBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFQmIHRy
YW5zZm9ybSkKLXsKLSAgICByZXR1cm4gbWFwUmVjdDxULCBGbG9hdFJlY3QsIGRvdWJsZT4ocmVj
dCwgdHJhbnNmb3JtKTsKLX0KLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
RGF0YSB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSgp
Ci0gICAgICAgIDogbV90cmFuc2Zvcm0oKQotICAgICAgICAsIG1fb3BhY2l0eSgxLjApCi0gICAg
ewotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLSAgICBmbG9hdCBt
X29wYWNpdHk7Ci19OwotCi1lbnVtIEFscGhhUGFpbnRUeXBlIHsKLSAgICBBbHBoYVBhaW50Tm9u
ZSwKLSAgICBBbHBoYVBhaW50SW1hZ2UsCi0gICAgQWxwaGFQYWludE90aGVyLAotfTsKLQotY2xh
c3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZURhdGEgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShIREMgZGMpCi0gICAgICAgIDogbV9kYyhkYykKLSAgICB7Ci0gICAgfQotICAg
IH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQotICAgIHsKLSAgICAgICAgd2hpbGUg
KCFtX2JhY2t1cERhdGEuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdG9yZSgpOwotICAgIH0K
LQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgewotICAgICAgICBt
X3RyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybS5zY2FsZU5vblVu
aWZvcm0oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJv
dGF0ZShmbG9hdCByYWRpYW5zKQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0ucm90YXRlKHJh
ZDJkZWcocmFkaWFucykpOwotICAgIH0KLQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0gKj0gdHJh
bnNmb3JtOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07Ci0gICAg
fQotCi0gICAgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKLSAgICB9Ci0KLSAgICBJ
bnRQb2ludCBtYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotICAgIH0KLQotICAgIEZs
b2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotICAgIH0KLQotICAg
IEZsb2F0U2l6ZSBtYXBTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGRvdWJsZSB3LCBoOwotICAgICAgICBtX3RyYW5zZm9ybS5tYXAoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCB3LCBoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShzdGF0aWNf
Y2FzdDxmbG9hdD4odyksIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RjKQotICAgICAgICAgICAgU2F2ZURDKG1f
ZGMpOwotCi0gICAgICAgIG1fYmFja3VwRGF0YS5hcHBlbmQoKnN0YXRpY19jYXN0PEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURhdGEqPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2JhY2t1cERhdGEuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2RjKQotICAgICAgICAgICAgUmVzdG9y
ZURDKG1fZGMsIC0xKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVE
YXRhOjpvcGVyYXRvcj0obV9iYWNrdXBEYXRhLmxhc3QoKSk7Ci0gICAgICAgIG1fYmFja3VwRGF0
YS5yZW1vdmVMYXN0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0bWFwICYmIG1fYml0bWFwLT5oYXNBbHBoYSgpOyB9Ci0KLSAgICBQYXNzUmVmUHRy
PFNoYXJlZEJpdG1hcD4gZ2V0VHJhbnNwYXJlbnRMYXllckJpdG1hcChJbnRSZWN0JiBvcmlnUmVj
dCwgQWxwaGFQYWludFR5cGUgYWxwaGFQYWludCwgUkVDVCYgYm1wUmVjdCwgYm9vbCBjaGVja0Ns
aXBCb3gsIGJvb2wgZm9yY2UpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9vcGFjaXR5IDw9
IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoZm9yY2UgfHwgbV9vcGFj
aXR5IDwgMS4pICB7Ci0gICAgICAgICAgICBpZiAoY2hlY2tDbGlwQm94KSB7Ci0gICAgICAgICAg
ICAgICAgUkVDVCBjbGlwQm94OwotICAgICAgICAgICAgICAgIGludCBjbGlwVHlwZSA9IEdldENs
aXBCb3gobV9kYywgJmNsaXBCb3gpOwotICAgICAgICAgICAgICAgIGlmIChjbGlwVHlwZSA9PSBT
SU1QTEVSRUdJT04gfHwgY2xpcFR5cGUgPT0gQ09NUExFWFJFR0lPTikKLSAgICAgICAgICAgICAg
ICAgICAgb3JpZ1JlY3QuaW50ZXJzZWN0KGNsaXBCb3gpOwotICAgICAgICAgICAgICAgIGlmIChv
cmlnUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBTaGFyZWRC
aXRtYXA6OmNyZWF0ZShvcmlnUmVjdC5zaXplKCksIGFscGhhUGFpbnQgPT0gQWxwaGFQYWludE5v
bmUgPyBCaXRtYXBJbmZvOjpCaXRDb3VudDE2IDogQml0bWFwSW5mbzo6Qml0Q291bnQzMiwgZmFs
c2UpOwotICAgICAgICAgICAgU2V0UmVjdCgmYm1wUmVjdCwgMCwgMCwgb3JpZ1JlY3Qud2lkdGgo
KSwgb3JpZ1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKGJtcCkgewotICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYWxwaGFQYWludCkgewotICAgICAgICAgICAgICAgIGNhc2UgQWxwaGFQ
YWludE5vbmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBBbHBoYVBhaW50SW1hZ2U6Ci0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEJpdG1hcDo6RENI
b2xkZXIgZGMoYm1wLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYy5nZXQo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJsdChkYy5nZXQoKSwgMCwgMCwg
b3JpZ1JlY3Qud2lkdGgoKSwgb3JpZ1JlY3QuaGVpZ2h0KCksIG1fZGMsIG9yaWdSZWN0LngoKSwg
b3JpZ1JlY3QueSgpLCBTUkNDT1BZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Ym1wLT5pczMyYml0KCkgJiYgKCFtX2JpdG1hcCB8fCBtX2JpdG1hcC0+aXMxNmJpdCgpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWxwaGEgY2hhbm5lbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWxzID0gKHVuc2lnbmVk
KilibXAtPmJ5dGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkKiBjb25zdCBwaXhlbHNFbmQgPSBwaXhlbHMgKyBibXAtPmJpdG1hcEluZm8oKS5udW1Q
aXhlbHMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBpeGVscyA8
IHBpeGVsc0VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBpeGVs
cyB8PSAweEZGMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytw
aXhlbHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJtcDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvL2Nhc2UgQWxwaGFQYWludE90
aGVyOgotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1lbXNl
dChibXAtPmJ5dGVzKCksIDB4RkYsIGJtcC0+Yml0bWFwSW5mbygpLm51bVBpeGVscygpICogNCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBibXA7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGJtcFJlY3QgPSBvcmlnUmVjdDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
dm9pZCBwYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0bWFwKEhEQyBoZGMsIFNoYXJlZEJpdG1h
cCogYm1wLCBjb25zdCBJbnRSZWN0JiBvcmlnUmVjdCwgQWxwaGFQYWludFR5cGUgYWxwaGFQYWlu
dCwgY29uc3QgUkVDVCYgYm1wUmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChoZGMgPT0gbV9kYykK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYWxwaGFQYWludCA9PSBBbHBoYVBh
aW50T3RoZXIgJiYgaGFzQWxwaGFCbGVuZFN1cHBvcnQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KGJtcCAmJiBibXAtPmJ5dGVzKCkgJiYgYm1wLT5pczMyYml0KCkpOwotICAgICAgICAgICAgdW5z
aWduZWQqIHBpeGVscyA9ICh1bnNpZ25lZCopYm1wLT5ieXRlcygpOwotICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQqIGNvbnN0IHBpeGVsc0VuZCA9IHBpeGVscyArIGJtcC0+Yml0bWFwSW5mbygp
Lm51bVBpeGVscygpOwotICAgICAgICAgICAgd2hpbGUgKHBpeGVscyA8IHBpeGVsc0VuZCkgewot
ICAgICAgICAgICAgICAgICpwaXhlbHMgXj0gMHhGRjAwMDAwMDsKLSAgICAgICAgICAgICAgICAr
K3BpeGVsczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoKG1fb3BhY2l0
eSA8IDEuIHx8IGFscGhhUGFpbnQgPT0gQWxwaGFQYWludE90aGVyKSAmJiBoYXNBbHBoYUJsZW5k
U3VwcG9ydCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBCTEVOREZVTkNUSU9OIGJsZW5kID0geyBB
Q19TUkNfT1ZFUiwgMAotICAgICAgICAgICAgICAgICwgbV9vcGFjaXR5ID49IDEuID8gMjU1IDog
KEJZVEUpKG1fb3BhY2l0eSAqIDI1NSkKLSAgICAgICAgICAgICAgICAsIGFscGhhUGFpbnQgPT0g
QWxwaGFQYWludE5vbmUgPyAwIDogQUNfU1JDX0FMUEhBIH07Ci0gICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBhbHBoYUJsZW5kSWZTdXBwb3J0ZWQobV9kYywgb3JpZ1JlY3QueCgpLCBvcmlnUmVj
dC55KCksIG9yaWdSZWN0LndpZHRoKCksIG9yaWdSZWN0LmhlaWdodCgpLCBoZGMsIDAsIDAsIGJt
cFJlY3QucmlnaHQsIGJtcFJlY3QuYm90dG9tLCBibGVuZCk7Ci0gICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFN0
cmV0Y2hCbHQobV9kYywgb3JpZ1JlY3QueCgpLCBvcmlnUmVjdC55KCksIG9yaWdSZWN0LndpZHRo
KCksIG9yaWdSZWN0LmhlaWdodCgpLCBoZGMsIDAsIDAsIGJtcFJlY3QucmlnaHQsIGJtcFJlY3Qu
Ym90dG9tLCBTUkNDT1BZKTsKLSAgICB9Ci0KLSAgICBIREMgbV9kYzsKLSAgICBSZWZQdHI8U2hh
cmVkQml0bWFwPiBtX2JpdG1hcDsKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlRGF0YT4gbV9iYWNrdXBEYXRhOwotfTsKLQotc3RhdGljIEdESU9iamVjdDxIUEVOPiBj
cmVhdGVQZW4oY29uc3QgQ29sb3ImIGNvbCwgZG91YmxlIGZXaWR0aCwgU3Ryb2tlU3R5bGUgc3R5
bGUpCi17Ci0gICAgaW50IHdpZHRoID0gc3RhYmxlUm91bmQoZldpZHRoKTsKLSAgICBpZiAod2lk
dGggPCAxKQotICAgICAgICB3aWR0aCA9IDE7Ci0KLSAgICBpbnQgcGVuU3R5bGUgPSBQU19OVUxM
OwotICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBTb2xpZFN0cm9rZToKLSAgICAg
ICAgY2FzZSBEb3VibGVTdHJva2U6Ci0gICAgICAgIGNhc2UgV2F2eVN0cm9rZTogLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDExNCAtIE5lZWRzIHBs
YXRmb3JtIHN1cHBvcnQuCi0gICAgICAgICAgICBwZW5TdHlsZSA9IFBTX1NPTElEOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG90dGVkU3Ryb2tlOiAgLy8gbm90IHN1cHBvcnRl
ZCBvbiBXaW5kb3dzIENFCi0gICAgICAgIGNhc2UgRGFzaGVkU3Ryb2tlOgotICAgICAgICAgICAg
cGVuU3R5bGUgPSBQU19EQVNIOwotICAgICAgICAgICAgd2lkdGggPSAxOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVQZW4ocGVuU3R5bGUsIHdpZHRoLCBSR0Io
Y29sLnJlZCgpLCBjb2wuZ3JlZW4oKSwgY29sLmJsdWUoKSkpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBHRElPYmplY3Q8SEJSVVNIPiBjcmVhdGVCcnVzaChjb25zdCBDb2xvciYgY29sKQotewotICAg
IHJldHVybiBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKGNvbC5yZWQoKSwg
Y29sLmdyZWVuKCksIGNvbC5ibHVlKCkpKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQaXhl
bFR5cGUsIGJvb2wgSXMxNmJpdD4gc3RhdGljIHZvaWQgX3JvdGF0ZUJpdG1hcChTaGFyZWRCaXRt
YXAqIGRlc3RCbXAsIGNvbnN0IFNoYXJlZEJpdG1hcCogc291cmNlQm1wLCBjb25zdCBSb3RhdGlv
blRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGludCBkZXN0VyA9IGRlc3RCbXAtPndpZHRo
KCk7Ci0gICAgaW50IGRlc3RIID0gZGVzdEJtcC0+aGVpZ2h0KCk7Ci0gICAgaW50IHNvdXJjZVcg
PSBzb3VyY2VCbXAtPndpZHRoKCk7Ci0gICAgaW50IHNvdXJjZUggPSBzb3VyY2VCbXAtPmhlaWdo
dCgpOwotICAgIFBpeGVsVHlwZSogZGVzdCA9IChQaXhlbFR5cGUqKWRlc3RCbXAtPmJ5dGVzKCk7
Ci0gICAgY29uc3QgUGl4ZWxUeXBlKiBzb3VyY2UgPSAoY29uc3QgUGl4ZWxUeXBlKilzb3VyY2VC
bXAtPmJ5dGVzKCk7Ci0gICAgaW50IHBhZGRpbmc7Ci0gICAgaW50IHBhZGRlZFNvdXJjZVc7Ci0g
ICAgaWYgKElzMTZiaXQpIHsKLSAgICAgICAgcGFkZGluZyA9IGRlc3RXICYgMTsKLSAgICAgICAg
cGFkZGVkU291cmNlVyA9IHNvdXJjZVcgKyAoc291cmNlVyAmIDEpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHBhZGRpbmcgPSAwOwotICAgICAgICBwYWRkZWRTb3VyY2VXID0gc291cmNlVzsKLSAg
ICB9Ci0gICAgaWYgKGlzWmVybyh0cmFuc2Zvcm0ubV9zaW5BKSkgewotICAgICAgICBpbnQgY29z
QSA9IHRyYW5zZm9ybS5tX2Nvc0EgPiAwID8gMSA6IC0xOwotICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGRlc3RIOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZGVz
dFc7ICsreCkgewotICAgICAgICAgICAgICAgIGludCB4MSA9IHggKyB0cmFuc2Zvcm0ubV9wcmVT
aGlmdFg7Ci0gICAgICAgICAgICAgICAgaW50IHkxID0geSArIHRyYW5zZm9ybS5tX3ByZVNoaWZ0
WTsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWCA9IHgxICogY29zQSArIHRyYW5zZm9ybS5tX3Bv
c3RTaGlmdFg7Ci0gICAgICAgICAgICAgICAgaW50IHNyY1kgPSB5MSAqIGNvc0EgLSB0cmFuc2Zv
cm0ubV9wb3N0U2hpZnRZOwotICAgICAgICAgICAgICAgIGlmIChzcmNYID49IDAgJiYgc3JjWCA8
PSBzb3VyY2VXICYmIHNyY1kgPj0gMCAmJiBzcmNZIDw9IHNvdXJjZUgpCi0gICAgICAgICAgICAg
ICAgICAgICpkZXN0KysgPSBzb3VyY2Vbc3JjWSAqIHBhZGRlZFNvdXJjZVcgKyBzcmNYXSB8IDB4
RkYwMDAwMDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAqZGVz
dCsrIHw9IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0ICs9IHBhZGRpbmc7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGlzWmVybyh0cmFuc2Zvcm0ubV9jb3NBKSkgewot
ICAgICAgICBpbnQgc2luQSA9IHRyYW5zZm9ybS5tX3NpbkEgPiAwID8gMSA6IC0xOwotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGRlc3RIOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZGVzdFc7ICsreCkgewotICAgICAgICAgICAgICAgIGludCB4MSA9IHggKyB0
cmFuc2Zvcm0ubV9wcmVTaGlmdFg7Ci0gICAgICAgICAgICAgICAgaW50IHkxID0geSArIHRyYW5z
Zm9ybS5tX3ByZVNoaWZ0WTsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWCA9IHkxICogc2luQSAr
IHRyYW5zZm9ybS5tX3Bvc3RTaGlmdFg7Ci0gICAgICAgICAgICAgICAgaW50IHNyY1kgPSAteDEg
KiBzaW5BICsgdHJhbnNmb3JtLm1fcG9zdFNoaWZ0WTsKLSAgICAgICAgICAgICAgICBpZiAoc3Jj
WCA+PSAwICYmIHNyY1ggPD0gc291cmNlVyAmJiBzcmNZID49IDAgJiYgc3JjWSA8PSBzb3VyY2VI
KQotICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gc291cmNlW3NyY1kgKiBwYWRkZWRTb3Vy
Y2VXICsgc3JjWF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0ICs9IHBhZGRpbmc7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGRl
c3RIOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZGVzdFc7ICsreCkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3IgYmVzdCBxdWFsaXR5LCB3ZSBzaG91bGQg
Z2V0IHdlaWdodGVkIHN1bSBvZiBmb3VyIG5laWdoYm91cnMsCi0gICAgICAgICAgICAgICAgLy8g
YnV0IHRoYXQgd2lsbCBiZSB0b28gZXhwZW5zaXZlCi0gICAgICAgICAgICAgICAgaW50IHNyY1gs
IHNyY1k7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLm1hcCh4LCB5LCAmc3JjWCwgJnNyY1kp
OwotICAgICAgICAgICAgICAgIGlmIChzcmNYID49IDAgJiYgc3JjWCA8PSBzb3VyY2VXICYmIHNy
Y1kgPj0gMCAmJiBzcmNZIDw9IHNvdXJjZUgpCi0gICAgICAgICAgICAgICAgICAgICpkZXN0Kysg
PSBzb3VyY2Vbc3JjWSAqIHBhZGRlZFNvdXJjZVcgKyBzcmNYXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlc3QgKz0gcGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgcm90YXRlQml0bWFwKFNoYXJlZEJpdG1hcCogZGVzdEJtcCwgY29uc3QgU2hhcmVkQml0
bWFwKiBzb3VyY2VCbXAsIGNvbnN0IFJvdGF0aW9uVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0g
ICAgQVNTRVJUKGRlc3RCbXAtPmlzMTZiaXQoKSA9PSBzb3VyY2VCbXAtPmlzMTZiaXQoKSk7Ci0g
ICAgaWYgKGRlc3RCbXAtPmlzMTZiaXQoKSkKLSAgICAgICAgX3JvdGF0ZUJpdG1hcDx1bnNpZ25l
ZCBzaG9ydCwgdHJ1ZT4oZGVzdEJtcCwgc291cmNlQm1wLCB0cmFuc2Zvcm0pOwotICAgIGVsc2UK
LSAgICAgICAgX3JvdGF0ZUJpdG1hcDx1bnNpZ25lZCwgZmFsc2U+KGRlc3RCbXAsIHNvdXJjZUJt
cCwgdHJhbnNmb3JtKTsKLX0KLQotY2xhc3MgVHJhbnNwYXJlbnRMYXllckRDIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUcmFuc3BhcmVudExheWVyREMpOwotcHVibGljOgotICAgIFRyYW5z
cGFyZW50TGF5ZXJEQyhHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRhdGEsIEludFJl
Y3QmIG9yaWdSZWN0LCBjb25zdCBJbnRSZWN0KiByZWN0QmVmb3JlVHJhbnNmb3JtID0gMCwgaW50
IGFscGhhID0gMjU1LCBib29sIHBhaW50SW1hZ2UgPSBmYWxzZSk7Ci0gICAgflRyYW5zcGFyZW50
TGF5ZXJEQygpOwotCi0gICAgSERDIGhkYygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtRGM7IH0KLSAg
ICBjb25zdCBSRUNUJiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ibXBSZWN0OyB9Ci0gICAgSW50
U2l6ZSB0b1NoaWZ0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX2JtcFJlY3QubGVmdCAtIG1f
b3JpZ1JlY3QueCgpLCBtX2JtcFJlY3QudG9wIC0gbV9vcmlnUmVjdC55KCkpOyB9Ci0gICAgdm9p
ZCBmaWxsQWxwaGFDaGFubmVsKCk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBtX2RhdGE7Ci0gICAgSW50UmVjdCBtX29yaWdSZWN0OwotICAgIEludFJl
Y3QgbV9yb3RhdGVkT3JpZ1JlY3Q7Ci0gICAgSERDIG1fbWVtRGM7Ci0gICAgUmVmUHRyPFNoYXJl
ZEJpdG1hcD4gbV9iaXRtYXA7Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gbV9yb3RhdGVkQml0
bWFwOwotICAgIFJFQ1QgbV9ibXBSZWN0OwotICAgIHVuc2lnbmVkIG1fa2V5OwotICAgIFJvdGF0
aW9uVHJhbnNmb3JtIG1fcm90YXRpb247Ci0gICAgZmxvYXQgbV9vbGRPcGFjaXR5OwotICAgIEFs
cGhhUGFpbnRUeXBlIG1fYWxwaGFQYWludFR5cGU7Ci19OwotCi1UcmFuc3BhcmVudExheWVyREM6
OlRyYW5zcGFyZW50TGF5ZXJEQyhHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRhdGEs
IEludFJlY3QmIG9yaWdSZWN0LCBjb25zdCBJbnRSZWN0KiByZWN0QmVmb3JlVHJhbnNmb3JtLCBp
bnQgYWxwaGEsIGJvb2wgcGFpbnRJbWFnZSkKLTogbV9kYXRhKGRhdGEpCi0sIG1fb3JpZ1JlY3Qo
b3JpZ1JlY3QpCi0sIG1fb2xkT3BhY2l0eShkYXRhLT5tX29wYWNpdHkpCi0vLyBtX2tleTEgYW5k
IG1fa2V5MiBhcmUgbm90IGluaXRhbGl6ZWQgaGVyZS4gVGhleSBhcmUgdXNlZCBvbmx5IGluIHRo
ZSBjYXNlIHRoYXQKLS8vIFNoYXJlZEJpdG1hcDo6Z2V0REMoKSBpcyBjYWxsZWQsIEkuRS4sIHdo
ZW4gbV9iaXRtYXAgaXMgbm90IG51bGwuCi17Ci0gICAgbV9kYXRhLT5tX29wYWNpdHkgKj0gYWxw
aGEgLyAyNTUuOwotICAgIGJvb2wgbXVzdENyZWF0ZUxheWVyOwotICAgIGlmICghbV9kYXRhLT5o
YXNBbHBoYSgpKSB7Ci0gICAgICAgIG11c3RDcmVhdGVMYXllciA9IGZhbHNlOwotICAgICAgICBt
X2FscGhhUGFpbnRUeXBlID0gQWxwaGFQYWludE5vbmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bXVzdENyZWF0ZUxheWVyID0gdHJ1ZTsKLSAgICAgICAgbV9hbHBoYVBhaW50VHlwZSA9IHBhaW50
SW1hZ2UgPyBBbHBoYVBhaW50SW1hZ2UgOiBBbHBoYVBhaW50T3RoZXI7Ci0gICAgfQotICAgIGlm
IChyZWN0QmVmb3JlVHJhbnNmb3JtICYmICFpc1plcm8obV9kYXRhLT5tX3RyYW5zZm9ybS5iKCkp
KSB7Ci0gICAgICAgIG1fcm90YXRlZE9yaWdSZWN0ID0gb3JpZ1JlY3Q7Ci0gICAgICAgIG1fcm90
YXRlZEJpdG1hcCA9IG1fZGF0YS0+Z2V0VHJhbnNwYXJlbnRMYXllckJpdG1hcChtX3JvdGF0ZWRP
cmlnUmVjdCwgbV9hbHBoYVBhaW50VHlwZSwgbV9ibXBSZWN0LCBmYWxzZSwgdHJ1ZSk7Ci0gICAg
ICAgIGlmIChtX3JvdGF0ZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGRvdWJsZSBhID0gbV9kYXRh
LT5tX3RyYW5zZm9ybS5hKCk7Ci0gICAgICAgICAgICBkb3VibGUgYiA9IG1fZGF0YS0+bV90cmFu
c2Zvcm0uYigpOwotICAgICAgICAgICAgZG91YmxlIGMgPSBfaHlwb3QoYSwgYik7Ci0gICAgICAg
ICAgICBtX3JvdGF0aW9uLm1fY29zQSA9IGEgLyBjOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5t
X3NpbkEgPSBiIC8gYzsKLQotICAgICAgICAgICAgaW50IGNlbnRlclggPSBvcmlnUmVjdC54KCkg
KyBvcmlnUmVjdC53aWR0aCgpIC8gMjsKLSAgICAgICAgICAgIGludCBjZW50ZXJZID0gb3JpZ1Jl
Y3QueSgpICsgb3JpZ1JlY3QuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5t
X3ByZVNoaWZ0WCA9IC1jZW50ZXJYOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0
WSA9IC1jZW50ZXJZOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFggPSBjZW50
ZXJYOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFkgPSBjZW50ZXJZOwotCi0g
ICAgICAgICAgICBtX29yaWdSZWN0ID0gbWFwUmVjdChtX3JvdGF0ZWRPcmlnUmVjdCwgbV9yb3Rh
dGlvbik7Ci0KLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wcmVTaGlmdFggKz0gbV9yb3RhdGVk
T3JpZ1JlY3QueCgpOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WSArPSBtX3Jv
dGF0ZWRPcmlnUmVjdC55KCk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WCAt
PSBtX29yaWdSZWN0LngoKTsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRZIC09
IG1fb3JpZ1JlY3QueSgpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcExlZnQgPSBtX2Rh
dGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+
bG9jYXRpb24oKSkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BSaWdodChyZWN0QmVmb3Jl
VHJhbnNmb3JtLT5tYXhYKCkgLSAxLCByZWN0QmVmb3JlVHJhbnNmb3JtLT55KCkpOwotICAgICAg
ICAgICAgdG9wUmlnaHQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3JtLT54
KCksIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOwotICAgICAgICAgICAgYm90dG9t
TGVmdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7Ci0gICAgICAg
ICAgICBGbG9hdFNpemUgc2lkZVRvcCA9IHRvcFJpZ2h0IC0gdG9wTGVmdDsKLSAgICAgICAgICAg
IEZsb2F0U2l6ZSBzaWRlTGVmdCA9IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwotICAgICAgICAgICAg
ZmxvYXQgd2lkdGggPSBfaHlwb3Qoc2lkZVRvcC53aWR0aCgpICsgMSwgc2lkZVRvcC5oZWlnaHQo
KSArIDEpOwotICAgICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gX2h5cG90KHNpZGVMZWZ0LndpZHRo
KCkgKyAxLCBzaWRlTGVmdC5oZWlnaHQoKSArIDEpOwotCi0gICAgICAgICAgICBvcmlnUmVjdC5p
bmZsYXRlWChzdGFibGVSb3VuZCgod2lkdGggLSBvcmlnUmVjdC53aWR0aCgpKSAqIDAuNSkpOwot
ICAgICAgICAgICAgb3JpZ1JlY3QuaW5mbGF0ZVkoc3RhYmxlUm91bmQoKGhlaWdodCAtIG9yaWdS
ZWN0LmhlaWdodCgpKSAqIDAuNSkpOwotCi0gICAgICAgICAgICBtX2JpdG1hcCA9IFNoYXJlZEJp
dG1hcDo6Y3JlYXRlKG1fb3JpZ1JlY3Quc2l6ZSgpLCBtX3JvdGF0ZWRCaXRtYXAtPmlzMTZiaXQo
KSA/IEJpdG1hcEluZm86OkJpdENvdW50MTYgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDMyLCB0cnVl
KTsKLSAgICAgICAgICAgIGlmIChtX2JpdG1hcCkKLSAgICAgICAgICAgICAgICByb3RhdGVCaXRt
YXAobV9iaXRtYXAuZ2V0KCksIG1fcm90YXRlZEJpdG1hcC5nZXQoKSwgLW1fcm90YXRpb24pOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fcm90YXRlZEJpdG1hcCA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgbV9iaXRtYXAgPSBtX2RhdGEtPmdldFRyYW5z
cGFyZW50TGF5ZXJCaXRtYXAobV9vcmlnUmVjdCwgbV9hbHBoYVBhaW50VHlwZSwgbV9ibXBSZWN0
LCB0cnVlLCBtdXN0Q3JlYXRlTGF5ZXIpOwotICAgIGlmIChtX2JpdG1hcCkKLSAgICAgICAgbV9t
ZW1EYyA9IG1fYml0bWFwLT5nZXREQygmbV9rZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZW1E
YyA9IG1fZGF0YS0+bV9kYzsKLX0KLQotVHJhbnNwYXJlbnRMYXllckRDOjp+VHJhbnNwYXJlbnRM
YXllckRDKCkKLXsKLSAgICBpZiAobV9yb3RhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fYml0bWFw
LT5yZWxlYXNlREMobV9tZW1EYywgbV9rZXkpOwotICAgICAgICBtX2tleSA9IDA7Ci0gICAgICAg
IHJvdGF0ZUJpdG1hcChtX3JvdGF0ZWRCaXRtYXAuZ2V0KCksIG1fYml0bWFwLmdldCgpLCBtX3Jv
dGF0aW9uKTsKLSAgICAgICAgbV9tZW1EYyA9IG1fcm90YXRlZEJpdG1hcC0+Z2V0REMoJm1fa2V5
KTsKLSAgICAgICAgbV9kYXRhLT5wYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0bWFwKG1fbWVt
RGMsIG1fcm90YXRlZEJpdG1hcC5nZXQoKSwgbV9yb3RhdGVkT3JpZ1JlY3QsIG1fYWxwaGFQYWlu
dFR5cGUsIG1fYm1wUmVjdCk7Ci0gICAgICAgIG1fcm90YXRlZEJpdG1hcC0+cmVsZWFzZURDKG1f
bWVtRGMsIG1fa2V5KTsKLSAgICB9IGVsc2UgaWYgKG1fYml0bWFwKSB7Ci0gICAgICAgIG1fZGF0
YS0+cGFpbnRCYWNrVHJhbnNwYXJlbnRMYXllckJpdG1hcChtX21lbURjLCBtX2JpdG1hcC5nZXQo
KSwgbV9vcmlnUmVjdCwgbV9hbHBoYVBhaW50VHlwZSwgbV9ibXBSZWN0KTsKLSAgICAgICAgbV9i
aXRtYXAtPnJlbGVhc2VEQyhtX21lbURjLCBtX2tleSk7Ci0gICAgfQotICAgIG1fZGF0YS0+bV9v
cGFjaXR5ID0gbV9vbGRPcGFjaXR5OwotfQotCi12b2lkIFRyYW5zcGFyZW50TGF5ZXJEQzo6Zmls
bEFscGhhQ2hhbm5lbCgpCi17Ci0gICAgaWYgKCFtX2JpdG1hcCB8fCAhbV9iaXRtYXAtPmlzMzJi
aXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQqIHBpeGVscyA9ICh1bnNpZ25l
ZCopbV9iaXRtYXAtPmJ5dGVzKCk7Ci0gICAgY29uc3QgdW5zaWduZWQqIGNvbnN0IHBpeGVsc0Vu
ZCA9IHBpeGVscyArIG1fYml0bWFwLT5iaXRtYXBJbmZvKCkubnVtUGl4ZWxzKCk7Ci0gICAgd2hp
bGUgKHBpeGVscyA8IHBpeGVsc0VuZCkgewotICAgICAgICAqcGl4ZWxzIHw9IDB4RkYwMDAwMDA7
Ci0gICAgICAgICsrcGl4ZWxzOwotICAgIH0KLX0KLQotY2xhc3MgU2NvcGVEQ1Byb3ZpZGVyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZURDUHJvdmlkZXIpOwotcHVibGljOgotICAg
IGV4cGxpY2l0IFNjb3BlRENQcm92aWRlcihHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUq
IGRhdGEpCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0gICAgewotICAgICAgICBpZiAobV9kYXRh
LT5tX2JpdG1hcCkKLSAgICAgICAgICAgIG1fZGF0YS0+bV9kYyA9IG1fZGF0YS0+bV9iaXRtYXAt
PmdldERDKCZtX2tleSk7Ci0gICAgfQotICAgIH5TY29wZURDUHJvdmlkZXIoKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZGF0YS0+bV9iaXRtYXApIHsKLSAgICAgICAgICAgIG1fZGF0YS0+bV9iaXRt
YXAtPnJlbGVhc2VEQyhtX2RhdGEtPm1fZGMsIG1fa2V5KTsKLSAgICAgICAgICAgIG1fZGF0YS0+
bV9kYyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOwotICAgIHVuc2lnbmVkIG1fa2V5OwotfTsKLQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBkYywgYm9vbCkKLXsKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKGRjKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgp
Ci17Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJp
dG1hcChQYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wKQotewotICAgIEFTU0VSVCghbV9kYXRh
LT5tX2RjKTsKLSAgICBtX2RhdGEtPm1fYml0bWFwID0gYm1wOwotfQotCi1IREMgR3JhcGhpY3ND
b250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1
cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKLXsKLSAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIEFscGhhQmxlbmQuCi0gICAgQVNTRVJUKCFzdXBwb3J0QWxwaGFCbGVu
ZCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9kYzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBi
b29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnNh
dmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
LXsKLSAgICBtX2RhdGEtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQpCi17Ci0gICAgaWYgKCFtX2RhdGEt
Pm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgcmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0g
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJS
ZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFu
c3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmcmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJl
bnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1v
dmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgR0RJT2JqZWN0PEhCUlVTSD4gYnJ1
c2g7Ci0gICAgSEdESU9CSiBvbGRCcnVzaDsKLSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkg
ewotICAgICAgICBicnVzaCA9IGNyZWF0ZUJydXNoKGZpbGxDb2xvcigpKTsKLSAgICAgICAgb2xk
QnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIGJydXNoLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gp
KTsKLQotICAgIEdESU9iamVjdDxIUEVOPiBwZW47Ci0gICAgSEdESU9CSiBvbGRQZW47Ci0gICAg
aWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgcGVuID0gY3JlYXRlUGVu
KHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLSAgICAg
ICAgb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7
Ci0KLSAgICBpZiAoYnJ1c2ggfHwgcGVuKSB7Ci0gICAgICAgIGlmICh0clJlY3Qud2lkdGgoKSA8
PSAwKQotICAgICAgICAgICAgdHJSZWN0LnNldFdpZHRoKDEpOwotICAgICAgICBpZiAodHJSZWN0
LmhlaWdodCgpIDw9IDApCi0gICAgICAgICAgICB0clJlY3Quc2V0SGVpZ2h0KDEpOwotCi0gICAg
ICAgIFJlY3RhbmdsZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwg
dHJSZWN0Lm1heFkoKSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwot
ICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVk
KCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCAhc3Ryb2tlQ29sb3IoKS5hbHBoYSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2Rh
dGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQ
b2ludCB0clBvaW50MSA9IG1fZGF0YS0+bWFwUG9pbnQocG9pbnQxKTsKLSAgICBJbnRQb2ludCB0
clBvaW50MiA9IG1fZGF0YS0+bWFwUG9pbnQocG9pbnQyKTsKLQotICAgIEludFJlY3QgbGluZVJl
Y3QodHJQb2ludDEsIHRyUG9pbnQyIC0gdHJQb2ludDEpOwotICAgIGxpbmVSZWN0LnNldEhlaWdo
dChsaW5lUmVjdC5oZWlnaHQoKSArIHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBUcmFuc3BhcmVu
dExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIGxpbmVSZWN0LCAwLCBzdHJva2VDb2xvcigp
LmFscGhhKCkpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFk
YykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUG9pbnQxICs9IHRyYW5zcGFyZW50REMudG9TaGlm
dCgpOwotICAgIHRyUG9pbnQyICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotCi0gICAgYXV0
byBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9r
ZVN0eWxlKCkpOwotICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0
KCkpOwotCi0gICAgTW92ZVRvRXgoZGMsIHRyUG9pbnQxLngoKSwgdHJQb2ludDEueSgpLCAwKTsK
LSAgICBMaW5lVG8oZGMsIHRyUG9pbnQyLngoKSwgdHJQb2ludDIueSgpKTsKLQotICAgIFNlbGVj
dE9iamVjdChkYywgb2xkUGVuKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxp
cHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8
fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgKCFmaWxsQ29sb3IoKS5hbHBoYSgpICYmIHN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlk
ZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAg
ICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJnJlY3Qp
OwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAg
ICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQot
ICAgIEdESU9iamVjdDxIQlJVU0g+IGJydXNoOwotICAgIEhHRElPQkogb2xkQnJ1c2g7Ci0gICAg
aWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKLSAgICAgICAgYnJ1c2ggPSBjcmVhdGVCcnVzaChm
aWxsQ29sb3IoKSk7Ci0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBicnVzaC5n
ZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBH
ZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0KLSAgICBHRElPYmplY3Q8SFBFTj4gcGVuOwot
ICAgIEhHRElPQkogb2xkUGVuID0gMDsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZSkgewotICAgICAgICBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tu
ZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotICAgICAgICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMs
IHBlbi5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChk
YywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKLQotICAgIGlmIChicnVzaCB8fCBwZW4pCi0g
ICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCks
IHRyUmVjdC5tYXhZKCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotICAgIFNl
bGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxB
bmdsZShkb3VibGUgYSwgZG91YmxlIGIpIAotewotICAgIHJldHVybiBmYWJzKGEgLSBiKSA8IDFF
LTU7Ci19Ci0KLXZvaWQgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShkb3VibGUgYW5nbGUsIGRvdWJs
ZSBhLCBkb3VibGUgYiwgZmxvYXQmIHgsIGZsb2F0JiB5KQotewotICAgIHdoaWxlIChhbmdsZSA8
IDApCi0gICAgICAgIGFuZ2xlICs9IDIgKiBwaURvdWJsZTsKLSAgICB3aGlsZSAoYW5nbGUgPj0g
MiAqIHBpRG91YmxlKQotICAgICAgICBhbmdsZSAtPSAyICogcGlEb3VibGU7Ci0KLSAgICBpZiAo
ZXF1YWxBbmdsZShhbmdsZSwgMCkgfHwgZXF1YWxBbmdsZShhbmdsZSwgMiAqIHBpRG91YmxlKSkg
ewotICAgICAgICB4ID0gYTsKLSAgICAgICAgeSA9IDA7Ci0gICAgfSBlbHNlIGlmIChlcXVhbEFu
Z2xlKGFuZ2xlLCBwaURvdWJsZSkpIHsKLSAgICAgICAgeCA9IC1hOwotICAgICAgICB5ID0gMDsK
LSAgICB9IGVsc2UgaWYgKGVxdWFsQW5nbGUoYW5nbGUsIC41ICogcGlEb3VibGUpKSB7Ci0gICAg
ICAgIHggPSAwOwotICAgICAgICB5ID0gYjsKLSAgICB9IGVsc2UgaWYgKGVxdWFsQW5nbGUoYW5n
bGUsIDEuNSAqIHBpRG91YmxlKSkgewotICAgICAgICB4ID0gMDsKLSAgICAgICAgeSA9IC1iOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvdWJsZSBrID0gdGFuKGFuZ2xlKTsKLSAgICAgICAgZG91
YmxlIHNxQSA9IGEgKiBhOwotICAgICAgICBkb3VibGUgc3FCID0gYiAqIGI7Ci0gICAgICAgIGRv
dWJsZSB0bXAgPSAxLiAvICgxLiAvIHNxQSArIChrICogaykgLyBzcUIpOwotICAgICAgICB0bXAg
PSB0bXAgPD0gMCA/IDAgOiBzcXJ0KHRtcCk7Ci0gICAgICAgIGlmIChhbmdsZSA+IC41ICogcGlE
b3VibGUgJiYgYW5nbGUgPCAxLjUgKiBwaURvdWJsZSkKLSAgICAgICAgICAgIHRtcCA9IC10bXA7
Ci0gICAgICAgIHggPSB0bXA7Ci0KLSAgICAgICAgayA9IHRhbiguNSAqIHBpRG91YmxlIC0gYW5n
bGUpOwotICAgICAgICB0bXAgPSAxLiAvICgoayAqIGspIC8gc3FBICsgMSAvIHNxQik7Ci0gICAg
ICAgIHRtcCA9IHRtcCA8PSAwID8gMCA6IHNxcnQodG1wKTsKLSAgICAgICAgaWYgKGFuZ2xlID4g
cGlEb3VibGUpCi0gICAgICAgICAgICB0bXAgPSAtdG1wOwotICAgICAgICB5ID0gdG1wOwotICAg
IH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
cG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQot
ewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IG5w
b2ludHMgPD0gMSB8fCAhcG9pbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJv
dmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UE9JTlQsIDIwPiB3aW5Qb2ludHMobnBvaW50cyk7Ci0g
ICAgRmxvYXRQb2ludCB0clBvaW50ID0gbV9kYXRhLT5tYXBQb2ludChwb2ludHNbMF0pOwotICAg
IHdpblBvaW50c1swXS54ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwotICAgIHdpblBvaW50
c1swXS55ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkpOwotICAgIFJFQ1QgcmVjdCA9IHsgd2lu
UG9pbnRzWzBdLngsIHdpblBvaW50c1swXS55LCB3aW5Qb2ludHNbMF0ueCwgd2luUG9pbnRzWzBd
LnkgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG5wb2ludHM7ICsraSkgewotICAgICAg
ICB0clBvaW50ID0gbV9kYXRhLT5tYXBQb2ludChwb2ludHNbaV0pOwotICAgICAgICB3aW5Qb2lu
dHNbaV0ueCA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueCgpKTsKLSAgICAgICAgd2luUG9pbnRzW2ld
LnkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7Ci0gICAgICAgIGlmIChyZWN0LmxlZnQgPiB3
aW5Qb2ludHNbaV0ueCkKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IHdpblBvaW50c1tpXS54Owot
ICAgICAgICBlbHNlIGlmIChyZWN0LnJpZ2h0IDwgd2luUG9pbnRzW2ldLngpCi0gICAgICAgICAg
ICByZWN0LnJpZ2h0ID0gd2luUG9pbnRzW2ldLng7Ci0gICAgICAgIGlmIChyZWN0LnRvcCA+IHdp
blBvaW50c1tpXS55KQotICAgICAgICAgICAgcmVjdC50b3AgPSB3aW5Qb2ludHNbaV0ueTsKLSAg
ICAgICAgZWxzZSBpZiAocmVjdC5ib3R0b20gPCB3aW5Qb2ludHNbaV0ueSkKLSAgICAgICAgICAg
IHJlY3QuYm90dG9tID0gd2luUG9pbnRzW2ldLnk7Ci0gICAgfQotICAgIHJlY3QuYm90dG9tICs9
IDE7Ci0gICAgcmVjdC5yaWdodCArPSAxOwotCi0gICAgSW50UmVjdCBpbnRSZWN0KHJlY3QpOwot
ICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgaW50UmVjdCk7Ci0g
ICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wb2ludHM7ICsraSkgewotICAg
ICAgICB3aW5Qb2ludHNbaV0ueCArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpOwot
ICAgICAgICB3aW5Qb2ludHNbaV0ueSArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKS5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBHRElPYmplY3Q8SEJSVVNIPiBicnVzaDsKLSAgICBIR0RJT0JKIG9s
ZEJydXNoOwotICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIGJydXNoID0g
Y3JlYXRlQnJ1c2goZmlsbENvbG9yKCkpOwotICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVj
dChkYywgYnJ1c2guZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBvbGRCcnVzaCA9IFNlbGVj
dE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwotCi0gICAgR0RJT2JqZWN0
PEhQRU4+IHBlbjsKLSAgICBIR0RJT0JKIG9sZFBlbjsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAh
PSBOb1N0cm9rZSkgewotICAgICAgICBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ry
b2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotICAgICAgICBvbGRQZW4gPSBTZWxlY3RP
YmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZFBlbiA9IFNlbGVj
dE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKLQotICAgIGlmIChicnVzaCB8
fCBwZW4pCi0gICAgICAgIFBvbHlnb24oZGMsIHdpblBvaW50cy5kYXRhKCksIG5wb2ludHMpOwot
Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotICAgIFNlbGVjdE9iamVjdChkYywgb2xk
QnJ1c2gpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6
ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2Vk
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChudW1Qb2ludHMgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1F
OiBJTVBMRU1FTlQhIQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGFscGhhID0gY29sb3IuYWxwaGEoKTsKLSAgICBp
ZiAoIWFscGhhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92
aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAgIFRyYW5z
cGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgbV9kYXRhLT5tYXBSZWN0KGludFJl
Y3QpLCAmaW50UmVjdCwgYWxwaGEpOwotCi0gICAgaWYgKCF0cmFuc3BhcmVudERDLmhkYygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGhicnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlU29saWRCcnVzaChSR0IoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUo
KSkpKTsKLSAgICBGaWxsUmVjdCh0cmFuc3BhcmVudERDLmhkYygpLCAmdHJhbnNwYXJlbnREQy5y
ZWN0KCksIGhicnVzaC5nZXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW50UmVjdCB0clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChy
ZWN0KSk7Ci0KLSAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RS
Z24oMCwgMCwgMCwgMCkpOwotICAgIGlmIChHZXRDbGlwUmduKG1fZGF0YS0+bV9kYywgY2xpcFJn
bi5nZXQoKSkgPiAwKQotICAgICAgICBJbnRlcnNlY3RDbGlwUmVjdChtX2RhdGEtPm1fZGMsIHRy
UmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwotICAg
IGVsc2UgewotICAgICAgICBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0Umdu
KHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpKTsK
LSAgICAgICAgU2VsZWN0Q2xpcFJnbihtX2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpOwotICAg
IH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRy
UmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLQotICAgIEV4Y2x1ZGVDbGlwUmVjdChtX2Rh
dGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5t
YXhZKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkg
fHwgcGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJv
dmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyOwotICAgIG9mZnNl
dCArPSByYWRpdXM7Ci0KLSAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7Ci0g
ICAgSW50UmVjdCBmaW5hbEZvY3VzUmVjdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVjdENvdW50OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QgPSByZWN0c1tpXTsK
LSAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUob2Zmc2V0KTsKLSAgICAgICAgZmluYWxGb2N1c1Jl
Y3QudW5pdGUoZm9jdXNSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IGludFJlY3QgPSBmaW5h
bEZvY3VzUmVjdDsKLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChmaW5hbEZv
Y3VzUmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0
clJlY3QsICZpbnRSZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAg
IGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERD
LnRvU2hpZnQoKSk7Ci0KLSAgICBSRUNUIHJlY3QgPSB0clJlY3Q7Ci0gICAgRHJhd0ZvY3VzUmVj
dChkYywgJnJlY3QpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9v
bCBwcmludGluZykKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdp
ZHRoLCBzdHJva2VUaGlja25lc3MoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJva2VTdHlsZSBvbGRTdHlsZSA9IHN0
cm9rZVN0eWxlKCk7Ci0gICAgc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgIGRyYXdM
aW5lKHJvdW5kZWRJbnRQb2ludChvcmlnaW4pLCByb3VuZGVkSW50UG9pbnQob3JpZ2luICsgRmxv
YXRTaXplKHdpZHRoLCAwKSkpOwotICAgIGlmIChkb3VibGVVbmRlcmxpbmVzKQotICAgICAgICBk
cmF3TGluZShyb3VuZGVkSW50UG9pbnQob3JpZ2luICsgRmxvYXRTaXplKDAsIHN0cm9rZVRoaWNr
bmVzcygpICogMikpLCByb3VuZGVkSW50UG9pbnQob3JpZ2luICsgRmxvYXRTaXplKHdpZHRoLCBz
dHJva2VUaGlja25lc3MoKSAqIDIpKSk7Ci0gICAgc2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlVW5kZXJsaW5lcykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpZHRocy5z
aXplKCk7IGkgKz0gMikKLSAgICAgICAgZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQocG9pbnQu
eCgpICsgd2lkdGhzW2ldLCBwb2ludC55KCkpLCB3aWR0aHNbaSsxXSAtIHdpZHRoc1tpXSwgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBk
YXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2wsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJM
Rm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RhdGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAg
SW50UmVjdCB0clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChyZWN0KSk7
Ci0gICAgICAgIG1fZGF0YS0+bV9iaXRtYXAtPmNsZWFyUGl4ZWxzKHRyUmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9IAotCi0gICAgZmlsbFJlY3QocmVjdCwgQ29sb3IoQ29sb3I6OndoaXRl
KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKCFt
X2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9
PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJv
dmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW50UmVjdCBpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKLSAgICBJbnRS
ZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChpbnRSZWN0KTsKLSAgICBUcmFuc3BhcmVudExh
eWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJmludFJlY3QpOwotICAgIEhEQyBk
YyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwot
ICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIGF1dG8gcGVu
ID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHls
ZSgpKTsKLSAgICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsK
LQotICAgIGludCByaWdodCA9IHRyUmVjdC5tYXhYKCkgLSAxOwotICAgIGludCBib3R0b20gPSB0
clJlY3QubWF4WSgpIC0gMTsKLSAgICBjb25zdCBQT0lOVCBpbnRQb2ludHNbNV0gPQotICAgIHsK
LSAgICAgICAgeyB0clJlY3QueCgpLCB0clJlY3QueSgpIH0sCi0gICAgICAgIHsgcmlnaHQsIHRy
UmVjdC55KCkgfSwKLSAgICAgICAgeyByaWdodCwgYm90dG9tIH0sCi0gICAgICAgIHsgdHJSZWN0
LngoKSwgYm90dG9tIH0sCi0gICAgICAgIHsgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSB9Ci0gICAg
fTsKLQotICAgIFBvbHlsaW5lKGRjLCBpbnRQb2ludHMsIDUpOwotCi0gICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRQZW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0g
ICAgbV9kYXRhLT5tX29wYWNpdHkgKj0gb3BhY2l0eTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIG1fZGF0YS0+cmVzdG9y
ZSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXll
cnMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIG1fZGF0YS0+
Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9kYXRhLT5zZXRDVE0o
dHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBHcmFwaGljc0NvbnRleHQ6OmFmZmlu
ZVRyYW5zZm9ybSgpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLWNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgR3JhcGhpY3NDb250ZXh0OjphZmZpbmVUcmFuc2Zvcm0oKSBj
b25zdAotewotICAgIHJldHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVzZXRBZmZpbmVUcmFuc2Zvcm0oKQotewotICAgIG1fZGF0YS0+bV90cmFu
c2Zvcm0ubWFrZUlkZW50aXR5KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewotICAgIG1f
ZGF0YS0+cm90YXRlKHJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpv
aW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0
IGFscGhhKQotewotICAgIG1fZGF0YS0+bV9vcGFjaXR5ID0gYWxwaGE7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBj
bGlwKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBJbnRQb2ludCByZWN0Q2VudGVyUG9pbnQoY29uc3QgUkVDVCYgcmVjdCkKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQocmVjdC5sZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMiwgcmVj
dC50b3AgKyAocmVjdC5ib3R0b20gLSByZWN0LnRvcCkgLyAyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgYywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIFNjb3BlRENQcm92
aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93
Qmx1ciA9IDA7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgQ29sb3JTcGFjZSBzaGFkb3dD
b2xvclNwYWNlOwotICAgICAgICAKLSAgICBnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dC
bHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7Ci0gICAgCi0gICAgY29uc3QgRmxv
YXRSZWN0JiBmaWxsUmVjdCA9IHJlY3QucmVjdCgpOwotICAgIEludFJlY3QgZHN0UmVjdCA9IGZp
bGxSZWN0OwotICAgIAotICAgIGRzdFJlY3QubW92ZShzdGFibGVSb3VuZChzaGFkb3dPZmZzZXQu
d2lkdGgoKSksIHN0YWJsZVJvdW5kKHNoYWRvd09mZnNldC5oZWlnaHQoKSkpOwotICAgIGRzdFJl
Y3QuaW5mbGF0ZShzdGFibGVSb3VuZChzaGFkb3dCbHVyKSk7Ci0gICAgZHN0UmVjdCA9IG1fZGF0
YS0+bWFwUmVjdChkc3RSZWN0KTsKLSAgCi0gICAgRmxvYXRTaXplIG5ld1RvcExlZnQobV9kYXRh
LT5tYXBTaXplKHJlY3QucmFkaWkoKS50b3BMZWZ0KCkpKTsKLSAgICBGbG9hdFNpemUgbmV3VG9w
UmlnaHQobV9kYXRhLT5tYXBTaXplKHJlY3QucmFkaWkoKS50b3BSaWdodCgpKSk7Ci0gICAgRmxv
YXRTaXplIG5ld0JvdHRvbUxlZnQobV9kYXRhLT5tYXBTaXplKHJlY3QucmFkaWkoKS5ib3R0b21M
ZWZ0KCkpKTsKLSAgICBGbG9hdFNpemUgbmV3Qm90dG9tUmlnaHQobV9kYXRhLT5tYXBTaXplKHJl
Y3QucmFkaWkoKS5ib3R0b21SaWdodCgpKSk7Ci0KLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJh
bnNwYXJlbnREYyhtX2RhdGEsIGRzdFJlY3QsICZmaWxsUmVjdCk7Ci0gICAgSERDIGRjID0gdHJh
bnNwYXJlbnREYy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
c3RSZWN0Lm1vdmUodHJhbnNwYXJlbnREYy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0V2lu
ID0gZHN0UmVjdDsKLQotICAgIGF1dG8gYnJ1c2ggPSBjcmVhdGVCcnVzaChzaGFkb3dDb2xvcik7
Ci0gICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkpOwot
Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAg
SW50UG9pbnQgY2VudGVyUG9pbnQgPSByZWN0Q2VudGVyUG9pbnQocmVjdFdpbik7Ci0gICAgLy8g
RHJhdyB0b3AgbGVmdCBoYWxmCi0gICAgUkVDVCBjbGlwUmVjdChyZWN0V2luKTsKLSAgICBjbGlw
UmVjdC5yaWdodCA9IGNlbnRlclBvaW50LngoKTsKLSAgICBjbGlwUmVjdC5ib3R0b20gPSBjZW50
ZXJQb2ludC55KCk7Ci0KLSAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgIGJvb2wgbmVlZHNOZXdDbGlwID0gKEdldENsaXBS
Z24oZGMsIGNsaXBSZ24uZ2V0KCkpIDw9IDApOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5lZWRz
TmV3Q2xpcCwgY2xpcFJlY3QsIHJlY3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdUb3BMZWZ0Lndp
ZHRoKCkgKiAyKSwgc3RhYmxlUm91bmQobmV3VG9wTGVmdC5oZWlnaHQoKSAqIDIpKTsKLQotICAg
IC8vIERyYXcgdG9wIHJpZ2h0Ci0gICAgY2xpcFJlY3QgPSByZWN0V2luOwotICAgIGNsaXBSZWN0
LmxlZnQgPSBjZW50ZXJQb2ludC54KCk7Ci0gICAgY2xpcFJlY3QuYm90dG9tID0gY2VudGVyUG9p
bnQueSgpOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5lZWRzTmV3Q2xpcCwgY2xpcFJlY3QsIHJl
Y3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdUb3BSaWdodC53aWR0aCgpICogMiksIHN0YWJsZVJv
dW5kKG5ld1RvcFJpZ2h0LmhlaWdodCgpICogMikpOwotCi0gICAgIC8vIERyYXcgYm90dG9tIGxl
ZnQKLSAgICBjbGlwUmVjdCA9IHJlY3RXaW47Ci0gICAgY2xpcFJlY3QucmlnaHQgPSBjZW50ZXJQ
b2ludC54KCk7Ci0gICAgY2xpcFJlY3QudG9wID0gY2VudGVyUG9pbnQueSgpOwotCi0gICAgZHJh
d1JvdW5kQ29ybmVyKG5lZWRzTmV3Q2xpcCwgY2xpcFJlY3QsIHJlY3RXaW4sIGRjLCBzdGFibGVS
b3VuZChuZXdCb3R0b21MZWZ0LndpZHRoKCkgKiAyKSwgc3RhYmxlUm91bmQobmV3Qm90dG9tTGVm
dC5oZWlnaHQoKSAqIDIpKTsKLQotICAgIC8vIERyYXcgYm90dG9tIHJpZ2h0Ci0gICAgY2xpcFJl
Y3QgPSByZWN0V2luOwotICAgIGNsaXBSZWN0LmxlZnQgPSBjZW50ZXJQb2ludC54KCk7Ci0gICAg
Y2xpcFJlY3QudG9wID0gY2VudGVyUG9pbnQueSgpOwotCi0gICAgZHJhd1JvdW5kQ29ybmVyKG5l
ZWRzTmV3Q2xpcCwgY2xpcFJlY3QsIHJlY3RXaW4sIGRjLCBzdGFibGVSb3VuZChuZXdCb3R0b21S
aWdodC53aWR0aCgpICogMiksIHN0YWJsZVJvdW5kKG5ld0JvdHRvbVJpZ2h0LmhlaWdodCgpICog
MikpOwotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Um91bmRDb3JuZXIoYm9vbCBuZWVkc05ld0NsaXAsIFJFQ1QgY2xpcFJl
Y3QsIFJFQ1QgcmVjdFdpbiwgSERDIGRjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAg
aWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICBpZiAobmVlZHNOZXdDbGlw
KSB7Ci0gICAgICAgIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oY2xp
cFJlY3QubGVmdCwgY2xpcFJlY3QudG9wLCBjbGlwUmVjdC5yaWdodCwgY2xpcFJlY3QuYm90dG9t
KSk7Ci0gICAgICAgIFNlbGVjdENsaXBSZ24oZGMsIGNsaXBSZ24uZ2V0KCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBJbnRlcnNlY3RDbGlwUmVjdChkYywgY2xpcFJlY3QubGVmdCwgY2xpcFJlY3Qu
dG9wLCBjbGlwUmVjdC5yaWdodCwgY2xpcFJlY3QuYm90dG9tKTsKLQotICAgIDo6Um91bmRSZWN0
KGRjLCByZWN0V2luLmxlZnQgLCByZWN0V2luLnRvcCAsIHJlY3RXaW4ucmlnaHQgLCByZWN0V2lu
LmJvdHRvbSAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgU2VsZWN0Q2xpcFJnbihkYywgbmVlZHNO
ZXdDbGlwID8gMCA6IGNsaXBSZ24uZ2V0KCkpOwotfQotCi0KLUZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRp
bmdNb2RlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZyZWN0OwotfQot
Ci1Db2xvciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCi17
Ci0gICAgY29uc3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyA9IGdyYWRpZW50
LT5nZXRTdG9wcygpOwotICAgIGlmIChzdG9wcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotCi0gICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgc3RvcCA9IHN0b3BzLmZp
cnN0KCk7Ci0gICAgaWYgKHN0b3BzLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gQ29sb3Io
c3RvcC5yZWQsIHN0b3AuZ3JlZW4sIHN0b3AuYmx1ZSwgc3RvcC5hbHBoYSk7Ci0KLSAgICBjb25z
dCBHcmFkaWVudDo6Q29sb3JTdG9wJiBsYXN0U3RvcCA9IHN0b3BzLmxhc3QoKTsKLSAgICByZXR1
cm4gQ29sb3IoKHN0b3AucmVkICsgbGFzdFN0b3AucmVkKSAqIDAuNWYKLSAgICAgICAgLCAoc3Rv
cC5ncmVlbiArIGxhc3RTdG9wLmdyZWVuKSAqIDAuNWYKLSAgICAgICAgLCAoc3RvcC5ibHVlICsg
bGFzdFN0b3AuYmx1ZSkgKiAwLjVmCi0gICAgICAgICwgKHN0b3AuYWxwaGEgKyBsYXN0U3RvcC5h
bHBoYSkgKiAwLjVmKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENvbG9yIGMgPSBtX3N0YXRlLmZpbGxHcmFkaWVudAotICAgICAgICA/IGdyYWRpZW50
QXZlcmFnZUNvbG9yKG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKQotICAgICAgICA6IGZpbGxD
b2xvcigpOwotCi0gICAgaWYgKCFjLmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwot
ICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGJydXNo
ID0gY3JlYXRlQnJ1c2goYyk7Ci0KLSAgICBpZiAobV9kYXRhLT5tX29wYWNpdHkgPCAxLjBmIHx8
IG1fZGF0YS0+aGFzQWxwaGEoKSkgewotICAgICAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHBhdGguYm91bmRpbmdSZWN0KCkpKTsKLSAgICAgICAg
dHJSZWN0LmluZmxhdGUoMSk7Ci0gICAgICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVu
dERDKG1fZGF0YSwgdHJSZWN0KTsKLSAgICAgICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMo
KTsKLSAgICAgICAgaWYgKCFkYykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gdHIgPSBtX2RhdGEtPm1fdHJhbnNmb3JtOwotICAgICAgICB0ci50cmFuc2xh
dGUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkud2lkdGgoKSwgdHJhbnNwYXJlbnREQy50b1NoaWZ0
KCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3Qo
TlVMTF9QRU4pKTsKLSAgICAgICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywg
YnJ1c2guZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRmb3JtUGF0aCgpLT5maWxsUGF0aChkYywg
JnRyKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgR2V0U3RvY2tPYmplY3QoTlVMTF9Q
RU4pKTsKLSAgICAgICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChtX2RhdGEtPm1f
ZGMsIGJydXNoLmdldCgpKTsKLSAgICAgICAgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+ZmlsbFBhdGgo
bV9kYXRhLT5tX2RjLCAmbV9kYXRhLT5tX3RyYW5zZm9ybSk7Ci0gICAgICAgIFNlbGVjdE9iamVj
dChtX2RhdGEtPm1fZGMsIG9sZEJydXNoKTsKLSAgICB9Ci19Ci0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051
bGwoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3Bl
RENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCks
IHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLQotICAgIGlmIChtX2RhdGEtPm1f
b3BhY2l0eSA8IDEuMGYgfHwgbV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0gICAgICAgIEludFJlY3Qg
dHJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPm1hcFJlY3QocGF0aC5ib3VuZGluZ1Jl
Y3QoKSkpOwotICAgICAgICB0clJlY3QuaW5mbGF0ZSgxKTsKLSAgICAgICAgVHJhbnNwYXJlbnRM
YXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QpOwotICAgICAgICBIREMgZGMgPSB0
cmFuc3BhcmVudERDLmhkYygpOwotICAgICAgICBpZiAoIWRjKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0ciA9IG1fZGF0YS0+bV90cmFuc2Zvcm07Ci0g
ICAgICAgIHRyLnRyYW5zbGF0ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0cmFu
c3BhcmVudERDLnRvU2hpZnQoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGRj
LCBHZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0g
U2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRmb3JtUGF0aCgp
LT5zdHJva2VQYXRoKGRjLCAmdHIpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgR2V0U3Rv
Y2tPYmplY3QoTlVMTF9CUlVTSCkpOwotICAgICAgICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9i
amVjdChtX2RhdGEtPm1fZGMsIHBlbi5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRo
KCktPnN0cm9rZVBhdGgobV9kYXRhLT5tX2RjLCAmbV9kYXRhLT5tX3RyYW5zZm9ybSk7Ci0gICAg
ICAgIFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIG9sZFBlbik7Ci0gICAgfQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBHcmFk
aWVudCogZ3JhZGllbnQpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyA9
IGdyYWRpZW50LT5nZXRTdG9wcygpOwotICAgIGlmIChzdG9wcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNpemVfdCBudW1TdG9wcyA9IHN0b3BzLnNpemUoKTsKLSAgICBpZiAo
bnVtU3RvcHMgPT0gMSkgewotICAgICAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9w
ID0gc3RvcHMuZmlyc3QoKTsKLSAgICAgICAgQ29sb3IgY29sb3Ioc3RvcC5yZWQsIHN0b3AuZ3Jl
ZW4sIHN0b3AuYmx1ZSwgc3RvcC5hbHBoYSk7Ci0gICAgICAgIGZpbGxSZWN0KHIsIGNvbG9yLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gCi0gICAgCi0gICAg
U2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9k
YykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChyKTsKLSAgICBJbnRSZWN0IHJlY3QgPSBtX2RhdGEtPm1hcFJlY3QoaW50UmVjdCk7Ci0g
ICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCByZWN0LCAmaW50UmVj
dCwgMjU1LCB0cnVlKTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlm
ICghZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRv
U2hpZnQoKSk7Ci0gICAgRmxvYXRQb2ludCBmcDAgPSBtX2RhdGEtPm1hcFBvaW50KGdyYWRpZW50
LT5wMCgpKTsKLSAgICBGbG9hdFBvaW50IGZwMSA9IG1fZGF0YS0+bWFwUG9pbnQoZ3JhZGllbnQt
PnAxKCkpOwotICAgIEludFBvaW50IHAwKHN0YWJsZVJvdW5kKGZwMC54KCkpLCBzdGFibGVSb3Vu
ZChmcDAueSgpKSk7Ci0gICAgSW50UG9pbnQgcDEoc3RhYmxlUm91bmQoZnAxLngoKSksIHN0YWJs
ZVJvdW5kKGZwMS55KCkpKTsKLSAgICBwMCArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKTsKLSAg
ICBwMSArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKTsKLQotICAgIGlmIChncmFkaWVudC0+aXNS
YWRpYWwoKSkgewotICAgICAgICBpZiAoZ19yYWRpYWxHcmFkaWVudEZpbGxlcikgewotICAgICAg
ICAgICAgLy8gRklYTUU6IGRvbid0IHN1cHBvcnQgMkQgc2NhbGluZyBhdCB0aGlzIHRpbWUKLSAg
ICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IChtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKSArIG1fZGF0
YS0+bV90cmFuc2Zvcm0uZCgpKSAqIDAuNTsKLSAgICAgICAgICAgIGZsb2F0IHIwID0gZ3JhZGll
bnQtPnN0YXJ0UmFkaXVzKCkgKiBzY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IHIxID0gZ3JhZGll
bnQtPmVuZFJhZGl1cygpICogc2NhbGU7Ci0gICAgICAgICAgICBnX3JhZGlhbEdyYWRpZW50Rmls
bGVyKGRjLCByZWN0LCBwMCwgcDEsIHIwLCByMSwgZ3JhZGllbnQtPmdldFN0b3BzKCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChnX2xpbmVhckdyYWRp
ZW50RmlsbGVyKSB7Ci0gICAgICAgIGdfbGluZWFyR3JhZGllbnRGaWxsZXIoZGMsIHJlY3QsIHAw
LCBwMSwgZ3JhZGllbnQtPmdldFN0b3BzKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gU2ltcGxlIDFEIGxpbmVhciBzb2x1dGlvbiB0aGF0IGFzc3VtZXMgcDAgaXMgb24gdGhl
IHRvcCBvciBsZWZ0IHNpZGUsIGFuZCBwMSBpcyBvbiB0aGUgcmlnaHQgb3IgYm90dG9tIHNpZGUK
LSAgICBzaXplX3QgbnVtUmVjdHMgPSAobnVtU3RvcHMgLSAxKTsKLSAgICBWZWN0b3I8VFJJVkVS
VEVYLCAyMD4gdHY7Ci0gICAgdHYucmVzaXplKG51bVJlY3RzICogMik7Ci0gICAgVmVjdG9yPEdS
QURJRU5UX1JFQ1QsIDEwPiBtZXNoOwotICAgIG1lc2gucmVzaXplKG51bVJlY3RzKTsKLSAgICBp
bnQgeCA9IHJlY3QueCgpOwotICAgIGludCB5ID0gcmVjdC55KCk7Ci0gICAgaW50IHdpZHRoID0g
cmVjdC53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAgIEZsb2F0
U2l6ZSBkID0gZ3JhZGllbnQtPnAxKCkgLSBncmFkaWVudC0+cDAoKTsKLSAgICBib29sIHZlcnRp
Y2FsID0gZmFicyhkLmhlaWdodCgpKSA+IGZhYnMoZC53aWR0aCgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKLSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkNv
bG9yU3RvcCYgc3RvcCA9IHN0b3BzW2ldOwotICAgICAgICBpbnQgaVR2ID0gaSA/IDIgKiBpIC0g
MSA6IDA7Ci0gICAgICAgIHR2W2lUdl0uUmVkID0gc3RvcC5yZWQgKiAweEZGRkY7Ci0gICAgICAg
IHR2W2lUdl0uR3JlZW4gPSBzdG9wLmdyZWVuICogMHhGRkZGOwotICAgICAgICB0dltpVHZdLkJs
dWUgPSBzdG9wLmJsdWUgKiAweEZGRkY7Ci0gICAgICAgIHR2W2lUdl0uQWxwaGEgPSBzdG9wLmFs
cGhhICogMHhGRkZGOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgdHZbaVR2XS54ID0g
dmVydGljYWwgPyB4ICsgd2lkdGg6IHggKyB3aWR0aCAqIHN0b3Auc3RvcDsKLSAgICAgICAgICAg
IHR2W2lUdl0ueSA9IHZlcnRpY2FsID8geSArIGhlaWdodCAqIHN0b3Auc3RvcCA6IHkgKyBoZWln
aHQ7Ci0gICAgICAgICAgICBtZXNoW2kgLSAxXS5VcHBlckxlZnQgPSBpVHYgLSAxOwotICAgICAg
ICAgICAgbWVzaFtpIC0gMV0uTG93ZXJSaWdodCA9IGlUdjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHR2W2lUdl0ueCA9IHg7Ci0gICAgICAgICAgICB0dltpVHZdLnkgPSB5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGkgJiYgaSA8IG51bVJlY3RzKSB7Ci0gICAgICAgICAgICB0
dltpVHYgKyAxXSA9IHR2W2lUdl07Ci0gICAgICAgICAgICBpZiAodmVydGljYWwpCi0gICAgICAg
ICAgICAgICAgdHZbaVR2ICsgMV0ueCA9IHg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgdHZbaVR2ICsgMV0ueSA9IHk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHcmFkaWVu
dEZpbGwoZGMsIHR2LmRhdGEoKSwgdHYuc2l6ZSgpLCBtZXNoLmRhdGEoKSwgbWVzaC5zaXplKCks
IHZlcnRpY2FsID8gR1JBRElFTlRfRklMTF9SRUNUX1YgOiBHUkFESUVOVF9GSUxMX1JFQ1RfSCk7
Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zv
cm07Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKLQotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCkKLSAgICAgICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0ZS5maWxsR3JhZGllbnQu
Z2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgZmlsbFJlY3QocmVjdCwgZmlsbENvbG9yKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNz
Q29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRp
b25RdWFsaXR5KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0NoYXJWaXNpYmxlKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGMgJiYgYyAhPSB6ZXJv
V2lkdGhTcGFjZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZmlsbENv
bG9yKCkuYWxwaGEoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGJvb2wgbXVzdFN1cHBvcnRBbHBoYSA9IG1fZGF0YS0+aGFzQWxwaGEoKTsKLQotICAgIGlm
ICghbXVzdFN1cHBvcnRBbHBoYSAmJiBmaWxsQ29sb3IoKS5hbHBoYSgpID09IDB4RkYgJiYgbV9k
YXRhLT5tX29wYWNpdHkgPj0gMS4wKSB7Ci0gICAgICAgIGZvbnQuZHJhd1RleHQodGhpcywgcnVu
LCBwb2ludCwgZnJvbSwgdG8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQg
b2xkT3BhY2l0eSA9IG1fZGF0YS0+bV9vcGFjaXR5OwotICAgIG1fZGF0YS0+bV9vcGFjaXR5ICo9
IGZpbGxDb2xvcigpLmFscGhhKCkgLyAyNTUuMDsKLQotICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCA9
IGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgZm9udC5mb250TWV0cmljcygp
LmhlaWdodCgpLCBmcm9tLCB0byk7Ci0gICAgdGV4dFJlY3Quc2V0WSh0ZXh0UmVjdC55KCkgLSBm
b250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChtX2RhdGEtPm1hcFJlY3QodGV4dFJlY3QpKTsKLSAgICBSRUNUIGJtcFJlY3Q7
Ci0gICAgQWxwaGFQYWludFR5cGUgYWxwaGFQYWludFR5cGUgPSBtdXN0U3VwcG9ydEFscGhhID8g
QWxwaGFQYWludE90aGVyIDogQWxwaGFQYWludE5vbmU7Ci0gICAgaWYgKFJlZlB0cjxTaGFyZWRC
aXRtYXA+IGJtcCA9IG1fZGF0YS0+Z2V0VHJhbnNwYXJlbnRMYXllckJpdG1hcCh0clJlY3QsIGFs
cGhhUGFpbnRUeXBlLCBibXBSZWN0LCB0cnVlLCBtdXN0U3VwcG9ydEFscGhhKSkgewotICAgICAg
ICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoMCk7Ci0gICAgICAgICAgICBnYy5z
ZXRCaXRtYXAoYm1wKTsKLSAgICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShtX2RhdGEtPm1f
dHJhbnNmb3JtLmEoKSwgbV9kYXRhLT5tX3RyYW5zZm9ybS5kKCkpKTsKLSAgICAgICAgICAgIGZv
bnQuZHJhd1RleHQoJmdjLCBydW4sIEludFBvaW50KDAsIGZvbnQuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSksIGZyb20sIHRvKTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBrZXkxOwotICAg
ICAgICBIREMgbWVtREMgPSBibXAtPmdldERDKCZrZXkxKTsKLSAgICAgICAgaWYgKG1lbURDKSB7
Ci0gICAgICAgICAgICBtX2RhdGEtPnBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAobWVt
REMsIGJtcC5nZXQoKSwgdHJSZWN0LCBhbHBoYVBhaW50VHlwZSwgYm1wUmVjdCk7Ci0gICAgICAg
ICAgICBibXAtPnJlbGVhc2VEQyhtZW1EQywga2V5MSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtX2RhdGEtPm1fb3BhY2l0eSA9IG9sZE9wYWNpdHk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgaWYgKCFtX2RhdGEt
Pm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBp
ZiAoIW51bUdseXBocykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzQ2hhclZp
c2libGUoKmdseXBoQnVmZmVyLmdseXBocyhmcm9tKSkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgKytmcm9tOwotICAgICAgICAtLW51bUdseXBoczsKLSAgICB9Ci0KLSAgICBkb3VibGUg
c2NhbGVYID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5hKCk7Ci0gICAgZG91YmxlIHNjYWxlWSA9IG1f
ZGF0YS0+bV90cmFuc2Zvcm0uZCgpOwotCi0gICAgaW50IGhlaWdodCA9IGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5zaXplKCkgKiBzY2FsZVk7Ci0gICAgaW50IHdpZHRoID0gZm9udERhdGEtPmF2
Z0NoYXJXaWR0aCgpICogc2NhbGVYOwotCi0gICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwot
ICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIRk9OVCBoRm9u
dCA9IGhlaWdodCA+IDEKLSAgICAgICAgPyBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuZ2V0U2Nh
bGVkRm9udEhhbmRsZShoZWlnaHQsIHNjYWxlWCA9PSBzY2FsZVkgPyAwIDogd2lkdGgpCi0gICAg
ICAgIDogMDsKLQotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCksIHBvaW50Lnko
KSAtIGZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICBGbG9hdFBvaW50IHRy
UG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHN0YXJ0UG9pbnQpOwotICAgIGludCB5ID0gc3RhYmxl
Um91bmQodHJQb2ludC55KCkpOwotCi0gICAgQ29sb3IgY29sb3IgPSBmaWxsQ29sb3IoKTsKLSAg
ICBpZiAoIWNvbG9yLmFscGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTE9SUkVGIGZv
bnRDb2xvciA9IFJHQihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpKTsK
LQotICAgIGlmICghaEZvbnQpIHsKLSAgICAgICAgZG91YmxlIG9mZnNldCA9IHRyUG9pbnQueCgp
OwotICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2UgPSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKTsKLSAgICAgICAgaWYgKHNjYWxlWCA9PSAxLikKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgbnVtR2x5cGhzOyArK2kpCi0gICAgICAgICAgICAgICAgb2Zm
c2V0ICs9ICgqYWR2YW5jZSsrKS53aWR0aCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3IgKGludCBpID0gMTsgaSA8IG51bUdseXBoczsgKytpKQotICAgICAgICAgICAgICAgIG9mZnNl
dCArPSAoKmFkdmFuY2UrKykud2lkdGgoKSAqIHNjYWxlWDsKLQotICAgICAgICBvZmZzZXQgKz0g
d2lkdGg7Ci0KLSAgICAgICAgYXV0byBoUGVuID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVQZW4o
UFNfREFTSCwgMSwgZm9udENvbG9yKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0
T2JqZWN0KG1fZGF0YS0+bV9kYywgaFBlbi5nZXQoKSk7Ci0KLSAgICAgICAgTW92ZVRvRXgobV9k
YXRhLT5tX2RjLCBzdGFibGVSb3VuZCh0clBvaW50LngoKSksIHksIDApOwotICAgICAgICBMaW5l
VG8obV9kYXRhLT5tX2RjLCBzdGFibGVSb3VuZChvZmZzZXQpLCB5KTsKLQotICAgICAgICBTZWxl
Y3RPYmplY3QobV9kYXRhLT5tX2RjLCBvbGRQZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyID0gMDsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7
Ci0gICAgYm9vbCBoYXNTaGFkb3cgPSB0ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZUZpbGwK
LSAgICAgICAgJiYgZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IsIHNoYWRvd0NvbG9yU3BhY2UpCi0gICAgICAgICYmIHNoYWRvd0NvbG9yLmFscGhhKCk7Ci0g
ICAgQ09MT1JSRUYgc2hhZG93UkdCQ29sb3I7Ci0gICAgRmxvYXRQb2ludCB0clNoYWRvd1BvaW50
OwotICAgIGlmIChoYXNTaGFkb3cpIHsKLSAgICAgICAgc2hhZG93UkdCQ29sb3IgPSBSR0Ioc2hh
ZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSk7
Ci0gICAgICAgIHRyU2hhZG93UG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHN0YXJ0UG9pbnQgKyBz
aGFkb3dPZmZzZXQpOwotICAgIH0KLQotICAgIEhHRElPQkogaE9sZEZvbnQgPSBTZWxlY3RPYmpl
Y3QobV9kYXRhLT5tX2RjLCBoRm9udCk7Ci0gICAgQ09MT1JSRUYgb2xkVGV4dENvbG9yID0gR2V0
VGV4dENvbG9yKG1fZGF0YS0+bV9kYyk7Ci0gICAgaW50IG9sZFRleHRBbGlnbiA9IEdldFRleHRB
bGlnbihtX2RhdGEtPm1fZGMpOwotICAgIFNldFRleHRBbGlnbihtX2RhdGEtPm1fZGMsIDApOwot
Ci0gICAgaW50IG9sZEJrTW9kZSA9IEdldEJrTW9kZShtX2RhdGEtPm1fZGMpOwotICAgIFNldEJr
TW9kZShtX2RhdGEtPm1fZGMsIFRSQU5TUEFSRU5UKTsKLQotICAgIGlmIChudW1HbHlwaHMgPiAx
KSB7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXQgPSB0clBvaW50LngoKTsKLSAgICAgICAgVmVjdG9y
PGludCwgMjU2PiBnbHlwaFNwYWNlKG51bUdseXBocyk7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwg
MjU2PiB0ZXh0KG51bUdseXBocyk7Ci0gICAgICAgIGludCogY3VyU3BhY2UgPSBnbHlwaFNwYWNl
LmRhdGEoKTsKLSAgICAgICAgVUNoYXIqIGN1ckNoYXIgPSB0ZXh0LmRhdGEoKTsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIHNyY0NoYXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBjb25zdCBzcmNDaGFyRW5kID0gc3JjQ2hhciArIG51bUdseXBoczsKLSAg
ICAgICAgKmN1ckNoYXIrKyA9ICpzcmNDaGFyKys7Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9
IHN0YWJsZVJvdW5kKG9mZnNldCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gZmlyc3RPZmZz
ZXQ7Ci0gICAgICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZSA9IGdseXBoQnVm
ZmVyLmFkdmFuY2VzKGZyb20pOwotICAgICAgICAvLyBGSVhNRTogRXh0VGV4dE91dCgpIGNhbiBm
bGlwIG92ZXIgZWFjaCB3b3JkIGZvciBSVEwgbGFuZ3VhZ2VzLCBldmVuIHdoZW4gVEFfUlRMUkVB
RElORyBpcyBvZmYuCi0gICAgICAgIC8vICh0aGlzIGNhbiBiZSBHREkgYnVnIG9yIGZvbnQgZHJp
dmVyIGJ1Zz8pCi0gICAgICAgIC8vIFdlIGFyZSBub3QgY2xlYXIgaG93IGl0IHByb2Nlc3NlcyBj
aGFyYWN0ZXJzIGFuZCBoYW5kbGVzIHNwZWNpZmllZCBzcGFjZXMuIE9uIHRoZSBvdGhlciBzaWRl
LAotICAgICAgICAvLyBvdXIgZ2x5cGggYnVmZmVyIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3Qg
b3JkZXIgZm9yIHJlbmRlcmluZy4gU28sIHRoZSBzb2x1dGlvbiBpcyB0aGF0IHdlCi0gICAgICAg
IC8vIGNhbGwgRXh0VGV4dE91dCgpIGZvciBlYWNoIHNpbmdsZSBjaGFyYWN0ZXIgd2hlbiB0aGUg
dGV4dCBjb250YWlucyBhbnkgUlRMIGNoYXJhY3Rlci4KLSAgICAgICAgLy8gVGhpcyBzb2x1dGlv
biBpcyBub3QgcGVyZmVjdCBhcyBpdCBpcyBzbG93ZXIgdGhhbiBjYWxsaW5nIEV4dFRleHRPdXQo
KSBvbmUgdGltZSBmb3IgYWxsIGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIERyYXdpbmcgY2hhcmFj
dGVycyBvbmUgYnkgb25lIG1heSBiZSB0b28gc2xvdy4KLSAgICAgICAgYm9vbCBkcmF3T25lQnlP
bmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKHNjYWxlWCA9PSAxLikgewotICAgICAgICAgICAgZm9y
ICg7IHNyY0NoYXIgPCBzcmNDaGFyRW5kOyArK3NyY0NoYXIpIHsKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNl
dEludCA9IHN0YWJsZVJvdW5kKG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ2hhclZp
c2libGUoKnNyY0NoYXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHJhd09uZUJ5T25l
ICYmIHVfY2hhckRpcmVjdGlvbigqc3JjQ2hhcikgPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZHJhd09uZUJ5T25lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgKmN1ckNoYXIrKyA9ICpzcmNDaGFyOwotICAgICAgICAgICAgICAgICAgICAqY3VyU3BhY2Ur
KyA9IG9mZnNldEludCAtIGxhc3RPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RPZmZz
ZXQgPSBvZmZzZXRJbnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICg7IHNyY0NoYXIgPCBzcmNDaGFyRW5kOyArK3Ny
Y0NoYXIpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCkg
KiBzY2FsZVg7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNldEludCA9IHN0YWJsZVJvdW5kKG9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ2hhclZpc2libGUoKnNyY0NoYXIpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghZHJhd09uZUJ5T25lICYmIHVfY2hhckRpcmVjdGlvbigq
c3JjQ2hhcikgPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAgICAgICAgICAgICAgICAgICAgZHJh
d09uZUJ5T25lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgKmN1ckNoYXIrKyA9ICpzcmND
aGFyOwotICAgICAgICAgICAgICAgICAgICAqY3VyU3BhY2UrKyA9IG9mZnNldEludCAtIGxhc3RP
ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RPZmZzZXQgPSBvZmZzZXRJbnQ7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG51bUdseXBo
cyA9IGN1ckNoYXIgLSB0ZXh0LmRhdGEoKTsKLSAgICAgICAgaWYgKGhhc1NoYWRvdykgewotICAg
ICAgICAgICAgU2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywgc2hhZG93UkdCQ29sb3IpOwotICAg
ICAgICAgICAgaWYgKGRyYXdPbmVCeU9uZSkgewotICAgICAgICAgICAgICAgIGludCB4U2hhZG93
ID0gZmlyc3RPZmZzZXQgKyBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSAtIHRyUG9pbnQu
eCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgeVNoYWRvdyA9IHN0YWJsZVJvdW5kKHRyU2hhZG93
UG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBo
czsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCB4
U2hhZG93LCB5U2hhZG93LCAwLCBOVUxMLCB0ZXh0LmRhdGEoKSArIGksIDEsIDApOwotICAgICAg
ICAgICAgICAgICAgICB4U2hhZG93ICs9IGdseXBoU3BhY2VbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEt
Pm1fZGMsIGZpcnN0T2Zmc2V0ICsgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC54KCkgLSB0clBv
aW50LngoKSksIHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueSgpKSwgMCwgTlVMTCwgdGV4dC5k
YXRhKCksIG51bUdseXBocywgZ2x5cGhTcGFjZS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAg
IFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIGZvbnRDb2xvcik7Ci0gICAgICAgIGlmIChkcmF3
T25lQnlPbmUpIHsKLSAgICAgICAgICAgIGludCB4ID0gZmlyc3RPZmZzZXQ7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
RXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIHgsIHksIDAsIE5VTEwsIHRleHQuZGF0YSgpICsgaSwg
MSwgMCk7Ci0gICAgICAgICAgICAgICAgeCArPSBnbHlwaFNwYWNlW2ldOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCBm
aXJzdE9mZnNldCwgeSwgMCwgTlVMTCwgdGV4dC5kYXRhKCksIG51bUdseXBocywgZ2x5cGhTcGFj
ZS5kYXRhKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyIGMgPSAqZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pOwotICAgICAgICBpZiAoaGFzU2hhZG93KSB7Ci0gICAgICAgICAgICBTZXRU
ZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBzaGFkb3dSR0JDb2xvcik7Ci0gICAgICAgICAgICBFeHRU
ZXh0T3V0KG1fZGF0YS0+bV9kYywgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC54KCkpLCBzdGFi
bGVSb3VuZCh0clNoYWRvd1BvaW50LnkoKSksIDAsIE5VTEwsICZjLCAxLCAwKTsKLSAgICAgICAg
fQotICAgICAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBmb250Q29sb3IpOwotICAgICAg
ICBFeHRUZXh0T3V0KG1fZGF0YS0+bV9kYywgc3RhYmxlUm91bmQodHJQb2ludC54KCkpLCB5LCAw
LCBOVUxMLCAmYywgMSwgMCk7Ci0gICAgfQotCi0gICAgU2V0VGV4dEFsaWduKG1fZGF0YS0+bV9k
Yywgb2xkVGV4dEFsaWduKTsKLSAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBvbGRUZXh0
Q29sb3IpOwotICAgIFNldEJrTW9kZShtX2RhdGEtPm1fZGMsIG9sZEJrTW9kZSk7Ci0gICAgU2Vs
ZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgaE9sZEZvbnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjb25zdCBpbnQgYm94V2lkdGhCZXN0ID0gODsKLSAgICBjb25zdCBp
bnQgYm94SGVpZ2h0QmVzdCA9IDg7Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlciht
X2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExh
eWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJnJlY3QsIDI1NSwgdHJ1ZSk7Ci0g
ICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICBy
ZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAg
UkVDVCByZWN0V2luID0gdHJSZWN0OwotCi0gICAgaWYgKChyZWN0V2luLnJpZ2h0IC0gcmVjdFdp
bi5sZWZ0KSA8IGJveFdpZHRoQmVzdCkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBi
bXAgPSBTaGFyZWRCaXRtYXA6OmNyZWF0ZShJbnRTaXplKGJveFdpZHRoQmVzdCwgYm94SGVpZ2h0
QmVzdCksIEJpdG1hcEluZm86OkJpdENvdW50MTYsIHRydWUpOwotICAgICAgICBTaGFyZWRCaXRt
YXA6OkRDSG9sZGVyIG1lbURDKGJtcC5nZXQoKSk7Ci0gICAgICAgIGlmIChtZW1EQy5nZXQoKSkg
ewotICAgICAgICAgICAgUkVDVCB0ZW1wUmVjdCA9IHswLCAwLCBib3hXaWR0aEJlc3QsIGJveEhl
aWdodEJlc3R9OwotICAgICAgICAgICAgRHJhd0ZyYW1lQ29udHJvbChtZW1EQy5nZXQoKSwgJnRl
bXBSZWN0LCB0eXBlLCBzdGF0ZSk7Ci0KLSAgICAgICAgICAgIDo6U3RyZXRjaEJsdChkYywgcmVj
dFdpbi5sZWZ0LCByZWN0V2luLnRvcCwgcmVjdFdpbi5yaWdodCAtIHJlY3RXaW4ubGVmdCwgcmVj
dFdpbi5ib3R0b20gLSByZWN0V2luLnRvcCwgbWVtREMuZ2V0KCksIDAsIDAsIGJveFdpZHRoQmVz
dCwgYm94SGVpZ2h0QmVzdCwgU1JDQ09QWSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBEcmF3RnJhbWVDb250cm9sKGRjLCAmcmVjdFdpbiwgdHlwZSwgc3Rh
dGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFt
X2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9k
YXRhLT5tYXBSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERD
KG1fZGF0YSwgdHJSZWN0LCAmcmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMo
KTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNw
YXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0V2luID0gdHJSZWN0OwotICAgIERy
YXdGb2N1c1JlY3QoZGMsICZyZWN0V2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50VGV4dEZpZWxkKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHN0YXRlKQotewotICAg
IGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQ
cm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3Qp
OwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAm
cmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQot
ICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkp
OwotCi0gICAgUkVDVCByZWN0V2luID0gdHJSZWN0OwotICAgIERyYXdFZGdlKGRjLCAmcmVjdFdp
biwgRURHRV9FVENIRUQsIEJGX1JFQ1QgfCBCRl9BREpVU1QpOwotICAgIEZpbGxSZWN0KGRjLCAm
cmVjdFdpbiwgcmVpbnRlcnByZXRfY2FzdDxIQlJVU0g+KCgoc3RhdGUgJiBERkNTX0lOQUNUSVZF
KSA/IENPTE9SX0JUTkZBQ0UgOiBDT0xPUl9XSU5ET1cpICsgMSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpdG1hcChTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgSW50UmVjdCYg
ZHN0UmVjdEluLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Ci17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9k
YykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBkc3RSZWN0ID0gbV9kYXRhLT5tYXBS
ZWN0KGRzdFJlY3RJbik7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9k
YXRhLCBkc3RSZWN0LCAmZHN0UmVjdEluLCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5z
cGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIGRzdFJl
Y3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBibXAtPmRyYXcoZGMsIGRz
dFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUpOwotCi0gICAgaWYgKGJtcC0+
aXMxNmJpdCgpKQotICAgICAgICB0cmFuc3BhcmVudERDLmZpbGxBbHBoYUNoYW5uZWwoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKFNoYXJlZEJpdG1hcCog
Ym1wLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0SW4sIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKQot
ewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNj
b3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgaW50RHN0UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoZGVzdFJlY3RJbik7Ci0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3Qo
aW50RHN0UmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRh
LCB0clJlY3QsICZpbnREc3RSZWN0LCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFy
ZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5t
b3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLSAgICBGbG9hdFJlY3QgbW92ZWREc3RSZWN0
ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChGbG9hdFJlY3QodHJSZWN0
KSk7Ci0gICAgRmxvYXRTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdFJl
Y3RJbi5sb2NhdGlvbigpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9kYXRh
LT5tX3RyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1vdmVkLndpZHRoKCksIG1v
dmVkLmhlaWdodCgpKTsKLQotICAgIGJtcC0+ZHJhd1BhdHRlcm4oZGMsIHRyYW5zZm9ybSwgdGls
ZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0SW4sIG9yaWdTb3VyY2VTaXplKTsKLQotICAgIGlmICghYm1wLT5oYXNBbHBoYSgpKQot
ICAgICAgICB0cmFuc3BhcmVudERDLmZpbGxBbHBoYUNoYW5uZWwoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJY29uKEhJQ09OIGljb24sIGNvbnN0IEludFJlY3QmIGRzdFJlY3RJ
biwgVUlOVCBmbGFncykKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlm
ICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRzdFJlY3Qg
PSBtX2RhdGEtPm1hcFJlY3QoZHN0UmVjdEluKTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJh
bnNwYXJlbnREQyhtX2RhdGEsIGRzdFJlY3QsICZkc3RSZWN0SW4sIDI1NSwgdHJ1ZSk7Ci0gICAg
SERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1
cm47Ci0gICAgZHN0UmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIERy
YXdJY29uRXgoZGMsIGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgaWNvbiwgZHN0UmVjdC53aWR0
aCgpLCBkc3RSZWN0LmhlaWdodCgpLCAwLCBOVUxMLCBmbGFncyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyRGF0
YVdpbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlckRhdGFXaW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQ2ZDM4Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdl
QnVmZmVyRGF0YVdpbmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKLXB1Ymxp
YzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOwotICAgIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IG1fYml0bWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlcldpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjMjNmOC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlcldpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQnVmZmVyZWRJbWFnZTogcHVibGljIEltYWdlIHsKLQotcHVibGljOgotICAg
IEJ1ZmZlcmVkSW1hZ2UoY29uc3QgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhKQotICAgICAgICA6IG1f
ZGF0YShkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1l
S25vd25Ub0JlT3BhcXVlKCkgeyByZXR1cm4gIW1fZGF0YS0+bV9iaXRtYXAtPmhhc0FscGhhKCkg
OyB9Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1f
ZGF0YS0+bV9iaXRtYXAtPndpZHRoKCksIG1fZGF0YS0+bV9iaXRtYXAtPmhlaWdodCgpKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1
ZSkge30KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwotCi0gICAgY29uc3QgSW1hZ2VCdWZmZXJE
YXRhKiBtX2RhdGE7Ci19OwotCi12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24p
Ci17Ci0gICAgSW50UmVjdCBpbnREc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KTsK
LSAgICBJbnRSZWN0IGludFNyY1JlY3Qoc3JjUmVjdCk7Ci0gICAgbV9kYXRhLT5tX2JpdG1hcC0+
ZHJhdyhjdHh0LCBpbnREc3RSZWN0LCBpbnRTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlKQotewotICAgIG1fZGF0YS0+
bV9iaXRtYXAtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgpKTsKLX0KLQotSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6
IG1fYml0bWFwKFNoYXJlZEJpdG1hcDo6Y3JlYXRlKHNpemUsIEJpdG1hcEluZm86OkJpdENvdW50
MzIsIGZhbHNlKSkKLXsKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWh0bWw1
LTIwMDkwMjEyL3RoZS1jYW52YXMtZWxlbWVudC5odG1sI2NhbnZhc3BpeGVsYXJyYXkKLSAgICAv
LyAiV2hlbiB0aGUgY2FudmFzIGlzIGluaXRpYWxpemVkIGl0IG11c3QgYmUgc2V0IHRvIGZ1bGx5
IHRyYW5zcGFyZW50IGJsYWNrLiIKLSAgICBtX2JpdG1hcC0+cmVzZXRQaXhlbHModHJ1ZSk7Ci0g
ICAgbV9iaXRtYXAtPnNldEhhc0FscGhhKHRydWUpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2Rh
dGEoc2l6ZSkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQot
ewotICAgIC8vIEZJWE1FOiBSZXNwZWN0IHJlc291dGlvblNjYWxlIHRvIHN1cHBvcnQgaGlnaC1E
UEkgY2FudmFzLgotICAgIFVOVVNFRF9QQVJBTShyZXNvbHV0aW9uU2NhbGUpOwotICAgIC8vIEZJ
WE1FOiBjb2xvclNwYWNlIGlzIG5vdCB1c2VkCi0gICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2Up
OwotCi0gICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dCgwKSk7Ci0g
ICAgbV9jb250ZXh0LT5zZXRCaXRtYXAobV9kYXRhLm1fYml0bWFwKTsKLSAgICBzdWNjZXNzID0g
dHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCi17Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1fZGF0YSkpOwotfQotCi1CYWNraW5nU3Rv
cmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIENv
cHlCYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQot
ewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3Rv
cmUpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JT
cGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbigpLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShD
b3B5QmFja2luZ1N0b3JlKTsKLSAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0
UmVjdCk7Ci19Ci0KLXRlbXBsYXRlIDxib29sIHByZW11bHRpcGxpZWQ+Ci1zdGF0aWMgUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IFNoYXJlZEJpdG1hcCogYml0bWFwKQotewotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
cmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwotCi0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciogc3JjID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJpdG1hcC0+Ynl0
ZXMoKSk7Ci0gICAgaWYgKCFzcmMpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgp
OwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KDAsIDAsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFw
LT5oZWlnaHQoKSk7Ci0gICAgc291cmNlUmVjdC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgaWYgKHNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsK
LQotICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIGltYWdl
RGF0YS0+emVyb0ZpbGwoKTsKLSAgICBzcmMgKz0gKHNvdXJjZVJlY3QueSgpICogYml0bWFwLT53
aWR0aCgpICsgc291cmNlUmVjdC54KCkpICogNDsKLSAgICBkc3QgKz0gKChzb3VyY2VSZWN0Lnko
KSAtIHJlY3QueSgpKSAqIHJlY3Qud2lkdGgoKSArIHNvdXJjZVJlY3QueCgpIC0gcmVjdC54KCkp
ICogNDsKLSAgICBpbnQgYnl0ZXNUb0NvcHkgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAg
IGludCBzcmNTa2lwID0gKGJpdG1hcC0+d2lkdGgoKSAtIHNvdXJjZVJlY3Qud2lkdGgoKSkgKiA0
OwotICAgIGludCBkc3RTa2lwID0gKHJlY3Qud2lkdGgoKSAtIHNvdXJjZVJlY3Qud2lkdGgoKSkg
KiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRzdEVuZCA9IGRzdCArIHNvdXJjZVJlY3Qu
aGVpZ2h0KCkgKiByZWN0LndpZHRoKCkgKiA0OwotICAgIHdoaWxlIChkc3QgPCBkc3RFbmQpIHsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsgYnl0ZXNUb0Nv
cHk7Ci0gICAgICAgIHdoaWxlIChkc3QgPCBkc3RSb3dFbmQpIHsKLSAgICAgICAgICAgIC8vIENv
bnZlcnQgQVJHQiBsaXR0bGUgZW5kaWFuIHRvIFJHQkEgYmlnIGVuZGlhbgotICAgICAgICAgICAg
aW50IGJsdWUgPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgZ3JlZW4gPSAqc3JjKys7Ci0gICAg
ICAgICAgICBpbnQgcmVkID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGFscGhhID0gKnNyYysr
OwotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1
KTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigo
Z3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTUpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1KTsKLSAg
ICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHJlZCk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oZ3JlZW4pOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJsdWUpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFscGhhKTsKLSAgICAgICAgICAgICAgICArK3Ny
YzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzcmMgKz0gc3JjU2tpcDsKLSAg
ICAgICAgZHN0ICs9IGRzdFNraXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPGZhbHNlPihyZWN0LCBtX2Rh
dGEubV9iaXRtYXAuZ2V0KCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8dHJ1
ZT4ocmVjdCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3Vy
Y2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgU2hh
cmVkQml0bWFwKiBiaXRtYXAgPSBtX2RhdGEubV9iaXRtYXAuZ2V0KCk7Ci0gICAgdW5zaWduZWQg
Y2hhciogZHN0ID0gKHVuc2lnbmVkIGNoYXIqKWJpdG1hcC0+Ynl0ZXMoKTsKLSAgICBpZiAoIWRz
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBkZXN0UmVjdChkZXN0UG9pbnQsIHNv
dXJjZVJlY3Quc2l6ZSgpKTsKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBi
aXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpKTsKLQotICAgIGlmIChkZXN0UmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy
YyA9IHNvdXJjZS0+ZGF0YSgpOwotICAgIGRzdCArPSAoZGVzdFJlY3QueSgpICogYml0bWFwLT53
aWR0aCgpICsgZGVzdFJlY3QueCgpKSAqIDQ7Ci0gICAgc3JjICs9IChzb3VyY2VSZWN0LnkoKSAq
IHNvdXJjZVNpemUud2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7Ci0gICAgaW50IGJ5dGVz
VG9Db3B5ID0gZGVzdFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IGRzdFNraXAgPSAoYml0bWFw
LT53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0OwotICAgIGludCBzcmNTa2lwID0gKHNv
dXJjZVNpemUud2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkpICogNDsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBkc3RFbmQgPSBkc3QgKyBkZXN0UmVjdC5oZWlnaHQoKSAqIGJpdG1hcC0+d2lk
dGgoKSAqIDQ7Ci0gICAgd2hpbGUgKGRzdCA8IGRzdEVuZCkgewotICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBkc3RSb3dFbmQgPSBkc3QgKyBieXRlc1RvQ29weTsKLSAgICAgICAgd2hpbGUg
KGRzdCA8IGRzdFJvd0VuZCkgewotICAgICAgICAgICAgLy8gQ29udmVydCBSR0JBIGJpZyBlbmRp
YW4gdG8gQVJHQiBsaXR0bGUgZW5kaWFuCi0gICAgICAgICAgICBpbnQgcmVkID0gKnNyYysrOwot
ICAgICAgICAgICAgaW50IGdyZWVuID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGJsdWUgPSAq
c3JjKys7Ci0gICAgICAgICAgICBpbnQgYWxwaGEgPSAqc3JjKys7Ci0gICAgICAgICAgICBpZiAo
bXVsdGlwbGllZCA9PSBQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYmx1ZSAqIDI1NSAvIGFscGhhKTsKLSAgICAgICAg
ICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbiAqIDI1NSAv
IGFscGhhKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihyZWQgKiAyNTUgLyBhbHBoYSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oYWxwaGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihibHVlKTsKLSAg
ICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbik7
Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocmVk
KTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihh
bHBoYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3JjICs9IHNyY1NraXA7
Ci0gICAgICAgIGRzdCArPSBkc3RTa2lwOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJs
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obG9va1VwVGFibGUpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSosIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2RhdGEubV9iaXRtYXAtPmJ5dGVzKCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
YzBhOTYzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ltYWdlV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiV2luY2VHcmFw
aGljc0V4dHJhcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc05hdGl2
ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJl
dHVybiBTaGFyZWRCaXRtYXA6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgbV9zaXplLCBoYXNBbHBo
YSgpKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhRGF0YSkKLXsK
LSAgICBpZiAoY2xlYXJNZXRhRGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsK
LQotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWUgPSAwOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQml0bWFwSW1h
Z2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCi17
Ci0gICAgaWYgKCFibXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJJVE1BUCBibXBJ
bmZvOwotICAgIEdldE9iamVjdChibXAsIHNpemVvZihCSVRNQVApLCAmYm1wSW5mbyk7Ci0KLSAg
ICBBU1NFUlQoYm1wSW5mby5ibUJpdHNQaXhlbCA9PSAzMik7Ci0gICAgaW50IGJ1ZmZlclNpemUg
PSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0KLSAgICBhdXRvIGhk
YyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLSAgICBIR0RJT0JK
IGhPbGRCbXAgPSBTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBibXApOwotCi0gICAgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHQgZ2MoaGRjLmdldCgpKTsKLQotICAgICAgICBJbnRTaXplIGltYWdl
U2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgICAgIGlmIChzaXplKQotICAgICAgICAg
ICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgRmxvYXRSZWN0KDAsIDAsIGJtcElu
Zm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksICpzaXplLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVDb3B5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhdygmZ2MsIEZs
b2F0UmVjdCgwLCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJl
Y3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHksIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpOwotICAgIH0KLQotICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCks
IGhPbGRCbXApOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRy
YXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAgIGludCBm
cmFtZXMgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZXM7ICsr
aSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgoaSk7
Ci0gICAgICAgIGlmICghYm1wIHx8IGJtcC0+aGVpZ2h0KCkgIT0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHNyY1NpemUuaGVpZ2h0KCkpIHx8IGJtcC0+d2lkdGgoKSAhPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3JjU2l6ZS53aWR0aCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKLSAgICAgICAgbV9jdXJyZW50
RnJhbWUgPSBpOwotICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBz
cmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsK
LSAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBObyBpbWFnZSBvZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwg
ZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3VycmVudCBmcmFtZQotICAgIEludFNpemUgaW1hZ2VT
aXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0
UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgc3R5bGVD
b2xvclNwYWNlLCBjb21wb3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24oKSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdEluLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bikKLXsKLSAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkKLSAgICAgICAgZmlsbFdpdGhTb2xp
ZENvbG9yKGN0eHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEludFJlY3QgaW50U3JjUmVjdChzcmNSZWN0
SW4pOwotICAgICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOwotICAgICAgICBpZiAoYm1wKSB7Ci0gICAgICAgICAgICBpZiAoYm1wLT53
aWR0aCgpICE9IG1fc291cmNlLnNpemUoKS53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgZG91
YmxlIHNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihibXAtPndpZHRoKCkpIC8gbV9z
b3VyY2Uuc2l6ZSgpLndpZHRoKCk7Ci0KLSAgICAgICAgICAgICAgICBpbnRTcmNSZWN0LnNldFgo
c3RhYmxlUm91bmQoc3JjUmVjdEluLngoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgaW50U3JjUmVjdC5zZXRXaWR0aChzdGFibGVSb3VuZChzcmNSZWN0SW4ud2lkdGgoKSAqIHNj
YWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgaW50U3JjUmVjdC5zZXRZKHN0YWJsZVJvdW5k
KHNyY1JlY3RJbi55KCkgKiBzY2FsZUZhY3RvcikpOwotICAgICAgICAgICAgICAgIGludFNyY1Jl
Y3Quc2V0SGVpZ2h0KHN0YWJsZVJvdW5kKHNyY1JlY3RJbi5oZWlnaHQoKSAqIHNjYWxlRmFjdG9y
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBibXAtPmRyYXcoY3R4dCwgZW5jbG9zaW5n
SW50UmVjdChkc3RSZWN0KSwgaW50U3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVP
cCwgYmxlbmRNb2RlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7
Ci19Ci0KLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWJtcCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm1wLT5kcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIG1fc291cmNlLnNpemUo
KSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xl
dmVsKCkgY29uc3QKLXsKLSAgICBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsID0gMDsKLX0KLQot
dm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBpZiAobV9jaGVj
a2VkRm9yU29saWRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGZyYW1lQ291bnQo
KSAhPSAxKSB7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIG1fY2hl
Y2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gZnJhbWVBdEluZGV4KDApOwotICAgIGlmICghYm1w
IHx8ICFibXAtPnZhbGlkSGVpZ2h0KCkpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChibXAtPndpZHRoKCkgIT0gMSB8
fCBibXAtPnZhbGlkSGVpZ2h0KCkgIT0gMSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZh
bHNlOwotICAgICAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKLQotICAgIGlmIChibXAt
PmlzMTZiaXQoKSkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBjID0gKCh1bnNpZ25lZCBzaG9y
dCAqKWJtcC0+Ynl0ZXMoKSlbMF07Ci0gICAgICAgIGludCByID0gKGMgPj4gNykgJiAweEY4Owot
ICAgICAgICBpbnQgZyA9IChjID4+IDIpICYgMHhGODsKLSAgICAgICAgaW50IGIgPSAoYyA8PCAz
KSAmIDB4Rjg7Ci0gICAgICAgIGlmIChibXAtPnVzZXNUcmFuc3BhcmVudENvbG9yKCkgJiYgYm1w
LT50cmFuc3BhcmVudENvbG9yKCkgPT0gUkdCKHIsIGcsIGIpKQotICAgICAgICAgICAgbV9zb2xp
ZENvbG9yID0gQ29sb3IociwgZywgYiwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
c29saWRDb2xvciA9IENvbG9yKHIsIGcsIGIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2ln
bmVkIGMgPSAoKHVuc2lnbmVkICopYm1wLT5ieXRlcygpKVswXTsKLSAgICAgICAgbV9zb2xpZENv
bG9yID0gQ29sb3IoYyk7Ci0gICAgfQotCi0gICAgaWYgKGJtcC0+dmFsaWRIZWlnaHQoKSA9PSBi
bXAtPmhlaWdodCgpKQotICAgICAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJpdmF0ZVdpbkNFLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzI1MjMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcml2YXRlV2lu
Q0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBNZWRp
YVBsYXllclByaXZhdGVXaW5DRV9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVdpbkNFX2gK
LQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLSAgICBjbGFzcyBJbnRTaXplOwotICAgIGNsYXNzIEludFJlY3Q7Ci0KLSAgICBj
bGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdp
bmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAgICAgIH5NZWRpYVBsYXllclByaXZhdGUo
KTsKLQotICAgICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wg
aGFzVmlkZW8oKSBjb25zdDsKLQotICAgICAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
OwotICAgICAgICB2b2lkIGNhbmNlbExvYWQoKTsKLQotICAgICAgICB2b2lkIHBsYXkoKTsKLSAg
ICAgICAgdm9pZCBwYXVzZSgpOwotCi0gICAgICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OwotCi0gICAgICAgIGZsb2F0IGR1cmF0aW9uKCkgY29u
c3Q7Ci0gICAgICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2Vl
ayhmbG9hdCB0aW1lKTsKLQotICAgICAgICB2b2lkIHNldFJhdGUoZmxvYXQpOwotICAgICAgICB2
b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0KLSAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtTdGF0ZTsgfQotICAgICAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkeVN0YXRlOyB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdl
cz4gYnVmZmVyZWQoKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29u
c3Q7Ci0gICAgICAgIC8vIEZJWE1FOiBieXRlc0xvYWRlZCgpIHNob3VsZCBiZSByZXBsYWNlZCB3
aXRoIGRpZExvYWRpbmdQcm9ncmVzcygpIChieSBzb21lYm9keSB3aG8gY2FuIGZpbmQgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MpLgotICAgICAgICB1bnNpZ25lZCBieXRlc0xvYWRl
ZCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7Ci0KLSAgICAg
ICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50
U2l6ZSYpOwotCi0gICAgICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwotICAgICAgICB2b2lk
IGRpZEVuZCgpOwotCi0gICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1l
ZGlhUGxheWVyKik7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKLSAgICAgICAgdm9p
ZCBkb1NlZWsoKTsKLSAgICAgICAgdm9pZCBjYW5jZWxTZWVrKCk7Ci0gICAgICAgIHZvaWQgc2Vl
a1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwotICAgICAgICBmbG9hdCBt
YXhUaW1lTG9hZGVkKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3Mo
KTsKLQotICAgICAgICAvLyBlbmdpbmUgc3VwcG9ydAotICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwotICAg
ICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVz
KTsKLSAgICAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBl
KGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNBdmFpbGFibGUoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlw
dGlvbigpIGNvbnN0IHsgcmV0dXJuICJXaW5DRSI7IH0KLQotICAgICAgICBNZWRpYVBsYXllciog
bV9wbGF5ZXI7Ci0gICAgICAgIGZsb2F0IG1fc2Vla1RvOwotICAgICAgICBmbG9hdCBtX2VuZFRp
bWU7Ci0gICAgICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7Ci0gICAg
ICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7Ci0gICAgICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICAgICAgdW5zaWduZWQgbV9l
bmFibGVkVHJhY2tDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV90b3RhbFRyYWNrQ291bnQ7Ci0g
ICAgICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRlZFRyYWNrczsKLSAgICAgICAgYm9vbCBtX3N0YXJ0
ZWRQbGF5aW5nOwotICAgICAgICBib29sIG1faXNTdHJlYW1pbmc7Ci0gICAgfTsKLQotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCi0jZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlV2lu
Q0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
TWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjhkMTA0MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgotCi0jaW5jbHVkZSAiQnJpZGdl
SlNDLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0lu
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCIKLSNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCi0jaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgImNfY2xhc3MuaCIKLSNpbmNs
dWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiY19ydW50aW1lLmgiCi0jaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgQmluZGluZ3M7Ci11c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwotCi1XZWJNZWRpYVBsYXllclByb3h5OjpXZWJNZWRpYVBsYXllclByb3h5
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX21lZGlhUGxheWVyKHBsYXllcikKLSAgICAs
IG1faW5pdChmYWxzZSkKLSAgICAsIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4oZmFsc2UpCi17
Ci0gICAgaWYgKCFtX2luaXQpCi0gICAgICAgIGluaXRFbmdpbmUoKTsKLX0KLQotV2ViTWVkaWFQ
bGF5ZXJQcm94eTo6fldlYk1lZGlhUGxheWVyUHJveHkoKQotewotICAgIG1faW5zdGFuY2UucmVs
ZWFzZSgpOwotfQotCi1TY3JpcHRJbnN0YW5jZSBXZWJNZWRpYVBsYXllclByb3h5OjpwbHVnaW5J
bnN0YW5jZSgpCi17Ci0gICAgaWYgKCFtX2luc3RhbmNlKSB7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogciA9IGVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyIHx8ICFyLT5pc1dp
ZGdldCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lID0g
ZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0KLSAgICAgICAgUmVuZGVyV2lkZ2V0KiBy
ZW5kZXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihlbGVtZW50KCktPnJlbmRl
cmVyKCkpOwotICAgICAgICBpZiAocmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0
KCkpCi0gICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVNjcmlw
dEluc3RhbmNlRm9yV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotICAgIH0KLQotICAg
IHJldHVybiBtX2luc3RhbmNlOwotfQotCi12b2lkIFdlYk1lZGlhUGxheWVyUHJveHk6OmxvYWQo
Y29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKCFtX2luaXQpCi0gICAgICAgIGluaXRFbmdp
bmUoKTsKLSAgICBpZiAobV9pbml0KQotICAgICAgICBpbnZva2VNZXRob2QoInBsYXkiKTsKLX0K
LQotdm9pZCBXZWJNZWRpYVBsYXllclByb3h5Ojppbml0RW5naW5lKCkKLXsKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MTWVkaWFFbGVtZW50KG1fbWVkaWFQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCkpOwotICAgIFN0cmluZyB1cmwgPSBlbGVtZW50LT5pbml0aWFsVVJM
KCk7Ci0KLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIFZlY3RvcjxTdHJp
bmc+IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgU3Ry
aW5nIHNlcnZpY2VUeXBlOwotCi0gICAgLy8gYWRkIGFsbCBhdHRyaWJ1dGVzIHNldCBvbiB0aGUg
ZW1iZWQgb2JqZWN0Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsgKytp
KSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gZWxlbWVudC0+YXR0cmlidXRlSXRlbShp
KTsKLSAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCku
c3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0
cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlv
bi94LW1wbGF5ZXIyIjsKLSAgICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPnJl
cXVlc3RPYmplY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyUGFydE9iamVjdCo+KGVsZW1lbnQtPnJlbmRl
cmVyKCkpLCB1cmwsIG51bGxBdG9tLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMpOwotICAgIG1faW5pdCA9IHRydWU7Ci0KLX0KLQotSFRNTE1lZGlhRWxlbWVudCogV2ViTWVk
aWFQbGF5ZXJQcm94eTo6ZWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIHRvSFRNTE1lZGlhRWxlbWVu
dChtX21lZGlhUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKLQotfQotCi12b2lkIFdlYk1l
ZGlhUGxheWVyUHJveHk6Omludm9rZU1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAg
Um9vdE9iamVjdCogcm9vdCA9IGZyYW1lLT5zY3JpcHQoKS5iaW5kaW5nUm9vdE9iamVjdCgpOwot
ICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHJv
b3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSW5zdGFuY2UqIGluc3RhbmNl
ID0gcGx1Z2luSW5zdGFuY2UoKS5nZXQoKTsKLSAgICBpZiAoIWluc3RhbmNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBDbGFzcyAqYUNsYXNzID0gaW5z
dGFuY2UtPmdldENsYXNzKCk7Ci0gICAgSWRlbnRpZmllciBpZGVuKGV4ZWMsIG1ldGhvZE5hbWUp
OwotICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKGlkZW4s
IGluc3RhbmNlKTsKLSAgICBBcmdMaXN0IGFyZ3M7Ci0gICAgaW5zdGFuY2UtPmludm9rZU1ldGhv
ZChleGVjLCBtZXRob2RMaXN0ICwgYXJncyk7Ci0gICAgaW5zdGFuY2UtPmVuZCgpOwotfQotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvTWVkaWFQbGF5ZXJQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxNDk1YTI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL01lZGlhUGxheWVyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBNZWRpYVBsYXllclByb3h5X2gKLSNkZWZp
bmUgTWVkaWFQbGF5ZXJQcm94eV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBJbnRSZWN0
OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgTWVkaWFQbGF5ZXI7Ci0gICAgY2xhc3Mg
UGx1Z2luVmlldzsKLSAgICBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotCi0gICAgZW51bSBNZWRp
YVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSB7Ci0gICAgICAgIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uUGxheVBhdXNlQnV0dG9uUHJlc3NlZCwKLSAgICAgICAgSWRsZSwKLSAgICAgICAgTG9h
ZGluZywKLSAgICAgICAgTG9hZGVkLAotICAgICAgICBGb3JtYXRFcnJvciwKLSAgICAgICAgTmV0
d29ya0Vycm9yLAotICAgICAgICBEZWNvZGVFcnJvcgotICAgIH07Ci0KLSAgICBjbGFzcyBXZWJN
ZWRpYVBsYXllclByb3h5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdlYk1lZGlhUGxheWVyUHJv
eHkoTWVkaWFQbGF5ZXIqIHBsYXllcik7Ci0gICAgICAgIH5XZWJNZWRpYVBsYXllclByb3h5KCk7
Ci0KLSAgICAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkge3JldHVybiBtX21lZGlhUGxh
eWVyO30KLSAgICAgICAgdm9pZCBpbml0RW5naW5lKCk7Ci0gICAgICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmIHVybCk7Ci0gICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQoKTsKLSAg
ICAgICAgdm9pZCBpbnZva2VNZXRob2QoY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lKTsKLSAgICAg
ICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBwbHVnaW5JbnN0YW5jZSgpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgTWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7Ci0gICAgICAg
IGJvb2wgbV9pbml0OwotICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7
Ci0gICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKLSAgICAgICAgU2NyaXB0
SW5zdGFuY2UgbV9pbnN0YW5jZTsKLSAgICB9OwotCi19Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVP
KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1BhdGhXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9QYXRoV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNlOWU3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1Bh
dGhXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhdGguaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGF0aDo6UGF0aCgpCi0gICAgOiBtX3BhdGgobmV3IFBsYXRmb3JtUGF0aCgpKQotewot
fQotCi1QYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQotICAgIDogbV9wYXRoKG5ldyBQbGF0
Zm9ybVBhdGgoKm90aGVyLm1fcGF0aCkpCi17Ci19Ci0KLVBhdGg6On5QYXRoKCkKLXsKLSAgICBk
ZWxldGUgbV9wYXRoOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3Ro
ZXIpCi17Ci0gICAgaWYgKCZvdGhlciAhPSB0aGlzKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3BhdGg7
Ci0gICAgICAgIG1fcGF0aCA9IG5ldyBQbGF0Zm9ybVBhdGgoKm90aGVyLm1fcGF0aCk7Ci0gICAg
fQotICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRo
LT5jb250YWlucyhwb2ludCwgcnVsZSk7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BhdGgtPnRyYW5zbGF0ZShzaXplKTsKLX0KLQot
RmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0
aC0+Ym91bmRpbmdSZWN0KCk7Ci19Ci0KLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQotewotICAgIG1fcGF0aC0+bW92ZVRvKHBvaW50KTsKLX0KLQotdm9pZCBQYXRo
OjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgbV9wYXRoLT5hZGRM
aW5lVG8ocG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG1fcGF0aC0+YWRkUXVhZEN1
cnZlVG8oY3AsIHApOwotfQotCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxv
YXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAp
Ci17Ci0gICAgbV9wYXRoLT5hZGRCZXppZXJDdXJ2ZVRvKGNwMSwgY3AyLCBwKTsKLX0KLQotdm9p
ZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYg
cDIsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBtX3BhdGgtPmFkZEFyY1RvKHAxLCBwMiwgcmFkaXVz
KTsKLX0KLQotdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQotewotICAgIG1fcGF0aC0+Y2xvc2VT
dWJwYXRoKCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZs
b2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAg
bV9wYXRoLT5hZGRFbGxpcHNlKHAsIHIsIHIsIHNhciwgZWFyLCBhbnRpY2xvY2t3aXNlKTsKLX0K
LQotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBtX3BhdGgt
PmFkZFJlY3Qocik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHIpCi17Ci0gICAgbV9wYXRoLT5hZGRFbGxpcHNlKHIpOwotfQotCi12b2lkIFBhdGg6OmFkZFBh
dGgoY29uc3QgUGF0aCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgbV9wYXRoLT5jbGVhcigp
OwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgt
PmlzRW1wdHkoKTsKLX0KLQotdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGll
ckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAotewotICAgIG1fcGF0aC0+YXBwbHkoaW5mbywgZnVu
Y3Rpb24pOwotfQotCi12b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHQpCi17Ci0gICAgbV9wYXRoLT50cmFuc2Zvcm0odCk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLQotYm9vbCBQYXRoOjpz
dHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAotewotICAgIC8vIE5vdCBzdXJlIGlmIHRo
aXMgaXMgY29ycmVjdC4gQXQgdGhlIG1lYW50aW1lLCB3ZSBkbyB3aGF0IG90aGVyIHBvcnRzCi0g
ICAgLy8gZG8uCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzI2NiwKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjcxODcsIGFuZCAKLSAgICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80
NTg3MwotICAgIHJldHVybiAhaXNFbXB0eSgpOwotfQotCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJl
bnRQb2ludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0aC0+bGFzdFBvaW50KCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3OWQ5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw3NzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aFdpbkNFLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiV2luQ0VHcmFwaGljc0V4dHJhcy5oIgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIEltcGxlbWVudGVkIGluIEdyYXBoaWNzQ29udGV4dFdpbkNFLmNw
cAotdm9pZCBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGRvdWJsZSBhbmdsZSwgZG91YmxlIGEsIGRv
dWJsZSBiLCBmbG9hdCYgeCwgZmxvYXQmIHkpOwotCi1zdGF0aWMgdm9pZCBxdWFkQ3VydmUoaW50
IHNlZ21lbnRzLCBWZWN0b3I8UGF0aFBvaW50PiYgcHRzLCBjb25zdCBQYXRoUG9pbnQqIGNvbnRy
b2wpCi17Ci0gICAgY29uc3QgZmxvYXQgc3RlcCA9IDEuMCAvIHNlZ21lbnRzOwotICAgIHJlZ2lz
dGVyIGZsb2F0IHRBID0gMC4wOwotICAgIHJlZ2lzdGVyIGZsb2F0IHRCID0gMS4wOwotCi0gICAg
ZmxvYXQgYzF4ID0gY29udHJvbFswXS54KCk7Ci0gICAgZmxvYXQgYzF5ID0gY29udHJvbFswXS55
KCk7Ci0gICAgZmxvYXQgYzJ4ID0gY29udHJvbFsxXS54KCk7Ci0gICAgZmxvYXQgYzJ5ID0gY29u
dHJvbFsxXS55KCk7Ci0gICAgZmxvYXQgYzN4ID0gY29udHJvbFsyXS54KCk7Ci0gICAgZmxvYXQg
YzN5ID0gY29udHJvbFsyXS55KCk7Ci0KLSAgICBjb25zdCBpbnQgb2Zmc2V0ID0gcHRzLnNpemUo
KTsKLSAgICBwdHMucmVzaXplKG9mZnNldCArIHNlZ21lbnRzKTsKLSAgICBQYXRoUG9pbnQgcHA7
Ci0gICAgcHAubV94ID0gYzF4OwotICAgIHBwLm1feSA9IGMxeTsKLQotICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgc2VnbWVudHM7ICsraSkgewotICAgICAgICB0QSArPSBzdGVwOwotICAgICAgICB0
QiAtPSBzdGVwOwotCi0gICAgICAgIGNvbnN0IGZsb2F0IGEgPSB0QiAqIHRCOwotICAgICAgICBj
b25zdCBmbG9hdCBiID0gMi4wICogdEEgKiB0QjsKLSAgICAgICAgY29uc3QgZmxvYXQgYyA9IHRB
ICogdEE7Ci0KLSAgICAgICAgcHAubV94ID0gYzF4ICogYSArIGMyeCAqIGIgKyBjM3ggKiBjOwot
ICAgICAgICBwcC5tX3kgPSBjMXkgKiBhICsgYzJ5ICogYiArIGMzeSAqIGM7Ci0KLSAgICAgICAg
cHRzW29mZnNldCArIGkgLSAxXSA9IHBwOwotICAgIH0KLQotICAgIHBwLm1feCA9IGMzeDsKLSAg
ICBwcC5tX3kgPSBjM3k7Ci0gICAgcHRzW29mZnNldCArIHNlZ21lbnRzIC0gMV0gPSBwcDsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGJlemllcihpbnQgc2VnbWVudHMsIFZlY3RvcjxQYXRoUG9p
bnQ+JiBwdHMsIGNvbnN0IFBhdGhQb2ludCogY29udHJvbCkKLXsKLSAgICBjb25zdCBmbG9hdCBz
dGVwID0gMS4wIC8gc2VnbWVudHM7Ci0gICAgcmVnaXN0ZXIgZmxvYXQgdEEgPSAwLjA7Ci0gICAg
cmVnaXN0ZXIgZmxvYXQgdEIgPSAxLjA7Ci0KLSAgICBmbG9hdCBjMXggPSBjb250cm9sWzBdLngo
KTsKLSAgICBmbG9hdCBjMXkgPSBjb250cm9sWzBdLnkoKTsKLSAgICBmbG9hdCBjMnggPSBjb250
cm9sWzFdLngoKTsKLSAgICBmbG9hdCBjMnkgPSBjb250cm9sWzFdLnkoKTsKLSAgICBmbG9hdCBj
M3ggPSBjb250cm9sWzJdLngoKTsKLSAgICBmbG9hdCBjM3kgPSBjb250cm9sWzJdLnkoKTsKLSAg
ICBmbG9hdCBjNHggPSBjb250cm9sWzNdLngoKTsKLSAgICBmbG9hdCBjNHkgPSBjb250cm9sWzNd
LnkoKTsKLQotICAgIGNvbnN0IGludCBvZmZzZXQgPSBwdHMuc2l6ZSgpOwotICAgIHB0cy5yZXNp
emUob2Zmc2V0ICsgc2VnbWVudHMpOwotICAgIFBhdGhQb2ludCBwcDsKLSAgICBwcC5tX3ggPSBj
MXg7Ci0gICAgcHAubV95ID0gYzF5OwotCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZWdtZW50
czsgKytpKSB7Ci0gICAgICAgIHRBICs9IHN0ZXA7Ci0gICAgICAgIHRCIC09IHN0ZXA7Ci0gICAg
ICAgIGNvbnN0IGZsb2F0IHRBc3EgPSB0QSAqIHRBOwotICAgICAgICBjb25zdCBmbG9hdCB0QnNx
ID0gdEIgKiB0QjsKLQotICAgICAgICBjb25zdCBmbG9hdCBhID0gdEJzcSAqIHRCOwotICAgICAg
ICBjb25zdCBmbG9hdCBiID0gMy4wICogdEEgKiB0QnNxOwotICAgICAgICBjb25zdCBmbG9hdCBj
ID0gMy4wICogdEIgKiB0QXNxOwotICAgICAgICBjb25zdCBmbG9hdCBkID0gdEFzcSAqIHRBOwot
Ci0gICAgICAgIHBwLm1feCA9IGMxeCAqIGEgKyBjMnggKiBiICsgYzN4ICogYyArIGM0eCAqIGQ7
Ci0gICAgICAgIHBwLm1feSA9IGMxeSAqIGEgKyBjMnkgKiBiICsgYzN5ICogYyArIGM0eSAqIGQ7
Ci0KLSAgICAgICAgcHRzW29mZnNldCArIGkgLSAxXSA9IHBwOwotICAgIH0KLQotICAgIHBwLm1f
eCA9IGM0eDsKLSAgICBwcC5tX3kgPSBjNHk7Ci0gICAgcHRzW29mZnNldCArIHNlZ21lbnRzIC0g
MV0gPSBwcDsKLX0KLQotc3RhdGljIGJvb2wgY29udGFpbnNQb2ludChjb25zdCBGbG9hdFJlY3Qm
IHIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIHAueCgpID49IHIueCgpICYm
IHAueSgpID49IHIueSgpICYmIHAueCgpIDwgci5tYXhYKCkgJiYgcC55KCkgPCByLm1heFkoKTsK
LX0KLQotc3RhdGljIHZvaWQgbm9ybWFsaXplQW5nbGUoZmxvYXQmIGFuZ2xlKQotewotICAgIGFu
Z2xlID0gZm1vZChhbmdsZSwgMiAqIHBpRmxvYXQpOwotICAgIGlmIChhbmdsZSA8IDApCi0gICAg
ICAgIGFuZ2xlICs9IDIgKiBwaUZsb2F0OwotICAgIGlmIChhbmdsZSA8IDAuMDAwMDFmKQotICAg
ICAgICBhbmdsZSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYW5zZm9ybUFyY1BvaW50KGZsb2F0
JiB4LCBmbG9hdCYgeSwgY29uc3QgRmxvYXRQb2ludCYgYykKLXsKLSAgICB4ICs9IGMueCgpOwot
ICAgIHkgKz0gYy55KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGluZmxhdGVSZWN0VG9Db250YWluUG9p
bnQoRmxvYXRSZWN0JiByLCBmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGlmIChyLmlzRW1wdHko
KSkgewotICAgICAgICByLnNldFgoeCk7Ci0gICAgICAgIHIuc2V0WSh5KTsKLSAgICAgICAgci5z
ZXRTaXplKEZsb2F0U2l6ZSgxLCAxKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KHggPCByLngoKSkgewotICAgICAgICByLnNldFdpZHRoKHIubWF4WCgpIC0geCk7Ci0gICAgICAg
IHIuc2V0WCh4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCB3ID0geCAtIHIueCgpICsg
MTsKLSAgICAgICAgaWYgKHcgPiByLndpZHRoKCkpCi0gICAgICAgICAgICByLnNldFdpZHRoKHcp
OwotICAgIH0KLSAgICBpZiAoeSA8IHIueSgpKSB7Ci0gICAgICAgIHIuc2V0SGVpZ2h0KHIubWF4
WSgpIC0geSk7Ci0gICAgICAgIHIuc2V0WSh5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9h
dCBoID0gIHkgLSByLnkoKSArIDE7Ci0gICAgICAgIGlmIChoID4gci5oZWlnaHQoKSkKLSAgICAg
ICAgICAgIHIuc2V0SGVpZ2h0KGgpOwotICAgIH0KLX0KLQotLy8gcmV0dXJuIDAtYmFzZWQgdmFs
dWU6IDAgLSBmaXJzdCBRdWFkcmFudCAoIDAgLSA5MCBkZWdyZWUpCi1zdGF0aWMgaW5saW5lIGlu
dCBxdWFkcmFudChjb25zdCBQYXRoUG9pbnQmIHBvaW50LCBjb25zdCBQYXRoUG9pbnQmIG9yaWdp
bikKLXsKLSAgICByZXR1cm4gcG9pbnQubV94IDwgb3JpZ2luLm1feCA/Ci0gICAgICAgIChwb2lu
dC5tX3kgPCBvcmlnaW4ubV95ID8gMiA6IDEpCi0gICAgICAgIDogKHBvaW50Lm1feSA8IG9yaWdp
bi5tX3kgPyAzIDogMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1YWRyYW50T25MZWZ0
KGludCBxKSB7IHJldHVybiBxID09IDEgfHwgcSA9PSAyOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wg
aXNRdWFkcmFudE9uUmlnaHQoaW50IHEpIHsgcmV0dXJuIHEgPT0gMCB8fCBxID09IDM7IH0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc1F1YWRyYW50T25Ub3AoaW50IHEpIHsgcmV0dXJuIHEgPT0gMiB8
fCBxID09IDM7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1YWRyYW50T25Cb3R0b20oaW50IHEp
IHsgcmV0dXJuIHEgPT0gMCB8fCBxID09IDE7IH0KLQotc3RhdGljIGlubGluZSBpbnQgbmV4dFF1
YWRyYW50KGludCBxKSB7IHJldHVybiBxID09IDMgPyAwIDogcSArIDE7IH0KLXN0YXRpYyBpbmxp
bmUgaW50IHF1YWRyYW50RGlmZihpbnQgcTEsIGludCBxMikKLXsKLSAgICBpbnQgZCA9IHExIC0g
cTI7Ci0gICAgd2hpbGUgKGQgPCAwKQotICAgICAgICBkICs9IDQ7Ci0gICAgcmV0dXJuIGQ7Ci19
Ci0KLXN0cnVjdCBQYXRoVmVjdG9yIHsKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95Owot
Ci0gICAgUGF0aFZlY3RvcigpIDogbV94KDApLCBtX3koMCkge30KLSAgICBQYXRoVmVjdG9yKGZs
b2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkge30KLSAgICBkb3VibGUgYW5nbGUoKSBj
b25zdCB7IHJldHVybiBhdGFuMihtX3ksIG1feCk7IH0KLSAgICBvcGVyYXRvciBkb3VibGUgKCkg
Y29uc3QgeyByZXR1cm4gYW5nbGUoKTsgfQotICAgIGRvdWJsZSBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBfaHlwb3QobV94LCBtX3kpOyB9Ci19OwotCi1QYXRoVmVjdG9yIG9wZXJhdG9yLShjb25z
dCBQYXRoUG9pbnQmIHAxLCBjb25zdCBQYXRoUG9pbnQmIHAyKQotewotICAgIHJldHVybiBQYXRo
VmVjdG9yKHAxLm1feCAtIHAyLm1feCwgcDEubV95IC0gcDIubV95KTsKLX0KLQotc3RhdGljIHZv
aWQgYWRkQXJjUG9pbnQoUGF0aFBvbHlnb24mIHBvbHksIGNvbnN0IFBhdGhQb2ludCYgY2VudGVy
LCBjb25zdCBQYXRoUG9pbnQmIHJhZGl1cywgZG91YmxlIGFuZ2xlKQotewotICAgIFBhdGhQb2lu
dCBwOwotICAgIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoYW5nbGUsIHJhZGl1cy5tX3gsIHJhZGl1
cy5tX3ksIHAubV94LCBwLm1feSk7Ci0gICAgdHJhbnNmb3JtQXJjUG9pbnQocC5tX3gsIHAubV95
LCBjZW50ZXIpOwotICAgIGlmIChwb2x5LmlzRW1wdHkoKSB8fCBwb2x5Lmxhc3QoKSAhPSBwKQot
ICAgICAgICBwb2x5LmFwcGVuZChwKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkQXJjUG9pbnRzKFBh
dGhQb2x5Z29uJiBwb2x5LCBjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyYgZGF0YSkK
LXsKLSAgICBjb25zdCBQYXRoUG9pbnQmIHN0YXJ0UG9pbnQgPSBwb2x5Lmxhc3QoKTsKLSAgICBk
b3VibGUgY3VyQW5nbGUgPSBzdGFydFBvaW50IC0gZGF0YS5tX2NlbnRlcjsKLSAgICBkb3VibGUg
ZW5kQW5nbGUgPSBkYXRhLm1fZW5kIC0gZGF0YS5tX2NlbnRlcjsKLSAgICBkb3VibGUgYW5nbGVT
dGVwID0gMi4gLyBzdGQ6Om1heChkYXRhLm1fcmFkaXVzLm1feCwgZGF0YS5tX3JhZGl1cy5tX3kp
OwotICAgIGlmIChkYXRhLm1fY2xvY2t3aXNlKSB7Ci0gICAgICAgIGlmIChlbmRBbmdsZSA8PSBj
dXJBbmdsZSB8fCBzdGFydFBvaW50ID09IGRhdGEubV9lbmQpCi0gICAgICAgICAgICBlbmRBbmds
ZSArPSAyICogcGlEb3VibGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYW5nbGVTdGVwID0gLWFu
Z2xlU3RlcDsKLSAgICAgICAgaWYgKGVuZEFuZ2xlID49IGN1ckFuZ2xlIHx8IHN0YXJ0UG9pbnQg
PT0gZGF0YS5tX2VuZCkKLSAgICAgICAgICAgIGVuZEFuZ2xlIC09IDIgKiBwaURvdWJsZTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGN1ckFuZ2xlICs9IGFuZ2xlU3RlcDsgZGF0YS5tX2Nsb2Nrd2lzZSA/
IGN1ckFuZ2xlIDwgZW5kQW5nbGUgOiBjdXJBbmdsZSA+IGVuZEFuZ2xlOyBjdXJBbmdsZSArPSBh
bmdsZVN0ZXApCi0gICAgICAgIGFkZEFyY1BvaW50KHBvbHksIGRhdGEubV9jZW50ZXIsIGRhdGEu
bV9yYWRpdXMsIGN1ckFuZ2xlKTsKLQotICAgIGlmIChwb2x5LmlzRW1wdHkoKSB8fCBwb2x5Lmxh
c3QoKSAhPSBkYXRhLm1fZW5kKQotICAgICAgICBwb2x5LmFwcGVuZChkYXRhLm1fZW5kKTsKLX0K
LQotc3RhdGljIHZvaWQgZHJhd1BvbHlnb25zKEhEQyBkYywgY29uc3QgVmVjdG9yPFBhdGhQb2x5
Z29uPiYgcG9seWdvbnMsIGJvb2wgZmlsbCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zv
cm1hdGlvbikKLXsKLSAgICBmb3IgKFZlY3RvcjxQYXRoUG9seWdvbj46OmNvbnN0X2l0ZXJhdG9y
IGkgPSBwb2x5Z29ucy5iZWdpbigpOyBpICE9IHBvbHlnb25zLmVuZCgpOyArK2kpIHsKLSAgICAg
ICAgaW50IG5wb2ludHMgPSBpLT5zaXplKCk7Ci0gICAgICAgIGlmICghbnBvaW50cykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFBPSU5UKiB3aW5Qb2ludHMgPSAwOwotICAgICAg
ICBpZiAoZmlsbCkgewotICAgICAgICAgICAgaWYgKG5wb2ludHMgPiAyKQotICAgICAgICAgICAg
ICAgIHdpblBvaW50cyA9IG5ldyBQT0lOVFtucG9pbnRzICsgMV07Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgd2luUG9pbnRzID0gbmV3IFBPSU5UW25wb2ludHNdOwotCi0gICAgICAgIGlm
ICh3aW5Qb2ludHMpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbikgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBucG9pbnRzOyArK2kyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgdHJQb2ludCA9IHRyYW5zZm9ybWF0aW9uLT5tYXBQb2lu
dChpLT5hdChpMikpOwotICAgICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJdLnggPSBzdGFi
bGVSb3VuZCh0clBvaW50LngoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0u
eSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBucG9p
bnRzOyArK2kyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0ueCA9IHN0YWJs
ZVJvdW5kKGktPmF0KGkyKS54KCkpOwotICAgICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJd
LnkgPSBzdGFibGVSb3VuZChpLT5hdChpMikueSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaWxsICYmIHdpblBvaW50c1tucG9pbnRzIC0g
MV0gIT0gd2luUG9pbnRzWzBdKSB7Ci0gICAgICAgICAgICAgICAgd2luUG9pbnRzW25wb2ludHNd
LnggPSB3aW5Qb2ludHNbMF0ueDsKLSAgICAgICAgICAgICAgICB3aW5Qb2ludHNbbnBvaW50c10u
eSA9IHdpblBvaW50c1swXS55OwotICAgICAgICAgICAgICAgICsrbnBvaW50czsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpbGwpCi0gICAgICAgICAgICAgICAgOjpQb2x5Z29u
KGRjLCB3aW5Qb2ludHMsIG5wb2ludHMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIDo6UG9seWxpbmUoZGMsIHdpblBvaW50cywgbnBvaW50cyk7Ci0gICAgICAgICAgICBkZWxl
dGVbXSB3aW5Qb2ludHM7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotaW50IFBsYXRmb3JtUGF0
aEVsZW1lbnQ6Om51bUNvbnRyb2xQb2ludHMoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBQYXRoTW92ZVRvOgotICAgIGNhc2UgUGF0aExpbmVUbzoKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgY2FzZSBQYXRoUXVhZEN1cnZlVG86Ci0gICAgY2FzZSBQYXRoQXJjVG86
Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgUGF0aEJlemllckN1cnZlVG86Ci0gICAgICAg
IHJldHVybiAzOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gUGF0aENs
b3NlU3VicGF0aCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotaW50IFBsYXRmb3Jt
UGF0aEVsZW1lbnQ6Om51bVBvaW50cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICBjYXNlIFBhdGhNb3ZlVG86Ci0gICAgY2FzZSBQYXRoTGluZVRvOgotICAgIGNhc2UgUGF0
aEFyY1RvOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAg
ICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBQYXRoQmV6aWVyQ3VydmVUbzoKLSAgICAgICAgcmV0
dXJuIDM7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQYXRoQ2xvc2VT
dWJwYXRoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIFBhdGhQb2x5Z29u
Ojptb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotewotICAgIGZvciAoVmVjdG9yPFBhdGhQ
b2ludD46Oml0ZXJhdG9yIGkgPSBiZWdpbigpOyBpIDwgZW5kKCk7ICsraSkKLSAgICAgICAgaS0+
bW92ZShvZmZzZXQpOwotfQotCi12b2lkIFBhdGhQb2x5Z29uOjp0cmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0KQotewotICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46Oml0ZXJhdG9y
IGkgPSBiZWdpbigpOyBpIDwgZW5kKCk7ICsraSkKLSAgICAgICAgKmkgPSB0Lm1hcFBvaW50KCpp
KTsKLX0KLQotYm9vbCBQYXRoUG9seWdvbjo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSA8IDMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFRlc3QgaW50ZXJzZWN0aW9ucyBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFuZCB0aGUg
dmVydGljYWwgbGluZTogeCA9IHBvaW50LngoKQotCi0gICAgaW50IGludGVyc2VjdGVkID0gMDsK
LSAgICBjb25zdCBQYXRoUG9pbnQqIHBvaW50MSA9ICZsYXN0KCk7Ci0gICAgVmVjdG9yPFBhdGhQ
b2ludD46OmNvbnN0X2l0ZXJhdG9yIGxhc3QgPSBlbmQoKTsKLSAgICAvLyB3YXNOZWdhdGl2ZTog
LTEgbWVhbnMgdW5rbm93biwgMCBtZWFucyBmYWxzZSwgMSBtZWFucyB0cnVlLgotICAgIGludCB3
YXNOZWdhdGl2ZSA9IC0xOwotICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJh
dG9yIGkgPSBiZWdpbigpOyBpICE9IGxhc3Q7ICsraSkgewotICAgICAgICBjb25zdCBQYXRoUG9p
bnQmIHBvaW50MiA9ICppOwotICAgICAgICBpZiAocG9pbnQxLT54KCkgIT0gcG9pbnQueCgpKSB7
Ci0gICAgICAgICAgICBpZiAocG9pbnQyLngoKSA9PSBwb2ludC54KCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgZ2V0dGluZyBvbiB0aGUgdmVydGljYWwgbGluZQotICAgICAgICAgICAg
ICAgIHdhc05lZ2F0aXZlID0gcG9pbnQxLT54KCkgPCBwb2ludC54KCkgPyAxIDogMDsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9pbnQyLngoKSA8IHBvaW50LngoKSAhPSBwb2ludDEtPngoKSA8
IHBvaW50LngoKSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHkgPSAocG9pbnQyLnkoKSAtIHBv
aW50MS0+eSgpKSAvIChwb2ludDIueCgpIC0gcG9pbnQxLT54KCkpICogKHBvaW50LngoKSAtIHBv
aW50MS0+eCgpKSArIHBvaW50MS0+eSgpOwotICAgICAgICAgICAgICAgIGlmICh5ID49IHBvaW50
LnkoKSkKLSAgICAgICAgICAgICAgICAgICAgKytpbnRlcnNlY3RlZDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIHdlcmUgb24gdGhlIHZlcnRpY2Fs
IGxpbmUKLQotICAgICAgICAgICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZQotICAgICAgICAgICAg
aWYgKHBvaW50MS0+eSgpID09IHBvaW50LnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICAgICAgaWYgKHBvaW50MS0+eSgpID4gcG9pbnQueSgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBvaW50Mi54KCkgPT0gcG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHNlZSBpZiB0aGUgcG9pbnQgaXMgb24gdGhpcyBzZWdtZW50Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwb2ludDIueSgpIDw9IHBvaW50LnkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBzdGlsbCBv
biB0aGUgbGluZQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSBsZWF2aW5nIHRoZSBsaW5lIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBnZXQgYmFjayB0byBzZWUgd2hpY2ggc2lkZSB3ZSBjb21lIGZyb20uIElmIHdl
IGNvbWUgZnJvbQotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBzaWRlIHdlIGFyZSBs
ZWF2aW5nLCBubyBpbnRlcnNlY3Rpb24gc2hvdWxkIGJlIGNvdW50ZWQKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHdhc05lZ2F0aXZlIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJhdG9yIGpMYXN0ID0gaTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxQYXRoUG9pbnQ+Ojpjb25zdF9pdGVyYXRvciBqID0gaTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aiA9PSBiZWdpbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gbGFzdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0tajsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoai0+eCgpICE9
IHBvaW50LngoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoai0+eCgp
ID4gcG9pbnQueCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzTmVn
YXRpdmUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNOZWdhdGl2ZSA9IDE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGogIT0gakxhc3QpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAod2FzTmVnYXRpdmUgPCAwKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAod2FzTmVnYXRpdmUgPyBwb2ludDIueCgpID4gcG9pbnQueCgpIDog
cG9pbnQyLngoKSA8IHBvaW50LngoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsraW50ZXJz
ZWN0ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChwb2ludDIu
eCgpID09IHBvaW50LngoKSAmJiBwb2ludDIueSgpID49IHBvaW50LnkoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBwb2ludDEgPSAmcG9pbnQyOwot
ICAgIH0KLQotICAgIHJldHVybiBpbnRlcnNlY3RlZCAmIDE7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Q
YXRoRWxlbWVudDo6bW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAgICBpbnQgbiA9
IG51bUNvbnRyb2xQb2ludHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKLSAg
ICAgICAgbV9kYXRhLm1fcG9pbnRzW2ldLm1vdmUob2Zmc2V0KTsKLX0KLQotdm9pZCBQbGF0Zm9y
bVBhdGhFbGVtZW50Ojp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQotewotICAg
IGludCBuID0gbnVtQ29udHJvbFBvaW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcCA9IHQubWFwUG9pbnQobV9kYXRhLm1fcG9pbnRz
W2ldKTsKLSAgICAgICAgbV9kYXRhLm1fcG9pbnRzW2ldLnNldChwLngoKSwgcC55KCkpOwotICAg
IH0KLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGhFbGVtZW50OjppbmZsYXRlUmVjdFRvQ29udGFpbk1l
KEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBjb25zdAotewotICAg
IGlmIChtX3R5cGUgPT0gUGF0aEFyY1RvKSB7Ci0gICAgICAgIGNvbnN0IEFyY1RvJiBkYXRhID0g
bV9kYXRhLm1fYXJjVG9EYXRhOwotICAgICAgICBQYXRoUG9pbnQgc3RhcnRQb2ludDsKLSAgICAg
ICAgc3RhcnRQb2ludCA9IGxhc3RQb2ludDsKLSAgICAgICAgUGF0aFBvaW50IGVuZFBvaW50ID0g
ZGF0YS5tX2VuZDsKLSAgICAgICAgaWYgKCFkYXRhLm1fY2xvY2t3aXNlKQotICAgICAgICAgICAg
c3RkOjpzd2FwKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKLQotICAgICAgICBpbnQgcTAgPSBxdWFk
cmFudChzdGFydFBvaW50LCBkYXRhLm1fY2VudGVyKTsKLSAgICAgICAgaW50IHExID0gcXVhZHJh
bnQoZW5kUG9pbnQsIGRhdGEubV9jZW50ZXIpOwotICAgICAgICBib29sIGNvbnRhaW5zRXh0cmVt
ZXNbNF0gPSB7IGZhbHNlIH07IC8vIGJvdHRvbSwgbGVmdCwgdG9wLCByaWdodAotICAgICAgICBz
dGF0aWMgY29uc3QgUGF0aFBvaW50IGV4dHJlbWVWZWN0b3JzWzRdID0geyB7IDAsIDEgfSwgeyAt
MSwgMCB9LCB7IDAsIC0xIH0sIHsgMSwgMCB9IH07Ci0gICAgICAgIGlmIChxMCA9PSBxMSkgewot
ICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQubV94ID09IGVuZFBvaW50Lm1feCB8fCBpc1F1YWRy
YW50T25Cb3R0b20ocTApICE9IHN0YXJ0UG9pbnQubV94ID4gZW5kUG9pbnQubV94KSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5zRXh0cmVtZXNbaV0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaW50IGV4dHJlbWUgPSBxMDsKLSAgICAgICAgICAgIGludCBk
aWZmID0gcXVhZHJhbnREaWZmKHExLCBxMCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGRpZmY7ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnRhaW5zRXh0cmVtZXNbZXh0cmVt
ZV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIGV4dHJlbWUgPSBuZXh0UXVhZHJhbnQoZXh0cmVt
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZsYXRlUmVjdFRvQ29u
dGFpblBvaW50KHIsIHN0YXJ0UG9pbnQubV94LCBzdGFydFBvaW50Lm1feSk7Ci0gICAgICAgIGlu
ZmxhdGVSZWN0VG9Db250YWluUG9pbnQociwgZW5kUG9pbnQubV94LCBlbmRQb2ludC5tX3kpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgaWYgKGNv
bnRhaW5zRXh0cmVtZXNbaV0pCi0gICAgICAgICAgICAgICAgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Q
b2ludChyLCBkYXRhLm1fY2VudGVyLm1feCArIGRhdGEubV9yYWRpdXMubV94ICogZXh0cmVtZVZl
Y3RvcnNbaV0ubV94LCBkYXRhLm1fY2VudGVyLm1feSArIGRhdGEubV9yYWRpdXMubV95ICogZXh0
cmVtZVZlY3RvcnNbaV0ubV95KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlu
dCBuID0gbnVtUG9pbnRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQot
ICAgICAgICAgICAgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Qb2ludChyLCBtX2RhdGEubV9wb2ludHNb
aV0ubV94LCBtX2RhdGEubV9wb2ludHNbaV0ubV95KTsKLSAgICB9Ci19Ci0KLVBhdGhFbGVtZW50
VHlwZSBQbGF0Zm9ybVBhdGhFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgIGNhc2UgUGF0aE1vdmVUbzoKLSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50
TW92ZVRvUG9pbnQ7Ci0gICAgY2FzZSBQYXRoTGluZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVs
ZW1lbnRBZGRMaW5lVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhBcmNUbzoKLSAgICAgICAgLy8gRklY
TUU6IHRoZXJlJ3Mgbm8gYXJjVG8gdHlwZSBmb3IgUGF0aEVsZW1lbnQKLSAgICAgICAgcmV0dXJu
IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7Ci0gICAgICAgIC8vIHJldHVybiBQYXRoRWxlbWVu
dEFkZFF1YWRDdXJ2ZVRvUG9pbnQ7Ci0gICAgY2FzZSBQYXRoUXVhZEN1cnZlVG86Ci0gICAgICAg
IHJldHVybiBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ7Ci0gICAgY2FzZSBQYXRoQmV6
aWVyQ3VydmVUbzoKLSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50Owot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gUGF0aENsb3NlU3VicGF0aCk7
Ci0gICAgICAgIHJldHVybiBQYXRoRWxlbWVudENsb3NlU3VicGF0aDsKLSAgICB9Ci19Ci0KLVBs
YXRmb3JtUGF0aDo6UGxhdGZvcm1QYXRoKCkKLSAgICA6IG1fcGVuTGlmdGVkKHRydWUpCi17Ci0g
ICAgbV9jdXJyZW50UG9pbnQuY2xlYXIoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmVuc3Vy
ZVN1YnBhdGgoKQotewotICAgIGlmIChtX3BlbkxpZnRlZCkgewotICAgICAgICBtX3BlbkxpZnRl
ZCA9IGZhbHNlOwotICAgICAgICBtX3N1YnBhdGhzLmFwcGVuZChQYXRoUG9seWdvbigpKTsKLSAg
ICAgICAgbV9zdWJwYXRocy5sYXN0KCkuYXBwZW5kKG1fY3VycmVudFBvaW50KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgQVNTRVJUKCFtX3N1YnBhdGhzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1QYXRoOjphZGRUb1N1YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSkKLXsK
LSAgICBpZiAoZS5wbGF0Zm9ybVR5cGUoKSA9PSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRoTW92
ZVRvKSB7Ci0gICAgICAgIG1fcGVuTGlmdGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jdXJyZW50UG9p
bnQgPSBlLnBvaW50QXQoMCk7Ci0gICAgfSBlbHNlIGlmIChlLnBsYXRmb3JtVHlwZSgpID09IFBs
YXRmb3JtUGF0aEVsZW1lbnQ6OlBhdGhDbG9zZVN1YnBhdGgpIHsKLSAgICAgICAgbV9wZW5MaWZ0
ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIW1fc3VicGF0aHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpZiAobV9jdXJyZW50UG9pbnQgIT0gbV9zdWJwYXRocy5sYXN0KClbMF0pIHsKLSAgICAg
ICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gVzNDLCB3ZSBoYXZlIHRvIGRyYXcgYSBsaW5lIGZy
b20gY3VycmVudCBwb2ludCB0byB0aGUgaW5pdGlhbCBwb2ludAotICAgICAgICAgICAgICAgIG1f
c3VicGF0aHMubGFzdCgpLmFwcGVuZChtX3N1YnBhdGhzLmxhc3QoKVswXSk7Ci0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSBtX3N1YnBhdGhzLmxhc3QoKVswXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5jbGVhcigpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuc3VyZVN1YnBhdGgoKTsKLSAgICAgICAgc3dpdGNoIChl
LnBsYXRmb3JtVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0
aExpbmVUbzoKLSAgICAgICAgICAgIG1fc3VicGF0aHMubGFzdCgpLmFwcGVuZChlLnBvaW50QXQo
MCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVu
dDo6UGF0aEFyY1RvOgotICAgICAgICAgICAgYWRkQXJjUG9pbnRzKG1fc3VicGF0aHMubGFzdCgp
LCBlLmFyY1RvKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1Q
YXRoRWxlbWVudDo6UGF0aFF1YWRDdXJ2ZVRvOgotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFBhdGhQb2ludCBjb250cm9sW10gPSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFBvaW50LAotICAgICAgICAgICAgICAgICAgICBlLnBvaW50QXQoMCksCi0gICAgICAgICAgICAg
ICAgICAgIGUucG9pbnRBdCgxKSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBtYWdpYyBudW1iZXI/Ci0gICAgICAgICAgICAgICAgcXVhZEN1cnZlKDUwLCBt
X3N1YnBhdGhzLmxhc3QoKSwgY29udHJvbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRoQmV6aWVyQ3VydmVU
bzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQYXRoUG9pbnQgY29udHJvbFtdID0g
ewotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCwKLSAgICAgICAgICAgICAgICAg
ICAgZS5wb2ludEF0KDApLAotICAgICAgICAgICAgICAgICAgICBlLnBvaW50QXQoMSksCi0gICAg
ICAgICAgICAgICAgICAgIGUucG9pbnRBdCgyKSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBtYWdpYyBudW1iZXI/Ci0gICAgICAgICAgICAgICAgYmV6aWVy
KDEwMCwgbV9zdWJwYXRocy5sYXN0KCksIGNvbnRyb2wpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVu
dFBvaW50ID0gbV9zdWJwYXRocy5sYXN0KCkubGFzdCgpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0
Zm9ybVBhdGg6OmFwcGVuZChjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKQotewotICAgIGUu
aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShtX2JvdW5kaW5nUmVjdCwgbGFzdFBvaW50KCkpOwotICAg
IGFkZFRvU3VicGF0aChlKTsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChlKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybVBhdGg6OmFwcGVuZChjb25zdCBQbGF0Zm9ybVBhdGgmIHApCi17Ci0gICAgY29uc3Qg
UGxhdGZvcm1QYXRoRWxlbWVudHMmIGUgPSBwLmVsZW1lbnRzKCk7Ci0gICAgZm9yIChQbGF0Zm9y
bVBhdGhFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQoZS5iZWdpbigpKTsgaXQgIT0gZS5lbmQo
KTsgKytpdCkgewotICAgICAgICBhZGRUb1N1YnBhdGgoKml0KTsKLSAgICAgICAgaXQtPmluZmxh
dGVSZWN0VG9Db250YWluTWUobV9ib3VuZGluZ1JlY3QsIGxhc3RQb2ludCgpKTsKLSAgICAgICAg
bV9lbGVtZW50cy5hcHBlbmQoKml0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpj
bGVhcigpCi17Ci0gICAgbV9lbGVtZW50cy5jbGVhcigpOwotICAgIG1fYm91bmRpbmdSZWN0ID0g
RmxvYXRSZWN0KCk7Ci0gICAgbV9zdWJwYXRocy5jbGVhcigpOwotICAgIG1fY3VycmVudFBvaW50
LmNsZWFyKCk7Ci0gICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtUGF0
aDo6c3Ryb2tlUGF0aChIREMgZGMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRp
b24pIGNvbnN0Ci17Ci0gICAgZHJhd1BvbHlnb25zKGRjLCBtX3N1YnBhdGhzLCBmYWxzZSwgdHJh
bnNmb3JtYXRpb24pOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6ZmlsbFBhdGgoSERDIGRjLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEhHRElP
Qkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwot
ICAgIGRyYXdQb2x5Z29ucyhkYywgbV9zdWJwYXRocywgdHJ1ZSwgdHJhbnNmb3JtYXRpb24pOwot
ICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OnRy
YW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgZm9yIChQbGF0Zm9ybVBhdGhF
bGVtZW50czo6aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPm1vdmUoc2l6ZSk7Ci0KLSAgICBtX2JvdW5kaW5n
UmVjdC5tb3ZlKHNpemUpOwotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6aXRlcmF0b3Ig
aXQgPSBtX3N1YnBhdGhzLmJlZ2luKCk7IGl0ICE9IG1fc3VicGF0aHMuZW5kKCk7ICsraXQpCi0g
ICAgICAgIGl0LT5tb3ZlKHNpemUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNmb3Jt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKLXsKLSAgICBmb3IgKFBsYXRmb3JtUGF0aEVsZW1l
bnRzOjppdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2VsZW1lbnRzLmVu
ZCgpOyArK2l0KQotICAgICAgICBpdC0+dHJhbnNmb3JtKHQpOwotCi0gICAgbV9ib3VuZGluZ1Jl
Y3QgPSB0Lm1hcFJlY3QobV9ib3VuZGluZ1JlY3QpOwotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5
Z29uPjo6aXRlcmF0b3IgaXQgPSBtX3N1YnBhdGhzLmJlZ2luKCk7IGl0ICE9IG1fc3VicGF0aHMu
ZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT50cmFuc2Zvcm0odCk7Ci19Ci0KLWJvb2wgUGxhdGZv
cm1QYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkg
Y29uc3QKLXsKLSAgICAvLyBvcHRpbWl6YXRpb246IGNoZWNrIHRoZSBib3VuZGluZyByZWN0IGZp
cnN0Ci0gICAgaWYgKCFjb250YWluc1BvaW50KG1fYm91bmRpbmdSZWN0LCBwb2ludCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IG1fc3VicGF0aHMuYmVnaW4oKTsgaSAhPSBtX3N1YnBhdGhzLmVuZCgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGktPmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBh
dGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhF
bGVtZW50OjpNb3ZlVG8gZGF0YSA9IHsgeyBwb2ludC54KCksIHBvaW50LnkoKSB9IH07Ci0gICAg
UGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUpOwotfQotCi12b2lk
IFBsYXRmb3JtUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAg
IFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkxpbmVUbyBkYXRhID0geyB7IHBvaW50LngoKSwgcG9pbnQu
eSgpIH0gfTsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChw
ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50
OjpRdWFkQ3VydmVUbyBkYXRhID0geyB7IGNwLngoKSwgY3AueSgpIH0sIHsgcC54KCksIHAueSgp
IH0gfTsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewot
ICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkJlemllckN1cnZlVG8gZGF0YSA9IHsgeyBjcDEueCgp
LCBjcDEueSgpIH0sIHsgY3AyLngoKSwgY3AyLnkoKSB9LCB7IHAueCgpLCBwLnkoKSB9IH07Ci0g
ICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUpOwotfQotCi12
b2lkIFBsYXRmb3JtUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgZnAxLCBjb25zdCBG
bG9hdFBvaW50JiBmcDIsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBjb25zdCBQYXRoUG9pbnQmIHAw
ID0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgUGF0aFBvaW50IHAxOwotICAgIHAxID0gZnAxOwotICAg
IFBhdGhQb2ludCBwMjsKLSAgICBwMiA9IGZwMjsKLSAgICBpZiAoIXJhZGl1cyB8fCBwMCA9PSBw
MSB8fCBwMSA9PSBwMikgewotICAgICAgICBhZGRMaW5lVG8ocDEpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUGF0aFZlY3RvciB2MDEgPSBwMCAtIHAxOwotICAgIFBhdGhWZWN0b3Ig
djIxID0gcDIgLSBwMTsKLQotICAgIC8vIHNpbihBIC0gQikgPSBzaW4oQSkgKiBjb3MoQikgLSBz
aW4oQikgKiBjb3MoQSkKLSAgICBkb3VibGUgY3Jvc3MgPSB2MDEubV94ICogdjIxLm1feSAtIHYw
MS5tX3kgKiB2MjEubV94OwotCi0gICAgaWYgKGZhYnMoY3Jvc3MpIDwgMUUtMTApIHsKLSAgICAg
ICAgLy8gb24gb25lIGxpbmUKLSAgICAgICAgYWRkTGluZVRvKHAxKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGRvdWJsZSBkMDEgPSB2MDEubGVuZ3RoKCk7Ci0gICAgZG91YmxlIGQy
MSA9IHYyMS5sZW5ndGgoKTsKLSAgICBkb3VibGUgYW5nbGUgPSAocGlEb3VibGUgLSBmYWJzKGFz
aW4oY3Jvc3MgLyAoZDAxICogZDIxKSkpKSAqIDAuNTsKLSAgICBkb3VibGUgc3BhbiA9IHJhZGl1
cyAqIHRhbihhbmdsZSk7Ci0gICAgZG91YmxlIHJhdGUgPSBzcGFuIC8gZDAxOwotICAgIFBhdGhQ
b2ludCBzdGFydFBvaW50OwotICAgIHN0YXJ0UG9pbnQubV94ID0gcDEubV94ICsgdjAxLm1feCAq
IHJhdGU7Ci0gICAgc3RhcnRQb2ludC5tX3kgPSBwMS5tX3kgKyB2MDEubV95ICogcmF0ZTsKLQot
ICAgIGFkZExpbmVUbyhzdGFydFBvaW50KTsKLQotICAgIFBhdGhQb2ludCBlbmRQb2ludDsKLSAg
ICByYXRlID0gc3BhbiAvIGQyMTsKLSAgICBlbmRQb2ludC5tX3ggPSBwMS5tX3ggKyB2MjEubV94
ICogcmF0ZTsKLSAgICBlbmRQb2ludC5tX3kgPSBwMS5tX3kgKyB2MjEubV95ICogcmF0ZTsKLQot
ICAgIFBhdGhQb2ludCBtaWRQb2ludDsKLSAgICBtaWRQb2ludC5tX3ggPSAoc3RhcnRQb2ludC5t
X3ggKyBlbmRQb2ludC5tX3gpICogMC41OwotICAgIG1pZFBvaW50Lm1feSA9IChzdGFydFBvaW50
Lm1feSArIGVuZFBvaW50Lm1feSkgKiAwLjU7Ci0KLSAgICBQYXRoVmVjdG9yIHZtMSA9IG1pZFBv
aW50IC0gcDE7Ci0gICAgZG91YmxlIGRtMSA9IHZtMS5sZW5ndGgoKTsKLSAgICBkb3VibGUgZCA9
IF9oeXBvdChyYWRpdXMsIHNwYW4pOwotCi0gICAgUGF0aFBvaW50IGNlbnRlclBvaW50OwotICAg
IHJhdGUgPSBkIC8gZG0xOwotICAgIGNlbnRlclBvaW50Lm1feCA9IHAxLm1feCArIHZtMS5tX3gg
KiByYXRlOwotICAgIGNlbnRlclBvaW50Lm1feSA9IHAxLm1feSArIHZtMS5tX3kgKiByYXRlOwot
Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6QXJjVG8gZGF0YSA9IHsKLSAgICAgICAgZW5kUG9p
bnQsCi0gICAgICAgIGNlbnRlclBvaW50LAotICAgICAgICB7IHJhZGl1cywgcmFkaXVzIH0sCi0g
ICAgICAgIGNyb3NzIDwgMAotICAgIH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRh
KTsKLSAgICBhcHBlbmQocGUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6Y2xvc2VTdWJwYXRo
KCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlOwotICAgIGFwcGVuZChwZSk7Ci19Ci0K
LS8vIGFkZCBhIGNpcmN1bGFyIGFyYyBjZW50cmVkIGF0IHAgd2l0aCByYWRpdXMgciBmcm9tIHN0
YXJ0IGFuZ2xlIHNhciAocmFkaWFucykgdG8gZW5kIGFuZ2xlIGVhcgotdm9pZCBQbGF0Zm9ybVBh
dGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxv
YXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBmbG9hdCBzdGFy
dFgsIHN0YXJ0WSwgZW5kWCwgZW5kWTsKLQotICAgIG5vcm1hbGl6ZUFuZ2xlKHNhcik7Ci0gICAg
bm9ybWFsaXplQW5nbGUoZWFyKTsKLQotICAgIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoc2FyLCBh
LCBiLCBzdGFydFgsIHN0YXJ0WSk7Ci0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShlYXIsIGEs
IGIsIGVuZFgsIGVuZFkpOwotCi0gICAgdHJhbnNmb3JtQXJjUG9pbnQoc3RhcnRYLCBzdGFydFks
IHApOwotICAgIHRyYW5zZm9ybUFyY1BvaW50KGVuZFgsIGVuZFksIHApOwotCi0gICAgRmxvYXRQ
b2ludCBzdGFydChzdGFydFgsIHN0YXJ0WSk7Ci0gICAgbW92ZVRvKHN0YXJ0KTsKLQotICAgIFBs
YXRmb3JtUGF0aEVsZW1lbnQ6OkFyY1RvIGRhdGEgPSB7IHsgZW5kWCwgZW5kWSB9LCB7IHAueCgp
LCBwLnkoKSB9LCAgeyBhLCBiIH0sICFhbnRpY2xvY2t3aXNlIH07Ci0gICAgUGxhdGZvcm1QYXRo
RWxlbWVudCBwZShkYXRhKTsKLSAgICBhcHBlbmQocGUpOwotfQotCi0KLXZvaWQgUGxhdGZvcm1Q
YXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBtb3ZlVG8oci5sb2NhdGlv
bigpKTsKLQotICAgIGZsb2F0IHJpZ2h0ID0gci5tYXhYKCkgLSAxOwotICAgIGZsb2F0IGJvdHRv
bSA9IHIubWF4WSgpIC0gMTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyaWdodCwgci55KCkp
KTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyaWdodCwgYm90dG9tKSk7Ci0gICAgYWRkTGlu
ZVRvKEZsb2F0UG9pbnQoci54KCksIGJvdHRvbSkpOwotICAgIGFkZExpbmVUbyhyLmxvY2F0aW9u
KCkpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHIpCi17Ci0gICAgRmxvYXRTaXplIHJhZGl1cyhyLndpZHRoKCkgKiAwLjUsIHIuaGVpZ2h0KCkg
KiAwLjUpOwotICAgIGFkZEVsbGlwc2Uoci5sb2NhdGlvbigpICsgcmFkaXVzLCByYWRpdXMud2lk
dGgoKSwgcmFkaXVzLmhlaWdodCgpLCAwLCAwLCB0cnVlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBh
dGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0
Ci17Ci0gICAgUGF0aEVsZW1lbnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107
Ci0gICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwotCi0gICAgZm9yIChQbGF0Zm9ybVBhdGhF
bGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9l
bGVtZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBwZWxlbWVudC50eXBlID0gaXQtPnR5cGUo
KTsKLSAgICAgICAgaW50IG4gPSBpdC0+bnVtUG9pbnRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgcG9pbnRzW2ldID0gaXQtPnBvaW50QXQoaSk7
Ci0gICAgICAgIGZ1bmN0aW9uKGluZm8sICZwZWxlbWVudCk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJjb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWU5MjQzZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgUGxhdGZvcm1QYXRoV2luQ0VfaAotI2RlZmluZSBQbGF0
Zm9ybVBhdGhXaW5DRV9oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLQotICAgIHN0cnVjdCBQYXRoUG9pbnQgewotICAgICAgICBmbG9hdCBt
X3g7Ci0gICAgICAgIGZsb2F0IG1feTsKLSAgICAgICAgY29uc3QgZmxvYXQmIHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KLSAgICAgICAgY29uc3QgZmxvYXQmIHkoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KLSAgICAgICAgdm9pZCBzZXQoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV94ID0geDsKLSAgICAgICAgICAgIG1feSA9IHk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIG9wZXJhdG9yIEZsb2F0UG9pbnQoKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KG1feCwg
bV95KTsgfQotICAgICAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1feCArPSBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAgICAgIG1f
eSArPSBvZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgUGF0aFBvaW50JiBvcGVy
YXRvcj0oY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAgICAgewotICAgICAgICAgICAgbV94ID0g
cC54KCk7Ci0gICAgICAgICAgICBtX3kgPSBwLnkoKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhp
czsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGNsZWFyKCkgeyBtX3ggPSBtX3kgPSAwOyB9Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQYXRoUG9pbnQ+
IHsKLSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKLSAgICAgICAg
dm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIGNs
YXNzIFBsYXRmb3JtUGF0aEVsZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBQbGFm
b3JtUGF0aEVsZW1lbnRUeXBlIHsKLSAgICAgICAgICAgIFBhdGhNb3ZlVG8sCi0gICAgICAgICAg
ICBQYXRoTGluZVRvLAotICAgICAgICAgICAgUGF0aEFyY1RvLAotICAgICAgICAgICAgUGF0aFF1
YWRDdXJ2ZVRvLAotICAgICAgICAgICAgUGF0aEJlemllckN1cnZlVG8sCi0gICAgICAgICAgICBQ
YXRoQ2xvc2VTdWJwYXRoLAotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBNb3ZlVG8gewot
ICAgICAgICAgICAgUGF0aFBvaW50IG1fZW5kOwotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVj
dCBMaW5lVG8gewotICAgICAgICAgICAgUGF0aFBvaW50IG1fZW5kOwotICAgICAgICB9OwotCi0g
ICAgICAgIHN0cnVjdCBBcmNUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAg
ICAgICAgICBQYXRoUG9pbnQgbV9jZW50ZXI7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9yYWRp
dXM7Ci0gICAgICAgICAgICBib29sIG1fY2xvY2t3aXNlOwotICAgICAgICB9OwotCi0gICAgICAg
IHN0cnVjdCBRdWFkQ3VydmVUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDA7Ci0g
ICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDE7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3Ry
dWN0IEJlemllckN1cnZlVG8gewotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnQwOwotICAg
ICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnQxOwotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9p
bnQyOwotICAgICAgICB9OwotCi0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoKTogbV90eXBl
KFBhdGhDbG9zZVN1YnBhdGgpIHsgbV9kYXRhLm1fcG9pbnRzWzBdLnNldCgwLCAwKTsgICAgfQot
ICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50KGNvbnN0IE1vdmVUbyYgZGF0YSk6IG1fdHlwZShQ
YXRoTW92ZVRvKSB7IG1fZGF0YS5tX21vdmVUb0RhdGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRm
b3JtUGF0aEVsZW1lbnQoY29uc3QgTGluZVRvJiBkYXRhKTogbV90eXBlKFBhdGhMaW5lVG8pIHsg
bV9kYXRhLm1fbGluZVRvRGF0YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVu
dChjb25zdCBBcmNUbyYgZGF0YSk6IG1fdHlwZShQYXRoQXJjVG8pIHsgbV9kYXRhLm1fYXJjVG9E
YXRhID0gZGF0YTsgfQotICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50KGNvbnN0IFF1YWRDdXJ2
ZVRvJiBkYXRhKTogbV90eXBlKFBhdGhRdWFkQ3VydmVUbykgeyBtX2RhdGEubV9xdWFkQ3VydmVU
b0RhdGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgQmV6aWVy
Q3VydmVUbyYgZGF0YSk6IG1fdHlwZShQYXRoQmV6aWVyQ3VydmVUbykgeyBtX2RhdGEubV9iZXpp
ZXJDdXJ2ZVRvRGF0YSA9IGRhdGE7IH0KLQotICAgICAgICBjb25zdCBNb3ZlVG8mIG1vdmVUbygp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX21vdmVUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgTGlu
ZVRvJiBsaW5lVG8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9saW5lVG9EYXRhOyB9Ci0gICAg
ICAgIGNvbnN0IEFyY1RvJiBhcmNUbygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2FyY1RvRGF0
YTsgfQotICAgICAgICBjb25zdCBRdWFkQ3VydmVUbyYgcXVhZEN1cnZlVG8oKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEubV9xdWFkQ3VydmVUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgQmV6aWVyQ3Vy
dmVUbyYgYmV6aWVyQ3VydmVUbygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2JlemllckN1cnZl
VG9EYXRhOyB9Ci0gICAgICAgIGNvbnN0IFBhdGhQb2ludCYgbGFzdFBvaW50KCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IG4gPSBudW1Qb2ludHMoKTsKLSAgICAgICAgICAgIHJl
dHVybiBuID4gMSA/IG1fZGF0YS5tX3BvaW50c1tuIC0gMV0gOiBtX2RhdGEubV9wb2ludHNbMF07
Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgUGF0aFBvaW50JiBwb2ludEF0KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLm1fcG9pbnRzW2luZGV4XTsgfQotICAgICAgICBpbnQgbnVt
UG9pbnRzKCkgY29uc3Q7Ci0gICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7Ci0gICAgICAgIHZvaWQg
dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCk7Ci0gICAgICAgIFBhdGhFbGVtZW50
VHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgcGxhdGZv
cm1UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIHZvaWQgaW5mbGF0ZVJl
Y3RUb0NvbnRhaW5NZShGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkg
Y29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBQbGFmb3JtUGF0aEVsZW1lbnRUeXBlIG1f
dHlwZTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgTW92ZVRvIG1fbW92ZVRvRGF0YTsK
LSAgICAgICAgICAgIExpbmVUbyBtX2xpbmVUb0RhdGE7Ci0gICAgICAgICAgICBBcmNUbyBtX2Fy
Y1RvRGF0YTsKLSAgICAgICAgICAgIFF1YWRDdXJ2ZVRvIG1fcXVhZEN1cnZlVG9EYXRhOwotICAg
ICAgICAgICAgQmV6aWVyQ3VydmVUbyBtX2JlemllckN1cnZlVG9EYXRhOwotICAgICAgICAgICAg
UGF0aFBvaW50IG1fcG9pbnRzWzRdOwotICAgICAgICB9IG1fZGF0YTsKLSAgICB9OwotCi0gICAg
dHlwZWRlZiBWZWN0b3I8UGxhdGZvcm1QYXRoRWxlbWVudD4gUGxhdGZvcm1QYXRoRWxlbWVudHM7
Ci0KLSAgICBjbGFzcyBQbGF0Zm9ybVBhdGggewotICAgIHB1YmxpYzoKLSAgICAgICAgUGxhdGZv
cm1QYXRoKCk7Ci0gICAgICAgIGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnRzJiBlbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHM7IH0KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3Qg
UGxhdGZvcm1QYXRoRWxlbWVudCYgZSk7Ci0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBsYXRm
b3JtUGF0aCYgcCk7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5pc0VtcHR5KCk7IH0KLQotICAgICAgICB2b2lk
IHN0cm9rZVBhdGgoSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBmaWxsUGF0aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0Owot
ICAgICAgICBGbG9hdFBvaW50IGxhc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMu
aXNFbXB0eSgpID8gRmxvYXRQb2ludCgwLCAwKSA6IG1fZWxlbWVudHMubGFzdCgpLmxhc3RQb2lu
dCgpOyB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QoKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kaW5nUmVjdDsgfQotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdDsKLSAgICAgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKLSAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLQotICAgICAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9h
dFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAg
ICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsKLSAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRy
b2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cyk7Ci0gICAgICAg
IHZvaWQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9h
dFBvaW50JiBwLCBmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBh
bnRpY2xvY2t3aXNlKTsKLSAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcik7
Ci0gICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpOwotICAgICAgICB2
b2lkIGFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBlbnN1cmVTdWJwYXRoKCk7Ci0gICAgICAg
IHZvaWQgYWRkVG9TdWJwYXRoKGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQmIGUpOwotCi0gICAg
ICAgIFBsYXRmb3JtUGF0aEVsZW1lbnRzIG1fZWxlbWVudHM7Ci0gICAgICAgIEZsb2F0UmVjdCBt
X2JvdW5kaW5nUmVjdDsKLSAgICAgICAgVmVjdG9yPFBhdGhQb2x5Z29uPiBtX3N1YnBhdGhzOwot
ICAgICAgICBQYXRoUG9pbnQgbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIGJvb2wgbV9wZW5MaWZ0
ZWQ7Ci0gICAgfTsKLQotfQotCi0jZW5kaWYgLy8gUGxhdGZvcm1QYXRoV2luQ0VfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1h
cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTg1OGQuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykg
MjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIK
LQotI2luY2x1ZGUgIkdESUV4dHJhcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotI2luY2x1ZGUgIldpbkNFR3JhcGhpY3NFeHRyYXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaW5jbHVk
ZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZm5kZWYgTkRFQlVHCi1z
dGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgc2hhcmVkQml0bWFwTGVha0NvdW50ZXIo
IlNoYXJlZEJpdG1hcCIpOwotI2VuZGlmCi0KLQotUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IFNo
YXJlZEJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEJpdG1hcEluZm86OkJpdENv
dW50IGJpdENvdW50LCBib29sIGluaXRQaXhlbHMpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1h
cD4gcmVzdWx0YW50Qml0bWFwID0gYWRvcHRSZWYobmV3IFNoYXJlZEJpdG1hcChzaXplLCBiaXRD
b3VudCwgaW5pdFBpeGVscykpOwotICAgIGlmIChyZXN1bHRhbnRCaXRtYXAgJiYgIXJlc3VsdGFu
dEJpdG1hcC0+Ynl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHJlc3VsdGFu
dEJpdG1hcC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBTaGFyZWRC
aXRtYXA6OmNyZWF0ZShjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBkYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGhhc0FscGhhKQotewotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IHJlc3Vs
dCA9IGNyZWF0ZShzaXplLCBCaXRtYXBJbmZvOjpCaXRDb3VudDMyLCBmYWxzZSk7Ci0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIG1lbWNweShyZXN1bHQtPmJ5dGVzKCks
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOwotICAgIHJlc3Vs
dC0+c2V0SGFzQWxwaGEoaGFzQWxwaGEpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwot
fQotCi1TaGFyZWRCaXRtYXA6OlNoYXJlZEJpdG1hcChjb25zdCBJbnRTaXplJiBzaXplLCBCaXRt
YXBJbmZvOjpCaXRDb3VudCBiaXRDb3VudCwgYm9vbCBpbml0UGl4ZWxzKQotICAgIDogbV9ibXBJ
bmZvKEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKHNpemUsIGJpdENvdW50KSkKLSAgICAsIG1f
bG9ja2VkKGZhbHNlKQotICAgICwgbV91c2VzVHJhbnNwYXJlbnRDb2xvcihmYWxzZSkKLSAgICAs
IG1fdHJhbnNwYXJlbnRDb2xvcihSR0IoMCwgMCwgMCkpCi0gICAgLCBtX3BpeGVscygwKQotICAg
ICwgbV9oYXNBbHBoYShmYWxzZSkKLSAgICAsIG1fdmFsaWRIZWlnaHQoYWJzKHNpemUuaGVpZ2h0
KCkpKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBzaGFyZWRCaXRtYXBMZWFrQ291bnRlci5pbmNy
ZW1lbnQoKTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1wSW5mby5u
dW1QaXhlbHMoKTsKLSAgICBpZiAoYml0Q291bnQgPT0gQml0bWFwSW5mbzo6Qml0Q291bnQxNikK
LSAgICAgICAgYnVmZmVyU2l6ZSAvPSAyOwotCi0gICAgbV9waXhlbERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPHVuc2lnbmVkW10+KGJ1ZmZlclNpemUpOwotICAgIG1fcGl4ZWxzID0gbV9waXhlbERh
dGEuZ2V0KCk7Ci0KLSAgICBpZiAoaW5pdFBpeGVscykKLSAgICAgICAgcmVzZXRQaXhlbHMoKTsK
LX0KLQotU2hhcmVkQml0bWFwOjp+U2hhcmVkQml0bWFwKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgc2hhcmVkQml0bWFwTGVha0NvdW50ZXIuZGVjcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBTaGFyZWRCaXRtYXA6OnJlc2V0UGl4ZWxzKGJvb2wgYmxhY2spCi17Ci0gICAgaWYgKCFtX3Bp
eGVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1w
SW5mby5udW1QaXhlbHMoKTsKLSAgICBpZiAoYmxhY2spIHsKLSAgICAgICAgdW5zaWduZWQgYnVm
ZmVyU2l6ZUluQnl0ZXMgPSBidWZmZXJTaXplICogKGlzMTZiaXQoKSA/IDIgOiA0KTsKLSAgICAg
ICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBidWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaXMxNmJpdCgpKSB7Ci0gICAgICAgIC8vIEZpbGwgaXQgd2l0
aCB3aGl0ZSBjb2xvcgotICAgICAgICB3bWVtc2V0KHN0YXRpY19jYXN0PHdjaGFyX3QqPihtX3Bp
eGVscyksIDB4RkZGRiwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIGl0IHdoaXRlIGJ1dCB0cmFuc3BhcmVudAotICAgIHVuc2lnbmVkKiBwaXhlbCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkKj4obV9waXhlbHMpOwotICAgIGNvbnN0IHVuc2lnbmVkKiBi
dWZmZXJFbmQgPSBwaXhlbCArIGJ1ZmZlclNpemU7Ci0gICAgd2hpbGUgKHBpeGVsIDwgYnVmZmVy
RW5kKQotICAgICAgICAqcGl4ZWwrKyA9IDB4MDBGRkZGRkY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgc2hvcnQgY29udmVydDMyVG8xNih1bnNpZ25lZCBwaXhlbCkKLXsKLSAgICB1bnNp
Z25lZCBzaG9ydCByID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChwaXhlbCAmIDB4MDBG
ODAwMDApID4+IDgpOwotICAgIHVuc2lnbmVkIHNob3J0IGcgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oKHBpeGVsICYgMHgwMDAwRkMwMCkgPj4gNSk7Ci0gICAgdW5zaWduZWQgc2hvcnQg
YiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigocGl4ZWwgJiAweDAwMDAwMEY4KSA+PiAz
KTsKLSAgICByZXR1cm4gciB8IGcgfCBiOwotfQotCi1ib29sIFNoYXJlZEJpdG1hcDo6dG8xNmJp
dCgpCi17Ci0gICAgaWYgKG1fbG9ja2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGlzMTZiaXQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBCaXRtYXBJbmZvIG5ld0Jt
cEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUobV9ibXBJbmZvLnNpemUoKSwgQml0bWFwSW5mbzo6
Qml0Q291bnQxNik7Ci0KLSAgICBpbnQgd2lkdGggPSBuZXdCbXBJbmZvLndpZHRoKCk7Ci0gICAg
aW50IHBhZGRlZFdpZHRoID0gbmV3Qm1wSW5mby5wYWRkZWRXaWR0aCgpOwotICAgIGludCBidWZm
ZXJTaXplID0gcGFkZGVkV2lkdGggKiBuZXdCbXBJbmZvLmhlaWdodCgpOwotICAgIGF1dG8gbmV3
UGl4ZWxEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihidWZmZXJTaXplIC8gMik7
Ci0gICAgdm9pZCogbmV3UGl4ZWxzID0gbmV3UGl4ZWxEYXRhLmdldCgpOwotCi0gICAgaWYgKCFu
ZXdQaXhlbHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHNob3J0KiBw
MTYgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG5ld1BpeGVscyk7Ci0gICAgY29uc3Qg
dW5zaWduZWQqIHAzMiA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4obV9waXhlbHMpOwot
Ci0gICAgYm9vbCBza2lwcyA9IHBhZGRlZFdpZHRoICE9IHdpZHRoOwotCi0gICAgY29uc3QgdW5z
aWduZWQgc2hvcnQqIHAxNmVuZCA9IHAxNiArIGJ1ZmZlclNpemU7Ci0gICAgd2hpbGUgKHAxNiA8
IHAxNmVuZCkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHNob3J0KiBwMTZsaW5lRW5kID0gcDE2
ICsgd2lkdGg7IHAxNiA8IHAxNmxpbmVFbmQ7ICkKLSAgICAgICAgICAgICpwMTYrKyA9IGNvbnZl
cnQzMlRvMTYoKnAzMisrKTsKLQotICAgICAgICBpZiAoc2tpcHMpCi0gICAgICAgICAgICAqcDE2
KysgPSAwOwotICAgIH0KLQotICAgIGlmIChtX2hiaXRtYXApCi0gICAgICAgIG1faGJpdG1hcCA9
IG51bGxwdHI7Ci0gICAgZWxzZQotICAgICAgICBtX3BpeGVsRGF0YSA9IG5ld1BpeGVsRGF0YS5y
ZWxlYXNlKCk7Ci0KLSAgICBtX3BpeGVscyA9IG5ld1BpeGVsczsKLSAgICBtX2JtcEluZm8gPSBu
ZXdCbXBJbmZvOwotCi0gICAgc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFNoYXJlZEJpdG1hcDo6ZnJlZU1lbW9yeSgpCi17Ci0gICAgaWYgKG1fbG9ja2Vk
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9oYml0bWFwKSB7Ci0gICAgICAg
IG1faGJpdG1hcCA9IG51bGxwdHI7Ci0gICAgICAgIG1fcGl4ZWxzID0gMDsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fcGl4ZWxzKSB7Ci0gICAgICAgIG1fcGl4ZWxE
YXRhID0gbnVsbHB0cjsKLSAgICAgICAgbV9waXhlbHMgPSAwOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdESU9iamVjdDxIQklUTUFQPiBT
aGFyZWRCaXRtYXA6OmNyZWF0ZUhhbmRsZSh2b2lkKiogcGl4ZWxzLCBCaXRtYXBJbmZvKiBibXBJ
bmZvLCBpbnQgaGVpZ2h0LCBib29sIHVzZTE2Yml0KSBjb25zdAotewotICAgIGlmICghbV9waXhl
bHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGhlaWdodCA9PSAtMSkKLSAg
ICAgICAgaGVpZ2h0ID0gdGhpcy0+aGVpZ2h0KCk7Ci0gICAgKmJtcEluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGVCb3R0b21VcChJbnRTaXplKHdpZHRoKCksIGhlaWdodCksICh1c2UxNmJpdCB8fCBp
czE2Yml0KCkpID8gQml0bWFwSW5mbzo6Qml0Q291bnQxNiA6IEJpdG1hcEluZm86OkJpdENvdW50
MzIpOwotCi0gICAgYXV0byBoYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9u
KDAsIGJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCBwaXhlbHMsIDAsIDApKTsKLQotICAgIGlmICgh
aGJtcCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJtcERDID0gYWRvcHRH
RElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotICAgIEhHRElPQkogaE9sZEJtcCA9
IFNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaGJtcC5nZXQoKSk7Ci0KLSAgICBTdHJldGNoRElC
aXRzKGJtcERDLmdldCgpLCAwLCAwLCB3aWR0aCgpLCBoZWlnaHQsIDAsIDAsIHdpZHRoKCksIGhl
aWdodCwgbV9waXhlbHMsICZtX2JtcEluZm8sIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsKLQot
ICAgIFNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaE9sZEJtcCk7Ci0KLSAgICByZXR1cm4gaGJt
cDsKLX0KLQotYm9vbCBTaGFyZWRCaXRtYXA6OmVuc3VyZUhhbmRsZSgpCi17Ci0gICAgaWYgKG1f
aGJpdG1hcCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fcGl4ZWxzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9sb2NrZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEJpdG1hcEluZm8gYm1wSW5mbzsKLSAgICB2b2lkKiBwaXhlbHM7Ci0gICAg
bV9oYml0bWFwID0gY3JlYXRlSGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgIWhhc0FscGhh
KCkpOwotCi0gICAgaWYgKCFtX2hiaXRtYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fcGl4ZWxEYXRhID0gbnVsbHB0cjsKLSAgICBtX3BpeGVscyA9IHBpeGVsczsKLSAgICBtX2Jt
cEluZm8gPSBibXBJbmZvOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2hhcmVkQml0
bWFwOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlm
ICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLSAgICBjdHh0LT5kcmF3Qml0bWFwKHRoaXMs
IGRzdFJlY3QsIHNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSk7Ci19Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3KEhEQyBoZGMsIGNvbnN0IEludFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSEJJVE1BUCBoYml0bWFwID0gMDsKLSAgICBH
RElPYmplY3Q8SEJJVE1BUD4gaFRlbXBCaXRtYXA7Ci0gICAgYm9vbCB1c2luZ0hhbmRsZSA9IGNv
bXBvc2l0ZU9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgKGhhc0FscGhhKCkgJiYgaGFzQWxw
aGFCbGVuZFN1cHBvcnQoKSB8fCB1c2VzVHJhbnNwYXJlbnRDb2xvcigpKTsKLQotICAgIGlmICh1
c2luZ0hhbmRsZSkgewotICAgICAgICBpZiAoZW5zdXJlSGFuZGxlKCkpCi0gICAgICAgICAgICBo
Yml0bWFwID0gbV9oYml0bWFwLmdldCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZv
aWQqIHBpeGVsczsKLSAgICAgICAgICAgIEJpdG1hcEluZm8gYm1wSW5mbzsKLSAgICAgICAgICAg
IGhUZW1wQml0bWFwID0gY3JlYXRlSGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgdXNlc1Ry
YW5zcGFyZW50Q29sb3IoKSk7Ci0gICAgICAgICAgICBoYml0bWFwID0gaFRlbXBCaXRtYXAuZ2V0
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFoYml0bWFwKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBoYW5kbGUgb3RoZXIgY29tcG9zaXRlIG9wZXJhdGlvbiB0eXBlcz8KLSAgICAgICAgRFdP
UkQgcm9wID0gY29tcG9zaXRlT3AgPT0gQ29tcG9zaXRlQ29weSA/IFNSQ0NPUFkKLSAgICAgICAg
ICAgIDogY29tcG9zaXRlT3AgPT0gQ29tcG9zaXRlWE9SID8gUEFUSU5WRVJUCi0gICAgICAgICAg
ICA6IGNvbXBvc2l0ZU9wID09IENvbXBvc2l0ZUNsZWFyID8gV0hJVEVORVNTCi0gICAgICAgICAg
ICA6IFNSQ0NPUFk7Ci0KLSAgICAgICAgU3RyZXRjaERJQml0cyhoZGMsIGRzdFJlY3QueCgpLCBk
c3RSZWN0LnkoKSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpLAotICAgICAgICAg
ICAgc3JjUmVjdC54KCksIHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVp
Z2h0KCksIG1fcGl4ZWxzLCAmbV9ibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcm9wKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gaG1lbWRjID0gYWRvcHRHRElPYmplY3QoOjpD
cmVhdGVDb21wYXRpYmxlREMoaGRjKSk7Ci0gICAgSEdESU9CSiBoT2xkQm1wID0gU2VsZWN0T2Jq
ZWN0KGhtZW1kYy5nZXQoKSwgaGJpdG1hcCk7Ci0KLSAgICBpZiAoIXVzZXNUcmFuc3BhcmVudENv
bG9yKCkgJiYgaGFzQWxwaGFCbGVuZFN1cHBvcnQoKSkgewotICAgICAgICBzdGF0aWMgY29uc3Qg
QkxFTkRGVU5DVElPTiBibGVuZCA9IHsgQUNfU1JDX09WRVIsIDAsIDI1NSwgQUNfU1JDX0FMUEhB
IH07Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGFscGhhQmxlbmRJZlN1cHBvcnRlZChoZGMsIGRz
dFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgp
LCBobWVtZGMuZ2V0KCksCi0gICAgICAgICAgICBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNy
Y1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgYmxlbmQpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zcGFy
ZW50Qmx0KGhkYywgZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRz
dFJlY3QuaGVpZ2h0KCksIGhtZW1kYy5nZXQoKSwKLSAgICAgICAgICAgIHNyY1JlY3QueCgpLCBz
cmNSZWN0LnkoKSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCB0cmFuc3BhcmVu
dENvbG9yKCkpOwotICAgIH0KLQotICAgIFNlbGVjdE9iamVjdChobWVtZGMuZ2V0KCksIGhPbGRC
bXApOwotfQotCi1HRElPYmplY3Q8SEJJVE1BUD4gU2hhcmVkQml0bWFwOjpjbGlwQml0bWFwKGNv
bnN0IEludFJlY3QmIHJlY3QsIGJvb2wgdXNlQWxwaGEsIEJpdG1hcEluZm8mIGJtcEluZm8sIHZv
aWQqJiBwaXhlbHMpCi17Ci0gICAgaWYgKCFieXRlcygpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7Ci0gICAgaW50IG9sZEhlaWdodCA9IGhl
aWdodCgpOwotICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbjxpbnQ+KHJlY3Qud2lkdGgoKSwg
b2xkV2lkdGggLSByZWN0LngoKSk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+
KHJlY3QuaGVpZ2h0KCksIG9sZEhlaWdodCAtIHJlY3QueSgpKTsKLSAgICBpZiAoIWNvcHlXaWR0
aCB8fCAhY29weUhlaWdodCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBibXBJbmZv
ID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZShjb3B5V2lkdGgsIGNvcHlIZWln
aHQpLCAodXNlQWxwaGEgJiYgaXMzMmJpdCgpKSA/IEJpdG1hcEluZm86OkJpdENvdW50MzIgOiBC
aXRtYXBJbmZvOjpCaXRDb3VudDE2KTsKLSAgICBhdXRvIG5ld0JtcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMs
IDAsIDApKTsKLQotICAgIGlmICghbmV3Qm1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gZGNOZXcgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7
Ci0gICAgSEdESU9CSiB0bXBOZXcgPSBTZWxlY3RPYmplY3QoZGNOZXcuZ2V0KCksIG5ld0JtcC5n
ZXQoKSk7Ci0KLSAgICBTdHJldGNoRElCaXRzKGRjTmV3LmdldCgpLCAwLCAwLCBjb3B5V2lkdGgs
IGNvcHlIZWlnaHQsIHJlY3QueCgpLCByZWN0LnkoKSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LAot
ICAgICAgICBieXRlcygpLCAmYml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7
Ci0KLSAgICBTZWxlY3RPYmplY3QoZGNOZXcuZ2V0KCksIHRtcE5ldyk7Ci0gICAgcmV0dXJuIG5l
d0JtcDsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IFNoYXJlZEJpdG1hcDo6Y2xpcEJp
dG1hcChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIHVzZUFscGhhKQotewotICAgIGludCBvbGRX
aWR0aCA9IHdpZHRoKCk7Ci0gICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwotICAgIGludCBj
b3B5V2lkdGggPSBzdGQ6Om1pbjxpbnQ+KHJlY3Qud2lkdGgoKSwgb2xkV2lkdGggLSByZWN0Lngo
KSk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHJlY3QuaGVpZ2h0KCksIG9s
ZEhlaWdodCAtIHJlY3QueSgpKTsKLSAgICBpZiAoIWNvcHlXaWR0aCB8fCAhY29weUhlaWdodCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBuZXdCbXAgPSBj
cmVhdGUoSW50U2l6ZShjb3B5V2lkdGgsIGNvcHlIZWlnaHQpLCB1c2VBbHBoYSAmJiBpczMyYml0
KCkgPyBCaXRtYXBJbmZvOjpCaXRDb3VudDMyIDogQml0bWFwSW5mbzo6Qml0Q291bnQxNiwgZmFs
c2UpOwotCi0gICAgaWYgKCFuZXdCbXAgfHwgIW5ld0JtcC0+Ynl0ZXMoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBEQ0hvbGRlciBkY05ldyhuZXdCbXAuZ2V0KCkpOwotCi0gICAgU3RyZXRj
aERJQml0cyhkY05ldy5nZXQoKSwgMCwgMCwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCByZWN0Lngo
KSwgcmVjdC55KCksIGNvcHlXaWR0aCwgY29weUhlaWdodCwKLSAgICAgICAgYnl0ZXMoKSwgJmJp
dG1hcEluZm8oKSwgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOwotCi0gICAgcmV0dXJuIG5ld0Jt
cDsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5TaW1wbGUoSERDIGhkYywgY29uc3QgUkVD
VCYgZGVzdFJlY3QsIEhCSVRNQVAgaGJtcCwgY29uc3QgUE9JTlQmIHBoYXNlKQotewotICAgIGF1
dG8gaEJydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVQYXR0ZXJuQnJ1c2goaGJtcCkpOwot
ICAgIGlmICghaEJydXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQT0lOVCBvbGRPcmc7Ci0g
ICAgU2V0QnJ1c2hPcmdFeChoZGMsIGRlc3RSZWN0LmxlZnQgLSBwaGFzZS54LCBkZXN0UmVjdC50
b3AgLSBwaGFzZS55LCAmb2xkT3JnKTsKLSAgICBGaWxsUmVjdChoZGMsICZkZXN0UmVjdCwgaEJy
dXNoLmdldCgpKTsKLSAgICBTZXRCcnVzaE9yZ0V4KGhkYywgb2xkT3JnLngsIG9sZE9yZy55LCAw
KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5TaW1wbGUoSERDIGhkYywgY29uc3QgUkVD
VCYgZGVzdFJlY3QsIGNvbnN0IFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBTSVpFJiBibXBTaXpl
LCBjb25zdCBQT0lOVCYgcGhhc2UpCi17Ci0gICAgaW50IGRzdFkgPSBkZXN0UmVjdC50b3A7Ci0g
ICAgZm9yIChpbnQgc291cmNlWSA9IHBoYXNlLnk7IGRzdFkgPCBkZXN0UmVjdC5ib3R0b207ICkg
ewotICAgICAgICBpbnQgc291cmNlSCA9IHN0ZDo6bWluPGludD4oYm1wU2l6ZS5jeSAtIHNvdXJj
ZVksIGRlc3RSZWN0LmJvdHRvbSAtIGRzdFkpOwotICAgICAgICBpbnQgZHN0WCA9IGRlc3RSZWN0
LmxlZnQ7Ci0gICAgICAgIGZvciAoaW50IHNvdXJjZVggPSBwaGFzZS54OyBkc3RYIDwgZGVzdFJl
Y3QucmlnaHQ7ICkgewotICAgICAgICAgICAgaW50IHNvdXJjZVcgPSBzdGQ6Om1pbjxpbnQ+KGJt
cFNpemUuY3ggLSBzb3VyY2VYLCBkZXN0UmVjdC5yaWdodCAtIGRzdFgpOwotCi0gICAgICAgICAg
ICBTdHJldGNoRElCaXRzKGhkYywgZHN0WCwgZHN0WSwgc291cmNlVywgc291cmNlSCwgc291cmNl
WCwgc291cmNlWSwgc291cmNlVywgc291cmNlSCwKLSAgICAgICAgICAgICAgICBibXAtPmJ5dGVz
KCksICZibXAtPmJpdG1hcEluZm8oKSwgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOwotCi0gICAg
ICAgICAgICBkc3RYICs9IHNvdXJjZVc7Ci0gICAgICAgICAgICBzb3VyY2VYID0gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGRzdFkgKz0gc291cmNlSDsKLSAgICAgICAgc291cmNlWSA9IDA7Ci0g
ICAgfQotfQotCi1zdGF0aWMgTE9ORyBub3JtYWxpemVQaGFzZShMT05HIHBoYXNlLCBpbnQgbGlt
aXQpCi17Ci0gICAgaWYgKCFwaGFzZSB8fCBsaW1pdCA8IDIpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgaWYgKGxpbWl0ID09IDIpCi0gICAgICAgIHJldHVybiBwaGFzZSAmIDE7Ci0KLSAgICBp
ZiAocGhhc2UgPCAwKSB7Ci0gICAgICAgIHBoYXNlID0gLXBoYXNlOwotICAgICAgICBpZiAocGhh
c2UgPiBsaW1pdCkKLSAgICAgICAgICAgIHBoYXNlID0gc3RhdGljX2Nhc3Q8TE9ORz4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBoYXNlKSAlIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW1pdCkpOwot
ICAgICAgICBpZiAocGhhc2UpCi0gICAgICAgICAgICBwaGFzZSA9IGxpbWl0IC0gcGhhc2U7Ci0g
ICAgICAgIHJldHVybiBwaGFzZTsKLSAgICB9Ci0KLSAgICBpZiAocGhhc2UgPCBsaW1pdCkKLSAg
ICAgICAgcmV0dXJuIHBoYXNlOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PExPTkc+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihwaGFzZSkgJSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGltaXQpKTsK
LX0KLQotdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6
ZSkKLXsKLSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0gICAgY3R4dC0+ZHJh
d0JpdG1hcFBhdHRlcm4odGhpcywgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBvcmlnU291cmNlU2l6ZSk7Ci19Ci0KLXZv
aWQgU2hhcmVkQml0bWFwOjpkcmF3UGF0dGVybihIREMgaGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBv
cmlnU291cmNlU2l6ZSkKLXsKLSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAodGlsZVJlY3RJbi53aWR0aCgpIDw9IDAgfHwgdGlsZVJlY3RJbi5oZWlnaHQoKSA8
PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHVzZUFscGhhID0gb3AgPT0gQ29tcG9z
aXRlU291cmNlT3ZlciAmJiBoYXNBbHBoYSgpICYmIGlzMzJiaXQoKTsKLQotICAgIGludCBibXBX
aWR0aCA9IHdpZHRoKCk7Ci0gICAgaW50IGJtcEhlaWdodCA9IGhlaWdodCgpOwotCi0gICAgRmxv
YXRSZWN0IHRpbGVSZWN0KHRpbGVSZWN0SW4pOwotICAgIGlmIChibXBXaWR0aCAhPSBvcmlnU291
cmNlU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGRvdWJsZSByYXRlID0gc3RhdGljX2Nhc3Q8ZG91
YmxlPihibXBXaWR0aCkgLyBvcmlnU291cmNlU2l6ZS53aWR0aCgpOwotICAgICAgICBkb3VibGUg
dGVtcCA9IHRpbGVSZWN0LndpZHRoKCkgKiByYXRlOwotICAgICAgICB0aWxlUmVjdC5zZXRYKHRp
bGVSZWN0LngoKSAqIHJhdGUpOwotICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCh0ZW1wKTsKLSAg
ICAgICAgdGVtcCA9IHRpbGVSZWN0LmhlaWdodCgpICogcmF0ZTsKLSAgICAgICAgdGlsZVJlY3Qu
c2V0WSh0aWxlUmVjdC55KCkgKiByYXRlKTsKLSAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KHRl
bXApOwotICAgIH0KLQotICAgIEdESU9iamVjdDxIQklUTUFQPiBjbGlwcGVkQm1wOwotCi0gICAg
aWYgKHRpbGVSZWN0LngoKSB8fCB0aWxlUmVjdC55KCkgfHwgdGlsZVJlY3Qud2lkdGgoKSAhPSBi
bXBXaWR0aCB8fCB0aWxlUmVjdC5oZWlnaHQoKSAhPSBibXBIZWlnaHQpIHsKLSAgICAgICAgQml0
bWFwSW5mbyBwYXR0ZXJuQm1wSW5mbzsKLSAgICAgICAgdm9pZCogcGF0dGVyblBpeGVsczsKLSAg
ICAgICAgY2xpcHBlZEJtcCA9IGNsaXBCaXRtYXAoSW50UmVjdCh0aWxlUmVjdCksIHVzZUFscGhh
LCBwYXR0ZXJuQm1wSW5mbywgcGF0dGVyblBpeGVscyk7Ci0gICAgICAgIGlmICghY2xpcHBlZEJt
cCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBibXBXaWR0aCA9IHRpbGVSZWN0Lndp
ZHRoKCk7Ci0gICAgICAgIGJtcEhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpOwotICAgIH0KLQot
ICAgIEFmZmluZVRyYW5zZm9ybSB0ZiA9IHBhdHRlcm5UcmFuc2Zvcm0gKiB0cmFuc2Zvcm07Ci0K
LSAgICBGbG9hdFJlY3QgdHJSZWN0ID0gdGYubWFwUmVjdChkZXN0UmVjdCk7Ci0KLSAgICBSRUNU
IGNsaXBCb3g7Ci0gICAgaW50IGNsaXBUeXBlID0gR2V0Q2xpcEJveChoZGMsICZjbGlwQm94KTsK
LSAgICBpZiAoY2xpcFR5cGUgPT0gU0lNUExFUkVHSU9OKQotICAgICAgICB0clJlY3QuaW50ZXJz
ZWN0KEZsb2F0UmVjdChjbGlwQm94LmxlZnQsIGNsaXBCb3gudG9wLCBjbGlwQm94LnJpZ2h0IC0g
Y2xpcEJveC5sZWZ0LCBjbGlwQm94LmJvdHRvbSAtIGNsaXBCb3gudG9wKSk7Ci0gICAgZWxzZSBp
ZiAoY2xpcFR5cGUgPT0gQ09NUExFWFJFR0lPTikgewotICAgICAgICBhdXRvIGNsaXBSZ24gPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICBpZiAo
R2V0Q2xpcFJnbihoZGMsIGNsaXBSZ24uZ2V0KCkpID4gMCkgewotICAgICAgICAgICAgRFdPUkQg
cmVnaW9uRGF0YVNpemUgPSBHZXRSZWdpb25EYXRhKGNsaXBSZ24uZ2V0KCksIHNpemVvZihSR05E
QVRBKSwgMCk7Ci0gICAgICAgICAgICBpZiAocmVnaW9uRGF0YVNpemUpIHsKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8UkdOREFUQT4gcmVnaW9uRGF0YShyZWdpb25EYXRhU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgR2V0UmVnaW9uRGF0YShjbGlwUmduLmdldCgpLCByZWdpb25EYXRhU2l6ZSwgcmVn
aW9uRGF0YS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIFJFQ1QqIHJlY3QgPSByZWludGVycHJl
dF9jYXN0PFJFQ1QqPihyZWdpb25EYXRhWzBdLkJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZm9y
IChEV09SRCBpID0gMDsgaSA8IHJlZ2lvbkRhdGFbMF0ucmRoLm5Db3VudDsgKytpLCArK3JlY3Qp
Ci0gICAgICAgICAgICAgICAgICAgIHRyUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KHJlY3QtPmxl
ZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSBy
ZWN0LT50b3ApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0
clJlY3Qud2lkdGgoKSA8PSAwIHx8IHRyUmVjdC5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB0clJlY3QuaW5mbGF0ZSgxKTsKLSAgICBJbnRSZWN0IHZpc2libGVEc3RSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdCh0Zi5pbnZlcnNlKCkubWFwUmVjdCh0clJlY3QpKTsKLSAgICB2
aXNpYmxlRHN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChkZXN0UmVjdCkpOwotCi0gICAgaWYgKHZp
c2libGVEc3RSZWN0LndpZHRoKCkgPD0gMCB8fCB2aXNpYmxlRHN0UmVjdC5oZWlnaHQoKSA8PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0clJlY3QgPSB0Zi5tYXBSZWN0KHZpc2libGVEc3RS
ZWN0KTsKLSAgICBSRUNUIGRzdFJlY3RXaW4gPSB7Ci0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVj
dC54KCkpLAotICAgICAgICBzdGFibGVSb3VuZCh0clJlY3QueSgpKSwKLSAgICAgICAgc3RhYmxl
Um91bmQodHJSZWN0Lm1heFgoKSksCi0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC5tYXhZKCkp
LAotICAgIH07Ci0gICAgaWYgKGRzdFJlY3RXaW4ucmlnaHQgPD0gZHN0UmVjdFdpbi5sZWZ0IHx8
IGRzdFJlY3RXaW4uYm90dG9tIDw9IGRzdFJlY3RXaW4udG9wKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTSVpFIGJtcFNpemUgPSB7IGJtcFdpZHRoLCBibXBIZWlnaHQgfTsKLQotICAgIC8vIFJl
bGF0aXZlIHRvIGRlc3RpbmF0aW9uLCBpbiBiaXRtYXAgcGl4ZWxzCi0gICAgUE9JTlQgcGhhc2VX
aW4gPSB7IHN0YWJsZVJvdW5kKHZpc2libGVEc3RSZWN0LngoKSAtIHBoYXNlLngoKSksIHN0YWJs
ZVJvdW5kKHZpc2libGVEc3RSZWN0LnkoKSAtIHBoYXNlLnkoKSkgfTsKLSAgICBwaGFzZVdpbi54
ID0gbm9ybWFsaXplUGhhc2UocGhhc2VXaW4ueCwgYm1wU2l6ZS5jeCk7Ci0gICAgcGhhc2VXaW4u
eSA9IG5vcm1hbGl6ZVBoYXNlKHBoYXNlV2luLnksIGJtcFNpemUuY3kpOwotCi0gICAgUkVDVCBz
cmNSZWN0V2luID0gewotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBzdGFibGVSb3Vu
ZCh2aXNpYmxlRHN0UmVjdC5tYXhYKCkpIC0gc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueCgp
KSwKLSAgICAgICAgc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QubWF4WSgpKSAtIHN0YWJsZVJv
dW5kKHZpc2libGVEc3RSZWN0LnkoKSkKLSAgICB9OwotICAgIGlmIChzcmNSZWN0V2luLnJpZ2h0
IDw9IDAgfHwgc3JjUmVjdFdpbi5ib3R0b20gPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Qml0bWFwSW5mbyBibXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZShz
cmNSZWN0V2luLnJpZ2h0LCBzcmNSZWN0V2luLmJvdHRvbSksIHVzZUFscGhhID8gQml0bWFwSW5m
bzo6Qml0Q291bnQzMiA6IEJpdG1hcEluZm86OkJpdENvdW50MTYpOwotICAgIHZvaWQqIHBpeGVs
czsKLSAgICBhdXRvIGhibXBUZW1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9u
KDAsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpOwotCi0gICAgaWYg
KCFoYm1wVGVtcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBobWVtZGMgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhoZGMpKTsKLSAgICBIR0RJT0JKIG9sZEJtcCA9
IFNlbGVjdE9iamVjdChobWVtZGMuZ2V0KCksIGhibXBUZW1wLmdldCgpKTsKLSAgICBpZiAoY2xp
cHBlZEJtcCkKLSAgICAgICAgZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0
V2luLCBjbGlwcGVkQm1wLmdldCgpLCBwaGFzZVdpbik7Ci0gICAgZWxzZSBpZiAoKG9wICE9IENv
bXBvc2l0ZVNvdXJjZU92ZXIgfHwgY2FuVXNlRElCaXRzKCkpICYmIHNyY1JlY3RXaW4ucmlnaHQg
PD0gYm1wU2l6ZS5jeCAqIDIgJiYgc3JjUmVjdFdpbi5ib3R0b20gPD0gYm1wU2l6ZS5jeSAqIDIp
Ci0gICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwgdGhp
cywgYm1wU2l6ZSwgcGhhc2VXaW4pOwotICAgIGVsc2UgaWYgKGVuc3VyZUhhbmRsZSgpKQotICAg
ICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RXaW4sIGdldEhhbmRs
ZSgpLCBwaGFzZVdpbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZvaWQqIHBpeGVsczsKLSAgICAg
ICAgQml0bWFwSW5mbyBibXBJbmZvOwotICAgICAgICBhdXRvIGhibXAgPSBjcmVhdGVIYW5kbGUo
JnBpeGVscywgJmJtcEluZm8sIC0xLCBmYWxzZSk7Ci0gICAgICAgIGlmIChoYm1wKQotICAgICAg
ICAgICAgZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCBoYm1wLmdl
dCgpLCBwaGFzZVdpbik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2VsZWN0T2JqZWN0
KGhtZW1kYy5nZXQoKSwgb2xkQm1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICh1c2VBbHBoYSAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBCTEVOREZVTkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwg
MCwgMjU1LCBBQ19TUkNfQUxQSEEgfTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gYWxwaGFCbGVu
ZElmU3VwcG9ydGVkKGhkYywgZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2luLnRvcCwgZHN0UmVj
dFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwgZHN0UmVjdFdpbi5ib3R0b20gLSBkc3RSZWN0
V2luLnRvcCwKLSAgICAgICAgICAgIGhtZW1kYy5nZXQoKSwgMCwgMCwgc3JjUmVjdFdpbi5yaWdo
dCwgc3JjUmVjdFdpbi5ib3R0b20sIGJsZW5kKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsKLSAgICB9IGVsc2UgaWYgKHVzZUFscGhhICYmICFoYXNBbHBoYUJsZW5k
U3VwcG9ydCgpIHx8IG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgdXNlc1RyYW5zcGFyZW50
Q29sb3IoKSkgewotICAgICAgICBUcmFuc3BhcmVudEJsdChoZGMsIGRzdFJlY3RXaW4ubGVmdCwg
ZHN0UmVjdFdpbi50b3AsIGRzdFJlY3RXaW4ucmlnaHQgLSBkc3RSZWN0V2luLmxlZnQsCi0gICAg
ICAgICAgICBkc3RSZWN0V2luLmJvdHRvbSAtIGRzdFJlY3RXaW4udG9wLCBobWVtZGMuZ2V0KCks
IDAsIDAsIHNyY1JlY3RXaW4ucmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tLCB0cmFuc3BhcmVudENv
bG9yKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERXT1JEIGJtcE9wID0gb3AgPT0gQ29tcG9z
aXRlQ29weSA/IFNSQ0NPUFkKLSAgICAgICAgICAgICAgICAgICAgOiBvcCA9PSBDb21wb3NpdGVT
b3VyY2VPdmVyID8gU1JDQ09QWQotICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0
ZVhPUiA/IFBBVElOVkVSVAotICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0ZUNs
ZWFyID8gV0hJVEVORVNTCi0gICAgICAgICAgICAgICAgICAgIDogU1JDQ09QWTsgLy8gRklYRU1F
OiBvdGhlciB0eXBlcz8KLQotICAgICAgICBTdHJldGNoRElCaXRzKGhkYywgZHN0UmVjdFdpbi5s
ZWZ0LCBkc3RSZWN0V2luLnRvcCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwK
LSAgICAgICAgICAgIGRzdFJlY3RXaW4uYm90dG9tIC0gZHN0UmVjdFdpbi50b3AsIDAsIDAsIHNy
Y1JlY3RXaW4ucmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tLAotICAgICAgICAgICAgcGl4ZWxzLCAm
Ym1wSW5mbywgRElCX1JHQl9DT0xPUlMsIGJtcE9wKTsKLSAgICB9Ci0gICAgU2VsZWN0T2JqZWN0
KGhtZW1kYy5nZXQoKSwgb2xkQm1wKTsKLX0KLQotU2hhcmVkQml0bWFwOjpEQ1Byb3ZpZGVyKiBT
aGFyZWRCaXRtYXA6OnNfZGNQcm92aWRlciA9IG5ldyBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI7
Ci0KLUhEQyBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI6OmdldERDKFNoYXJlZEJpdG1hcCogYm1w
LCB1bnNpZ25lZCoga2V5KQotewotICAgIGlmICghYm1wIHx8ICFibXAtPmVuc3VyZUhhbmRsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhEQyBoZGMgPSBDcmVhdGVDb21wYXRpYmxlREMo
MCk7Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgKmtleSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KFNlbGVjdE9iamVjdChoZGMsIGJtcC0+Z2V0SGFuZGxlKCkp
KTsKLSAgICBSRUNUIHJlY3QgPSB7IDAsIDAsIGJtcC0+d2lkdGgoKSwgYm1wLT5oZWlnaHQoKSB9
OwotICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbkluZGly
ZWN0KCZyZWN0KSk7Ci0gICAgU2VsZWN0Q2xpcFJnbihoZGMsIGNsaXBSZ24uZ2V0KCkpOwotCi0g
ICAgcmV0dXJuIGhkYzsKLX0KLQotdm9pZCBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI6OnJlbGVh
c2VEQyhTaGFyZWRCaXRtYXAqLCBIREMgaGRjLCB1bnNpZ25lZCBrZXkxKQotewotICAgIGlmICgh
aGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRjLCByZWludGVycHJl
dF9jYXN0PEhHRElPQko+KGtleTEpKTsKLSAgICBEZWxldGVEQyhoZGMpOwotfQotCi12b2lkIFNo
YXJlZEJpdG1hcDo6Y2xlYXJQaXhlbHMoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
IW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGJtcFJlY3QoMCwgMCwg
d2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgIGJtcFJlY3QuaW50ZXJzZWN0KHJlY3QpOwotICAgIGlm
IChpczE2Yml0KCkpIHsKLSAgICAgICAgdW5zaWduZWQgdyA9IG1fYm1wSW5mby5wYWRkZWRXaWR0
aCgpOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihtX3BpeGVscyk7Ci0gICAgICAgIGRzdCArPSBibXBSZWN0LnkoKSAqIHcgKyBibXBS
ZWN0LngoKTsKLSAgICAgICAgaW50IHdvcmRzVG9TZXQgPSBibXBSZWN0LndpZHRoKCk7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBkc3RFbmQgPSBkc3QgKyBibXBSZWN0LmhlaWdodCgp
ICogdzsKLSAgICAgICAgd2hpbGUgKGRzdCA8IGRzdEVuZCkgewotICAgICAgICAgICAgd21lbXNl
dChyZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihkc3QpLCAwLCB3b3Jkc1RvU2V0KTsKLSAgICAg
ICAgICAgIGRzdCArPSB3OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCB3ID0gd2lkdGgoKTsKLSAgICB1bnNpZ25lZCogZHN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQqPihtX3BpeGVscyk7Ci0gICAgZHN0ICs9IGJtcFJlY3QueSgpICogdyArIGJtcFJl
Y3QueCgpOwotICAgIGludCB3b3Jkc1RvU2V0ID0gYm1wUmVjdC53aWR0aCgpICogMjsKLSAgICBj
b25zdCB1bnNpZ25lZCogZHN0RW5kID0gZHN0ICsgYm1wUmVjdC5oZWlnaHQoKSAqIHc7Ci0gICAg
d2hpbGUgKGRzdCA8IGRzdEVuZCkgewotICAgICAgICB3bWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8
d2NoYXJfdCo+KGRzdCksIDAsIHdvcmRzVG9TZXQpOwotICAgICAgICBkc3QgKz0gdzsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGI2ODk1YjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBH
YW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNoYXJlZEJp
dG1hcF9oCi0jZGVmaW5lIFNoYXJlZEJpdG1hcF9oCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQ
b2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIElu
dFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci0KLWNs
YXNzIFNoYXJlZEJpdG1hcDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQml0bWFwPiB7Ci1wdWJs
aWM6Ci0gICAgflNoYXJlZEJpdG1hcCgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJp
dG1hcD4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBCaXRtYXBJbmZvOjpCaXRDb3VudCA9IEJpdG1h
cEluZm86OkJpdENvdW50MzIsIGJvb2wgaW5pdFBpeGVscyA9IHRydWUpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mLCBj
b25zdCBJbnRTaXplJiwgYm9vbCBoYXNBbHBoYSA9IHRydWUpOwotCi0gICAgY29uc3QgQml0bWFw
SW5mbyYgYml0bWFwSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mbzsgfQotICAgIHZvaWQq
IGJ5dGVzKCkgeyByZXR1cm4gbV9waXhlbHM7IH0KLSAgICBjb25zdCB2b2lkKiBieXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGl4ZWxzOyB9Ci0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2JtcEluZm8ud2lkdGgoKTsgfQotICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fYm1wSW5mby5oZWlnaHQoKTsgfQotICAgIHVuc2lnbmVkIHZhbGlkSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV92YWxpZEhlaWdodDsgfQotICAgIHZvaWQgc2V0VmFsaWRIZWlnaHQo
dW5zaWduZWQgdmFsaWRIZWlnaHQpIHsgbV92YWxpZEhlaWdodCA9IHZhbGlkSGVpZ2h0OyB9Ci0g
ICAgdm9pZCByZXNldFBpeGVscyhib29sIGJsYWNrID0gZmFsc2UpOwotICAgIHZvaWQgY2xlYXJQ
aXhlbHMoY29uc3QgSW50UmVjdCYgcik7Ci0gICAgYm9vbCBsb2NrZWQoKSBjb25zdCB7IHJldHVy
biBtX2xvY2tlZDsgfQotICAgIHZvaWQgbG9jaygpIHsgbV9sb2NrZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCB1bmxvY2soKSB7IG1fbG9ja2VkID0gZmFsc2U7IH0KLSAgICBib29sIGZyZWVNZW1vcnko
KTsKLSAgICBib29sIGlzMTZiaXQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8uaXMxNmJpdCgp
OyB9Ci0gICAgYm9vbCBpczMyYml0KCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvLmlzMzJiaXQo
KTsgfQotICAgIGJvb2wgdG8xNmJpdCgpOwotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0FscGhhOyB9Ci0gICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1f
aGFzQWxwaGEgPSBhbHBoYTsgfQotICAgIGJvb2wgZW5zdXJlSGFuZGxlKCk7Ci0gICAgSEJJVE1B
UCBnZXRIYW5kbGUoKSB7IHJldHVybiBtX2hiaXRtYXAuZ2V0KCk7IH0KLSAgICBHRElPYmplY3Q8
SEJJVE1BUD4gY3JlYXRlSGFuZGxlKHZvaWQqKiBwaXhlbHMsIEJpdG1hcEluZm8qIGJtcEluZm8s
IGludCBoID0gLTEsIGJvb2wgdXNlMTZiaXQgPSB0cnVlKSBjb25zdDsKLSAgICBib29sIHVzZXNU
cmFuc3BhcmVudENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV91c2VzVHJhbnNwYXJlbnRDb2xvcjsg
fQotICAgIENPTE9SUkVGIHRyYW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cGFyZW50Q29sb3I7IH0KLSAgICB2b2lkIHNldFRyYW5zcGFyZW50Q29sb3IoQ09MT1JSRUYgYykK
LSAgICB7Ci0gICAgICAgIG1fdXNlc1RyYW5zcGFyZW50Q29sb3IgPSB0cnVlOwotICAgICAgICBt
X3RyYW5zcGFyZW50Q29sb3IgPSBjOwotICAgIH0KLSAgICBib29sIGNhblVzZURJQml0cygpIGNv
bnN0IHsgcmV0dXJuICFoYXNBbHBoYSgpICYmICF1c2VzVHJhbnNwYXJlbnRDb2xvcigpOyB9Ci0K
LSAgICBHRElPYmplY3Q8SEJJVE1BUD4gY2xpcEJpdG1hcChjb25zdCBJbnRSZWN0JiwgYm9vbCB1
c2VBbHBoYSwgQml0bWFwSW5mbyYsIHZvaWQqJiBwaXhlbHMpOwotCi0gICAgUGFzc1JlZlB0cjxT
aGFyZWRCaXRtYXA+IGNsaXBCaXRtYXAoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBo
YSk7Ci0KLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBJbnRSZWN0
JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUp
OwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwotICAgIHZvaWQgZHJh
dyhIREMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKTsKLSAgICB2
b2lkIGRyYXdQYXR0ZXJuKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKLQotICAgIGNsYXNzIERD
UHJvdmlkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBIREMgZ2V0REMoU2hhcmVk
Qml0bWFwKiwgdW5zaWduZWQqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VEQyhTaGFy
ZWRCaXRtYXAqLCBIREMsIHVuc2lnbmVkKTsKLSAgICB9OwotCi0gICAgc3RhdGljIERDUHJvdmlk
ZXIqIHNfZGNQcm92aWRlcjsKLQotICAgIEhEQyBnZXREQyh1bnNpZ25lZCoga2V5MSkgeyByZXR1
cm4gc19kY1Byb3ZpZGVyLT5nZXREQyh0aGlzLCBrZXkxKTsgfQotICAgIHZvaWQgcmVsZWFzZURD
KEhEQyBoZGMsIHVuc2lnbmVkIGtleTEpIHsgc19kY1Byb3ZpZGVyLT5yZWxlYXNlREModGhpcywg
aGRjLCBrZXkxKTsgfQotCi0gICAgY2xhc3MgRENIb2xkZXIgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgRENIb2xkZXIoU2hhcmVkQml0bWFwKiBibXAgPSAwKSB7IHNldEludGVybmFsKGJtcCk7IH0K
LSAgICAgICAgfkRDSG9sZGVyKCkgeyBjbGVhckludGVybmFsKCk7IH0KLSAgICAgICAgdm9pZCBz
ZXQoU2hhcmVkQml0bWFwKiBibXAgPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhcklu
dGVybmFsKCk7Ci0gICAgICAgICAgICBzZXRJbnRlcm5hbChibXApOwotICAgICAgICB9Ci0gICAg
ICAgIEhEQyBnZXQoKSBjb25zdCB7IHJldHVybiBtX2hkYzsgfQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIERDSG9sZGVyJiBvcGVyYXRvcj0oY29uc3QgRENIb2xkZXImKTsKLSAgICAgICAgRENIb2xk
ZXIoY29uc3QgRENIb2xkZXImKTsKLSAgICAgICAgdm9pZCBjbGVhckludGVybmFsKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1faGRjKQotICAgICAgICAgICAgICAgIG1fYml0bWFwLT5y
ZWxlYXNlREMobV9oZGMsIG1fa2V5KTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHNldEludGVy
bmFsKFNoYXJlZEJpdG1hcCogYm1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JpdG1hcCA9
IGJtcDsKLSAgICAgICAgICAgIG1faGRjID0gYm1wID8gYm1wLT5nZXREQygmbV9rZXkpIDogMDsK
LSAgICAgICAgfQotICAgICAgICBTaGFyZWRCaXRtYXAqIG1fYml0bWFwOwotICAgICAgICBIREMg
bV9oZGM7Ci0gICAgICAgIHVuc2lnbmVkIG1fa2V5OwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAg
U2hhcmVkQml0bWFwKGNvbnN0IEludFNpemUmLCBCaXRtYXBJbmZvOjpCaXRDb3VudCwgYm9vbCBp
bml0UGl4ZWxzKTsKLSAgICBCaXRtYXBJbmZvIG1fYm1wSW5mbzsKLSAgICBHRElPYmplY3Q8SEJJ
VE1BUD4gbV9oYml0bWFwOwotICAgIHZvaWQqIG1fcGl4ZWxzOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjx1bnNpZ25lZFtdPiBtX3BpeGVsRGF0YTsKLSAgICBDT0xPUlJFRiBtX3RyYW5zcGFyZW50Q29s
b3I7Ci0gICAgaW50IG1fdmFsaWRIZWlnaHQ7Ci0gICAgYm9vbCBtX2xvY2tlZDsKLSAgICBib29s
IG1fdXNlc1RyYW5zcGFyZW50Q29sb3I7Ci0gICAgYm9vbCBtX2hhc0FscGhhOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2hhcmVkQml0bWFwX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRh
V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxl
Rm9udERhdGFXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjhmOGMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2lt
cGxlRm9udERhdGFXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlIDxtbGFuZy5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhEQyBnX3NjcmVl
bkRDOwotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICgh
bV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBU
RVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRhLm1ldHJpY3MoKTsKLSAgICBtX2lzU3lzdGVt
Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmlzU3lzdGVtRm9udCgpOwotCi0gICAgZmxvYXQgYXNjZW50
ID0gKHRtLnRtQXNjZW50ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzIuMGY7Ci0g
ICAgZmxvYXQgZGVzY2VudCA9ICh0bS50bURlc2NlbnQgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkg
KyAzNikgLyA3Mi4wZjsKLSAgICBmbG9hdCBsaW5lR2FwID0gKHRtLnRtRXh0ZXJuYWxMZWFkaW5n
ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzIuMGY7Ci0gICAgbV9mb250TWV0cmlj
cy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2Vu
dCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSAr
IGxyb3VuZGYobGluZUdhcCkpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChhc2NlbnQg
KiAwLjU2Zik7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2MoZm9udERlc2NyaXB0aW9uKTsKLSAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUobHJv
dW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNjLmNvbXB1dGVkU2l6ZSgpKSk7Ci0gICAgZm9udERl
c2Muc2V0U3BlY2lmaWVkU2l6ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2Muc3BlY2lm
aWVkU2l6ZSgpKSk7Ci0gICAgZm9udERlc2Muc2V0S2V5d29yZFNpemUobHJvdW5kZihzY2FsZUZh
Y3RvciAqIGZvbnREZXNjLmtleXdvcmRTaXplKCkpKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBy
ZXN1bHQgPSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjLCBt
X3BsYXRmb3JtRGF0YS5mYW1pbHkoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKCpyZXN1bHQpOwotfQotCi1E
V09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKLQotYm9v
bCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAgIGlmIChtX3BsYXRmb3JtRGF0YS5pc0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRklYTUU6IE1pY3Jvc29mdCBk
b2N1bWVudGF0aW9uIHNlZW1zIHRvIGltcGx5IHRoYXQgY2hhcmFjdGVycyBjYW4gYmUgb3V0cHV0
IHVzaW5nIGEgZ2l2ZW4gZm9udCBhbmQgREMKLSAgICAvLyBtZXJlbHkgYnkgdGVzdGluZyBjb2Rl
IHBhZ2UgaW50ZXJzZWN0aW9uLiAgVGhpcyBzZWVtcyBzdXNwZWN0IHRob3VnaC4gIENhbid0IGEg
Zm9udCBvbmx5IHBhcnRpYWxseQotICAgIC8vIGNvdmVyIGEgZ2l2ZW4gY29kZSBwYWdlPwotCi0g
ICAgLy8gRklYTUU6IGluIHRoZSBjYXNlIHRoYXQgd2UgZmFpbGVkIHRvIGdldCB0aGUgaW50ZXJm
YWNlLCBzdGlsbCB1c2UgdGhlIGZvbnQuCi0gICAgSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9u
dExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0ludGVyZmFjZSgpOwotICAgIGlmICghbGFu
Z0ZvbnRMaW5rKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIERXT1JEIGZvbnRDb2RlUGFn
ZXMgPSBtX3BsYXRmb3JtRGF0YS5jb2RlUGFnZXMoKTsKLSAgICBpZiAoIWZvbnRDb2RlUGFnZXMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERXT1JEIGFjcENvZGVQYWdlcyA9IDA7Ci0g
ICAgbGFuZ0ZvbnRMaW5rLT5Db2RlUGFnZVRvQ29kZVBhZ2VzKENQX0FDUCwgJmFjcENvZGVQYWdl
cyk7Ci0KLSAgICBEV09SRCBhY3R1YWxDb2RlUGFnZXM7Ci0gICAgbG9uZyBudW1DaGFyYWN0ZXJz
UHJvY2Vzc2VkOwotICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5H
ZXRTdHJDb2RlUGFnZXMoY2hhcmFjdGVycywgbGVuZ3RoLCBhY3BDb2RlUGFnZXMsICZhY3R1YWxD
b2RlUGFnZXMsICZudW1DaGFyYWN0ZXJzUHJvY2Vzc2VkKTsKLSAgICAgICAgaWYgKGFjdHVhbENv
ZGVQYWdlcyAmJiAhKGFjdHVhbENvZGVQYWdlcyAmIGZvbnRDb2RlUGFnZXMpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGxlbmd0aCAtPSBudW1DaGFyYWN0ZXJzUHJvY2Vz
c2VkOwotICAgICAgICBjaGFyYWN0ZXJzICs9IG51bUNoYXJhY3RlcnNQcm9jZXNzZWQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWlu
ZVBpdGNoKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgVEVYVE1FVFJJQyYgdG0gPSBtX3BsYXRmb3JtRGF0YS5tZXRy
aWNzKCk7Ci0KLSAgICAvLyBZZXMsIHRoaXMgbG9va3MgYmFja3dhcmRzLCBidXQgdGhlIGZpeGVk
IHBpdGNoIGJpdCBpcyBhY3R1YWxseSBzZXQgaWYgdGhlIGZvbnQKLSAgICAvLyBpcyAqbm90KiBm
aXhlZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBidXQgdHJ1ZS4KLSAgICBtX3RyZWF0QXNGaXhlZFBp
dGNoID0gISh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9QSVRDSCk7Ci19Ci0KLUZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29u
c3QKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0gICAgCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlm
IChtX3BsYXRmb3JtRGF0YS5pc0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
SEdESU9CSiBoT2xkRm9udCA9IFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBtX3BsYXRmb3JtRGF0
YS5oZm9udCgpKTsKLQotICAgIFNJWkUgZm9udFNpemU7Ci0gICAgd2NoYXJfdCBjID0gZ2x5cGg7
Ci0gICAgR2V0VGV4dEV4dGVudFBvaW50MzIoZ19zY3JlZW5EQywgJmMsIDEsICZmb250U2l6ZSk7
Ci0KLSAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgaE9sZEZvbnQpOwotCi0gICAgcmV0dXJu
IChmbG9hdClmb250U2l6ZS5jeCAqIChmbG9hdCltX3BsYXRmb3JtRGF0YS5zaXplKCkgLyA3Mi5m
OwotfQotCi0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17
Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IFRFWFRNRVRSSUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOwotICAg
IG1fYXZnQ2hhcldpZHRoID0gKHRtLnRtQXZlQ2hhcldpZHRoICogbV9wbGF0Zm9ybURhdGEuc2l6
ZSgpICsgMzYpIC8gNzI7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAodG0udG1NYXhDaGFyV2lkdGgg
KiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3MjsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0Y2FiMjFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZm5kZWYgV2luQ0VHcmFwaGljc0V4dHJhc19oCi0jZGVmaW5lIFdpbkNF
R3JhcGhpY3NFeHRyYXNfaAotCi0vLyBUaGlzIGZpbGUgaXMgdXNlZCB0byBjb250YWluIHNtYWxs
IHV0aWxpdGllcyB1c2VkIGJ5IFdJTkNFIGdyYXBoaWNzIGNvZGUuCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAvLyBBbHdheXMgcm91bmQgdG8gc2FtZSBkaXJlY3Rpb24uIDAuNSBpcyByb3Vu
ZGVkIHRvIDEsCi0gICAgLy8gYW5kIC0wLjUgKDAuNSAtIDEpIGlzIHJvdW5kZWQgdG8gMCAoMSAt
IDEpLCBzbyB0aGF0IGl0Ci0gICAgLy8gaXMgY29uc2lzdGVudCB3aGVuIHRyYW5zZm9ybWF0aW9u
IHNoaWZ0cy4KLSAgICBzdGF0aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKLSAg
ICB7Ci0gICAgICAgIGlmIChkID4gMCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KGQgKyAwLjUpOwotCi0gICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKLSAg
ICAgICAgcmV0dXJuIGkgLSBkID4gMC41ID8gaSAtIDEgOiBpOwotICAgIH0KLX0KLQotI2VuZGlm
IFdpbkNFR3JhcGhpY3NFeHRyYXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAppbmRleCBh
NGZhNmQxLi41ZmM4YzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMzEsMTUg
KzMxLDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPiAvLyBOZWVkZWQgYnkganBlZ2xpYi5oIGZvciBG
SUxFLgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAotI2lmIE9TKFdJTkNFKQotLy8gUmVtb3Zl
IHdhcm5pbmc6ICdGQVInIG1hY3JvIHJlZGVmaW5pdGlvbgotI3VuZGVmIEZBUgotCi0vLyBqbW9y
ZWNmZy5oIGluIGxpYmpwZWcgY2hlY2tzIGZvciBYTURfSCB3aXRoIHRoZSBjb21tZW50OiAiWDEx
L3htZC5oIGNvcnJlY3RseSBkZWZpbmVzIElOVDMyIgotLy8gZml4IElOVDMyIHJlZGVmaW5pdGlv
biBlcnJvciBieSBwcmV0ZW5kaW5nIHdlIGFyZSBYMTEveG1kLmgKLSNkZWZpbmUgWE1EX0gKLSNl
bmRpZgotCiBleHRlcm4gIkMiIHsKICNpbmNsdWRlICJqcGVnbGliLmgiCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmll
cldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3Rh
dGVOb3RpZmllcldpbi5jcHAKaW5kZXggZGRlZGFiZi4uMGE1MWYxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0
ZU5vdGlmaWVyV2luLmNwcApAQCAtMTA3LDE0ICsxMDcsMTEgQEAgTmV0d29ya1N0YXRlTm90aWZp
ZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKIAogICAgIG1lbXNldCgmbV9vdmVybGFwcGVkLCAw
LCBzaXplb2YobV9vdmVybGFwcGVkKSk7CiAKLS8vIEZJWE1FOiBDaGVjayBtX292ZXJsYXBwZWQg
b24gV2luQ0UuCi0jaWYgIU9TKFdJTkNFKQogICAgIG1fb3ZlcmxhcHBlZC5oRXZlbnQgPSA6OkNy
ZWF0ZUV2ZW50KDAsIGZhbHNlLCBmYWxzZSwgMCk7CiAKICAgICA6OlJlZ2lzdGVyV2FpdEZvclNp
bmdsZU9iamVjdCgmbV93YWl0SGFuZGxlLCBtX292ZXJsYXBwZWQuaEV2ZW50LCBhZGRyQ2hhbmdl
Q2FsbGJhY2ssIHRoaXMsIElORklOSVRFLCAwKTsKIAogICAgIHJlZ2lzdGVyRm9yQWRkcmVzc0No
YW5nZSgpOwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9DT01QdHIuaAppbmRleCA3NDA0ODU0Li5jNmIyZTk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NPTVB0ci5oCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KIAotI2lmICFPUyhXSU5D
RSkKLSNpbmNsdWRlIDxndWlkZGVmLmg+Ci0jZW5kaWYKLQogdHlwZWRlZiBsb25nIEhSRVNVTFQ7
CiAKIC8vIEZJWE1FOiBTaG91bGQgd2UgcHV0IHRoaXMgaW50byB0aGUgV2ViQ29yZSBuYW1lc3Bh
Y2UgYW5kIHVzZSAidXNpbmciIG9uIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IDJiY2NmMWEuLjdmZGM2Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGls
aXRpZXNXaW4uY3BwCkBAIC0zMSwxNCArMzEsMTIgQEAKICNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDxzaGxvYmouaD4KKyNpbmNsdWRlIDxz
aGx3YXBpLmg+CiAjaW5jbHVkZSA8d2luaW5ldC5oPiAvLyBmb3IgSU5URVJORVRfTUFYX1VSTF9M
RU5HVEgKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmICFP
UyhXSU5DRSkKLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0jZW5kaWYKIAogI2lmIFVTRShDRikKICNp
bmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51SXRlbVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcAppbmRleCA1Zjk1NWJm
Li43YjQxZTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4
dE1lbnVJdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4
dE1lbnVJdGVtV2luLmNwcApAQCAtMjgsMTAgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvbnRleHRN
ZW51LmgiCiAKLSNpZiBPUyhXSU5DRSkKLSNpZm5kZWYgTUZTX0RJU0FCTEVECi0jZGVmaW5lIE1G
U19ESVNBQkxFRCBNRl9HUkFZRUQKLSNlbmRpZgogI2lmbmRlZiBNSUlNX0ZUWVBFCiAjZGVmaW5l
IE1JSU1fRlRZUEUgTUlJTV9UWVBFCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCmluZGV4IDM3NTVmMjQuLjQ1MDQ3ZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcApAQCAtNTIsOSAr
NTIsNiBAQCBDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoSE1FTlUgbWVudSkKIAogdm9pZCBDb250
ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVtcyhITUVOVSBtZW51LCBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtPiYgaXRlbXMpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSNlbHNlCiAgICAgaW50IGNvdW50ID0gOjpHZXRNZW51SXRlbUNvdW50KG1lbnUpOwogICAgIGlm
IChjb3VudCA8PSAwKQogICAgICAgICByZXR1cm47CkBAIC04MCw3ICs3Nyw2IEBAIHZvaWQgQ29u
dGV4dE1lbnU6OmdldENvbnRleHRNZW51SXRlbXMoSE1FTlUgbWVudSwgVmVjdG9yPENvbnRleHRN
ZW51SXRlbT4mIGl0ZW1zCiAgICAgICAgIGlmICg6OkdldE1lbnVJdGVtSW5mbyhtZW51LCBpLCBU
UlVFLCAmaW5mbykpCiAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChDb250ZXh0TWVudUl0ZW0oaW5m
bykpOwogICAgIH0KLSNlbmRpZgogfQogCiBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZv
cm1Db250ZXh0TWVudUZyb21JdGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRl
bXMpCkBAIC05MiwzMSArODgsNiBAQCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1D
b250ZXh0TWVudUZyb21JdGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogCiAgICAgICAg
IE1FTlVJVEVNSU5GTyBtZW51SXRlbSA9IGl0ZW0ucGxhdGZvcm1Db250ZXh0TWVudUl0ZW0oKTsK
IAotI2lmIE9TKFdJTkNFKQotICAgICAgICBVSU5UIGZsYWdzID0gTUZfQllQT1NJVElPTjsKLSAg
ICAgICAgVUlOVCBuZXdJdGVtID0gMDsKLSAgICAgICAgTFBDV1NUUiB0aXRsZSA9IDA7Ci0KLSAg
ICAgICAgaWYgKGl0ZW0udHlwZSgpID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgICAgICBmbGFn
cyB8PSBNRl9TRVBBUkFUT1I7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxhZ3MgfD0g
TUZfU1RSSU5HOwotICAgICAgICAgICAgZmxhZ3MgfD0gaXRlbS5jaGVja2VkKCkgPyBNRl9DSEVD
S0VEIDogTUZfVU5DSEVDS0VEOwotICAgICAgICAgICAgZmxhZ3MgfD0gaXRlbS5lbmFibGVkKCkg
PyBNRl9FTkFCTEVEIDogTUZfR1JBWUVEOwotCi0gICAgICAgICAgICB0aXRsZSA9IG1lbnVJdGVt
LmR3VHlwZURhdGE7Ci0gICAgICAgICAgICBtZW51SXRlbS5kd1R5cGVEYXRhID0gMDsKLQotICAg
ICAgICAgICAgaWYgKG1lbnVJdGVtLmhTdWJNZW51KSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gTUZfUE9QVVA7Ci0gICAgICAgICAgICAgICAgbmV3SXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VUlOVD4obWVudUl0ZW0uaFN1Yk1lbnUpOwotICAgICAgICAgICAgICAgIG1lbnVJdGVtLmhTdWJN
ZW51ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBt
ZW51SXRlbS53SUQ7Ci0gICAgICAgIH0KLQotICAgICAgICA6Okluc2VydE1lbnVXKG1lbnUsIGks
IGZsYWdzLCBuZXdJdGVtLCB0aXRsZSk7Ci0jZWxzZQogICAgICAgICAvLyBDb250ZXh0TWVudUl0
ZW06OnBsYXRmb3JtQ29udGV4dE1lbnVJdGVtIGRvZXNuJ3Qgc2V0IHRoZSB0aXRsZSBvZiB0aGUg
TUVOVUlURU1JTkZPIHRvIG1ha2UgdGhlCiAgICAgICAgIC8vIGxpZmV0aW1lIGhhbmRsaW5nIGVh
c2llciBmb3IgY2FsbGVycy4KICAgICAgICAgVmVjdG9yPFVDaGFyPiB3aWRlQ2hhclRpdGxlOyAv
LyBSZXRhaW4gYnVmZmVyIGZvciBsb25nIGVub3VnaCB0byBtYWtlIHRoZSBJbnNlcnRNZW51SXRl
bSBjYWxsCkBAIC0xMzAsNyArMTAxLDYgQEAgSE1FTlUgQ29udGV4dE1lbnU6OmNyZWF0ZVBsYXRm
b3JtQ29udGV4dE1lbnVGcm9tSXRlbXMoY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXQKICAgICAg
ICAgfQogCiAgICAgICAgIDo6SW5zZXJ0TWVudUl0ZW0obWVudSwgaSwgVFJVRSwgJm1lbnVJdGVt
KTsKLSNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBtZW51OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCAwZDhkNDQxLi5iNWE4MDdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMTA1LDcg
KzEwNSw2IEBAIGNvbnN0IGZsb2F0IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsKIHN0YXRpYyBG
b250IGRyYWdMYWJlbEZvbnQoaW50IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKIHsKICAgICBGb250IHJlc3VsdDsKLSNpZiAhT1MoV0lOQ0UpCiAgICAg
Tk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwogICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1l
dHJpY3MpOwogICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNT
LCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJpY3MsIDApOwpAQCAtMTE4LDcgKzExNyw2IEBAIHN0YXRp
YyBGb250IGRyYWdMYWJlbEZvbnQoaW50IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSkKICAgICBkZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHJlbmRl
cmluZ01vZGUpOwogICAgIHJlc3VsdCA9IEZvbnQoZGVzY3JpcHRpb24sIDAsIDApOwogICAgIHJl
c3VsdC51cGRhdGUoMCk7Ci0jZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggYzY1MjkzZC4u
NWQ0OWI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcApAQCAtMTU2LDE5ICsxNTYsNiBAQCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkKIAogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewotI2lmIE9TKFdJTkNFKQot
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgIGJ1aWxkZXIuYXBwZW5kKHBhdGgpOwot
Ci0gICAgVUNoYXIgbGFzdFBhdGhDaGFyYWN0ZXIgPSBwYXRoW3BhdGgubGVuZ3RoKCkgLSAxXTsK
LSAgICBpZiAobGFzdFBhdGhDaGFyYWN0ZXIgIT0gTCdcXCcgJiYgbGFzdFBhdGhDaGFyYWN0ZXIg
IT0gTCcvJyAmJiBjb21wb25lbnRbMF0gIT0gTCdcXCcgJiYgY29tcG9uZW50WzBdICE9IEwnLycp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKFBsYXRmb3JtRmlsZVBhdGhTZXBhcmF0b3IpOwotCi0g
ICAgYnVpbGRlci5hcHBlbmQoY29tcG9uZW50KTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Ci0jZWxzZQogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKIAogICAg
IGlmIChwYXRoLmxlbmd0aCgpICsgMSA+IGJ1ZmZlci5zaXplKCkpCkBAIC0xODMsNyArMTcwLDYg
QEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgY29tcG9uZW50KQogICAgIGJ1ZmZlci5zaHJpbmsod2NzbGVuKGJ1ZmZlci5k
YXRhKCkpKTsKIAogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci0jZW5kaWYKIH0K
IAogI2lmICFVU0UoQ0YpCkBAIC0yMjYsMjQgKzIxMiw3IEBAIFN0cmluZyBob21lRGlyZWN0b3J5
UGF0aCgpCiAKIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewot
I2lmIE9TKFdJTkNFKQotICAgIHNpemVfdCBwb3NpdGlvblNsYXNoID0gcGF0aC5yZXZlcnNlRmlu
ZCgnLycpOwotICAgIHNpemVfdCBwb3NpdGlvbkJhY2tzbGFzaCA9IHBhdGgucmV2ZXJzZUZpbmQo
J1xcJyk7Ci0KLSAgICBzaXplX3QgcG9zaXRpb247Ci0gICAgaWYgKHBvc2l0aW9uU2xhc2ggPT0g
bm90Rm91bmQpCi0gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25CYWNrc2xhc2g7Ci0gICAgZWxz
ZSBpZiAocG9zaXRpb25CYWNrc2xhc2ggPT0gbm90Rm91bmQpCi0gICAgICAgIHBvc2l0aW9uID0g
IHBvc2l0aW9uU2xhc2g7Ci0gICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHN0ZDo6bWF4KHBv
c2l0aW9uU2xhc2gsIHBvc2l0aW9uQmFja3NsYXNoKTsKLQotICAgIGlmIChwb3NpdGlvbiA9PSBu
b3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgcmV0dXJuIHBhdGguc3Vic3RyaW5n
KHBvc2l0aW9uICsgMSk7Ci0jZWxzZQogICAgIHJldHVybiBTdHJpbmcoOjpQYXRoRmluZEZpbGVO
YW1lKFN0cmluZyhwYXRoKS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkp
OwotI2VuZGlmCiB9CiAKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
QEAgLTI3OCw5ICsyNDcsNiBAQCBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogCiBzdGF0aWMg
U3RyaW5nIHN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCiB7Ci0jaWYgT1Mo
V0lOQ0UpCi0gICAgcmV0dXJuIFN0cmluZygpOwotI2Vsc2UKICAgICBWZWN0b3I8VUNoYXI+IGJ1
ZmZlcihNQVhfUEFUSCk7CiAgICAgaWYgKEZBSUxFRChTSEdldEZvbGRlclBhdGhXKDAsIHBhdGhJ
ZGVudGlmaWVyIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGJ1ZmZlci5kYXRhKCkpKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMjkzLDcgKzI1OSw2IEBAIHN0YXRpYyBTdHJpbmcg
c3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCiAgICAgcmV0dXJuIGRpcmVjdG9yeTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3Ry
aW5nIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAKaW5kZXggMmZhZTc3OC4uZjM2YTE0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcApAQCAtMzgs
OSArMzgsNiBAQCBzdGF0aWMgY2hhciAqIGNvbnN0IGxvZ2dpbmdFbnZpcm9ubWVudFZhcmlhYmxl
ID0gIldlYkNvcmVMb2dnaW5nIjsKIAogU3RyaW5nIGxvZ0xldmVsU3RyaW5nKCkKIHsKLSNpZiBP
UyhXSU5DRSkKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSNlbHNlCiAgICAgRFdPUkQgbGVu
Z3RoID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEobG9nZ2luZ0Vudmlyb25tZW50VmFyaWFibGUs
IDAsIDApOwogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
QEAgLTUxLDcgKzQ4LDYgQEAgU3RyaW5nIGxvZ0xldmVsU3RyaW5nKCkKICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5nZXQoKSk7Ci0jZW5k
aWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IGNlNWE3ZTIuLmMyYTA3NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTc5LDEyICs3
OSwxMCBAQCBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQYXN0ZWJvYXJkT3duZXJXbmRQcm9jKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gdwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFdNX0RFU1RST1k6CiAgICAgICAgIGJyZWFrOwotI2lmICFPUyhXSU5DRSkKICAgICBjYXNlIFdN
X0RSQVdDTElQQk9BUkQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fQ0hBTkdFQ0JDSEFJ
TjoKICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBscmVzdWx0
ID0gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAg
IGJyZWFrOwpAQCAtOTYsMTAgKzk0LDggQEAgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQogewogICAgIE93blB0cjxQYXN0ZWJvYXJkPiBw
YXN0ZWJvYXJkID0gYWRvcHRQdHIobmV3IFBhc3RlYm9hcmQpOwogICAgIENPTVB0cjxJRGF0YU9i
amVjdD4gY2xpcGJvYXJkRGF0YTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYgKCFTVUNDRUVERUQo
T2xlR2V0Q2xpcGJvYXJkKCZjbGlwYm9hcmREYXRhKSkpCiAgICAgICAgIGNsaXBib2FyZERhdGEg
PSAwOwotI2VuZGlmCiAgICAgcGFzdGVib2FyZC0+c2V0RXh0ZXJuYWxEYXRhT2JqZWN0KGNsaXBi
b2FyZERhdGEuZ2V0KCkpOwogICAgIHJldHVybiBwYXN0ZWJvYXJkLnJlbGVhc2UoKTsKIH0KQEAg
LTUyNSw3ICs1MjEsNiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbAogICAgIHdyaXRlUGxhaW5U
ZXh0VG9EYXRhT2JqZWN0KHRleHQsIHNtYXJ0UmVwbGFjZU9wdGlvbik7CiB9CiAKLSNpZiAhT1Mo
V0lOQ0UpCiBzdGF0aWMgaW5saW5lIHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyhQV1NU
UiBwc3osIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgc2l6ZV90IHdyaXRlVG8gPSAwOwpAQCAtNTM5
LDE0ICs1MzQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVy
cyhQV1NUUiBwc3osIHNpemVfdCBsZW5ndGgpCiAgICAgfQogICAgIHBzelt3cml0ZVRvXSA9IDA7
CiB9Ci0jZW5kaWYKIAogc3RhdGljIFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxl
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBVQ2hhciogZXh0
ZW5zaW9uLCBib29sIGlzTGluaykKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbHNlCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBmc1BhdGhNYXhMZW5ndGhFeGNsdWRpbmdOdWxsVGVybWluYXRvciA9IE1BWF9QQVRIIC0gMTsK
ICAgICBib29sIHVzZWRVUkwgPSBmYWxzZTsKICAgICBXQ0hBUiBmc1BhdGhCdWZmZXJbTUFYX1BB
VEhdOwpAQCAtNTg5LDcgKzU3OSw2IEBAIHN0YXRpYyBTdHJpbmcgZmlsZXN5c3RlbVBhdGhGcm9t
VXJsT3JUaXRsZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsCiAgICAgfQog
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihmc1BhdGhC
dWZmZXIpLCBleHRlbnNpb24pOwotI2VuZGlmCiB9CiAKIC8vIHdyaXRlRmlsZVRvRGF0YU9iamVj
dCB0YWtlcyBvd25lcnNoaXAgb2YgZmlsZURlc2NyaXB0b3IgYW5kIGZpbGVDb250ZW50CkBAIC05
NjYsMTAgKzk1NSw2IEBAIHN0YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudChj
b25zdCBVUkwmIHVybCwgU3RyaW5nJiBmaWxlTmFtZSwgU2hhcmVkCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiAwOwotI2Vsc2UKICAgICAgICAgV0NI
QVIgdGVtcFBhdGhbTUFYX1BBVEhdOwogICAgICAgICBXQ0hBUiBleHRlbnNpb25bTUFYX1BBVEhd
OwogICAgICAgICBpZiAoITo6R2V0VGVtcFBhdGgoV1RGX0FSUkFZX0xFTkdUSCh0ZW1wUGF0aCks
IHRlbXBQYXRoKSkKQEAgLTEwMDEsNyArOTg2LDYgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xv
YmFsSERyb3BDb250ZW50KGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIGZpbGVOYW1lLCBTaGFyZWQK
ICAgICAgICAgQ2xvc2VIYW5kbGUodGVtcEZpbGVIYW5kbGUpOwogICAgICAgICBpZiAoIXRlbXBX
cml0ZVN1Y2NlZWRlZCkKICAgICAgICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgfQogCiAg
ICAgU0laRV9UIGRyb3BGaWxlc1NpemUgPSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NI
QVIpICogKHdjc2xlbihmaWxlUGF0aCkgKyAyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCmluZGV4IDE0M2JiYWEuLmYx
OTUzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1v
dXNlRXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9y
bU1vdXNlRXZlbnRXaW4uY3BwCkBAIC02Niw5ICs2Niw3IEBAIHN0YXRpYyBQbGF0Zm9ybUV2ZW50
OjpUeXBlIG1lc3NhZ2VUb0V2ZW50VHlwZShVSU5UIG1lc3NhZ2UpCiAgICAgICAgIGNhc2UgV01f
TUJVVFRPTlVQOgogICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFz
ZWQ7CiAKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSNlbmRp
ZgogICAgICAgICBjYXNlIFdNX01PVVNFTU9WRToKICAgICAgICAgICAgIHJldHVybiBQbGF0Zm9y
bUV2ZW50OjpNb3VzZU1vdmVkOwogCkBAIC0xMDQsOSArMTAyLDcgQEAgUGxhdGZvcm1Nb3VzZUV2
ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIEwKICAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgotI2lmICFPUyhXSU5DRSkKICAg
ICAgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgotI2VuZGlmCiAgICAgICAgICAgICBpZiAod1BhcmFt
ICYgTUtfTEJVVFRPTikKICAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247CiAg
ICAgICAgICAgICBlbHNlIGlmICh3UGFyYW0gJiBNS19NQlVUVE9OKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVlbldpbi5jcHAKaW5kZXggY2M5YTAyMy4u
ZGVhOTU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3Jt
U2NyZWVuV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1T
Y3JlZW5XaW4uY3BwCkBAIC01NSwxMyArNTUsOCBAQCBzdGF0aWMgREVWTU9ERSBkZXZpY2VJbmZv
Rm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogICAgIERFVk1PREUgZGV2aWNlSW5mbzsKICAgICBk
ZXZpY2VJbmZvLmRtU2l6ZSA9IHNpemVvZihERVZNT0RFKTsKICAgICBkZXZpY2VJbmZvLmRtRHJp
dmVyRXh0cmEgPSAwOwotI2lmIE9TKFdJTkNFKQotICAgIGlmICghRW51bURpc3BsYXlTZXR0aW5n
cygwLCBFTlVNX0NVUlJFTlRfU0VUVElOR1MsICZkZXZpY2VJbmZvKSkKLSAgICAgICAgZGV2aWNl
SW5mby5kbUJpdHNQZXJQZWwgPSAxNjsKLSNlbHNlCiAgICAgTU9OSVRPUklORk9FWCBtb25pdG9y
SW5mbyA9IG1vbml0b3JJbmZvRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgRW51bURpc3BsYXlTZXR0
aW5ncyhtb25pdG9ySW5mby5zekRldmljZSwgRU5VTV9DVVJSRU5UX1NFVFRJTkdTLCAmZGV2aWNl
SW5mbyk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBkZXZpY2VJbmZvOwogfQpAQCAtODUsMTMgKzgw
LDggQEAgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQogCiBib29s
IHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAg
ICAvLyBFbnVtRGlzcGxheVNldHRpbmdzIGRvZXNuJ3Qgc2V0IGRtQ29sb3IgaW4gREVWTU9ERS4K
LSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQogICAgIERFVk1PREUgZGV2aWNlSW5mbyA9IGRldmlj
ZUluZm9Gb3JXaWRnZXQod2lkZ2V0KTsKICAgICByZXR1cm4gZGV2aWNlSW5mby5kbUNvbG9yID09
IERNQ09MT1JfTU9OT0NIUk9NRTsKLSNlbmRpZgogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChX
aWRnZXQqIHdpZGdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
b3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5jcHAKaW5kZXggNWYxMmU3ZS4uNTU0NmJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTQ5LDEwICs0OSw2IEBACiAKICNpbmNsdWRlIDx3
aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KLSNpZiBPUyhXSU5DRSkKLSNpbmNsdWRl
IDxSZXNEZWZDRS5oPgotI2RlZmluZSBNQUtFUE9JTlRTKGwpICgqKChQT0lOVFMgRkFSICopJihs
KSkpCi0jZW5kaWYKIAogI2RlZmluZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4ODAwMAogCkBAIC0x
NjQsNyArMTYwLDYgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnNob3coY29uc3QgSW50UmVjdCYgciwg
RnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICBzZXRGb2N1c2VkSW5kZXgo
aW5kZXgpOwogICAgIH0KIAotI2lmICFPUyhXSU5DRSkKICAgICA6OlN5c3RlbVBhcmFtZXRlcnNJ
bmZvKFNQSV9HRVRDT01CT0JPWEFOSU1BVElPTiwgMCwgJnNob3VsZEFuaW1hdGUsIDApOwogCiAg
ICAgaWYgKHNob3VsZEFuaW1hdGUpIHsKQEAgLTE3Myw5ICsxNjgsNyBAQCB2b2lkIFBvcHVwTWVu
dVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkK
ICAgICAgICAgaWYgKCE6OklzUmVjdEVtcHR5KCZ2aWV3UmVjdCkpCiAgICAgICAgICAgICA6OkFu
aW1hdGVXaW5kb3cobV9wb3B1cCwgZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uLCBBV19CTEVORCk7
CiAgICAgfSBlbHNlCi0jZW5kaWYKLQotICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9X
Tk9BQ1RJVkFURSk7CisgICAgICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJ
VkFURSk7CiAKICAgICBtX3Nob3dQb3B1cCA9IHRydWU7CiAKQEAgLTE5OSw3ICsxOTIsNiBAQCB2
b2lkIFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcs
IGludCBpbmRleCkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gU3Rl
YWwgbW91c2UgbWVzc2FnZXMuCi0jaWYgIU9TKFdJTkNFKQogICAgICAgICAgICAgY2FzZSBXTV9O
Q01PVVNFTU9WRToKICAgICAgICAgICAgIGNhc2UgV01fTkNMQlVUVE9ORE9XTjoKICAgICAgICAg
ICAgIGNhc2UgV01fTkNMQlVUVE9OVVA6CkBAIC0yMTAsNyArMjAyLDYgQEAgdm9pZCBQb3B1cE1l
bnVXaW46OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgp
CiAgICAgICAgICAgICBjYXNlIFdNX05DTUJVVFRPTkRPV046CiAgICAgICAgICAgICBjYXNlIFdN
X05DTUJVVFRPTlVQOgogICAgICAgICAgICAgY2FzZSBXTV9OQ01CVVRUT05EQkxDTEs6Ci0jZW5k
aWYKICAgICAgICAgICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKICAgICAgICAgICAgICAgICBtc2cu
aHduZCA9IG1fcG9wdXA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02MDEsMTEgKzU5Miw3
IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBI
REMgaGRjKQogICAgICAgICAgICAgbV9ibXAuY2xlYXIoKTsKICAgICB9CiAgICAgaWYgKCFtX2Jt
cCkgewotI2lmIE9TKFdJTkNFKQotICAgICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRt
YXBJbmZvOjpjcmVhdGVCb3R0b21VcChjbGllbnRSZWN0KCkuc2l6ZSgpLCBCaXRtYXBJbmZvOjpC
aXRDb3VudDE2KTsKLSNlbHNlCiAgICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1h
cEluZm86OmNyZWF0ZUJvdHRvbVVwKGNsaWVudFJlY3QoKS5zaXplKCkpOwotI2VuZGlmCiAgICAg
ICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgICAgIG1fYm1wID0gYWRvcHRHRElPYmplY3QoOjpD
cmVhdGVESUJTZWN0aW9uKG1fREMuZ2V0KCksICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
JnBpeGVscywgMCwgMCkpOwogICAgICAgICBpZiAoIW1fYm1wKQpAQCAtNzY3LDE0ICs3NTQsMTAg
QEAgdm9pZCBQb3B1cE1lbnVXaW46OnJlZ2lzdGVyQ2xhc3MoKQogICAgIGlmIChoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzKQogICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBX
TkRDTEFTUyB3Y2V4OwotI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgd2NleC5jYlNp
emUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CiAgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CiAg
ICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RST1BTSEFET1c7Ci0jZW5kaWYKIAogICAgIHdj
ZXgubHBmblduZFByb2MgICAgPSBQb3B1cE1lbnVXbmRQcm9jOwogICAgIHdjZXguY2JDbHNFeHRy
YSAgICAgPSAwOwpAQCAtNzg4LDExICs3NzEsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cmVnaXN0
ZXJDbGFzcygpCiAKICAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKIAotI2lm
IE9TKFdJTkNFKQotICAgIFJlZ2lzdGVyQ2xhc3MoJndjZXgpOwotI2Vsc2UKICAgICBSZWdpc3Rl
ckNsYXNzRXgoJndjZXgpOwotI2VuZGlmCiB9CiAKIApAQCAtODE5LDEwICs3OTgsOCBAQCBMUkVT
VUxUIFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYQogICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CiAKICAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIGNhc2UgV01fTU9VU0VBQ1RJ
VkFURToKICAgICAgICAgICAgIHJldHVybiBNQV9OT0FDVElWQVRFOwotI2VuZGlmCiAgICAgICAg
IGNhc2UgV01fU0laRTogewogICAgICAgICAgICAgaWYgKCFzY3JvbGxiYXIoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTk2Niw5ICs5NDMsNyBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6
d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBCT09MIHNob3VsZEhvdFRyYWNrID0gRkFM
U0U7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICAgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhT
UElfR0VUSE9UVFJBQ0tJTkcsIDAsICZzaG91bGRIb3RUcmFjaywgMCk7Ci0jZW5kaWYKIAogICAg
ICAgICAgICAgUkVDVCBib3VuZHM7CiAgICAgICAgICAgICBHZXRDbGllbnRSZWN0KHBvcHVwSGFu
ZGxlKCksICZib3VuZHMpOwpAQCAtMTA3MCwxMSArMTA0NSw5IEBAIExSRVNVTFQgUG9wdXBNZW51
V2luOjp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhCiAgICAgICAgICAgICBsUmVzdWx0ID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgogICAg
ICAgICAgICAgcGFpbnQoY2xpZW50UmVjdCgpLCAoSERDKXdQYXJhbSk7CiAgICAgICAgICAgICBi
cmVhazsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbFJlc3VsdCA9IERl
ZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCmluZGV4
IGRkYTU5ZTEuLmM0NmM4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1Njcm9sbGJhclRoZW1lV2luLmNwcApAQCAtMjk0LDkgKzI5NCw3IEBAIHZvaWQgU2Nyb2xsYmFy
VGhlbWVXaW46OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFy
VGhlbWVDbGllCiAgICAgICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpKSB7CiAgICAgICAgICAgICB4cFN0YXRlICs9IFRTX0FDVElWRTsK
ICAgICAgICAgICAgIGNsYXNzaWNTdGF0ZSB8PSBERkNTX1BVU0hFRDsKLSNpZiAhT1MoV0lOQ0Up
CiAgICAgICAgICAgICBjbGFzc2ljU3RhdGUgfD0gREZDU19GTEFUOwotI2VuZGlmCiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgeHBTdGF0ZSArPSBUU19IT1ZFUjsKICAgICB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZEJ1ZmZlcldpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcAppbmRl
eCA4YTgzN2Q2Li5mNWRkMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU2hhcmVkQnVmZmVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U2hhcmVkQnVmZmVyV2luLmNwcApAQCAtMzEsMTEgKzMxLDYgQEAKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLS8vIElOVkFMSURfRklM
RV9TSVpFIGlzIG5vdCBkZWZpbmVkIG9uIFdpbkNFLgotI2lmbmRlZiBJTlZBTElEX0ZJTEVfU0la
RQotI2RlZmluZSBJTlZBTElEX0ZJTEVfU0laRSAweGZmZmZmZmZmCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpj
cmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJXaW4uY3BwCmluZGV4IGNmOTI0YjQu
LjMyN2MyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRU
aW1lcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVy
V2luLmNwcApAQCAtNjMsNyArNjMsNiBAQCBzdGF0aWMgSEFORExFIHRpbWVyOwogc3RhdGljIEhX
TkQgdGltZXJXaW5kb3dIYW5kbGUgPSAwOwogY29uc3QgTFBDV1NUUiBrVGltZXJXaW5kb3dDbGFz
c05hbWUgPSBMIlRpbWVyV2luZG93Q2xhc3MiOwogCi0jaWYgIU9TKFdJTkNFKQogc3RhdGljIFVJ
TlQgdGltZXJGaXJlZE1lc3NhZ2UgPSAwOwogc3RhdGljIEhBTkRMRSB0aW1lclF1ZXVlOwogc3Rh
dGljIGJvb2wgaGlnaFJlc1RpbWVyQWN0aXZlOwpAQCAtNzMsNyArNzIsNiBAQCBzdGF0aWMgTE9O
RyBwZW5kaW5nVGltZXJzOwogY29uc3QgaW50IHRpbWVyUmVzb2x1dGlvbiA9IDE7IC8vIFRvIGlt
cHJvdmUgdGltZXIgcmVzb2x1dGlvbiwgd2UgY2FsbCB0aW1lQmVnaW5QZXJpb2QvdGltZUVuZFBl
cmlvZCB3aXRoIHRoaXMgdmFsdWUgdG8gaW5jcmVhc2UgdGltZXIgcmVzb2x1dGlvbiB0byAxbXMu
CiBjb25zdCBpbnQgaGlnaFJlc29sdXRpb25UaHJlc2hvbGRNc2VjID0gMTY7IC8vIE9ubHkgYWN0
aXZhdGUgaGlnaC1yZXMgdGltZXIgZm9yIHN1Yi0xNm1zIHRpbWVycyAoV2luZG93cyBjYW4gZmly
ZSB0aW1lcnMgYXQgMTZtcyBpbnRlcnZhbHMgd2l0aG91dCBjaGFuZ2luZyB0aGUgc3lzdGVtIHJl
c29sdXRpb24pLgogY29uc3QgaW50IHN0b3BIaWdoUmVzVGltZXJJbk1zZWMgPSAzMDA7IC8vIFN0
b3AgaGlnaC1yZXMgdGltZXIgYWZ0ZXIgMC4zIHNlY29uZHMgdG8gbGVzc2VuIHBvd2VyIGNvbnN1
bXB0aW9uICh3ZSBkb24ndCB1c2UgYSBzbWFsbGVyIHRpbWUgc2luY2Ugb3NjaWxsYXRpbmcgYmV0
d2VlbiBoaWdoIGFuZCBsb3cgcmVzb2x1dGlvbiBicmVha3MgdGltZXIgYWNjdXJhY3kgb24gWFAp
LgotI2VuZGlmCiAKIGVudW0gewogICAgIHNoYXJlZFRpbWVySUQgPSAxMDAwLApAQCAtOTgsNyAr
OTYsNiBAQCBMUkVTVUxUIENBTExCQUNLIFRpbWVyV2luZG93V25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUgogICAgICAgICAgICAgS2lsbFRpbWVyKHRp
bWVyV2luZG93SGFuZGxlLCBzaGFyZWRUaW1lcklEKTsKICAgICAgICAgICAgIHNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbigpOwogICAgICAgICB9Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBlbHNl
IGlmICh3UGFyYW0gPT0gZW5kSGlnaFJlc1RpbWVySUQpIHsKICAgICAgICAgICAgIEtpbGxUaW1l
cih0aW1lcldpbmRvd0hhbmRsZSwgZW5kSGlnaFJlc1RpbWVySUQpOwogICAgICAgICAgICAgaGln
aFJlc1RpbWVyQWN0aXZlID0gZmFsc2U7CkBAIC0xMDksNyArMTA2LDYgQEAgTFJFU1VMVCBDQUxM
QkFDSyBUaW1lcldpbmRvd1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVIKICAgICAgICAgcHJvY2Vzc2luZ0N1c3RvbVRpbWVyTWVzc2FnZSA9IHRydWU7
CiAgICAgICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwogICAgICAgICBwcm9jZXNzaW5n
Q3VzdG9tVGltZXJNZXNzYWdlID0gZmFsc2U7Ci0jZW5kaWYKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCkBA
IC0xMjEsMzAgKzExNywxOSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplT2ZmU2NyZWVuVGltZXJX
aW5kb3coKQogICAgIGlmICh0aW1lcldpbmRvd0hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0j
aWYgT1MoV0lOQ0UpCi0gICAgV05EQ0xBU1Mgd2NleDsKLSAgICBtZW1zZXQoJndjZXgsIDAsIHNp
emVvZihXTkRDTEFTUykpOwotI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgbWVtc2V0
KCZ3Y2V4LCAwLCBzaXplb2YoV05EQ0xBU1NFWCkpOwogICAgIHdjZXguY2JTaXplID0gc2l6ZW9m
KFdORENMQVNTRVgpOwotI2VuZGlmCiAKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gVGltZXJX
aW5kb3dXbmRQcm9jOwogICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBXZWJDb3JlOjppbnN0YW5j
ZUhhbmRsZSgpOwogICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBrVGltZXJXaW5kb3dDbGFzc05h
bWU7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgUmVnaXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAg
IFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci0jZW5kaWYKIAogICAgIHRpbWVyV2luZG93SGFuZGxl
ID0gQ3JlYXRlV2luZG93KGtUaW1lcldpbmRvd0NsYXNzTmFtZSwgMCwgMCwKICAgICAgICBDV19V
U0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIFdlYkNvcmU6
Omluc3RhbmNlSGFuZGxlKCksIDApOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIHRpbWVyRmlyZWRN
ZXNzYWdlID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKEwiY29tLmFwcGxlLldlYktpdC5UaW1lckZp
cmVkIik7Ci0jZW5kaWYKIH0KIAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9p
ZCAoKmYpKCkpCkBAIC0xNTIsMTMgKzEzNywxMSBAQCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRG
dW5jdGlvbih2b2lkICgqZikoKSkKICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwog
fQogCi0jaWYgIU9TKFdJTkNFKQogc3RhdGljIHZvaWQgTlRBUEkgcXVldWVUaW1lclByb2MoUFZP
SUQsIEJPT0xFQU4pCiB7CiAgICAgaWYgKEludGVybG9ja2VkSW5jcmVtZW50KCZwZW5kaW5nVGlt
ZXJzKSA9PSAxKQogICAgICAgICBQb3N0TWVzc2FnZSh0aW1lcldpbmRvd0hhbmRsZSwgdGltZXJG
aXJlZE1lc3NhZ2UsIDAsIDApOwogfQotI2VuZGlmCiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJl
SW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogewpAQCAtMTc0LDcgKzE1Nyw2IEBAIHZvaWQgc2V0
U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgIGluaXRpYWxpemVP
ZmZTY3JlZW5UaW1lcldpbmRvdygpOwogICAgIGJvb2wgdGltZXJTZXQgPSBmYWxzZTsKIAotI2lm
ICFPUyhXSU5DRSkKICAgICBpZiAoU2V0dGluZ3M6OnNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGlt
ZXJzKCkpIHsKICAgICAgICAgaWYgKGludGVydmFsIDwgaGlnaFJlc29sdXRpb25UaHJlc2hvbGRN
c2VjKSB7CiAgICAgICAgICAgICBpZiAoIWhpZ2hSZXNUaW1lckFjdGl2ZSkgewpAQCAtMjA2LDcg
KzE4OCw2IEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFs
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotI2VuZGlmIC8vICFPUyhXSU5DRSkK
IAogICAgIGlmICh0aW1lclNldCkgewogICAgICAgICBpZiAodGltZXJJRCkgewpAQCAtMjIxLDEy
ICsyMDIsMTAgQEAgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpCiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYg
KHRpbWVyUXVldWUgJiYgdGltZXIpIHsKICAgICAgICAgRGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRp
bWVyUXVldWUsIHRpbWVyLCAwKTsKICAgICAgICAgdGltZXIgPSAwOwogICAgIH0KLSNlbmRpZgog
CiAgICAgaWYgKHRpbWVySUQpIHsKICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxl
LCB0aW1lcklEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Tb2Z0
TGlua2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKaW5k
ZXggMDc5ZjA1YS4uY2QwZDZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1NvZnRMaW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRM
aW5raW5nLmgKQEAgLTM5LDEyICszOSw3IEBACiAgICAgICAgIHJldHVybiBsaWJyYXJ5OyBcCiAg
ICAgfQogCi0jaWYgT1MoV0lOQ0UpCi0jZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBH
ZXRQcm9jQWRkcmVzc0EKLSNlbHNlCiAjZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBH
ZXRQcm9jQWRkcmVzcwotI2VuZGlmCi0KICNkZWZpbmUgU09GVF9MSU5LX0xJQlJBUlkobGliKSBT
T0ZUX0xJTktfTElCUkFSWV9IRUxQRVIobGliLCBMIi5kbGwiKQogI2RlZmluZSBTT0ZUX0xJTktf
REVCVUdfTElCUkFSWShsaWIpIFNPRlRfTElOS19MSUJSQVJZX0hFTFBFUihsaWIsIEwiX2RlYnVn
LmRsbCIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1J
bmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAppbmRl
eCBjOWVkY2EwLi40NDM5OGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU3lzdGVtSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uY3BwCkBAIC0zOSwyMyArMzksMTMgQEAgV2luZG93c1ZlcnNpb24gd2luZG93c1ZlcnNp
b24oaW50KiBtYWpvciwgaW50KiBtaW5vcikKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAg
ICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotI2lmIE9TKFdJTkNFKQotICAgICAgICBPU1ZFUlNJ
T05JTkZPIHZlcnNpb25JbmZvOwotI2Vsc2UKICAgICAgICAgT1NWRVJTSU9OSU5GT0VYIHZlcnNp
b25JbmZvOwotI2VuZGlmCiAgICAgICAgIFplcm9NZW1vcnkoJnZlcnNpb25JbmZvLCBzaXplb2Yo
dmVyc2lvbkluZm8pKTsKICAgICAgICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9
IHNpemVvZih2ZXJzaW9uSW5mbyk7CiAgICAgICAgIEdldFZlcnNpb25FeChyZWludGVycHJldF9j
YXN0PE9TVkVSU0lPTklORk8qPigmdmVyc2lvbkluZm8pKTsKICAgICAgICAgbWFqb3JWZXJzaW9u
ID0gdmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb247CiAgICAgICAgIG1pbm9yVmVyc2lvbiA9IHZl
cnNpb25JbmZvLmR3TWlub3JWZXJzaW9uOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIGlmICht
YWpvclZlcnNpb24gPj0gMSAmJiBtYWpvclZlcnNpb24gPD0gNykKLSAgICAgICAgICAgIHZlcnNp
b24gPSBzdGF0aWNfY2FzdDxXaW5kb3dzVmVyc2lvbj4oV2luZG93c0NFMSArIChtYWpvclZlcnNp
b24gLSAxKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JWZXJz
aW9uIDwgMSkgPyBXaW5kb3dzQ0UxIDogV2luZG93c0NFNzsKLSNlbHNlCiAgICAgICAgIGlmICh2
ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKICAgICAgICAg
ICAgIHZlcnNpb24gPSBXaW5kb3dzM18xOwogICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5k
d1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKQEAgLTc3LDcgKzY3
LDYgQEAgV2luZG93c1ZlcnNpb24gd2luZG93c1ZlcnNpb24oaW50KiBtYWpvciwgaW50KiBtaW5v
cikKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JW
ZXJzaW9uID09IDQpID8gV2luZG93c05UNCA6IFdpbmRvd3NOVDM7CiAgICAgICAgIH0KLSNlbmRp
ZgogICAgIH0KIAogICAgIGlmIChtYWpvcikKQEAgLTExNCw3ICsxMDMsNiBAQCBzdGF0aWMgU3Ry
aW5nIG9zVmVyc2lvbkZvclVBU3RyaW5nKCkKICAgICByZXR1cm4gZmFtaWx5TmFtZSArIFN0cmlu
Zzo6bnVtYmVyKG1ham9yKSArICcuJyArIFN0cmluZzo6bnVtYmVyKG1pbm9yKTsKIH0KIAotI2lm
ICFPUyhXSU5DRSkKIHN0YXRpYyBib29sIGlzV09XNjQoKQogewogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CkBAIC0xNTgsMTggKzE0NiwxNSBAQCBzdGF0aWMgV09SRCBwcm9j
ZXNzb3JBcmNoaXRlY3R1cmUoKQogCiAgICAgcmV0dXJuIGFyY2hpdGVjdHVyZTsKIH0KLSNlbmRp
ZgogCiBzdGF0aWMgU3RyaW5nIGFyY2hpdGVjdHVyZVRva2VuRm9yVUFTdHJpbmcoKQogewotI2lm
ICFPUyhXSU5DRSkKICAgICBpZiAoaXNXT1c2NCgpKQogICAgICAgICByZXR1cm4gIjsgV09XNjQi
OwogICAgIGlmIChwcm9jZXNzb3JBcmNoaXRlY3R1cmUoKSA9PSBQUk9DRVNTT1JfQVJDSElURUNU
VVJFX0FNRDY0KQogICAgICAgICByZXR1cm4gIjsgV2luNjQ7IHg2NCI7CiAgICAgaWYgKHByb2Nl
c3NvckFyY2hpdGVjdHVyZSgpID09IFBST0NFU1NPUl9BUkNISVRFQ1RVUkVfSUE2NCkKICAgICAg
ICAgcmV0dXJuICI7IFdpbjY0OyBJQTY0IjsKLSNlbmRpZgogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRl
eCBjNzkzN2I4Li45NDY5M2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NE
YXRhT2JqZWN0LmNwcApAQCAtMjc5LDcgKzI3OSw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpDb3B5
TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRD
CiB7CiAgICAgc3dpdGNoKHBNZWRTcmMtPnR5bWVkKQogICAgIHsKLSNpZiAhT1MoV0lOQ0UpCiAg
ICAgY2FzZSBUWU1FRF9IR0xPQkFMOgogICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IChIR0xP
QkFMKU9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCxwRm10U3JjLT5jZkZvcm1hdCwg
MCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk1LDcgKzI5NCw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0
OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9S
TUFURVRDCiAgICAgY2FzZSBUWU1FRF9GSUxFOgogICAgICAgICBwTWVkU3JjLT5scHN6RmlsZU5h
bWUgPSAoTFBPTEVTVFIpT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUscEZt
dFNyYy0+Y2ZGb3JtYXQsIDApOwogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgVFlN
RURfSVNUUkVBTToKICAgICAgICAgcE1lZERlc3QtPnBzdG0gPSBwTWVkU3JjLT5wc3RtOwogICAg
ICAgICBwTWVkU3JjLT5wc3RtLT5BZGRSZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKaW5kZXggOThkMGE5Ny4uZmJhMmNlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTM3NSw3ICszNzUsNyBAQCBib29sIFBsdWdp
bkRhdGFiYXNlOjphZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkK
ICAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLmFkZChmaWxlTmFtZSkuaXNOZXdFbnRy
eTsKIH0KIAotI2lmICghT1MoV0lOQ0UpKSAmJiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkpCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpKQogLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRo
b2RzIGFyZSBpbXBsZW1lbnRlZAogLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYg
d2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKIC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxk
IHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCmluZGV4IGE4OGFkZjkuLmUxY2MyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcApAQCAtMzQwLDE3ICszNDAsMTAgQEAgdm9pZCBQbHVnaW5WaWV3Ojpz
dG9wKCkKICNpZiBkZWZpbmVkKFhQX1dJTikgJiYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBVbnN1
YmNsYXNzIHRoZSB3aW5kb3cKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0jaWYgT1MoV0lOQ0Up
Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25n
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAoY3Vy
cmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dM
b25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpbldu
ZFByb2MpOwotI2Vsc2UKICAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9D
KUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsK
IAogICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAg
ICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05E
UFJPQywgKExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7Ci0jZW5kaWYKICAgICB9CiAjZW5kaWYg
Ly8gIWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCiAjZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUu
Y3BwCmluZGV4IGRmNzlkYzkuLmE5NzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlld05vbmUuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVGb2N1c091dEV2ZW50KCkKIC8vIHBvcnRzIHVzaW5nIFBsdWdpblZpZXcsIGJ1dCB1bnRpbCB0
aGVuLCBpZiBuZXcgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgCiAvLyBhZGRlZCwgcGxlYXNlIG1h
a2Ugc3VyZSB0aGV5IGhhdmUgdGhlIHByb3BlciBwbGF0Zm9ybSAjaWZzIHNvIHRoYXQgY2hhbmdl
cwogLy8gZG8gbm90IGJyZWFrIHBvcnRzIHdobyBjb21waWxlIGJvdGggdGhpcyBmaWxlIGFuZCBQ
bHVnaW5WaWV3LmNwcC4gICAKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8
fCBQTEFURk9STShHVEspIHx8IE9TKFdJTkNFKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKIHZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKE5QUCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAppbmRleCBlMjUwZTEzLi5kMWM3
ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VX
aW4uY3BwCkBAIC0zMywxMiArMzMsNiBAQAogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNp
bmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBXSU5DRSBk
b2Vzbid0IHN1cHBvcnQgUmVnaXN0cnkgS2V5IEFjY2VzcyBSaWdodHMuIFRoZSBwYXJhbWV0ZXIg
c2hvdWxkIGFsd2F5cyBiZSAwCi0jaWZuZGVmIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMKLSNkZWZp
bmUgS0VZX0VOVU1FUkFURV9TVUJfS0VZUyAwCi0jZW5kaWYKLQogQk9PTCBQYXRoUmVtb3ZlRmls
ZVNwZWMoTFBXU1RSIG1vZHVsZUZpbGVOYW1lU3RyKQogewogICAgIGlmICghKm1vZHVsZUZpbGVO
YW1lU3RyKQpAQCAtMjM4LDE0ICsyMzIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemls
bGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3RvcnkoVmVjdG9y
PFN0cmluZz4mIGRpcmVjdG9yaWVzKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBUaGUgbmV3
IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0
IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKICAgICBXQ0hBUiBwbHVnaW5EaXJlY3Rv
cnlTdHJbX01BWF9QQVRIICsgMV07CiAgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6
RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBs
dWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVj
dG9yeVN0cikpOwogCiAgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRp
cmVjdG9yeVNpemUgPD0gV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQogICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2lu
RGlyZWN0b3J5U2l6ZSAtIDEpKTsKLSNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsKICAgICBXQ0hB
UiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTM3Nyw3ICszNjksNiBA
QCBleGl0OgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9y
aWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAg
V0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlmICghR2V0U3lzdGVt
RGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChzeXN0ZW1EaXJl
Y3RvcnlTdHIpKSkKQEAgLTM5MCw3ICszODEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFj
cm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIAog
ICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0
ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsKICAgICBkaXJlY3Rvcmllcy5hcHBl
bmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci0jZW5kaWYKIH0KIAogVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IDY3Y2M3NjQuLmE4
NTI1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VX
aW4uY3BwCkBAIC0yMzcsOSArMjM3LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKICAg
ICAgICAgbV9sb2FkQ291bnQrKzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3BhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwotI2Vsc2UKICAgICAgICAg
V0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpHZXRDdXJyZW50
RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQpAQCAtMjU4LDcgKzI1NSw2IEBAIGJv
b2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeSht
X21vZHVsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSNlbmRpZgog
ICAgIH0KIAogICAgIGlmICghbV9tb2R1bGUpCkBAIC0yNzAsMTUgKzI2Niw5IEBAIGJvb2wgUGx1
Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6
ZSA9IDA7CiAgICAgTlBFcnJvciBucEVycjsKIAotI2lmIE9TKFdJTkNFKQotICAgIE5QX0luaXRp
YWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIEwi
TlBfSW5pdGlhbGl6ZSIpOwotICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9p
bnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgTCJOUF9HZXRFbnRyeVBvaW50cyIp
OwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsIEwiTlBfU2h1dGRvd24iKTsKLSNlbHNlCiAgICAgTlBfSW5pdGlhbGl6ZSA9
IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRp
YWxpemUiKTsKICAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQ
dHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwogICAgIG1f
TlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1
bGUsICJOUF9TaHV0ZG93biIpOwotI2VuZGlmCiAKICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwg
IU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAgZ290byBhYm9y
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKaW5kZXgg
NmIyOWQzYi4uNDk1MzI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHAKQEAgLTczLDEzICs3Myw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotI2lmIE9TKFdJTkNFKQot
I3VuZGVmIExPR19OUEVSUk9SCi0jZGVmaW5lIExPR19OUEVSUk9SKHgpCi0jdW5kZWYgTE9HX1BM
VUdJTl9ORVRfRVJST1IKLSNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQotI2VuZGlmCi0K
ICNpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNs
dWRlIDxjYWlyby13aW4zMi5oPgpAQCAtMTE4LDcgKzExMSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiBjb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lID0gTCJX
ZWJQbHVnaW5WaWV3IjsKIGNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwi
V2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKIAotI2lmICFPUyhXSU5DRSkKIC8vIFRoZSBjb2RlIHVz
ZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCiAvLyA8
aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgogLy8gQ29weXJp
Z2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBAIC0yNzAsNyAr
MjYyLDYgQEAgc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lO
QVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2VyMzIuZGxsIiwg
IkVuZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWludCkp
KTsKIAogfQotI2VuZGlmCiAKIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiB7CkBA
IC0yODYsMTggKzI3NywxMCBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogCiAg
ICAgQVNTRVJUKFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCkpOwogCi0jaWYgT1MoV0lOQ0UpCi0g
ICAgV05EQ0xBU1Mgd2NleCA9IHsgMCB9OwotI2Vsc2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAg
ICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CiAgICAgd2NleC5oSWNvblNtICAg
ICAgICA9IDA7Ci0jZW5kaWYKLQogICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19EQkxDTEtT
OwotI2lmIE9TKFdJTkNFKQotICAgIHdjZXguc3R5bGUgICAgICAgICAgfD0gQ1NfUEFSRU5UREM7
Ci0jZW5kaWYKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKICAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKICAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKQEAg
LTMwOCwxMSArMjkxLDcgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKICAgICB3
Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBs
dWdpblZpZXdkb3dDbGFzc05hbWU7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gISFSZWdp
c3RlckNsYXNzKCZ3Y2V4KTsKLSNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3
Y2V4KTsKLSNlbmRpZgogfQogCiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZp
ZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQpAQCAtMzk0LDcgKzM3Myw2IEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIG1f
cG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCi0jaWYgIU9TKFdJ
TkNFKQogICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAgICAgIC8vIE1v
c3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVO
VCwgc28gd2UKICAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCBy
ZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKQEAgLTQwMiw3ICszODAsNiBAQCBQbHVnaW5W
aWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQogICAgICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAgIG1fd21Qcmlu
dEhEQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KLSNlbmRpZgogCiAg
ICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNVTFQgcmVzdWx0
ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJh
bSwgbFBhcmFtKTsKQEAgLTQyNSwxMSArNDAyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQ
bHVnaW5XaWRnZXQoKQogICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsK
ICAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAotI2lmIE9TKFdJTkNFKQot
ICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3Qo
KSk7Ci0jZWxzZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOwot
I2VuZGlmCiAgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAgbV9jbGlwUmVj
dC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKQEAgLTUyOSw5
ICs1MDIsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2
ZW50KQogdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhk
YykKIHsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBT
ZW5kTWVzc2FnZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENMSUVOVCwgcmVpbnRl
cnByZXRfY2FzdDxXUEFSQU0+KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJTERSRU4gfCBQUkZf
T1dORUQpOwotI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY0MSw3ICs2MTIs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4
cGVjdHMgdGhhdCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0ZXMuCiAgICAg
Ly8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgYWx3YXlzIGRyYXcgaW4gYW4gb2Zmc2NyZWVu
IGJ1ZmZlciBhbmQgdGhlcmVmb3JlIG5lZWQKICAgICAvLyB0byBwcmVzZXJ2ZSB0aGUgdHJhbnNs
YXRpb24gc2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgotI2lmICFQTEFURk9STShHVEspICYmICFP
UyhXSU5DRSkKKyNpZiAhUExBVEZPUk0oR1RLKQogICAgIGlmICghY29udGV4dC0+aXNJblRyYW5z
cGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwogICAgICAgICBHZXRX
b3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7CkBAIC02Nzks
OSArNjUwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAot
I2lmICFPUyhXSU5DRSkKIGV4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7Ci0jZW5kaWYK
IAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQog
ewpAQCAtNzQ5LDcgKzcxOCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChN
b3VzZUV2ZW50KiBldmVudCkKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIAotI2lmICFQTEFURk9STShHVEspICYm
ICFPUyhXSU5DRSkKKyNpZiAhUExBVEZPUk0oR1RLKQogICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0
OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50
SGFuZGxlci5jcHAKICAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBp
Z25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCiAgICAgaWdu
b3JlTmV4dFNldEN1cnNvciA9IHRydWU7CkBAIC03NjIsMTUgKzczMSw2IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKIHsKICAgICBXaWRnZXQ6OnNldFBh
cmVudChwYXJlbnQpOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKHBhcmVudCkgewotICAgICAg
ICBpbml0KCk7Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzVmlzaWJsZSgpKQotICAgICAgICAgICAg
c2hvdygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWRlKCk7Ci0gICAgfQotI2Vsc2UK
ICAgICBpZiAocGFyZW50KQogICAgICAgICBpbml0KCk7CiAgICAgZWxzZSB7CkBAIC03ODQsNyAr
NzQ0LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQog
ICAgICAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBmb2N1c2VkV2luZG93IHx8IDo6
SXNDaGlsZChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBmb2N1c2VkV2luZG93KSkKICAgICAgICAg
ICAgIDo6U2V0Rm9jdXMoMCk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6
c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC04MDcsMTggKzc2Niw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYg
KCFtX2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgSW50
UmVjdCByID0gdG9GcmFtZVZpZXcocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOwot
ICAgIG1fbnBXaW5kb3cueCA9IHIueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IHIueSgpOwotCi0g
ICAgbV9ucFdpbmRvdy53aWR0aCA9IHIud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9
IHIuaGVpZ2h0KCk7Ci0KLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gci53aWR0aCgp
OwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gci5oZWlnaHQoKTsKLSNlbHNlCi0g
ICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVm
ZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gSW4gdGhlIEdUSyBw
b3J0IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2Ug
dGhlIHdpbmRvdwogICAgIC8vIGNvb3JkaW5hdGVzLgogIyBpZiBQTEFURk9STShHVEspCiAgICAg
SW50UG9pbnQgcCA9IHJlY3QubG9jYXRpb24oKTsKQEAgLTgzMyw3ICs3ODEsNiBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7Ci0jZW5kaWYKICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmxlZnQgPSAwOwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIApAQCAt
ODUwLDE3ICs3OTcsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiAgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsK
IAotI2lmIE9TKFdJTkNFKQotICAgICAgICBpZiAoIW1fcGx1Z2luV25kUHJvYykgewotICAgICAg
ICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmcocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MpOwotICAgICAgICAgICAgaWYgKGN1cnJl
bnRXbmRQcm9jICE9IFBsdWdpblZpZXdXbmRQcm9jKQotICAgICAgICAgICAgICAgIG1fcGx1Z2lu
V25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
R1dMX1dORFBST0MsIChMT05HKVBsdWdpblZpZXdXbmRQcm9jKTsKLSAgICAgICAgfQotI2Vsc2UK
ICAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQ
dHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKICAgICAgICAgaWYgKGN1
cnJlbnRXbmRQcm9jICE9IFBsdWdpblZpZXdXbmRQcm9jKQogICAgICAgICAgICAgbV9wbHVnaW5X
bmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MsIChMT05HX1BUUilQbHVnaW5WaWV3V25kUHJvYyk7Ci0jZW5kaWYKICAg
ICB9CiB9CiAKQEAgLTk4OCw5ICs5MjcsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3Rh
cnQoKQogCiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICByZWdpc3RlclBsdWdpblZp
ZXcoKTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29r
cyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7Ci0jZW5kaWYKIAogICAgICAgICBE
V09SRCBmbGFncyA9IFdTX0NISUxEOwogICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQpAQCAt
MTAxMCwxMSArOTQ3LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAg
ICAgLy8gdGhlIFNob2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgogI2lmIE9TKFdJTkRPV1MpICYm
IENQVShYODZfNjQpCiAgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOwotI2VsaWYg
T1MoV0lOQ0UpCi0gICAgICAgIDo6U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xfV05EUFJPQywgKExPTkcpRGVmV2luZG93UHJvYyk7Ci0jZWxzZQogICAgICAgICA6OlNl
dFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9O
RylEZWZXaW5kb3dQcm9jQSk7Ci0jZW5kaWYKICAgICAgICAgU2V0UHJvcChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5LCB0aGlzKTsKIAogICAgICAgICBtX25w
V2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMyNTE5OGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkyICswLDAgQEAKLS8qCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lV2luQ0UuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250TWV0
cmljcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lmIEVOQUJMRShWSURFTykK
LSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotCi0vKiAKLSAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHRvIGRldGVybWlu
ZSBob3cgYSB3aWRnZXQgaXMgZHJhd24gdXNpbmcKLSAqIFdpbmRvd3MnIFRoZW1lIEFQSS4gRm9y
IG1vcmUgaW5mb3JtYXRpb24gb24gdGhlbWUgcGFydHMgYW5kIHN0YXRlcyBzZWUKLSAqIGh0dHA6
Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4t
dXMvc2hlbGxjYy9wbGF0Zm9ybS9jb21tY3Rscy91c2VyZXgvdG9waWNzL3BhcnRzYW5kc3RhdGVz
LmFzcAotICovCi0jZGVmaW5lIFRIRU1FX0NPTE9SIDIwNAotI2RlZmluZSBUSEVNRV9GT05UICAy
MTAKLQotLy8gR2VuZXJpYyBzdGF0ZSBjb25zdGFudHMKLSNkZWZpbmUgVFNfTk9STUFMICAgIDEK
LSNkZWZpbmUgVFNfSE9WRVIgICAgIDIKLSNkZWZpbmUgVFNfQUNUSVZFICAgIDMKLSNkZWZpbmUg
VFNfRElTQUJMRUQgIDQKLSNkZWZpbmUgVFNfRk9DVVNFRCAgIDUKLQotLy8gQnV0dG9uIGNvbnN0
YW50cwotI2RlZmluZSBCUF9CVVRUT04gICAgMQotI2RlZmluZSBCUF9SQURJTyAgICAgMgotI2Rl
ZmluZSBCUF9DSEVDS0JPWCAgMwotCi0vLyBUZXh0ZmllbGQgY29uc3RhbnRzCi0jZGVmaW5lIFRG
UF9URVhURklFTEQgMQotI2RlZmluZSBURlNfUkVBRE9OTFkgIDYKLQotdHlwZWRlZiBIQU5ETEUg
KFdJTkFQSSpvcGVuVGhlbWVEYXRhUHRyKShIV05EIGh3bmQsIExQQ1dTVFIgcHN6Q2xhc3NMaXN0
KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmNsb3NlVGhlbWVEYXRhUHRyKShIQU5ETEUgaFRo
ZW1lKTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmRyYXdUaGVtZUJhY2tncm91bmRQdHIpKEhB
TkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUICpwUmVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQ1QqIHBDbGlw
UmVjdCk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpkcmF3VGhlbWVFZGdlUHRyKShIQU5ETEUg
aFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgY29uc3QgUkVDVCAqcFJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB1RWRnZSwgdW5zaWdu
ZWQgdUZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUkVDVCogcENsaXBSZWN0KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lQ29u
dGVudFJlY3RQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBS
RUNUKiBwUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJF
Q1QqIHBDb250ZW50UmVjdCk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZVBhcnRT
aXplUHRyKShIQU5ETEUgaFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgUkVDVCogcHJjLCBpbnQg
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFKiBwc3opOwot
dHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZ2V0VGhlbWVTeXNGb250UHRyKShIQU5ETEUgaFRoZW1l
LCBpbnQgaUZvbnRJZCwgT1VUIExPR0ZPTlQqIHBGb250KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lO
QVBJKmdldFRoZW1lQ29sb3JQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGludCBp
UHJvcElkLCBPVVQgQ09MT1JSRUYqIHBGb250KTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgY29uc3QgaW50IGRyb3BEb3duQnV0dG9uV2lkdGggPSAxNzsKLXN0YXRpYyBjb25zdCBp
bnQgdHJhY2tXaWR0aCA9IDQ7Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1l
V2luQ0U6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVdp
bkNFKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9y
UGFnZShQYWdlKiBwYWdlKQotewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogd2luY2VUaGVtZSA9
IFJlbmRlclRoZW1lV2luQ0U6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gd2luY2VU
aGVtZTsKLX0KLQotUmVuZGVyVGhlbWVXaW5DRTo6UmVuZGVyVGhlbWVXaW5DRSgpCi17Ci19Ci0K
LVJlbmRlclRoZW1lV2luQ0U6On5SZW5kZXJUaGVtZVdpbkNFKCkKLXsKLX0KLQotQ29sb3IgUmVu
ZGVyVGhlbWVXaW5DRTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdAotewotICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hU
KTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwg
R2V0QlZhbHVlKGNvbG9yKSwgMjU1KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgQ09M
T1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9HUkFZVEVYVCk7Ci0gICAgcmV0dXJuIENv
bG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciks
IDI1NSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lV2luQ0U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5
c0NvbG9yKENPTE9SX0hJR0hMSUdIVFRFWFQpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUo
Y29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAyNTUpOwotfQotCi1D
b2xvciBSZW5kZXJUaGVtZVdpbkNFOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3I6OndoaXRlOwotfQotCi1ib29sIFJl
bmRlclRoZW1lV2luQ0U6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2Fz
ZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVXaW5DRTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUgKnN0
eWxlKSBjb25zdAotewotICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNl
KCkpOwotfQotCi11bnNpZ25lZCBSZW5kZXJUaGVtZVdpbkNFOjpkZXRlcm1pbmVDbGFzc2ljU3Rh
dGUoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgaWYg
KCFpc0VuYWJsZWQobykgfHwgaXNSZWFkT25seUNvbnRyb2wobykpCi0gICAgICAgIHJlc3VsdCA9
IERGQ1NfSU5BQ1RJVkU7Ci0gICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKSAvLyBBY3RpdmUgc3Vw
ZXJzZWRlcyBob3ZlcgotICAgICAgICByZXN1bHQgPSBERkNTX1BVU0hFRDsKLQotICAgIGlmIChp
c0NoZWNrZWQobykpCi0gICAgICAgIHJlc3VsdCB8PSBERkNTX0NIRUNLRUQ7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luQ0U6OmdldFRoZW1lRGF0YShS
ZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgVGhlbWVEYXRhIHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8t
PnN0eWxlKCkuYXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBj
YXNlIEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9CVVRUT047Ci0gICAg
ICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSA9IERGQ1NfQlVUVE9OUFVTSDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9D
SEVDS0JPWDsKLSAgICAgICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19CVVRUT05DSEVD
SzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBCUF9SQURJTzsKLSAgICAgICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19C
VVRUT05SQURJTzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaXN0Ym94UGFydDoKLSAgICBj
YXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0
QXJlYVBhcnQ6Ci0gICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgfD0gZGV0ZXJtaW5l
Q2xhc3NpY1N0YXRlKG8pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZVdpbkNFOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0
YSBmb3IgYSBidXR0b24KLSAgICBUaGVtZURhdGEgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8p
OwotCi0gICAgLy8gTm93IHBhaW50IHRoZSBidXR0b24uCi0gICAgaS5jb250ZXh0LT5kcmF3RnJh
bWVDb250cm9sKHIsIERGQ19CVVRUT04sIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSk7Ci0gICAg
aWYgKGlzRm9jdXNlZChvKSkgewotICAgICAgICBpZiAodGhlbWVEYXRhLm1fcGFydCA9PSBCUF9C
VVRUT04pIHsKLSAgICAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHIpOwotICAgICAgICAgICAg
Zm9jdXNSZWN0LmluZmxhdGUoLTIpOwotICAgICAgICAgICAgaS5jb250ZXh0LT5kcmF3Rm9jdXNS
ZWN0KGZvY3VzUmVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaS5jb250ZXh0LT5k
cmF3Rm9jdXNSZWN0KHIpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZVdpbkNFOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwg
dGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4g
IFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94
LgotICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcg
dGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCi0gICAg
Ly8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkg
c2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCi0gICAg
Ly8gbWV0cmljcy4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAoc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgx
MywgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0ZmllbGQKLSAgICBU
aGVtZURhdGEgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwotCi0gICAgLy8gTm93IHBhaW50
IHRoZSB0ZXh0IGZpZWxkLgotICAgIGkuY29udGV4dC0+cGFpbnRUZXh0RmllbGQociwgdGhlbWVE
YXRhLm1fY2xhc3NpY1N0YXRlKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHBhaW50VGV4dEZpZWxkKHJlbmRlcmVyLCBwYWlu
dEluZm8sIHJlY3QpOwotICAgIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJl
ciwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZVdpbkNFOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgSW50UmVjdCBidXR0b25SZWN0KHJlY3QubWF4WCgpIC0gZHJvcERvd25CdXR0b25X
aWR0aCAtIDEsIHJlY3QueSgpLCBkcm9wRG93bkJ1dHRvbldpZHRoLCByZWN0LmhlaWdodCgpKTsK
LSAgICBidXR0b25SZWN0LmluZmxhdGVZKC0xKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJh
d0ZyYW1lQ29udHJvbChidXR0b25SZWN0LCBERkNfU0NST0xMLCBERkNTX1NDUk9MTENPTUJPQk9Y
IHwgZGV0ZXJtaW5lQ2xhc3NpY1N0YXRlKHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6c3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OnRoZW1lQ2hhbmdlZCgpCi17Ci19Ci0KLVN0
cmluZyBSZW5kZXJUaGVtZVdpbkNFOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFJlbmRl
clRoZW1lV2luQ0U6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6
c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vLyBNYXAgYSBDU1NWYWx1ZSogc3lzdGVtIGNvbG9yIHRvIGFuIGluZGV4IHVu
ZGVyc3Rvb2QgYnkgR2V0U3lzQ29sb3IKLXN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJ
bmRleChDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpCi17Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7
Ci0gICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWJvcmRlcjogcmV0dXJuIENPTE9SX0FDVElWRUJPUkRF
UjsKLSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlY2FwdGlvbjogcmV0dXJuIENPTE9SX0FDVElWRUNB
UFRJT047Ci0gICAgY2FzZSBDU1NWYWx1ZUFwcHdvcmtzcGFjZTogcmV0dXJuIENPTE9SX0FQUFdP
UktTUEFDRTsKLSAgICBjYXNlIENTU1ZhbHVlQmFja2dyb3VuZDogcmV0dXJuIENPTE9SX0JBQ0tH
Uk9VTkQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmZhY2U6IHJldHVybiBDT0xPUl9CVE5GQUNF
OwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25oaWdobGlnaHQ6IHJldHVybiBDT0xPUl9CVE5ISUdI
TElHSFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnNoYWRvdzogcmV0dXJuIENPTE9SX0JUTlNI
QURPVzsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDogcmV0dXJuIENPTE9SX0JUTlRFWFQ7
Ci0gICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OiByZXR1cm4gQ09MT1JfQ0FQVElPTlRFWFQ7
Ci0gICAgY2FzZSBDU1NWYWx1ZUdyYXl0ZXh0OiByZXR1cm4gQ09MT1JfR1JBWVRFWFQ7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUhpZ2hsaWdodDogcmV0dXJuIENPTE9SX0hJR0hMSUdIVDsKLSAgICBjYXNl
IENTU1ZhbHVlSGlnaGxpZ2h0dGV4dDogcmV0dXJuIENPTE9SX0hJR0hMSUdIVFRFWFQ7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUluYWN0aXZlYm9yZGVyOiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVCT1JERVI7
Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlY2FwdGlvbjogcmV0dXJuIENPTE9SX0lOQUNUSVZF
Q0FQVElPTjsKLSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9udGV4dDogcmV0dXJuIENP
TE9SX0lOQUNUSVZFQ0FQVElPTlRFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZUluZm9iYWNrZ3JvdW5k
OiByZXR1cm4gQ09MT1JfSU5GT0JLOwotICAgIGNhc2UgQ1NTVmFsdWVJbmZvdGV4dDogcmV0dXJu
IENPTE9SX0lORk9URVhUOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51OiByZXR1cm4gQ09MT1JfTUVO
VTsKLSAgICBjYXNlIENTU1ZhbHVlTWVudXRleHQ6IHJldHVybiBDT0xPUl9NRU5VVEVYVDsKLSAg
ICBjYXNlIENTU1ZhbHVlU2Nyb2xsYmFyOiByZXR1cm4gQ09MT1JfU0NST0xMQkFSOwotICAgIGNh
c2UgQ1NTVmFsdWVUaHJlZWRkYXJrc2hhZG93OiByZXR1cm4gQ09MT1JfM0RES1NIQURPVzsKLSAg
ICBjYXNlIENTU1ZhbHVlVGhyZWVkZmFjZTogcmV0dXJuIENPTE9SXzNERkFDRTsKLSAgICBjYXNl
IENTU1ZhbHVlVGhyZWVkaGlnaGxpZ2h0OiByZXR1cm4gQ09MT1JfM0RISUdITElHSFQ7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVRocmVlZGxpZ2h0c2hhZG93OiByZXR1cm4gQ09MT1JfM0RMSUdIVDsKLSAg
ICBjYXNlIENTU1ZhbHVlVGhyZWVkc2hhZG93OiByZXR1cm4gQ09MT1JfM0RTSEFET1c7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVdpbmRvdzogcmV0dXJuIENPTE9SX1dJTkRPVzsKLSAgICBjYXNlIENTU1Zh
bHVlV2luZG93ZnJhbWU6IHJldHVybiBDT0xPUl9XSU5ET1dGUkFNRTsKLSAgICBjYXNlIENTU1Zh
bHVlV2luZG93dGV4dDogcmV0dXJuIENPTE9SX1dJTkRPV1RFWFQ7Ci0gICAgZGVmYXVsdDogcmV0
dXJuIC0xOyAvLyBVbnN1cHBvcnRlZCBDU1NWYWx1ZQotICAgIH0KLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVXaW5DRTo6c3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKSBjb25zdAotewot
ICAgIGludCBzeXNDb2xvckluZGV4ID0gY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRleChjc3NWYWx1
ZUlkKTsKLSAgICBpZiAoc3lzQ29sb3JJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLQotICAgIENPTE9SUkVGIGNvbG9yID0g
R2V0U3lzQ29sb3Ioc3lzQ29sb3JJbmRleCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShj
b2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwotfQotCi1jb25zdCBp
bnQgc2xpZGVyVGh1bWJXaWR0aCA9IDc7Ci1jb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAx
NTsKLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAg
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7
Ci0gICAgfQotfQotCi0jaWYgMAotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RCdXR0b25J
bm5lclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGlubmVy
IHBhZGRpbmcgbWF0Y2hlcyBGaXJlZm94LgotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aCgxLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKDMsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDEsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCgzLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIC8v
IE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4K
LSAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExl
bmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgQ29sb3IgYnV0dG9uQ29sb3IgPSAoby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpICYmIHRvRWxlbWVudChvLT5ub2RlKCkpLT5hY3RpdmUoKSkgPyBDb2xvcigxMzgsIDEz
OCwgMTM4KSA6IENvbG9yKDE4NiwgMTg2LCAxODYpOwotCi0gICAgSW50U2l6ZSBjYW5jZWxTaXpl
KDEwLCAxMCk7Ci0gICAgSW50U2l6ZSBjYW5jZWxSYWRpdXMoY2FuY2VsU2l6ZS53aWR0aCgpIC8g
MiwgY2FuY2VsU2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgIGludCB4ID0gci54KCkgKyAoci53aWR0
aCgpIC0gY2FuY2VsU2l6ZS53aWR0aCgpKSAvIDI7Ci0gICAgaW50IHkgPSByLnkoKSArIChyLmhl
aWdodCgpIC0gY2FuY2VsU2l6ZS5oZWlnaHQoKSkgLyAyICsgMTsKLSAgICBJbnRSZWN0IGNhbmNl
bEJvdW5kcyhJbnRQb2ludCh4LCB5KSwgY2FuY2VsU2l6ZSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KFJvdW5k
ZWRSZWN0KGNhbmNlbEJvdW5kcywgY2FuY2VsUmFkaXVzLCBjYW5jZWxSYWRpdXMsIGNhbmNlbFJh
ZGl1cywgY2FuY2VsUmFkaXVzKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGNh
bmNlbEJvdW5kcywgYnV0dG9uQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgLy8g
RHJhdyB0aGUgJ3gnCi0gICAgSW50U2l6ZSB4U2l6ZSgzLCAzKTsKLSAgICBJbnRSZWN0IHhCb3Vu
ZHMoY2FuY2VsQm91bmRzLmxvY2F0aW9uKCkgKyBJbnRTaXplKDMsIDMpLCB4U2l6ZSk7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKHhCb3VuZHMubG9j
YXRpb24oKSwgIHhCb3VuZHMubG9jYXRpb24oKSArIHhCb3VuZHMuc2l6ZSgpKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoeEJvdW5kcy5tYXhYKCksIHhCb3VuZHMu
eSgpKSwgIEludFBvaW50KHhCb3VuZHMueCgpLCB4Qm91bmRzLm1heFkoKSkpOwotCi0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJ
bnRTaXplIGNhbmNlbFNpemUoMTMsIDExKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNh
bmNlbFNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChj
YW5jZWxTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIGVtcHR5U2l6
ZSgxLCAxMSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCks
IEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIG1hZ25pZmllclNpemUoMTUsIDEx
KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllclNpemUud2lkdGgoKSwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLmhlaWdodCgp
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIG1hZ25pZmllclNpemUoMTUsIDExKTsK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllclNpemUud2lkdGgoKSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLmhlaWdodCgpLCBG
aXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChvLCBwYWludEluZm8sIHIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFRoZXNlIGFyZSB0
aGUgcGFkZGluZ3MgbmVlZGVkIHRvIHBsYWNlIHRoZSB0ZXh0IGNvcnJlY3RseSBpbiB0aGUgPHNl
bGVjdD4gYm94Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ1RvcCAgICA9IDI7Ci0g
ICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0ICA9IHN0eWxlLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyA0ICsgZHJvcERvd25CdXR0b25XaWR0aCA6IDQ7Ci0gICAgY29uc3QgaW50IGRy
b3BEb3duQm94UGFkZGluZ0JvdHRvbSA9IDI7Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFk
ZGluZ0xlZnQgICA9IHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3du
QnV0dG9uV2lkdGg7Ci0gICAgLy8gVGhlIDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0IGxlYXN0IDEy
cHggaGlnaCBmb3IgdGhlIGJ1dHRvbiB0byByZW5kZXIgbmljZWx5IG9uIFdpbmRvd3MKLSAgICBj
b25zdCBpbnQgZHJvcERvd25Cb3hNaW5IZWlnaHQgPSAxMjsKLQotICAgIC8vIFBvc2l0aW9uIHRo
ZSB0ZXh0IGNvcnJlY3RseSB3aXRoaW4gdGhlIHNlbGVjdCBib3ggYW5kIG1ha2UgdGhlIGJveCB3
aWRlIGVub3VnaCB0byBmaXQgdGhlIGRyb3Bkb3duIGJ1dHRvbgotICAgIHN0eWxlLT5zZXRQYWRk
aW5nVG9wKExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0Jv
dHRvbSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGRyb3BEb3du
Qm94UGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0KLSAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1
dG8KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0KLSAgICAvLyBDYWxjdWxh
dGUgb3VyIG1pbi1oZWlnaHQKLSAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUtPmZvbnRNZXRyaWNz
KCkuaGVpZ2h0KCk7Ci0gICAgbWluSGVpZ2h0ID0gc3RkOjptYXgobWluSGVpZ2h0LCBkcm9wRG93
bkJveE1pbkhlaWdodCk7Ci0KLSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWln
aHQsIEZpeGVkKSk7Ci0KLSAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAg
c3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKLQotICAgIERXT1JEIGNvbG9yTWVudSA9IEdldFN5
c0NvbG9yKENPTE9SX01FTlUpOwotICAgIERXT1JEIGNvbG9yTWVudVRleHQgPSBHZXRTeXNDb2xv
cihDT0xPUl9NRU5VVEVYVCk7Ci0gICAgQ29sb3IgYmdDb2xvcihHZXRSVmFsdWUoY29sb3JNZW51
KSwgR2V0R1ZhbHVlKGNvbG9yTWVudSksIEdldEJWYWx1ZShjb2xvck1lbnUpLCAyNTUpOwotICAg
IENvbG9yIHRleHRDb2xvcihHZXRSVmFsdWUoY29sb3JNZW51VGV4dCksIEdldEdWYWx1ZShjb2xv
ck1lbnVUZXh0KSwgR2V0QlZhbHVlKGNvbG9yTWVudVRleHQpLCAyNTUpOwotICAgIGlmIChiZ0Nv
bG9yID09IHRleHRDb2xvcikKLSAgICAgICAgdGV4dENvbG9yLnNldFJHQigofmJnQ29sb3Iucmdi
KCkpIHwgMHhGRjAwMDAwMCk7Ci0gICAgc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOwot
ICAgIHN0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCktPnNldENsaXAoQ29udGVudEZpbGxC
b3gpOwotICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmdDb2xvcik7Ci0gICAgc3R5bGUt
PnNldENvbG9yKHRleHRDb2xvcik7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0vLyBBdHRlbXB0
IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJucyAwIGlm
IG9uZSBjYW5ub3QgYmUgZm91bmQuCi1zdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50UGFyZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFt
ZWRpYU5vZGUpCi0gICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7Ci0gICAgaWYgKCFtZWRpYU5vZGUg
fHwgIW1lZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobWVkaWFOb2RlKS0+
aXNNZWRpYUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gdG9IVE1M
TWVkaWFFbGVtZW50KG1lZGlhTm9kZSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVdp
bkNFOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIGJvb2wgcmMgPSBSZW5kZXJUaGVtZTo6cGFpbnRT
bGlkZXJUcmFjayhvLCBpLCByKTsKLSAgICBJbnRQb2ludCBsZWZ0ID0gSW50UG9pbnQoci54KCkg
KyAyLCAoci55KCkgKyByLm1heFkoKSkgLyAyKTsKLSAgICBpLmNvbnRleHQtPnNhdmUoKTsKLSAg
ICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICBpLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgaS5jb250ZXh0LT5maWxsUmVjdChyKTsKLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFy
ZW50KG8tPm5vZGUoKSk7Ci0gICAgaWYgKG1lZGlhRWxlbWVudCkgewotICAgICAgICBpLmNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDB4ZmYsIDApKTsKLSAgICAgICAgSW50UG9pbnQg
cmlnaHQgPSBJbnRQb2ludChsZWZ0LngoKSArIG1lZGlhRWxlbWVudC0+cGVyY2VudExvYWRlZCgp
ICogKHIubWF4WCgpIC0gci54KCkgLSA0KSwgKHIueSgpICsgci5tYXhZKCkpIC8gMik7Ci0gICAg
ICAgIGkuY29udGV4dC0+ZHJhd0xpbmUobGVmdCwgcmlnaHQpOwotICAgICAgICBsZWZ0ID0gcmln
aHQ7Ci0gICAgfQotI2VuZGlmCi0gICAgaS5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6
YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGkuY29udGV4dC0+ZHJhd0xpbmUobGVm
dCwgSW50UG9pbnQoci5tYXhYKCkgLSAyLCBsZWZ0LnkoKSkpOwotICAgIGkuY29udGV4dC0+cmVz
dG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIGJvb2wgcmMgPSBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJU
aHVtYihvLCBpLCByKTsKLSAgICBpLmNvbnRleHQtPnNhdmUoKTsKLSAgICBpLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgaS5j
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
LSAgICBpLmNvbnRleHQtPmZpbGxSZWN0KHIpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgp
KTsKLSAgICBpZiAobWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGZsb2F0IHB0ID0gbWVkaWFFbGVt
ZW50LT5jdXJyZW50VGltZSgpIC8gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwotICAgICAgICBG
bG9hdFJlY3QgaW50UmVjdCA9IHI7Ci0gICAgICAgIGludFJlY3Quc2V0WChpbnRSZWN0LngoKSAr
IGludFJlY3Qud2lkdGgoKSAqIHB0IC0gMik7Ci0gICAgICAgIGludFJlY3Quc2V0V2lkdGgoNSk7
Ci0gICAgICAgIGkuY29udGV4dC0+ZmlsbFJlY3QoaW50UmVjdCk7Ci0gICAgfQotI2VuZGlmCi0g
ICAgaS5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJl
bmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IHBhZGRp
bmcgPSAxOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotfQotCi0jaWYg
RU5BQkxFKFZJREVPKQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFGdWxsc2Ny
ZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5m
bywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTIp
OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dEZpbGxDb2xvcihDb2xvcjo6Z3JheSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KGltUmVjdCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4g
cmM7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9k
ZSgpKTsKLSAgICBib29sIG11dGVkID0gIW1lZGlhRWxlbWVudCB8fCBtZWRpYUVsZW1lbnQtPm11
dGVkKCk7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTIp
OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIEZsb2F0UG9pbnQgcHRzWzZdID0gewotICAg
ICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxLCBpbVJlY3QueSgpICsgaW1SZWN0LmhlaWdo
dCgpIC8gMy4wKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJlY3QueCgpICsgMSArIGltUmVjdC53
aWR0aCgpIC8gMi4wLCBpbVJlY3QueSgpICsgaW1SZWN0LmhlaWdodCgpIC8gMy4wKSwKLSAgICAg
ICAgRmxvYXRQb2ludChpbVJlY3QubWF4WCgpIC0gMSwgaW1SZWN0LnkoKSksCi0gICAgICAgIEZs
b2F0UG9pbnQoaW1SZWN0Lm1heFgoKSAtIDEsIGltUmVjdC5tYXhZKCkpLAotICAgICAgICBGbG9h
dFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAsIGltUmVjdC55KCkg
KyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAotICAgICAgICBGbG9hdFBvaW50KGltUmVj
dC54KCkgKyAxLCBpbVJlY3QueSgpICsgMi4wICogaW1SZWN0LmhlaWdodCgpIC8gMy4wKQotICAg
IH07Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDYsIHB0cyk7Ci0g
ICAgaWYgKG11dGVkKQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9p
bnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0LnkoKSksIEludFBvaW50KGltUmVjdC54KCksIGltUmVj
dC5tYXhZKCkpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVy
biByYzsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhUGxheUJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQotewotICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAg
IEZsb2F0UmVjdCBpbVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0zKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRp
YUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKLSAgICBib29sIHBhdXNlZCA9ICFtZWRpYUVsZW1l
bnQgfHwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKTsKLSAgICBpZiAocGF1c2VkKSB7Ci0gICAgICAg
IGZsb2F0IHdpZHRoID0gaW1SZWN0LndpZHRoKCk7Ci0gICAgICAgIGltUmVjdC5zZXRXaWR0aCh3
aWR0aCAvIDMuMCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChpbVJlY3Qp
OwotICAgICAgICBpbVJlY3QubW92ZSgyLjAgKiB3aWR0aCAvIDMuMCwgMCk7Ci0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5maWxsUmVjdChpbVJlY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEZsb2F0UG9pbnQgcHRzWzNdID0geyBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkp
LCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkg
LyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBwdHMpOwotICAgIH0KLSAg
ICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBGbG9hdFJlY3Qg
aW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2ludCBwdHNb
M10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1S
ZWN0LnkoKSksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4
WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIu
MCwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9p
bnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBp
bVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCks
IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBwYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xv
cihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29s
b3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywg
cHRzKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzMik7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxv
YXRSZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9p
bnQgcHRzWzNdID0geyBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBv
aW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1S
ZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkp
IH07Ci0gICAgRmxvYXRQb2ludCBwdHMyWzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsg
aW1SZWN0Lm1heFgoKSkgLyAyLjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5tYXhY
KCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJl
Y3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29u
KDMsIHB0cyk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0
czIpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJjOwot
fQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQot
ewotICAgIHJldHVybiBwYWludFNsaWRlclRyYWNrKG8sIHBhaW50SW5mbywgcik7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
cmV0dXJuIHBhaW50U2xpZGVyVGh1bWIobywgcGFpbnRJbmZvLCByKTsKLX0KLSNlbmRpZgotCi12
b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGludCB3
aWR0aCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwotICAgIGlmICh3aWR0aCA8
PSAwKQotICAgICAgICB3aWR0aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0gICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgo
TGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50
SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgLy8gV2Ugc3BsaXQgdGhlIHNwZWNpZmllZCBy
ZWN0YW5nbGUgaW50byB0d28gdmVydGljYWxseS4gV2UgY2FuJ3QgZHJhdyBhCi0gICAgLy8gc3Bp
biBidXR0b24gb2Ygd2hpY2ggaGVpZ2h0IGlzIGxlc3MgdGhhbiAycHguCi0gICAgaWYgKHIuaGVp
Z2h0KCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSW50UmVjdCB1cFJlY3Qocik7
Ci0gICAgdXBSZWN0LnNldEhlaWdodChyLmhlaWdodCgpIC8gMik7Ci0gICAgSW50UmVjdCBkb3du
UmVjdChyKTsKLSAgICBkb3duUmVjdC5zZXRZKHVwUmVjdC5tYXhZKCkpOwotICAgIGRvd25SZWN0
LnNldEhlaWdodChyLmhlaWdodCgpIC0gdXBSZWN0LmhlaWdodCgpKTsKLQotICAgIHVuc2lnbmVk
IHN0YXRlVXAgPSBERkNTX1NDUk9MTFVQOwotICAgIHVuc2lnbmVkIHN0YXRlRG93biA9IERGQ1Nf
U0NST0xMRE9XTjsKLQotICAgIGlmICghaXNFbmFibGVkKG8pIHx8IGlzUmVhZE9ubHlDb250cm9s
KG8pKSB7Ci0gICAgICAgIHN0YXRlVXAgfD0gREZDU19JTkFDVElWRTsKLSAgICAgICAgc3RhdGVE
b3duIHw9IERGQ1NfSU5BQ1RJVkU7Ci0gICAgfSBlbHNlIGlmIChpc1ByZXNzZWQobykpIHsKLSAg
ICAgICAgaWYgKGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpCi0gICAgICAgICAgICBzdGF0
ZVVwIHw9IERGQ1NfUFVTSEVEOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZURvd24g
fD0gREZDU19QVVNIRUQ7Ci0gICAgfQotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdGcmFt
ZUNvbnRyb2wodXBSZWN0LCBERkNfU0NST0xMLCBzdGF0ZVVwKTsKLSAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0ZyYW1lQ29udHJvbChkb3duUmVjdCwgREZDX1NDUk9MTCwgc3RhdGVEb3duKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQwZDYxZGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0v
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclRoZW1lV2luQ0VfaAotI2RlZmlu
ZSBSZW5kZXJUaGVtZVdpbkNFX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLXR5cGVk
ZWYgdm9pZCogSEFORExFOwotdHlwZWRlZiBzdHJ1Y3QgSElOU1RBTkNFX18qIEhJTlNUQU5DRTsK
LXR5cGVkZWYgSElOU1RBTkNFIEhNT0RVTEU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAg
IHN0cnVjdCBUaGVtZURhdGEgewotICAgICAgICBUaGVtZURhdGEoKSA6bV9wYXJ0KDApLCBtX3N0
YXRlKDApLCBtX2NsYXNzaWNTdGF0ZSgwKSB7fQotICAgICAgICBUaGVtZURhdGEoaW50IHBhcnQs
IGludCBzdGF0ZSkKLSAgICAgICAgICAgIDogbV9wYXJ0KHBhcnQpCi0gICAgICAgICAgICAsIG1f
c3RhdGUoc3RhdGUpCi0gICAgICAgICAgICAsIG1fY2xhc3NpY1N0YXRlKDApCi0gICAgICAgIHsg
fQotCi0gICAgICAgIHVuc2lnbmVkIG1fcGFydDsKLSAgICAgICAgdW5zaWduZWQgbV9zdGF0ZTsK
LSAgICAgICAgdW5zaWduZWQgbV9jbGFzc2ljU3RhdGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIFJl
bmRlclRoZW1lV2luQ0UgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOwotICAgICAgICB+UmVu
ZGVyVGhlbWVXaW5DRSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0
eWxlU2hlZXQoKTsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0
KCk7Ci0KLSAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xz
IGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAg
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Owot
Ci0gICAgICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZv
bnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Q29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCi0gICAgICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLSAgICAgICAgeyByZXR1cm4gcGFp
bnRCdXR0b24obywgaSwgcik7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6
ZShzdHlsZSk7IH0KLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0gICAg
ICAgIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LQotICAgICAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdCB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVy
U3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0V2ViS2l0SXNCZWluZ1VubG9hZGVkKCk7Ci0K
LSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0KLSAgICAjaWYgRU5BQkxFKFZJREVPKQotICAgICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9y
d2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAjZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlbmRlclRoZW1lV2luQ0UoKTsKLQotICAgICAgICB1bnNpZ25lZCBkZXRlcm1pbmVDbGFzc2lj
U3RhdGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9s
UGFydCkgY29uc3Q7Ci0KLSAgICAgICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmpl
Y3QqKTsKLSAgICB9OwotCi19OwotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVXaW5DRV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxMTQ1ZC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFk
LmgiCi0KLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgp
Ci06IG1fdGltZXIodGhpcywgJkRhdGFiYXNlVGhyZWFkOjp0aW1lckZpcmVkKQotewotfQotCi1E
YXRhYmFzZVRocmVhZDo6fkRhdGFiYXNlVGhyZWFkKCkKLXsKLX0KLQotdm9pZCBEYXRhYmFzZVRo
cmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKCkKLXsKLSAgICBtX3F1ZXVlLmNsZWFyKCk7Ci19Ci0K
LWJvb2wgRGF0YWJhc2VUaHJlYWQ6OnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnRp
bWVyRmlyZWQoVGltZXI8RGF0YWJhc2VUaHJlYWQ+KikKLXsKLSAgICBpZiAoIW1fcXVldWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2sgPSBtX3F1ZXVlLmZp
cnN0KCk7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7Ci0gICAgICAgIG1fcXVldWUucmVt
b3ZlRmlyc3QoKTsKLSAgICAgICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIH0KLX0KLQotdm9pZCBEYXRhYmFzZVRocmVh
ZDo6c2NoZWR1bGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQotewotICAgIG1f
cXVldWUuYXBwZW5kKHRhc2spOwotICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6c2No
ZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQotewotICAg
IHRhc2stPnBlcmZvcm1UYXNrKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1
bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBEZXF1ZTxSZWZQdHI8
RGF0YWJhc2VUYXNrPiA+IHJlc2VydmVkVGFza3M7Ci0gICAgZm9yIChEZXF1ZTxSZWZQdHI8RGF0
YWJhc2VUYXNrPiA+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9xdWV1ZS5iZWdpbigpOyBpICE9IG1f
cXVldWUuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoKCppKS0+ZGF0YWJhc2UoKSAhPSBkYXRh
YmFzZSkKLSAgICAgICAgICAgIHJlc2VydmVkVGFza3MuYXBwZW5kKCppKTsKLSAgICB9Ci0KLSAg
ICBtX3F1ZXVlLnN3YXAocmVzZXJ2ZWRUYXNrcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQo
RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2lu
Y2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9E
YXRhYmFzZVRocmVhZFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjFj
YzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRo
cmVhZFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpIHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlVGhyZWFkV2luQ0Vf
aAotI2RlZmluZSBEYXRhYmFzZVRocmVhZFdpbkNFX2gKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ICAgIGNsYXNzIERhdGFiYXNlOwotICAgIGNsYXNzIERhdGFiYXNlVGFzazsKLQotICAgIGNsYXNz
IERhdGFiYXNlVGhyZWFkOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7
Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlVGhyZWFk
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VUaHJlYWQpOyB9Ci0gICAg
ICAgIH5EYXRhYmFzZVRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgICAgIHZvaWQgcmVxdWVzdFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgIGJvb2wg
dGVybWluYXRpb25SZXF1ZXN0ZWQoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNjaGVkdWxlVGFz
ayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlSW1tZWRp
YXRlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4pOwotICAgICAgICB2b2lkIHVuc2NoZWR1
bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKik7Ci0gICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VP
cGVuKERhdGFiYXNlKik7Ci0gICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJh
c2UqKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFk
SUQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGhyZWFkKCk7IH0KLSNlbmRpZgotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgRGF0YWJhc2VUaHJlYWQoKTsKLQotICAgICAgICB2b2lkIHRpbWVyRmly
ZWQoVGltZXI8RGF0YWJhc2VUaHJlYWQ+Kik7Ci0KLSAgICAgICAgRGVxdWU8UmVmUHRyPERhdGFi
YXNlVGFzaz4gPiBtX3F1ZXVlOwotICAgICAgICBUaW1lcjxEYXRhYmFzZVRocmVhZD4gbV90aW1l
cjsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEYXRhYmFz
ZVRocmVhZFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2Uv
U3RvcmFnZVRocmVhZFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3Rv
cmFnZVRocmVhZFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlODk2
Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJl
YWRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpIHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZVRocmVhZC5oIgotCi0jaW5jbHVkZSAiU3RvcmFnZVRhc2suaCIKLSNpbmNsdWRl
ICJTdG9yYWdlQXJlYVN5bmMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdG9yYWdlVGhy
ZWFkOjpTdG9yYWdlVGhyZWFkKCkKLTogbV90aW1lcih0aGlzLCAmU3RvcmFnZVRocmVhZDo6dGlt
ZXJGaXJlZCkKLXsKLX0KLQotU3RvcmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQotewotfQot
Ci1ib29sIFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBTdG9yYWdlVGhyZWFkOjp0aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VUaHJlYWQ+KikKLXsK
LSAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlVGFz
az4gdGFzayA9IG1fcXVldWUuZmlyc3QoKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsK
LSAgICAgICAgbV9xdWV1ZS5yZW1vdmVGaXJzdCgpOwotICAgICAgICBpZiAoIW1fcXVldWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotfQot
Ci12b2lkIFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFy
ZWFTeW5jPiBhcmVhKQotewotICAgIG1fcXVldWUuYXBwZW5kKFN0b3JhZ2VUYXNrOjpjcmVhdGVJ
bXBvcnQoYXJlYSkpOwotICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5
bmMoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IGFyZWEpCi17Ci0gICAgbV9xdWV1ZS5hcHBl
bmQoU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoYXJlYSkpOwotICAgIGlmICghbV90aW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBTdG9y
YWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQotewotICAgIG1fcXVldWUuY2xlYXIoKTsKLSAgICBtX3Rp
bWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWluYXRlKCkK
LXsKLSAgICBtX3F1ZXVlLmNsZWFyKCk7Ci0gICAgbV90aW1lci5zdG9wKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2lu
Y2UvU3RvcmFnZVRocmVhZFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0
b3JhZ2VUaHJlYWRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzU3M2Fl
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVh
ZFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgU3RvcmFnZVRocmVhZFdpbkNFX2gK
LSNkZWZpbmUgU3RvcmFnZVRocmVhZFdpbkNFX2gKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAg
IGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKLSAgICBjbGFzcyBTdG9yYWdlVGFzazsKLQotICAgIGNs
YXNzIFN0b3JhZ2VUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlVGhyZWFkPiB7Ci0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlVGhyZWFkPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZVRocmVhZCk7IH0KLQotICAgICAgICB+
U3RvcmFnZVRocmVhZCgpOwotICAgICAgICBib29sIHN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc2No
ZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKLSAgICAgICAgdm9pZCBz
Y2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKLSAgICAgICAgdm9pZCB0
ZXJtaW5hdGUoKTsKLSAgICAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBTdG9yYWdlVGhyZWFkKCk7Ci0KLSAgICAgICAgdm9pZCB0aW1lckZpcmVk
KFRpbWVyPFN0b3JhZ2VUaHJlYWQ+Kik7Ci0KLSAgICAgICAgRGVxdWU8UmVmUHRyPFN0b3JhZ2VU
YXNrPiA+IG1fcXVldWU7Ci0gICAgICAgIFRpbWVyPFN0b3JhZ2VUaHJlYWQ+IG1fdGltZXI7Ci0g
ICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU3RvcmFnZVRocmVh
ZFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggZjE0NDYzZi4uNDk4NTE5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMCBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFrZTog
UmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250
ZXh0TWVudUNsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3Jl
U3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBv
cnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
aW5jZS9XZWJWaWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJWaWV3Lmg6IFJl
bW92ZWQuCisKIDIwMTQtMDktMTUgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5j
b20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBNYWtlIGl0IGVhc2llciB0byBlbmFibGUvZGlzYWJs
ZSBHU3RyZWFtZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luQ0UuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luQ0UuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY5NGMwMWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bVdpbkNFLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotbGlzdChBUFBFTkQg
V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJp
bGl0eS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvd2luIgotICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3dp
biIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vd2luIgotCi0gICAgd2luY2UKLSAgICB3
aW5jZS9XZWJDb3JlU3VwcG9ydAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAg
IHdpbmNlL1dlYlZpZXcuY3BwCi0gICAgd2luY2UvV2ViVmlldy5oCi0KLSAgICB3aW5jZS9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNF
LmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5D
RS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAK
LSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKLSkK
LQotc2V0KFdlYktpdF9MSUJSQVJZX1RZUEUgU1RBVElDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jZi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZwppbmRleCBiZDhj
Njc3Li4zMDliZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA5LTE5
ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3Zl
IFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHA6
CisKIDIwMTQtMDItMTcgIFNlcmdpbyBDb3JyZWlhICA8c2VyZ2lvLmNvcnJlaWFAb3BlbmJvc3Nh
Lm9yZz4KIAogICAgICAgICBSZXBsYWNlIHVzZXMgb2YgUGFzc093blB0ci9Pd25QdHIgd2l0aCBz
dGQ6OnVuaXF1ZV9wdHIgaW4gV2ViQ29yZS9pbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGIvU291cmNl
L1dlYktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKaW5kZXgg
NjIzMzNkOS4uMDRmZTczMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jZi9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAog
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lO
Q0UpCisjaWYgUExBVEZPUk0oV0lOKQogI2lmbmRlZiBXVEZfVVNFX0NHCiAjZGVmaW5lIFdURl9V
U0VfQ0cgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZWQ4ZTFkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdl
TG9nCisrKyAvZGV2L251bGwKQEAgLTEsMjI4MyArMCwwIEBACi0yMDE0LTAzLTEyICBTZXJnaW8g
VmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgotCi0gICAgICAgIFJlbmFtZSBERUZJ
TkVfU1RBVElDX0xPQ0FMIHRvIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NjEyCi0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgRm9yIG5ldyBjb2RlIHVzZSBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VD4gaW5zdGVhZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjp1c2VyQWdlbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjppbml0aWFsaXplKToKLQotMjAxNC0wMy0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4cG9zZSB0aGUgY29uc29s
ZSBvYmplY3QgaW4gSlNDb250ZXh0cyB0byBpbnRlcmFjdCB3aXRoIFdlYiBJbnNwZWN0b3IKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk0NAotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgVXBkYXRlIG5hbWVzcGFjZXMuCi0K
LTIwMTQtMDItMjQgIFJlbmF0YSBIb2RvdmFuICA8cmhvZG92YW4udS1zemVnZWRAcGFydG5lci5z
YW1zdW5nLmNvbT4KLQotICAgICAgICBHZXQgcmlkIG9mIHRoZSB1bnVzZWQgJ2ltbWVkaWF0ZScg
cGFyYW1ldGVycyBmcm9tIHJlcGFpbnQgcmVsYXRlZCBmdW5jdGlvbnMKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTExMQotCi0gICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICBSZW1vdmluZyB0aGUgJ2ltbWVkaWF0ZScg
cGFyYW1ldGVycyBmcm9tIHJlcGFpbnQgcmVsYXRlZCBmdW5jdGlvbnMgLSBhY2NvcmluZwotICAg
ICAgICB0byB0aGUgRklYTUUgaW4gUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoKSAt
IHNpbmNlIHRoZXkgaGF2ZSBubyBlZmZlY3QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
OjppbnZhbGlkYXRlUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJv
bWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDItMDggIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgotCi0gICAgICAgIENoYW5nZSBUZXh0SXRlcmF0b3IgdG8gdXNlIFN0
cmluZ1ZpZXcsIHByZXBhcmluZyB0byB3ZWFuIGl0IGZyb20gZGVwcmVjYXRlZENoYXJhY3RlcnMK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODIzMwot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50V2luQ0U6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6IFVzZSBTdHJpbmdWaWV3LgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOiBE
aXR0by4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBEaXR0
by4KLQotMjAxNC0wMi0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgot
Ci0gICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIHN1cHBvcnQgdG8gSlNDb250ZXh0
IEluc3BlY3Rpb24KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzk0MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0zMCAg
QW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdGhlIEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HIGZsYWcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzgzMwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtv
aXZpc3RvLgotCi0gICAgICAgIFJlbW92ZSB0aGUgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSBjb25kaXRpb25hbHMgZnJvbSB0aGUgY29kZSBiYXNlIGFuZCBtYWtlIEFDCi0gICAgICAgIG1h
bmRhdG9yeS4KLQotICAgICAgICBBbm90aGVyIHBhdGNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gcmVt
b3ZlIHRoZSBmbGFnIHN1cHBvcnQgZnJvbSB0aGUgV2luQ0UgYnVpbGQgc3lzdGVtLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEt
MjUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1v
dmUgYW4gdW51c2VkIEZyYW1lTG9hZGVyQ2xpZW50IGZ1bmN0aW9uCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjgKLQotICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTE3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIGFub3RoZXIgdW51c2VkIEZyYW1lTG9hZGVyQ2xp
ZW50IGNhbGxiYWNrCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjcxOTIKLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTE3
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3Zl
IGRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gZnJvbSBhbGwgRnJhbWVMb2FkZXJDbGllbnQgc3Vi
Y2xhc3NlcwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI3MTkwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0xNiAgUGV0
ZXIgTW9sbmFyICA8cG1vbG5hci51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0gICAg
ICAgIFJlbW92ZSB3b3JrYXJvdW5kIGZvciBjb21waWxlcnMgbm90IHN1cHBvcnRpbmcgZXhwbGlj
aXQgb3ZlcnJpZGUgY29udHJvbAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3MTExCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29u
LgotCi0gICAgICAgIE5vdyBhbGwgY29tcGlsZXJzIHN1cHBvcnQgZXhwbGljaXQgb3ZlcnJpZGUg
Y29udHJvbCwgdGhpcyB3b3JrYXJvdW5kIGNhbiBiZSByZW1vdmVkLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2lu
Q0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmg6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEzLTEy
LTAzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2Vi
IEluc3BlY3RvcjogUHVzaCBSZW1vdGUgSW5zcGVjdG9yIGRlYnVnZ2luZyBjb25uZWN0aW9uIG1h
bmFnZW1lbnQgaW50byBKYXZhU2NyaXB0Q29yZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjEzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3Ro
eSBIYXRjaGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMy0xMS0wNCAgWmh1YW5nIFpoaWdhbmcgIDx6aHVhbmd6Z0Bjbi5mdWppdHN1
LmNvbT4KLQotICAgICAgICBDaGFuZ2Ugc3RydWN0dXJlIG9mIGZyYW1lIHRyZWUgaW4gV0lOQ0Ug
cG9ydC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MTA3OQotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3
LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3
Lmg6Ci0KLTIwMTMtMTEtMDMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgW1dJTkNFXSBSZXBsYWNlIE93blB0ciB3aXRoIEdESU9iamVjdAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjcwCi0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6
Ci0gICAgICAgIChXZWJWaWV3OjpwYWludCk6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVQYWlu
dCk6Ci0gICAgICAgICogV2ViVmlldy5oOgotCi0yMDEzLTExLTAyICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIEFkZCBPVkVSUklERSBrZXl3b3JkIHRv
IFdlYkNvcmVTdXBwb3J0IGNsYXNzZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMzY3MgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgotCi0gICAgICAgIEFsc28gYWxpZ24gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgd2l0aCB0aGUg
YmFzZSBjbGFzc2VzCi0gICAgICAgIGFuZCByZW1vdmUgdXNlbGVzcyBmdW5jdGlvbnMuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudFdpbkNFOjp3aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGll
bnRXaW5DRTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6
RHJhZ0NsaWVudFdpbkNFOjphY3Rpb25NYXNrRm9yRHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRy
YWdDbGllbnRXaW5DRTo6c3RhcnREcmFnKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5D
RS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3Bw
OgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lk
ZVBvbGljeUZvclJlc3BvbnNlKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3
b3JraW5nQ29udGV4dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UuaDoKLQotMjAxMy0xMS0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBWYXJpb3VzIHNtYWxsIFdpbkNFIGJ1aWxkIGZpeGVzCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3
UGFnZSk6Ci0gICAgICAgICogV2ViVmlldy5jcHA6Ci0KLTIwMTMtMTAtMDMgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBSZW1vdmUgc2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uIGZyb20gdGhlIFdLQnVuZGxlUGFnZVVJQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIzMDkKLQotICAgICAgICBSZXZpZXdlZCBi
eSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLQotMjAxMy0xMC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIENUVEU6IERPTVdyYXBwZXJXb3JsZHMgc2hvdWxkIGJlIHBhc3NlZCBhcm91bmQgYnkg
cmVmZXJlbmNlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjIyMDYKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6Ci0KLTIwMTMtMDktMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1MzkyNy4K
LQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6V2ViVmlldyk6Ci0K
LTIwMTMtMDktMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1NTI4OS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJl
c3BvbnNlKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0
Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdp
bGxTdWJtaXRGb3JtKToKLQotMjAxMy0wOS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FA
d2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciBy
MTU0MTc4LgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojp3bmRQ
cm9jKToKLQotMjAxMy0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+Ci0KLSAg
ICAgICAgcmVuYW1lIEtVUkwgdG8gVVJMCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjIxNAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xp
bmcuCi0KLSAgICAgICAgKiBtYW55IGZpbGVzOiBSZW5hbWVkLCB1c2luZyBzY3JpcHQuCi0KLTIw
MTMtMDktMTYgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KLQotICAgICAgICBS
ZW1vdmUgdW51c2VkIGZ1bmN0aW9uIGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCBm
cm9tIEVkaXRvckNsaWVudC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMTQ2NAotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDgtMjQgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgotCi0gICAgICAgIEZyYW1lOjp0cmVlIHNob3VsZCBy
ZXR1cm4gYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDI1OQotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdl
YlZpZXc6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgVXNlIHRyZWUoKS4gaW5zdGVhZCBvZiB0cmVl
KCktPi4KLQotMjAxMy0wOC0xOSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+
Ci0KLSAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTkxOD4gRnJhbWU6OnNlbGVjdGlv
bigpIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KLQotICAgICAgICBtX3NlbGVjdGlvbiBpcyBuZXZlciBOVUxMIHNvIHJldHVybiBh
IHJlZmVyZW5jZSBmcm9tIEZyYW1lOjpzZWxlY3Rpb24oKS4gQWxzbyByZW1vdmVkIHNvbWUKLSAg
ICAgICAgdW5uZWNlc3NhcnkgbnVsbCBjaGVja3MgYW5kIGFzc2VydCBkaWZmIHRzIGV4cG9zZWQg
YXMgYSByZXN1bHQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5n
S2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTMtMDgtMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KLQotICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5ODU5PiBGcmFt
ZTo6bG9hZGVyKCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZQotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpyZWZlcnJlcik6Ci0gICAgICAgICog
V2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgIChX
ZWJWaWV3Ojpsb2FkKToKLSAgICAgICAgKFdlYlZpZXc6OnJlbG9hZCk6Ci0gICAgICAgIChXZWJW
aWV3OjpzdG9wKToKLQotMjAxMy0wNy0yNSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5j
b20+Ci0KLSAgICAgICAgQ2hyb21lQ2xpZW50Ojpmb2N1c2VkTm9kZUNoYW5nZWQoKSBzaG91bGQg
YmUgZm9jdXNlZEVsZW1lbnRDaGFuZ2VkKCkuCi0gICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzExOTExMD4KLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudFdpbkNFOjpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDYtMjYgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBX
aW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1MjA2NS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OkFYU3RhcnRGcmFtZUxvYWQpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6QVhGaW5pc2hGcmFtZUxvYWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6Ci0KLTIwMTMtMDUtMTkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgQ2hyb21lQ2xpZW50Ojp3ZWJWaWV3KCkKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjA1NAotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFRoaXMgYmxhdGFudGx5IGhv
cnJpYmxlIGxheWVyIHZpb2xhdGlvbiB3YXMgb25seSB1c2VkIHRvIGtub3cgaWYgYSBDaHJvbWVD
bGllbnQgaXMgYW4gZW1wdHkKLSAgICAgICAgY2xpZW50IG9yIG5vdC4gV2UgYWxyZWFkeSBoYXZl
IGEgKHNsaWdodGx5IGxlc3MgaG9ycmlibGUpIHdheSB0byBkbyB0aGF0LgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVu
dFdpbkNFKToKLQotMjAxMy0wNS0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgotCi0gICAgICAgIEZyYW1lOjplZGl0b3IoKSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNl
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYwMzcK
LQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLQotMjAxMy0wNC0yOSAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2Vk
IGJ1aWxkIGZpeC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwOiBBZGRlZCBtaXNzaW5nIGhlYWRlci4KLSAgICAgICAgKiBXZWJWaWV3Lmg6IERp
dHRvLgotCi0yMDEzLTA0LTI1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+
Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogQ29uc29sZU1lc3NhZ2Ugc2hvdWxkIGluY2x1ZGUg
bGluZSBhbmQgY29sdW1uIG51bWJlciB3aGVyZSBwb3NzaWJsZQotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0OTI5Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgVGltb3RoeSBIYXRjaGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6YWRkTWVz
c2FnZVRvQ29uc29sZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMy0wNC0xOCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTQ4NTQ1Lgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAqIFdlYlZpZXcuY3BwOgotCi0yMDEzLTA0LTE1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVy
IHIxNDgzNzMuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5j
cHA6Ci0KLTIwMTMtMDQtMDYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE0NTg0OS4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLQotMjAxMy0w
My0xNSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEhpZGUg
TWFpblJlc291cmNlTG9hZGVyIGZyb20gdGhlIG91dHNpZGUgd29ybGQKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk3MQotCi0gICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChGcmFtZUxvYWRlckNs
aWVudFdpbkNFKToKLQotMjAxMy0wMy0xNSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21p
dW0ub3JnPgotCi0gICAgICAgIFJlcGxhY2Ugc3RhdGljX2Nhc3RzIHdpdGggdG8qIGhlbHBlciBm
dW5jdGlvbnMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTI0MDEKLQotICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGVuIENoZW5uZXkuCi0KLSAgICAg
ICAgdG8qIGhlbHBlciBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZCBvdmVyIHN0YXRpY19jYXN0IGNh
bGxzIHNpbmNlIHRoZXkKLSAgICAgICAgaGVscCB0byBjYXRjaCBiYWQgY2FzdHMgZWFzaWx5IG9u
IHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKToKLQotMjAxMy0wMy0xNCAgTWFudWVs
IFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KLQotICAgICAgICBBZGQgc2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCBzZXR0aW5nIHRvIFdlYkNvcmU6OlBhZ2UKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTQwNAotCi0gICAg
ICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCi0KLSAgICAgICAgVXNlIG5ldyBzZXR0aW5ncyBm
b3Igc21hcnRJbnNlcnREZWxldGVFbmFibGVkIGFuZAotICAgICAgICBzZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6c21hcnRJbnNl
cnREZWxldGVFbmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6Omlz
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCk6Ci0KLTIwMTMtMDItMTEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgRGlzYWJsZSBkZWxldGUgYnV0dG9u
IGNvbnRyb2xsZXIgb24gbm9uLU1hYyBwb3J0cyBhbmQgZGVsZXRlIEVkaXRvckNsaWVudDo6c2hv
dWxkU2hvd0RlbGV0ZUludGVyZmFjZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5NTM0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5oOgotICAgICAgICAoRWRpdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEzLTAyLTAzICBLd2Fu
Z1lvbmcgQ2hvaSAgPGt5MC5jaG9pQHNhbXN1bmcuY29tPgotCi0gICAgICAgIEZpeCBidWlsZCB3
YXJuaW5nIGFmdGVyIHIxNDE0NzMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwODc4MgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4K
LQotICAgICAgICBGaXggLVd1bnVzZWQtcGFyYW1ldGVyIGJ1aWxkIHdhcm5pbmcuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudFdpbkNFOjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToK
LQotMjAxMy0wMS0zMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgotCi0gICAg
ICAgIFdlYktpdDI6IHByb3ZpZGUgbmV3IGJ1bmRsZSBBUElzIHRvIGFsbG93IGJ1bmRsZSBjbGll
bnRzIHRvIGJlIG5vdGlmaWVkIG9mIHBhc3RlYm9hcmQgYWNjZXNzLgotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzk2LgotICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMTI5MjA0NjE+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5
YWtvdi4KLQotICAgICAgICBBZGRzIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdCBvZiB0
aGUgbmV3IEVkaXRvckNsaWVudCBtZXRob2RzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5D
RTo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50V2luQ0U6OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDEtMjQgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjEzOTA3OC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0K
LTIwMTMtMDEtMjIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAg
ICAgICBVc2UgYSBwbGF0Zm9yb20gc3RyYXRlZ3kgZm9yIGxvY2FsIHN0b3JhZ2UKLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzYwMAotCi0gICAgICAg
IFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgVXBkYXRlIGZvciBuZXcgc3Rv
cmFnZSBzdHJhdGVneS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVT
dG9yYWdlU3RyYXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmg6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTMt
MDEtMTggIFNlb2tqdSBLd29uICA8c2Vva2p1Lmt3b25AZ21haWwuY29tPgotCi0gICAgICAgIEFk
ZCBleHBsaWNpdCBrZXl3b3JkIHRvIGNvbnN0cnVjdG9ycyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBJ
bnNwZWN0b3JDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNzI1NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4KLQotICAg
ICAgICBBZGQgZXhwbGljaXQga2V5d29yZCB0byBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG9uZSBh
cmd1bWVudAotICAgICAgICBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBJ
bnNwZWN0b3JDbGllbnQuCi0gICAgICAgIEFuZCBmaXggc29tZSBjb2Rpbmcgc3R5bGUuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAo
SW5zcGVjdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWRE
YXRhYmFzZSBtZWNoYW5pc20uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDYyOTIuCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9t
ZUNsaWVudFdpbkNFKToKLQotMjAxMi0xMi0yMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KLQotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI4MDgzNzc+IE5ldHdvcmsgcHJv
Y2VzcyBzaG91bGQgcmVzcGVjdCBjb29raWUgYWNjZXB0IHBvbGljeQotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Njg0Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5oOgotICAgICAgICBDb29raWVzU3RyYXRlZ3kgbm8gbG9uZ2VyIGhhcyBub3Rp
ZnlDb29raWVzQ2hhbmdlZCgpLiBUaGlzIHBvcnQgZGlkbid0IHVzZSBpdCBhbnl3YXkuCi0KLTIw
MTItMTItMjIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAg
QWRkIGEgc2VwYXJhdGUgY2xhc3MgZm9yIG5ldHdvcmtpbmcgcmVsYXRlZCBzdG9yYWdlCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NzYKLQotICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmNvb2tpZXNGb3JET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OnNldENvb2tpZXNGcm9tRE9NKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpj
b29raWVzRW5hYmxlZCk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmdldFJhd0Nvb2tpZXMpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRl
bGV0ZUNvb2tpZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuaDoKLSAgICAgICAgQ29va2llIGZ1bmN0aW9ucyBub3cgdGFrZSBhIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiwgbm90IGEgTmV0d29ya2luZ0NvbnRleHQuCi0KLTIwMTItMTItMTggIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIHVubmVjZXNz
YXJ5IGZ1bmN0aW9ucyBmcm9tIENvb2tpZXNTdHJhdGVneQotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MzY5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
QnJhZHkgRWlkc29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmg6Ci0KLTIwMTItMTItMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KLQotICAgICAgICBSZW5hbWUgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkIHRvIGNv
bnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MTIyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
cmVhcyBLbGluZy4KLQotICAgICAgICBVcGRhdGUgZm9yIFdlYkNvcmUgY2hhbmdlcy4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjb252ZXJ0TWFpblJlc291cmNlTG9h
ZFRvRG93bmxvYWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTEyLTE1
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KLQotICAgICAgICBSZS1sYW5kaW5nIHBh
dGNoIGZvciAiSW50cm9kdWNpbmcgdGhlIERhdGFiYXNlU3RyYXRlZ3kgYW5kIGRhdGFiYXNlIHNl
cnZlcnMiLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA0OTM0LgotCi0gICAgICAgIE5vdCByZXZpZXdlZC4KLQotICAgICAgICBNZXJnZWQgZnJvbSBy
MTM3NzY3LiBQcmV2aW91c2x5IHJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlRGF0YWJhc2VTdHJhdGVneSk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFKToKLQotMjAxMi0xMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEzNzc2Ny4KLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM3NzY3
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwNjIK
LQotICAgICAgICBCcm9rZSBNYWMgYnVpbGRzLiAoUmVxdWVzdGVkIGJ5IG1sYW0gb24gI3dlYmtp
dCkuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5j
cHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoK
LSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKToKLQotMjAxMi0xMi0xNCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+Ci0KLSAgICAgICAgSW50cm9kdWNpbmcgdGhlIERhdGFi
YXNlU3RyYXRlZ3kgYW5kIGRhdGFiYXNlIHNlcnZlcnMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ5MzQuCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
U2FtIFdlaW5pZy4KLQotICAgICAgICBUaGUgZGF0YWJhc2Ugc2VydmVyIGlzIGN1cnJlbnRseSBh
IHBsYWNlaG9sZGVyIHRoYXQgZG9lcyBub3RoaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmNyZWF0ZURhdGFiYXNlU3RyYXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRSk6Ci0KLTIwMTItMTItMTEgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4K
LQotICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb25zb2xlVHlwZXMgc2hvdWxkIG5vdCBleHBvc2Ug
TWVzc2FnZVR5cGUgLSBpdCBzaG91bGQgYmUgcHJpdmF0ZSB0byBpbnNwZWN0b3IuCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM3MQotCi0gICAgICAg
IFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCi0KLSAgICAgICAgRHJvcHMgV2ViQ29yZTo6TWVz
c2FnZVR5cGUgZnJvbSB0aGUgYWRkTWVzc2FnZVRvQ29uc29sZSBtZXRob2QuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudFdpbkNFOjphZGRNZXNzYWdlVG9Db25zb2xlKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2lu
Q0UpOgotCi0yMDEyLTExLTI5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgot
Ci0gICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2Vz
cwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Y29va2llc0ZvckRPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6c2V0Q29va2llc0Zyb21ET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmNvb2tpZXNFbmFibGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Z2V0UmF3Q29va2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6ZGVsZXRlQ29va2llKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpkZWxldGVBbGxDb29raWVzKToKLQotMjAxMi0xMS0yNyAgSmFtZXMgU2ltb25zZW4g
IDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2Fk
ZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0Ci0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEKLQot
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6
Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEzNTc4Ni4KLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MTM1Nzg2Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDMzNzkKLQotICAgICAgICBJdCBtYWRlIDMgcGx1Z2luIHRlc3RzIHRpbWVvdXQgb24gc2V2ZXJh
bCBwbGF0Zm9ybXMgKFJlcXVlc3RlZAotICAgICAgICBieSBPc3N5IG9uICN3ZWJraXQpLgotCi0g
ICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0x
MS0yNiAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAg
Q29uc29saWRhdGUgRnJhbWVMb2FkZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcg
YSBGcmFtZUxvYWRSZXF1ZXN0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDIxNTEKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0g
ICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0x
MS0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTI5NS4KLSAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM1Mjk1Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI4MzQKLQotICAgICAgICBUaGlzIHBhdGNoIGNhdXNlcyBh
c3NlcnRpb24gdG8gc29tZSBsYXlvdXQgdGVzdHMgb24gY2hyb21pdW0KLSAgICAgICAgKFJlcXVl
c3RlZCBieSBqaWFubGkgb24gI3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAg
ICAgICAgKFdlYlZpZXc6OmxvYWQpOgotCi0yMDEyLTExLTIwICBKYW1lcyBTaW1vbnNlbiAgPHNp
bW9uamFtQGNocm9taXVtLm9yZz4KLQotICAgICAgICBDb25zb2xpZGF0ZSBGcmFtZUxvYWRlcjo6
bG9hZCgpIGludG8gb25lIGZ1bmN0aW9uIHRha2luZyBhIEZyYW1lTG9hZFJlcXVlc3QKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1MQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAg
ICAgICAgKFdlYlZpZXc6OmxvYWQpOgotCi0yMDEyLTEwLTI0ICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KLQotICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3IgbG9hZGVyIGN1c3Rv
bWl6YXRpb24uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDAyNzgKLQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAg
ICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UpOgotCi0yMDEyLTEwLTIzICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBzaGFy
ZWQgd29ya2VycwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwMTY1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAo
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6Ci0gICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlU2hhcmVkV29ya2VyU3RyYXRlZ3kp
OgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5rU3Ry
YXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
Lmg6Ci0KLTIwMTItMTAtMTAgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAg
IFtXSzJdIEFjdGl2YXRlIHBsdWdpbnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBzbmFwc2hvdAotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgzMjgKLSAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzEyNDI2NjgxPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEJyYWR5
IEVpZHNvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVjcmVhdGVQ
bHVnaW4pOiBTdHViIGltcGxlbWVudGF0aW9uIG9mIHJlY3JlYXRlUGx1Z2luKCkuCi0KLTIwMTIt
MTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KLQotICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAxMi0x
MC0wNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KLQotICAgICAgICBT
dGFuZGFyZGl6ZSBvbiAiZmx1c2giIHRlcm1pbm9sb2d5IGZvciBjb21wb3NpdGluZyBsYXllciBm
bHVzaGluZy9zeW5jaW5nCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05ODMyMQotCi0gICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAg
ICAgICBSZW5hbWUgY29tcG9zaXRpbmctcmVsYXRlZCBtZXRob2RzIHRoYXQgcmVmZXIgdG8gInN5
bmNpbmciIHRvIGluc3RlYWQKLSAgICAgICAgcmVmZXIgdG8gImZsdXNoaW5nIi4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hy
b21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA5LTI4ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWto
YWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgotCi0gICAgICAgIENvZGUgaW5zaWRlIEZyYW1lTG9h
ZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGUoKSBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIHNoYXJl
ZCBhbW9uZyBkaWZmZXJlbnQgV0sgcG9ydHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3NTQ3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KLQotICAgICAgICBOZXdseSBhZGRlZCBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpjYW5T
aG93TUlNRVR5cGUoKSBmdW5jdGlvbiBpcyB1c2VkCi0gICAgICAgIGluc2lkZSBXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZSgpLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZSk6Ci0KLTIwMTItMDktMjUg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTM5NwotICAgICAgICBOZWVkIHRvIG1lcmdlIGRp
ZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCBhbmQgCi0gICAgICAgIGRpZE5ld0ZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dAotICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCi0gICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xMDc5MTY4MD4KLQotICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgotCi0gICAgICAgIFJlbW92ZSBkaXNwYXRjaERpZEZpcnN0TGF5b3V0LCAKLSAgICAgICAg
ZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQsIGFuZCAKLSAgICAgICAgZGlz
cGF0Y2hEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQuIFRoZWlyIGZ1bmN0aW9uYWxp
dHkgCi0gICAgICAgIGlzIG5vdyByZXBsYWNlZCBieSBkaXNwYXRjaERpZExheW91dChMYXlvdXRN
aWxlc3RvbmVzKQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRj
aERpZExheW91dCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDgtMjgg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjY5MTQuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvY2hhbmdlc2V0LzEyNjkxNAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTUyMzkKLQotICAgICAgICBpdCBicmVha3MgZXZlcnl0aGluZyBhbmQg
Zml4ZXMgbm90aGluZyAoUmVxdWVzdGVkIGJ5IHBpemxvIG9uCi0gICAgICAgICN3ZWJraXQpLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgot
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEy
LTA4LTI4ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0g
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTIt
MDgtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjY4MzYuCi0gICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyNjgzNgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUxNjMKLQotICAgICAgICBCcm9rZSBhbGwgQXBwbGUgcG9y
dHMsIEVGTCwgYW5kIFF0LiAoUmVxdWVzdGVkIGJ5IHRrZW50IG9uCi0gICAgICAgICN3ZWJraXQp
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3Bw
OgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0y
MDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJh
QG9wZW5ib3NzYS5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFs
dWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNzg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6
Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIw
MTItMDgtMTMgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW2No
cm9taXVtXSByZWxlYXNlIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQgcmVm
cHRyIHVwb24gUGx1Z2luIERvY3VtZW50IGRldGFjaC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjgzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCi0KLSAgICAgICAgQ2hhbmdlIHRoZSBjbGllbnQgcmVkaXJlY3REYXRhVG9QbHVn
aW4gbWV0aG9kKHMpIHRvIGV4cGVjdCB0aGUgcG9zc2liaWxpdHkgb2YKLSAgICAgICAgYSBOVUxM
IGFyZ3VtZW50LCBrZWVwaW5nIGV4aXN0aW5nIGJlaGF2aW91ciBvdGhlcndpc2UuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgot
Ci0yMDEyLTA3LTIzICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgotCi0g
ICAgICAgIFVuaWZ5IG51bVRvdWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQgYW5kIG5lZWRUb3VjaEV2
ZW50cyBpbiB0aGUgY2hyb21lIGNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTEwMDYKLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5p
d2EuCi0KLSAgICAgICAgUmVtb3ZlIG51bVRvdWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQgc3R1Yi4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTIt
MDctMTcgIFZpdmVrIEdhbGF0YWdlICA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+Ci0KLSAgICAg
ICAgV2ViIEluc3BlY3RvcjogcmVmYWN0b3IgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZy
b250ZW5kKCkgdG8gYWNjZXB0IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC4KLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMTk2Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KLQotICAgICAgICBSZWZhY3RvcmluZyBJbnNwZWN0b3JD
bGllbnRzLiBJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZAotICAgICAgICBu
b3cgcmV0dXJuaW5nIHRoZSBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
Okluc3BlY3RvckNsaWVudFdpbkNFOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChJbnNwZWN0
b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDUtMzEgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBj
aHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUkVHUkVTU0lPTihyMTE3NTcyKTogZWRpdGluZy9zcGVs
bGluZy9zcGVsbGNoZWNrLWFzeW5jLXJlbW92ZS1mcmFtZS5odG1sIGNyYXNoZXMgb24gTWFjCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Njg1OQotCi0g
ICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdp
bkNFOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6Ci0KLTIwMTItMDUtMzAgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBi
dWlsZCBmaXggYWZ0ZXIgcjExNTkyNi4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotCi0yMDEy
LTA1LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAg
IFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxMTc0NzAuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoRWRpdG9yQ2xpZW50
V2luQ0UpOgotCi0yMDEyLTA1LTE4ICBNT1JJVEEgSGFqaW1lIDxtb3JyaXRhQGdvb2dsZS5jb20+
Ci0KLSAgICAgICAgQW5vdGhlciB1bnJldmlld2VkIGF0dGVtcHQgdG8gZml4IGJ1aWxkIGJyZWFr
YWdlIG9uIHIxMTc1NzIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6ZnJhbWVXaWxsRGV0
YWNoUGFnZSk6Ci0KLTIwMTItMDUtMTggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5j
b20+Ci0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1
NTE1Ci0gICAgICAgIFN0YWxlIGZyYW1lIGluIFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hl
Y2tTdWNjZWVkZWQKLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0
OjpFZGl0b3JDbGllbnRXaW5DRTo6ZnJhbWVXaWxsRGV0YWNoUGFnZSk6Ci0KLTIwMTItMDUtMTcg
IEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW1JlZmFjdG9y
aW5nXSBNb3ZlIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgaW4gRWRpdG9yOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uIHRvIHRoZSBXZWJLaXQgbGF5ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NTkxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgotCi0gICAgICAgIFRoaXMgY2hhbmdlIGFkZHMgYSBUZXh0Q2hlY2tlckNsaWVu
dDo6c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24KLSAgICAgICAgZnVuY3Rp
b24gdG8gcmVtb3ZlIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgZnJvbSBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24KLSAgICAgICAgZnVuY3Rpb24uCi0KLSAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJL
aXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAg
ICAgIChFZGl0b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDUtMDQgIE5hdGUgQ2hhcGluICA8amFw
aGV0QGNocm9taXVtLm9yZz4KLQotICAgICAgICBEb24ndCByZXF1aXJlIEZyYW1lTG9hZGVyQ2xp
ZW50IHRvIG1hbnVmYWN0dXJlIGEgY29tbWl0RGF0YSgpIGNhbGwgZm9yIGVtcHR5IGRvY3VtZW50
cy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTMz
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEyLTA0
LTE4ICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+Ci0KLSAgICAgICAgRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudCgpIHNob3VsZCBiZSBn
aXZlbiBtb3JlCi0gICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtIGJlaW5nIHN1Ym1p
dHRlZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQy
OTcKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVzdGVzLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQpOgotICAgICAg
ICBVcGRhdGVkIG1ldGhvZCBkZWNsYXJhdGlvbi4KLQotMjAxMi0wMy0zMCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBbV2luQ0VdIENvcnJlY3QgPHd0
Zi8qLmg+IGluY2x1ZGUgcGF0aHMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjcxMwotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgot
Ci0gICAgICAgIE1vZGlmeSB0aGUgI2luY2x1ZGUgZGVjbGFyYXRpb25zIGZvciBzZXZlcmFsIFdp
bkNFLXJlbGF0ZWQgZmlsZXMKLSAgICAgICAgc28gdGhhdCB0aGUgd3RmIHR5cGVzIGFyZSBpbmNs
dWRlZCB1c2luZyB0aGUgZnVsbCBwYXRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAg
ICAgICogV2ViVmlldy5oOgotCi0yMDEyLTAzLTI4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZSBj
YWxsYmFjaywgc2luY2Ugbm8KLSAgICAgICAgcG9ydCBpbXBsZW1lbnRzIGl0LgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MzkKLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTE5ICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yICJtYWdpYyIgaWZyYW1l
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTU5MAot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbW92ZSBGcmFt
ZUxvYWRlckNsaWVudCBtZXRob2RzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoK
LSAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBKb24gTGVl
ICA8am9ubGVlQGFwcGxlLmNvbT4KLQotICAgICAgICBTZXBhcmF0ZSBOT1RJRklDQVRJT05TIGFu
ZCBMRUdBQ1lfTk9USUZJQ0FUSU9OUwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODA5MjIKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDM1MDgyPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEppYW4gTGkuCi0KLSAgICAgICAgWW91IGNhbiBpbmNsdWRl
IGVpdGhlciBOT1RJRklDQVRJT05TIG9yIExFR0FDWV9OT1RJRklDQVRJT05TIGFuZCBoYXZlIGEg
Y29tcGxldGUgQVBJLgotICAgICAgICBMRUdBQ1lfTk9USUZJQ0FUSU9OUyBzaG91bGQgY292ZXIg
YWxsIG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbmFsaXR5LCBhbmQgTk9USUZJQ0FUSU9OUyB3aWxs
IGNvdmVyIHRoZQotICAgICAgICBuZXcgQVBJLiBUaGVyZWZvcmUsIEFQSXMgdGhhdCBhcmUgY29t
bW9uIGJldHdlZW4gdGhlIHR3byB3aWxsIGhhdmU6Ci0gICAgICAgICNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotCi0gICAgICAgIFRoaXMg
cGF0Y2ggaW5pdGlhbGx5IHNldHMgYm90aCB0byBiZSBleGFjdGx5IHRoZSBzYW1lLiBBcyBvdGhl
ciBidWdzIHdpdGggcGF0Y2hlcyBiZWdpbiB0byBtaWdyYXRlIHRvCi0gICAgICAgIHRoZSBuZXcg
QVBJLCB0aGUgZGVmaW5lcyB3aWxsIGJlZ2luIHRvIHNwbGl0LiBUaGlzIGFsbG93cyBwb3J0cyB0
byBkZWNpZGUgd2hpY2ggc2V0IG9mIEFQSXMgdG8gaW5jbHVkZS4KLQotICAgICAgICBVcGRhdGUg
ZXZlcnl0aGluZyB0byBiZSAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdB
Q1lfTk9USUZJQ0FUSU9OUykKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+ICYmIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFp
bkBhcHBsZS5jb20+Ci0KLSAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NTMKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5D
RSk6Ci0KLTIwMTItMDMtMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAg
IFJlbmFtZSBOb3RpZmljYXRpb25QcmVzZW50ZXIgdG8gTm90aWZpY2F0aW9uQ2xpZW50Ci0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDQ4OAotICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTA5NjU1NTg+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFy
byBIYXJhLgotCi0gICAgICAgIFJlZmFjdG9yIHRvIHVzZSByZW5hbWVkIFdlYkNvcmU6Ok5vdGlm
aWNhdGlvbkNsaWVudC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAyLTI2ICBIYWppbWUg
TW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIE1vdmUgQ2hyb21lQ2xp
ZW50OjpzaG93Q29udGV4dE1lbnUoKSB0byBDb250ZXh0TWVudUNsaWVudAotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0MjcKLQotICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wMi0yNCAg
U2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgU3BlbGxD
aGVja1JlcXVlc3QgbmVlZHMgdG8ga25vdyB0aGUgY29udGV4dCB3aGVyZSB0aGUgc3BlbGxjaGVj
ayBoYXBwZW5lZC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5MzIwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudFdpbkNFOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6Ci0KLTIwMTItMDIt
MjMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5y
ZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjEwODQ2Mi4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRXaW5D
RSk6Ci0KLTIwMTItMDItMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgUmVtb3ZlIHRoZSByZW1haW5pbmcgdXNlcyBvZiBDU1NTdHlsZURlY2xhcmF0aW9uIGlu
IEVkaXRvcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg5MzkKLQotICAgICAgICBSZXZpZXdlZCBieSBFbnJpY2EgQ2FzdWNjaS4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEFwcGx5U3R5bGUpOgotCi0yMDEyLTAyLTIyICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJlbW92ZSB0aGUgcmVtYWlu
aW5nIHVzZXMgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBpbiBFZGl0b3IKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4OTM5Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRW5yaWNhIENhc3VjY2kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzaG91
bGRBcHBseVN0eWxlKToKLQotMjAxMi0wMi0yMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWlu
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgR2V0IHJpZCBvZiB0aGUgTG9jYWxpemF0aW9uU3RyYXRl
Z3kKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzI0
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICBSZW1vdmUgYSB1
c2VsZXNzICNpbmNsdWRlIG9mIExvY2FsaXphdGlvblN0cmF0ZWd5LmguCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEyLTAyLTE1ICBQ
YXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3
ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxMDc2MDYuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UpOgotCi0yMDEyLTAyLTE1ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2Fk
cnVsQGNocm9taXVtLm9yZz4KLQotICAgICAgICBOb3RpZnkgQ2hyb21lQ2xpZW50IHdoZW4gdG91
Y2gtZXZlbnQgaGFuZGxlcnMgYXJlIGluc3RhbGxlZC9yZW1vdmVkLgotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0NDAKLQotICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBGaXNoZXIgYW5kIFJ5b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dFdpbkNFOjpudW1Ub3VjaEV2ZW50SGFuZGxlcnNDaGFuZ2VkKToKLQotMjAxMS0xMi0xOSAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIE1vcmUgUGxhdGZvcm1FdmVudCBj
bGVhbnVwCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NDgzMQotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAgICAgKiBX
ZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgotICAgICAg
ICBVcGRhdGUgdG8gdXNlIG5ldyBuYW1lcywgYWNjZXNzIHN0eWxlLgotCi0yMDExLTEyLTE2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJlbmFtZSByZWdpc3Rl
ckNvbW1hbmRGb3IoVW5kb3xSZWRvKSB0byByZWdpc3RlcihVbmRvfFJlZG8pU3RlcAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDgKLQotICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6
OnJlZ2lzdGVyVW5kb1N0ZXApOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6
cmVnaXN0ZXJSZWRvU3RlcCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0xMi0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIEdpdmUgUGxhdGZvcm1FdmVudHMgYSBiYXNlIGNsYXNzCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY4NQotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICBBZGQgYSBiYXNlIGNsYXNzIGZvciBQbGF0
Zm9ybU1vdXNlRXZlbnQsIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCwgUGxhdGZvcm1XaGVlbEV2ZW50
Ci0gICAgICAgIGFuZCBQbGF0Zm9ybUdlc3R1cmVFdmVudCBhbmQgbW92ZSBUeXBlIGVudW1lcmF0
aW9uIGFuZCBtb2RpZmllcnMgZG93biB0byBpdC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2lu
Q0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoK
LSAgICAgICAgKFdlYlZpZXc6OmhhbmRsZUtleURvd24pOgotICAgICAgICAoV2ViVmlldzo6aGFu
ZGxlS2V5UHJlc3MpOgotICAgICAgICAoV2ViVmlldzo6aGFuZGxlS2V5VXApOgotCi0yMDExLTEy
LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIE9ubHkgRWRp
dENvbW1hbmRDb21wb3NpdGlvbiBzaG91bGQgaW1wbGVtZW50IHVuYXBwbHkgYW5kIHJlYXBwbHkK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDkwCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dFdpbkNFOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50V2luQ0U6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8pOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTItMTQgIEppbmcgWmhhbyAgPGpp
bmd6aGFvQGNocm9taXVtLm9yZz4KLQotICAgICAgICBPcGVuaW5nIHR3byBwb3B1cCBtZW51cyBi
eSBkaXNwYXRjaEV2ZW50KCkgbWFrZXMgcHJvYmxlbXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMwNAotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5
b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
LmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6Omhhc09wZW5lZFBvcHVw
KTogTm90IGltcGxlbWVudGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6IE92ZXJyaWRlcyBoYXNPcGVuZWRQb3B1cCgpLgotCi0yMDExLTExLTMwICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZSBhbiB1bm5l
ZWRlZCBhcmd1bWVudCBmcm9tIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZAotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0ODYKLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2UuCi0KLTIwMTEt
MTEtMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDExOTMuCi0gICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzEwMTE5MwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNTgKLQotICAgICAgICBCcmVha3MgV2luZG93cyBhbmQg
UXQgbWluaW1hbC4gKFJlcXVlc3RlZCBieSBwZmVsZG1hbiBvbgotICAgICAgICAjd2Via2l0KS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTEx
LTIyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KLQotICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZW1vdmUgSW5zcGVjdG9yOjpicmluZ1RvRnJvbnQgZnJvbSB0aGUgcHJvdG9j
b2wuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjkz
NwotCi0gICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
Okluc3BlY3RvckNsaWVudFdpbkNFOjpicmluZ0Zyb250ZW5kVG9Gcm9udCk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0yMSAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5D
RSBidWlsZCBmaXggYWZ0ZXIgcjEwMDg3NC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbik6Ci0KLSAgICAgICAgICAgIEFkZCBXZWJDb3JlOjpGcmFtZSogcGFy
YW1ldGVyIHRvIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKS4KLQotMjAxMS0xMS0xNSAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIEhvc3RXaW5kb3cg
c2NyZWVuVG9XaW5kb3cvd2luZG93VG9TY3JlZW4gc2hvdWxkIGJlIHNjcmVlblRvUm9vdFZpZXcv
cm9vdFZpZXdUb1NjcmVlbgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzIzOTcKLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cm9vdFZpZXdUb1NjcmVlbik6Ci0gICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY3JlZW5Ub1Jvb3RWaWV3KToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTE0ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgSG9zdFdpbmRvdyBpbnZh
bGlkYXRpb24gZnVuY3Rpb25zIHNob3VsZCB1c2Ugcm9vdCB2aWV3IGNvb3JkaW5hdGVzCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMzOAotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjppbnZhbGlkYXRlUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAg
ICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEtMDQgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTkNFXSBVc2UgZGVmYXVs
dCBMb2NhbGl6YXRpb25TdHJhdGVneQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzE0OTUKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgot
Ci0gICAgICAgIFVzZSBMb2NhbGl6YXRpb25TdHJhdGVneSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBv
ZiB1c2luZyBhIGNvcHkgb2YgdGhlIHN0cmluZ3MgaW4gV2ViS2l0LgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMTEtMDIgIFRvbSBT
ZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgWFNTQXVkaXRvciBpcyBzaWxl
bnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTcz
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaWREZXRlY3RYU1MpOgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0wMiAgSm9uIExlZSAgPGpv
bmxlZUBhcHBsZS5jb20+Ci0KLSAgICAgICAgPGlucHV0PWZpbGUgbXVsdGlwbGU+IGRlZmF1bHQg
dGV4dCB1c2VzIHNpbmd1bGFyIGluc3RlYWQgb2YgcGx1cmFsCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxOQotICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTAzNzkwMjE+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVs
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgot
Ci0yMDExLTEwLTI4ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgotCi0g
ICAgICAgIFJlbmFtZSBhIG51bWJlciBvZiBtZXRob2RzIG1lbnRpb25pbmcgSmF2YVNjcmlwdCB0
byBqdXN0IFNjcmlwdCBpbnN0ZWFkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTEwNQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0K
LSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OldlYlZpZXcpOgotCi0y
MDExLTEwLTA3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAg
ICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHI5NTYwNC4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjppc0xpbmtWaXNpdGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjphZGRWaXNpdGVkTGluayk6Ci0KLTIwMTEtMDktMjQgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02ODc2NwotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQot
MjAxMS0wOS0yMSAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KLQotICAg
ICAgICBbUXRdIFJlbW92ZSBRdCBzcGVjaWZpYyBjb2RlIGZyb20gY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NzAyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAo
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmFkZFZpc2l0ZWRMaW5rKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTA5LTE3ICBNaWhh
aSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEZyYW1lTG9hZGVy
Q2xpZW50IEJhY2tGb3J3YXJkTGlzdC1yZWxhdGVkIG1ldGhvZHMgYXJlIHVuc3VlZAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTMKLQotICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBSZW1vdmUgRnJhbWVMb2FkZXJD
bGllbnQgbWV0aG9kcyB0aGF0IHdlcmUgYWRkZWQgYnkgcjUxNjI5LCBzaW5jZSBvbmx5ICAgICAg
ICAKLSAgICAgICAgdGhlIG9sZCAoc2luY2UtZGVsZXRlZCkgQW5kcm9pZCBwb3J0IG5lZWRlZCB0
aGVtLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5j
cHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgot
Ci0yMDExLTA5LTE1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAg
UmVuYW1lIEVOQUJMRShEQVRBQkFTRSkgdG8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjA1Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0wOC0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBXaW5DRSBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByOTQwODAuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY3JvbGxSZWN0SW50b1ZpZXcpOgotCi0yMDExLTA4LTMw
ICBLYXVzdHViaCBBdHJhd2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgotCi0gICAgICAg
IFRoZSB1bnVzZWQgU2Nyb2xsVmlldyogYXJndW1lbnQgY2FuIGFuZCBzaG91bGQgYmUgcmVtb3Zl
ZCBmcm9tCi0gICAgICAgIHNjcm9sbFJlY3RJbnRvVmlldy4KLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTE3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5oOgotCi0yMDExLTA4LTE3ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KLQotICAg
ICAgICBNYWtlIFdlYkNvcmUga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBkZXZpY2Ugc2NhbGUg
ZmFjdG9yCi0KLSAgICAgICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvNjY0MTM+IFdlYkNv
cmUgcmVxdWlyZXMgZXZlcnkgV2ViS2l0IHBvcnQgdG8ga2VlcCB0cmFjayBvZiB0aGUKLSAgICAg
ICAgZGV2aWNlIHNjYWxlIGZhY3RvcgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIFJlbW92
ZWQgZGV2aWNlU2NhbGVGYWN0b3IuCi0KLTIwMTEtMDgtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWlj
aEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zZmVyTG9h
ZGluZ1Jlc291cmNlRnJvbVBhZ2UgZG9lcyBub3QgaGF2ZSBlbm91Z2ggcGFyYW1ldGVycwotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjUKLQotICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6dHJhbnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTEw
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KLQotICAgICAgICBDbGVhciB1cCBzY2Fs
ZSBmYWN0b3IgdGVybWlub2xvZ3kKLQotICAgICAgICBXZWJLaXQgYnkgYW5kIGxhcmdlIGRlYWxz
IHdpdGggdHdvIHNjYWxlIGZhY3RvcnM6IG9uZSBpbnRyaW5zaWMgdG8gdGhlIGRldmljZSBvbiB3
aGljaCB0aGUKLSAgICAgICAgc29mdHdhcmUgaXMgcnVubmluZywgYW5kIG9uZSB0aGF0IGlzIHBl
ci1QYWdlIGFuZCBjYW4gYmUgY29udHJvbGxlZCB2aWEgQVBJIGNhbGxzLiBUaGlzCi0gICAgICAg
IHBhdGNoIG5hbWVzIHRoZSBmb3JtZXIgImRldmljZVNjYWxlRmFjdG9yIiBhbmQgdGhlIGxhdHRl
ciAicGFnZVNjYWxlRmFjdG9yIiwgYW5kIG1ha2VzIHRoZQotICAgICAgICBjb2RlIHVzZSB0aG9z
ZSBuYW1lcy4gSXQgc2hvdWxkIGludHJvZHVjZSBubyBiZWhhdmlvciBjaGFuZ2VzLgotCi0gICAg
ICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1Nzg3PiBXZWJLaXQgdXNlcyBtdWx0aXBs
ZSBjb25mbGljdGluZyBuYW1lcyB0byByZWZlciB0byB0aGUKLSAgICAgICAgZGV2aWNlIHNjYWxl
IGZhY3RvcgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTAzICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92
ZSBOb2RlIHBhcmFtZXRlciBmcm9tIHRoZSBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodAotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1NDkKLQotICAg
ICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JDbGllbnRXaW5DRTo6aGlnaGxpZ2h0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5
ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KLQotICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxv
YWQ9J2ZpbGVuYW1lJyBhdHRyaWJ1dGUgaW4gYW5jaG9ycy4KLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTgwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzdGFy
dERvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6Ci0KLTIwMTEtMDctMTUgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQot
ICAgICAgICBSRUdSRVNTSU9OOiBNb3VzZSBjdXJzb3IgZG9lc27igJl0IGhpZGUgd2hlbiBmdWxs
IHNjcmVlbiB2aWRlbyBIVUQgaGlkZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY0NjE1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKTogQWRkZWQgdGhpcyBzdHViLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBl
Y2tAd2Via2l0Lm9yZz4KLQotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQg
bm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE3NwotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudFdpbkNFOjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA2LTMwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
dCBUYW11cmEuCi0KLSAgICAgICAgQ2hhbmdlIHRoZSBsYWJlbCBvZiBhbiBIVE1MNSBmaWxlIGNo
b29zZXIgYnV0dG9uIHRvICJDaG9vc2UgRmlsZXMiCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTI0NQotCi0gICAgICAgIFdlIHNob3VsZCBub3RpZnkg
Y2FwYWJpbGl0eSBvZiBtdWx0aXBsZSBmaWxlcyB0byB1c2Vycy4KLQotICAgICAgICBUZXN0OiBm
YXN0L2Zvcm1zL2lucHV0LWZpbGUtbGFiZWwuaHRtbAotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwpOiBVcGRhdGVkIHRoZSBkZXNjcmlw
dGlvbiBmb3IgIkNob29zZSBGaWxlIi4KLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
OjpmaWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKTogUmV0dXJucyBhICJDaG9vc2Ug
RmlsZXMiIGxhYmVsLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmg6Ci0KLTIwMTEtMDYtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHI4OTI5My4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLQotMjAxMS0wNi0x
OCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFNlcGFyYXRlIGNvbmNlcm5zIG9mIGxv
YWRpbmcgZmlsZSBpY29ucyBhbmQgY2hvb3NpbmcgZmlsZXMuCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjkzMQotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnRXaW5DRTo6bG9hZEljb25Gb3JGaWxlcyk6IFJlbmFtZWQuCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFr
b3YuCi0KLSAgICAgICAgUmVuYW1lIEZyYW1lTG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xp
Y3lDaGFuZ2VFcnJvciB0byB1c2UgdGhlIHBhc3QgdGVuc2UKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTE2Ci0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA1
LTEzICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBT
aW1vbiBGcmFzZXIuCi0KLSAgICAgICAgQ2FuJ3QgaG9yaXpvbnRhbGx5IHNjcm9sbCBpZnJhbWVz
IGFuZCBvdmVyZmxvdyBiZWNhdXNlIHdoZWVsIGV2ZW50cyBhcmUgYWx3YXlzIGFjY2VwdGVkCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDc3OQotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbik6IERl
ZmF1bHQgaW1wbCBvZiBuZXcgQ2hyb21lQ2xpZW50IG1ldGhvZAotICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnRXaW5DRTo6bnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6IERlZmF1bHQg
aW1wbCBvZiBuZXcgQ2hyb21lQ2xpZW50IG1ldGhvZAotCi0yMDExLTA1LTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgotCi0gICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9u
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQp
OgotCi0yMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICBFeHBvc2UgV2ViVmlldyBkaXJl
Y3RseSB0aHJvdWdoIENocm9tZUNsaWVudC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5OTAyCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6d2Vi
Vmlldyk6Ci0KLTIwMTEtMDUtMDQgIFRhbyBCYWkgIDxtaWNoYWVsYmFpQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCi0KLSAgICAgICAgUG9wdWxhdGUg
dG91Y2gtaWNvbiB1cmwgdG8gRnJhbWVMb2FkZXJDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MTQzCi0KLSAgICAgICAgUmVzcGVjdCB0aGUg
aW50ZXJmYWNlIGNoYW5nZSBpbiBGcmFtZUxvYWRlckNsaWVudC4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZENoYW5nZUljb25zKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDUtMDEg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTl0g
VW5yZXZpZXdlZCBidWlsZGZpeCBhZnRlciByODU0MzQuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNw
cDoKLSAgICAgICAgKFdlYlZpZXc6OnBhaW50KToKLQotMjAxMS0wNC0yMSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjg0
NTc0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6Y2FuQ29weUN1dCk6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpjYW5QYXN0ZSk6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNC0xOSAgVnNldm9sb2QgVmxh
c292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBG
ZWxkbWFuLgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbmFtZSBsZW5ndGhSZWNlaXZlZCB0
byBlbmNvZGVkRGF0YUxlbmd0aC9kYXRhTGVuZ3RoCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODg4MwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA0LTA0ICBNT1JJVEEgSGFqaW1lICA8
bW9ycml0YUBnb29nbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4K
LQotICAgICAgICBbUmVmYWN0b3JpbmddIFNwZWxsQ2hlY2tpbmdSZXN1bHQgc2hvdWxkIGJlIHJl
cGxhY2VkIHdpdGggVGV4dENoZWNraW5nUmVzdWx0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjA4NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMS0wNC0wNCAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWlu
LgotCi0gICAgICAgIFJFR1JFU1NJT04gKFdlYktpdDIpOiBDYXBzLUxvY2sgaW5kaWNhdG9yIHNv
bWV0aW1lcyBkb2Vzbid0IGFwcGVhciBpbiBXZWJLaXQyCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTIzMAotICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODc4MDk4OT4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOiAoV2ViVmlldzo6aGFuZGxlS2V5RG93
bik6IE1vdmVkIENhcHMgTG9jayBoYW5kbGluZyBmcm9tIFdlYktpdHMgdG8gV2ViQ29yZSwKLSAg
ICAgICAgYmVjYXVzZSBXZWJLaXQgc2hvdWxkbid0IGJlIHNtYXJ0LgotCi0yMDExLTAzLTMxICBQ
YXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3
ZWQgV2luQ0UgYnVpbGQgZml4IGZvciByODI1ODAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6IFN0cmluZ1dpdGhEaXJlY3Rpb24gaXMgaW4gV2Vi
Q29yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YW5kIG5vdCBpbiBXVEYgbmFtZXNwYWNlLgotCi0yMDExLTAzLTMxICBFdmFuIE1hcnRpbiAgPGV2
YW5AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0g
ICAgICAgIDx0aXRsZT4gc2hvdWxkIHN1cHBvcnQgZGlyIGF0dHJpYnV0ZQotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NjEKLQotICAgICAgICBVcGRh
dGUgdG8gbmV3IEZyYW1lTG9hZGVyQ2xpZW50IGludGVyZmFjZS4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6Ci0gICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNldFRpdGxlKToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjcgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICBbV0lOQ0VdIFVzZSBhIGFwcHJvcHJpYXRlIHVz
ZXIgYWdlbnQgc3RyaW5nCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NzE3NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnVz
ZXJBZ2VudCk6Ci0KLTIwMTEtMDMtMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAg
KiBDTWFrZUxpc3RzV2luQ0UudHh0OiBBZGRlZCBtaXNzaW5nIGluY2x1ZGUgZGlyZWN0b3J5Lgot
Ci0yMDExLTAzLTI1ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KLQotICAgICAgICBSRUdSRVNTSU9OIChyNzA3NDgp
OiBsYXRlc3QgbmlnaHRseSBidWlsZHMga2lsbHMgQUNfUXVpY2tUaW1lLmpzCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTAxNgotCi0gICAgICAgIFVw
ZGF0ZSBvYmplY3RDb250ZW50VHlwZSgpIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aGUKLSAg
ICAgICAgc2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcyBmbGFnLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om9iamVjdENvbnRlbnRUeXBlKToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjQgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI4MTkxNiBhbmQgcjgxOTE3LgotICAgICAgICBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC84MTkxNgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2NoYW5nZXNldC84MTkxNwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTcwNzEKLQotICAgICAgICBicm9rZSBhIHRlc3Qgb24gcGxhdGZvcm1zIHRo
YXQgZG8gbm90IGhhdmUgUXVpY2tUaW1lIGluc3RhbGxlZAotICAgICAgICAoUmVxdWVzdGVkIGJ5
IGVzdGVzIG9uICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6Om9iamVjdENvbnRlbnRUeXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBw
bGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJF
R1JFU1NJT04gKHI3MDc0OCk6IGxhdGVzdCBuaWdodGx5IGJ1aWxkcyBraWxscyBBQ19RdWlja1Rp
bWUuanMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
MDE2Ci0KLSAgICAgICAgVXBkYXRlIG9iamVjdENvbnRlbnRUeXBlKCkgaW1wbGVtZW50YXRpb24g
dG8gaGFuZGxlIHRoZQotICAgICAgICBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzIGZsYWcu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b2JqZWN0Q29udGVudFR5
cGUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoK
LQotMjAxMS0wMy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICBSZXBsYWNlIFdlYktpdDIncyBk
ZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSB3aXRoIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTgyNwotCi0gICAg
ICAgIFJlbmFtZWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlN
RVR5cGUgdG8gZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZQotICAgICAgICBhbmQgcGFz
cyB0aGUgZW50aXJlIHJlc3BvbnNlLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIE1JTUVUeXBlLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAg
ICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yUmVzcG9uc2UpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0wMy0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KLQotICAgICAgICBSZW1vdmluZyBhbiBpbmNsdWRlIG9mIFdlYkNvcmVLZXlib2FyZFVJTW9k
ZS5oIHRoYXQgSXZlIGp1c3QgYWRkZWQuIEl0J3MgYWxyZWFkeSBpbmNsdWRlZAotICAgICAgICB2
aWEgQ2hyb21lQ2xpZW50LmgKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMDMtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgUkVHUkVT
U0lPTiAoV2ViS2l0Mik6IFRhYiBrZXlzIG5vIGxvbmdlciBvYnNlcnZlIEZ1bGwgS2V5Ym9hcmQg
QWNjZXNzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTYzMwotICAgICAgICA8cmRhcjovL3Byb2JsZW0vODk2MzAyMz4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDogKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OmtleWJvYXJkVUlNb2RlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotICAgICAgICBJbXBsZW1lbnQga2V5Ym9hcmRVSU1vZGUoKSBpbnN0ZWFkIG9m
IHRhYnNUb0xpbmtzKCkuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBzaW5jZQotICAgICAg
ICB0aGlzIHBsYXRmb3JtIGRvZXNuJ3Qgb2JzZXJ2ZSBvciBoYXZlIGZ1bGwga2V5Ym9hcmQgYWNj
ZXNzIHN0YXRlLgotCi0yMDExLTAzLTAyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KLQotICAgICAgICBXaW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOiBBZGQgYSBuZWVkZWQgaW5jbHVkZS4K
LQotMjAxMS0wMy0wMiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Ci0K
LSAgICAgICAgV2luQ0UgYnVpbGQgZml4LiBIYXZlIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFIGlu
aGVyaXQgZnJvbSBDb29raWVzU3RyYXRlZ3ksCi0gICAgICAgIGFuZCBpbXBsZW1lbnQgdGhlIG5l
ZWRlZCBtZXRob2RzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUNv
b2tpZXNTdHJhdGVneSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6bm90aWZ5
Q29va2llc0NoYW5nZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmg6Ci0KLTIwMTEtMDItMjggIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVtb3ZlIHRo
ZSBzdXBwb3J0IG9mIEZyYW1lOjppc0NvbnRlbnRFZGl0YWJsZSBhbmQgaXRzIGRlcGVuZGVuY2ll
cy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Mjky
Ci0KLSAgICAgICAgUmVtb3ZlIHRoZSBXZWJLaXQgc2lkZSBpbXBsZW1lbnRhdGlvbi4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTE5ICBDaGFybGll
IFJlaXMgIDxjcmVpc0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkg
UGFycGFyaXRhLgotCi0gICAgICAgIEVuc3VyZSBsb2FkaW5nIGhhcyBzdG9wcGVkIGluIEhpc3Rv
cnlDb250cm9sbGVyOjpnb1RvSXRlbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTQ1MTcKLQotICAgICAgICBBZGQgYSBGcmFtZUxvYWRlckNsaWVudCBj
YWxsYmFjayBmb3Igd2hldGhlciB0byBzdG9wIGxvYWRpbmcgYmVmb3JlIGdvVG9JdGVtLgotCi0g
ICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9mb3J3YXJkLXRvLWZyYWdtZW50LWZp
cmVzLW9ubG9hZC5odG1sCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
c2hvdWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5SXRlbSk6IEFkZGVkLgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0xMCAgTHVpeiBB
Z29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEhUTUw1IDxkZXRhaWxzPiBhbmQgPHN1bW1hcnk+
OiBsb2NhbGl6ZWQgdGV4dAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTQyNjAKLQotICAgICAgICBUaGUgbWV0aG9kIGRlZmF1bHREZXRhaWxzU3VtbWFy
eVRleHQgd2FzIGFkZGVkIHRvIExvY2FsaXphdGlvblN0cmF0ZWd5IGNsYXNzLiBJdCBpcyB1c2Vk
IHRvCi0gICAgICAgIHByb3ZpZGUgdGhlIGRlZmF1bHQgbGFiZWwgdG8gYmUgdXNlZCBieSBhIDxk
ZXRhaWxzPiB0YWcgdGhhdCBoYXMgbm8gPHN1bW1hcnk+IGNoaWxkLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMDEtMjYg
IE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgotCi0gICAgICAgIFJlZmFjdG9yaW5nOiBFeHRyYWN0IFRleHRDaGVj
a2VyQ2xpZW50IGZyb20gRWRpdG9yQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzIxMwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnRl
eHRDaGVja2VyKToKLQotMjAxMS0wMi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIEFkZCBFZGl0
b3JDbGllbnQgY2FsbGJhY2tzIHRvIG92ZXJyaWRlIGlzRE9NUGFzdGVBbGxvd2VkIGFuZCBqYXZh
U2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MjQxNwotCi0gICAgICAgIEFkZGVkIHR3byBjYWxsYmFjayBmdW5j
dGlvbnMsIGNhbkNvcHlDdXQgYW5kIGNhblBhc3RlIHRvIEVkaXRvckNsaWVudC4gVGhleSBhcmUg
Y3VycmVudGx5Ci0gICAgICAgIG5vdCBpbXBsZW1lbnRlZC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50V2luQ0U6OmNhbkNvcHlDdXQpOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50V2luQ0U6OmNhblBhc3RlKTogQWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAg
VXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDExLTAyLTA4ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
Ci0KLSAgICAgICAgUmVtb3ZlIG9ycGhhbiBjb2RlIGZyb20gb2xkIHBhcnNlcgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5ODQKLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNj
aSAgPGVucmljYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQg
RGFyaW4gQWRsZXIuCi0KLSAgICAgICAgV2ViS2l0MjogZHJhZyBhbmQgZHJvcCBzdXBwb3J0IG9u
IFdpbmRvd3MuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01Mjc3NQotCi0gICAgICAgIFJlbW92ZWQgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayBmcm9tIERy
YWdDbGllbnQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3Bw
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOgotCi0yMDExLTAy
LTA2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KLQotICAgICAgICBbV0lOQ0VdIEZyYW1lTG9hZGVy
Q2xpZW50IGNhbGxzIGxvYWRVUkxJbkNoaWxkRnJhbWUgb24gdGhlIGNoaWxkJ3MgZnJhbWUgbG9h
ZGVyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5
NgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpjcmVhdGVGcmFt
ZSk6IFVzZSBjb3JlRnJhbWUgaW5zdGVhZCBvZiBjaGlsZEZyYW1lLgotCi0yMDExLTAyLTAzICBB
ZGFtIExhbmdsZXkgIDxhZ2xAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCi0KLSAgICAgICAgUGx1bWIgbWl4ZWQgc2NyaXB0IFVSTCB0byBGcmFtZUxvYWRl
ckNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTIzODQKLQotICAgICAgICBSZWdyZXNzaW9ucyBjb3ZlcmVkIGJ5IGh0dHAvdGVzdHMvc2VjdXJp
dHkvbWl4ZWRDb250ZW50LyoKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBm
b3Igcjc3Mzk4LgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojpw
YWludCk6Ci0KLTIwMTEtMDEtMjggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQot
ICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgIDxzZWxlY3Q+IGNhbid0
IGRpc3BsYXkgcmlnaHQtdG8tbGVmdCAocnRsKSBsYW5ndWFnZXMKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzg1Ci0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudFdpbkNFOjpzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9u
KTogQWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoK
LQotMjAxMS0wMS0yNSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQot
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gRW5zdXJl
IGxheW91dGVkIGZyYW1lIHdoZW4gcGFpbnRpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTA4Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAg
ICAgICAgKFdlYlZpZXc6OnBhaW50KToKLQotMjAxMS0wMS0wNCAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZp
eC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6
IEFkZGVkIG1pc3Npbmcgc2VtaWNvbG9uLgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMi0yOSAgUGF0cmljayBH
YW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBmb3IgV2luQ0UgYWZ0ZXIgcjczODAyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51
Q2xpZW50V2luQ0U6OmN1c3RvbWl6ZU1lbnUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nv
bnRleHRNZW51Q2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMi0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAg
IFdlYktpdDIgbmVlZHMgdG8gbWlycm9yIHRoZSBmcmFtZSB0cmVlIGluIHRoZSBVSVByb2Nlc3MK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTQ2Ci0K
LSAgICAgICAgLSBBZGQgY2xpZW50IGZ1bmN0aW9ucyB0byBub3RpZnkgdGhhdCBhIGZyYW1lIGhh
cyBiZWVuIGFkZGVkIG9yCi0gICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlIGNhY2hlLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFNhdmVUb1BhZ2VDYWNo
ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJlc3RvcmVG
cm9tUGFnZUNhY2hlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTAtMTItMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgRWRpdG9yLmgg
ZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgU2VsZWN0aW9uQ29udHJvbGxlci5oCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ0MQotCi0gICAgICAgIFJl
bmFtZWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVjdGlvbiB0byBTZWxlY3Rpb25EaXJlY3Rp
b24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRF
dmVudCk6Ci0KLTIwMTAtMTAtMjggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KLQotICAgICAgICBzcGVsbGNoZWNr
IGRvZXMgbm90IGNoZWNrIHBhc3RlZCB0ZXh0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDA5MgotCi0gICAgICAgIEFkZGVkIGEgc3R1YiBpbXBsZW1l
bW50YXRpb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5o
OgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KToKLQotMjAxMC0xMi0wNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjczMzkyLgotICAgICAgICBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC83MzM5MgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICBUaGlzIGNvbW1pdCBj
YXVzZWQgY3Jhc2hlcyBvbiB0aGUgR1RLKyBib3RzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKToKLQotMjAxMC0xMi0wNiAgTmF0ZSBDaGFw
aW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCi0KLSAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEwLTEy
LTA2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgW1dJTkNFXSBBZGQgYnVpbGQgc3lz
dGVtCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDUy
MgotCi0gICAgICAgICogQ01ha2VMaXN0c1dpbkNFLnR4dDogQWRkZWQuCi0KLTIwMTAtMTItMDEg
IEppYSBQdSAgPGpwdUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCi0KLSAgICAgICAgU3VwcG9ydCBtdWx0aXBsZSBjb3JyZWN0aW9uIGNhbmRpZGF0ZXMgcGFu
ZWwgZm9yIG1pc3NwZWxsZWQgd29yZCBvbiBNYWMgT1MgWC4KLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMTM3Ci0gICAgICAgIDxyZGFyOi8vcHJvYmxl
bS84NTY4MDU5PgotCi0gICAgICAgIEFkb3B0ZWQgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZSBkZWZp
bmVkIGluIGJhc2UgY2xhc3MuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpnZXRHdWVz
c2VzRm9yV29yZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
aDoKLQotMjAxMC0xMS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gQWRk
IFdlYlZpZXcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUwMjE2Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDogQWRkZWQuCi0gICAgICAgICogV2ViVmll
dy5oOiBBZGRlZC4KLQotMjAxMC0xMS0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjcxNTQxLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0x
MS0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg2ODUKLSAgICAgICAgTm90aWZ5IFVJIHByb2Nlc3MgYWJvdXQgZm9j
dXNlZCBmcmFtZQotCi0gICAgICAgIEFkZGVkIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBuZXcgQ2hyb21lQ2xpZW50IG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6
OmZvY3VzZWRGcmFtZUNoYW5nZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6Ci0KLTIwMTAtMTEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHI3MTA0MS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzaG93Q29udGV4dE1lbnUpOgotCi0yMDEwLTEw
LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVu
cmV2aWV3ZWQsIGJ1aWxkIGZpeCBhZnRlciByNzA1NzQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6dHJhbnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0KLTIw
MTAtMTAtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ4NTc2Ci0gICAgICAgIExldCBXZWJLaXQyIGNsaWVudCBrbm93
IHdoZW4gYSBmcmFtZSBpcyBhIGZyYW1lc2V0Ci0KLSAgICAgICAgQWRkZWQgYSBibGFuayBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgbmV3IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZC4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldCk6Ci0K
LTIwMTAtMTAtMjYgIEplbm4gQnJhaXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92LgotCi0gICAgICAgIFJlc291cmNlIHRyYWNr
aW5nIGZhaWx1cmUgd2hlbiB0cnlpbmcgdG8gbW92ZSBhIGZyYW1lIGJldHdlZW4gZG9jdW1lbnRz
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcxMwot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnRyYW5zZmVyTG9hZGluZ1Jl
c291cmNlRnJvbVBhZ2UpOgotICAgICAgICBFbXB0eSBtZXRob2QuCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDEwLTEwLTI1ICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIEtpbHplci4KLQotICAgICAgICBSZXBsYWNlIF9jb3VudG9mIHdpdGggV1RGX0FSUkFZX0xF
TkdUSAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgy
MjkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLQot
MjAxMC0xMC0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICBXZWJLaXQyIG5lZWRzIHRvIHBhc3Mg
dGhlIGN1cnJlbnQgZXZlbnQgbW9kaWZpZXIgZmxhZ3Mgd2hlbiByZXF1ZXN0aW5nIGEgbmV3IHdp
bmRvdwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgx
NDAKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRvdyk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIEFkZCBOYXZpZ2F0
aW9uQWN0aW9uIHBhcmFtZXRlci4KLQotMjAxMC0xMC0yMiAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0g
ICAgICAgIFtXSU5DRV0gSW1wbGVtZW50IEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVu
dAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTgK
LQotICAgICAgICBDb3B5IHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBFRkwgcG9ydC4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAt
MTAtMTUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgotCi0gICAgICAgIFJlcGxhY2Ugc29tZSBTdHJp
bmc6OmZvcm1hdCgpIHVzYWdlcyBieSBTdHJpbmdDb25jYXRlbmF0ZSBpbiBXZWJLaXQKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzE0Ci0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aW1hZ2VUaXRsZSk6Ci0gICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6bXVsdGlwbGVGaWxlVXBsb2FkVGV4dCk6Ci0KLTIwMTAtMDktMjgg
IEplbm4gQnJhaXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRG1pdHJ5IFRpdG92LgotCi0gICAgICAgIEFkZGVkIG9sZFBhZ2UgcGFyYW0gdG8gRnJh
bWVMb2FkZXJDbGllbnQ6OmRpZFRyYW5zZmVyQ2hpbGRGcmFtZVRvTmV3RG9jdW1lbnQuCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjY2MwotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFRyYW5zZmVyQ2hpbGRGcmFtZVRv
TmV3RG9jdW1lbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLQotMjAxMC0wOS0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEFkZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDYzNzEKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmNwcDogQ29waWVkIGZyb20gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6IENvcGllZCBmcm9tIFdlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmguCi0KLTIwMTAtMDktMjMgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBS
b2Jlbi4KLQotICAgICAgICBBZGQgQ2hyb21lQ2xpZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2Mjk0Ci0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA5LTIzICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQuCi0K
LSAgICAgICAgQnVpbGQgZml4IGZvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTCk6IEFk
ZCBtaXNzaW5nIG1ldGhvZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmg6Ci0KLTIwMTAtMDktMjEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBB
ZGQgIldpbkNFIiB0byBjbGFzc25hbWUgZm9yIGFsbCBXZWJDb3JlU3VwcG9ydCBjbGFzc2VzIHRv
IG1hdGNoIGZpbGVuYW1lLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDYxNzUKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xp
ZW50V2luQ0UuY3BwOiBSZW5hbWUgQ29udGV4dE1lbnVDbGllbnQgdG8gQ29udGV4dE1lbnVDbGll
bnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNF
Lmg6IERpdHRvLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6
IFJlbmFtZSBEcmFnQ2xpZW50IHRvIERyYWdDbGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDogRGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOiBSZW5hbWUgRWRpdG9yQ2xpZW50IHRvIEVkaXRvckNs
aWVudFdpbkNFLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6
IERpdHRvLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNw
cDogUmVuYW1lIEluc3BlY3RvckNsaWVudCB0byBJbnNwZWN0b3JDbGllbnRXaW5DRS4KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOiBEaXR0by4KLQotMjAx
MC0wOS0yMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEFkZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTY4MgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5j
cHA6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaDogQWRkZWQuCi0KLTIwMTAtMDktMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBh
cm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBb
V0lOQ0VdIEFkZCBtaXNzaW5nIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6YmxvY2tlZEVy
cm9yCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTY4
MAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNF
LmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpibG9j
a2VkRXJyb3IpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRl
eHRXaW5DRS5oOgotCi0yMDEwLTA5LTEzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJv
Z2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgotCi0gICAgICAgIEFkZCBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDc0Ci0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOiBBZGRlZC4KLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpGcmFtZU5ldHdvcmtp
bmdDb250ZXh0V2luQ0UpOgotICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0
V2luQ0U6OnVzZXJBZ2VudCk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRl
eHRXaW5DRTo6cmVmZXJyZXIpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRS5oOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFOjpjcmVhdGUpOgotCi0yMDEwLTA4LTMxICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBFZGl0b3JDbGllbnRXaW5DRQotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MjIKLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50Ojp+RWRpdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
OjpzaG91bGREZWxldGVSYW5nZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hv
dWxkU2hvd0RlbGV0ZUludGVyZmFjZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcpOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6c2hvdWxkSW5zZXJ0VGV4dCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6
c2hvdWxkQXBwbHlTdHlsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRp
ZEJlZ2luRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRF
bmRFZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlkU2V0
U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50Ojppc0VkaXRhYmxlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3Rl
ckNvbW1hbmRGb3JVbmRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3Rl
ckNvbW1hbmRGb3JSZWRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjbGVhclVu
ZG9SZWRvT3BlcmF0aW9ucyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2FuVW5k
byk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2FuUmVkbyk6Ci0gICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6dW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6cmVkbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9k
ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cGFnZURlc3Ryb3llZCk6Ci0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0
aG9kS2V5ZG93bik6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlk
QmVnaW5FZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGRE
aWRFbmRFZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hh
bmdlSW5UZXh0RmllbGQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRvVGV4dEZp
ZWxkQ29tbWFuZEZyb21FdmVudCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4
dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnQ6OmxlYXJuV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpnZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6Ci0gICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkpOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKLSAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50Ojp3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDgtMzEgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCi0KLSAgICAgICAgQWRkIERyYWdDbGllbnRX
aW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4
MjEKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IEFkZGVk
LgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1Nv
dXJjZUFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JE
cmFnKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tG
b3JQb2ludCk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6Ci0gICAg
ICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgotICAgICAg
ICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA4LTMx
ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBDb250ZXh0
TWVudUNsaWVudFdpbkNFCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDgyMAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGll
bnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
Q29udGV4dE1lbnVDbGllbnQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
Y29udGV4dE1lbnVEZXN0cm95ZWQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVu
dDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgotICAgICAgICAoV2ViS2l0OjpDb250
ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgotICAgICAgICAoV2ViS2l0
OjpDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwpOgotICAgICAgICAoV2ViS2l0OjpDb250
ZXh0TWVudUNsaWVudDo6Y29weUltYWdlVG9DbGlwYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpD
b250ZXh0TWVudUNsaWVudDo6c2VhcmNoV2l0aEdvb2dsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q2xpZW50Ojpsb29rVXBJbkRpY3Rpb25hcnkpOgotICAgICAgICAoV2ViS2l0OjpD
b250ZXh0TWVudUNsaWVudDo6c3BlYWspOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNs
aWVudDo6c3RvcFNwZWFraW5nKToKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6
OmlzU3BlYWtpbmcpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDgtMjggIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAg
ICBBZGQgSW5zcGVjdG9yQ2xpZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0ODE5Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JD
bGllbnQ6Okluc3BlY3RvckNsaWVudCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVu
dDo6fkluc3BlY3RvckNsaWVudCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yRGVzdHJveWVkKToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50Ojpv
cGVuSW5zcGVjdG9yRnJvbnRlbmQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6
OnJlbGVhc2VGcm9udGVuZFBhZ2UpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6
OmhpZ2hsaWdodCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hs
aWdodCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5n
KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgotICAg
ICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDogQWRkZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODFiMWY3Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiRmls
ZUNob29zZXIuaCIKLSNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkljb24u
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rp
b24uaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVXaW4uaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1l
bnVXaW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LUNocm9tZUNsaWVudFdpbkNFOjpDaHJvbWVDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQot
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCi17Ci0gICAgQVNTRVJUKG1fd2ViVmlldyk7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmNocm9tZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRl
IHRoaXM7Ci19Ci0KLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6d2luZG93UmVjdCgpCi17
Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAg
IFJFQ1QgcmVjdDsKLSAgICBtX3dlYlZpZXctPmZyYW1lUmVjdCgmcmVjdCk7Ci0gICAgcmV0dXJu
IHJlY3Q7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFdpbmRvd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1GbG9hdFJlY3QgQ2hy
b21lQ2xpZW50V2luQ0U6OnBhZ2VSZWN0KCkKLXsKLSAgICByZXR1cm4gd2luZG93UmVjdCgpOwot
fQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpmb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6dW5mb2N1cygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotUGFnZSogQ2hyb21lQ2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRv
dyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYs
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNob3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OmNhblJ1bk1vZGFs
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuTW9kYWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnRv
b2xiYXJzVmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9tZUNs
aWVudFdpbkNFOjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6c3RhdHVzYmFyVmlzaWJsZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsYmFyc1Zpc2li
bGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRNZW51YmFyVmlzaWJsZShib29sKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6Om1lbnViYXJWaXNp
YmxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0UmVzaXphYmxlKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6Y2xvc2VXaW5kb3dTb29u
KCkKLXsKLSAgICBQb3N0TWVzc2FnZVcobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUoKSwgV01fQ0xP
U0UsIDAsIDApOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpjYW5UYWtlRm9jdXMoRm9j
dXNEaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50
V2luQ0U6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikKLXsKLSAgICB1bmZvY3VzKCk7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmZvY3VzZWRFbGVtZW50Q2hhbmdlZChFbGVtZW50KikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpm
b2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKikKLXsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5D
RTo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBydW5K
YXZhU2NyaXB0Q29uZmlybShmcmFtZSwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50
V2luQ0U6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuSmF2YVNj
cmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fd2ViVmll
dy0+cnVuSmF2YVNjcmlwdEFsZXJ0KG1lc3NhZ2UpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdp
bkNFOjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICByZXR1cm4gbV93ZWJWaWV3LT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsK
LX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSos
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmlu
ZyYgcmVzdWx0KQotewotICAgIHJldHVybiBtX3dlYlZpZXctPnJ1bkphdmFTY3JpcHRQcm9tcHQo
bWVzc2FnZSwgZGVmYXVsdFZhbHVlLCByZXN1bHQpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdp
bkNFOjpzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6c2hvdWxkSW50ZXJydXB0SmF2YVNj
cmlwdCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LUtleWJvYXJkVUlNb2RlIENocm9tZUNsaWVudFdpbkNFOjprZXlib2FyZFVJTW9kZSgpCi17Ci0g
ICAgcmV0dXJuIEtleWJvYXJkQWNjZXNzVGFic1RvTGlua3M7Ci19Ci0KLUludFJlY3QgQ2hyb21l
Q2xpZW50V2luQ0U6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2lu
Q0U6OmludmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlQ29udGVudHNB
bmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAgIFJFQ1QgcmVjdCA9
IHVwZGF0ZVJlY3Q7Ci0gICAgSW52YWxpZGF0ZVJlY3QobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUo
KSwgJnJlY3QsIEZBTFNFKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0
ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAg
IGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KHVwZGF0ZVJlY3QpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudFdpbkNFOjpzY3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHJl
Y3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYpCi17Ci0gICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5k
Um9vdFZpZXcocmVjdFRvU2Nyb2xsKTsKLX0KLQotSW50UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6
cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IENocm9tZUNsaWVu
dFdpbkNFOjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQotUGxhdGZvcm1Q
YWdlQ2xpZW50IENocm9tZUNsaWVudFdpbkNFOjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2hyb21l
Q2xpZW50V2luQ0U6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdp
bkNFOjpzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5n
JiwgVGV4dERpcmVjdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudFdpbkNFOjpwcmludChGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpl
eGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBEYXRhYmFzZURldGFp
bHMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIENocm9tZUNs
aWVudFdpbkNFOjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3QpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiosIGludDY0X3QpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIENocm9t
ZUNsaWVudFdpbkNFOjpuZWVkVG91Y2hFdmVudHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotI2VuZGlmCi0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bk9wZW5QYW5l
bChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmxvYWRJY29u
Rm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXIq
IGxvYWRlcikKLXsKLSAgICBsb2FkZXItPm5vdGlmeUZpbmlzaGVkKEljb246OmNyZWF0ZUljb25G
b3JGaWxlcyhmaWxlbmFtZXMpKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0
TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6QVhTdGFydEZyYW1lTG9hZCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6QVhGaW5pc2hG
cmFtZUxvYWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xp
ZW50V2luQ0U6OnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNlbGVjdEl0ZW1BbGln
bm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6aGFzT3BlbmVkUG9wdXAoKSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXNzUmVmUHRy
PFBvcHVwTWVudT4gQ2hyb21lQ2xpZW50V2luQ0U6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVD
bGllbnQqIGNsaWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTWVu
dVdpbihjbGllbnQpKTsKLX0KLQotUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IENocm9tZUNs
aWVudFdpbkNFOjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVXaW4oY2xp
ZW50KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oIGIvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2YzU2OGE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3Rl
cmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENocm9tZUNsaWVudFdpbkNFX2gKLSNkZWZpbmUg
Q2hyb21lQ2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0KLWNsYXNz
IFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDaHJvbWVDbGllbnRXaW5D
RSA6IHB1YmxpYyBXZWJDb3JlOjpDaHJvbWVDbGllbnQgewotcHVibGljOgotICAgIENocm9tZUNs
aWVudFdpbkNFKFdlYlZpZXcqIHdlYlZpZXcpOwotCi0gICAgdmlydHVhbCB2b2lkIGNocm9tZURl
c3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3Qgd2luZG93UmVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgcGFnZVJlY3QoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBmb2N1cygp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoV2ViQ29y
ZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFu
Z2VkKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBUaGUgRnJhbWUgcG9pbnRl
ciBwcm92aWRlcyB0aGUgQ2hyb21lQ2xpZW50IHdpdGggY29udGV4dCBhYm91dCB3aGljaAotICAg
IC8vIEZyYW1lIHdhbnRzIHRvIGNyZWF0ZSB0aGUgbmV3IFBhZ2UuICBBbHNvLCB0aGUgbmV3bHkg
Y3JlYXRlZCB3aW5kb3cKLSAgICAvLyBzaG91bGQgbm90IGJlIHNob3duIHRvIHRoZSB1c2VyIHVu
dGlsIHRoZSBDaHJvbWVDbGllbnQgb2YgdGhlIG5ld2x5Ci0gICAgLy8gY3JlYXRlZCBQYWdlIGhh
cyBpdHMgc2hvdyBtZXRob2QgY2FsbGVkLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3Jl
YXRlV2luZG93KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViQ29yZTo6TmF2aWdh
dGlvbkFjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgcnVuTW9kYWwoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFy
c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHRvb2xiYXJzVmlzaWJs
ZSgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9v
bCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c2JhclZpc2libGUoKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBvdmVycmlkZTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgbWVudWJhclZpc2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRSZXNpemFibGUoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2Fn
ZVRvQ29uc29sZShKU0M6Ok1lc3NhZ2VTb3VyY2UsIEpTQzo6TWVzc2FnZUxldmVsLCBjb25zdCBX
VEY6OlN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlSUQpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgV1RGOjpTdHJp
bmcmIG1lc3NhZ2UsIFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VXaW5kb3dTb29uKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2
YVNjcmlwdEFsZXJ0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViQ29yZTo6RnJhbWUq
LCBjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZh
U2NyaXB0UHJvbXB0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdURjo6U3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3Jp
cHQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIGtleWJv
YXJkVUlNb2RlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2lu
ZG93UmVzaXplclJlY3QoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIE1ldGhvZHMgdXNlZCBi
eSBIb3N0V2luZG93LgotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUm9vdFZpZXcoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
Q29udGVudHNBbmRSb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3Jl
ZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xp
ZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjb250ZW50c1NpemVDaGFuZ2VkKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURp
ZENoYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNv
ckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKLSAgICAvLyBFbmQgbWV0aG9k
cyB1c2VkIGJ5IEhvc3RXaW5kb3cuCi0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RG
OjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNv
cmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSwgV2ViQ29yZTo6RGF0
YWJhc2VEZXRhaWxzKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tl
ZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBmYWlscyB0byBzYXZlIGEgY2FjaGUgb2JqZWN0
Ci0gICAgLy8gYmVjYXVzZSBzdG9yaW5nIGl0IHdvdWxkIGdyb3cgdGhlIGRhdGFiYXNlIGZpbGUg
cGFzdCBpdHMgZGVmaW5lZCBtYXhpbXVtCi0gICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91bnQg
b2YgZnJlZSBzcGFjZSBvbiB0aGUgZGV2aWNlLgotICAgIC8vIFRoZSBjaHJvbWUgY2xpZW50IHdv
dWxkIG5lZWQgdG8gdGFrZSBzb21lIGFjdGlvbiBzdWNoIGFzIGV2aWN0aW5nIHNvbWUKLSAgICAv
LyBvbGQgY2FjaGVzLgotICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGlu
dDY0X3Qgc3BhY2VOZWVkZWQpIG92ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3
aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBvcmlnaW4gcXVvdGEgaXMgcmVhY2hlZC4gVGhpcwot
ICAgIC8vIG1lYW5zIHRoYXQgdGhlIHJlc291cmNlcyBhdHRlbXB0aW5nIHRvIGJlIGNhY2hlZCB2
aWEgdGhlIG1hbmlmZXN0IGFyZQotICAgIC8vIG1vcmUgdGhhbiBhbGxvd2VkIG9uIHRoaXMgb3Jp
Z2luLiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0aGUgY2hyb21lIGNsaWVudAotICAgIC8vIHRvIHRh
a2UgYWN0aW9uLCBzdWNoIGFzIHByb21wdGluZyB0aGUgdXNlciB0byBhc2sgdG8gaW5jcmVhc2Ug
dGhlIHF1b3RhCi0gICAgLy8gZm9yIHRoaXMgb3JpZ2luLgotICAgIHZpcnR1YWwgdm9pZCByZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwg
aW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBy
dW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9v
c2VyPikgb3ZlcnJpZGU7Ci0gICAgLy8gQXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbG9hZCBhbiBp
Y29uIGZvciBzcGVjaWZpZWQgZmlsZW5hbWVzLgotICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZv
ckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRl
ciopIG92ZXJyaWRlOwotCi0gICAgLy8gUGFzcyAwIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRl
dGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGlj
c0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRl
OwotICAgIC8vIFNldHMgYSBmbGFnIHRvIHNwZWNpZnkgdGhhdCB0aGUgbmV4dCB0aW1lIGNvbnRl
bnQgaXMgZHJhd24gdG8gdGhlIHdpbmRvdywKLSAgICAvLyB0aGUgY2hhbmdlcyBhcHBlYXIgb24g
dGhlIHNjcmVlbiBpbiBzeW5jaHJvbnkgd2l0aCB1cGRhdGVzIHRvIEdyYXBoaWNzTGF5ZXJzLgot
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkg
b3ZlcnJpZGU7Ci0gICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSB2aWV3IG5l
ZWRzIHRvIGJlIHVwZGF0ZWQsIHNvIHdlIG5lZWQKLSAgICAvLyB0byBkbyBhbiBlYWdlciBsYXlv
dXQgYmVmb3JlIHRoZSBkcmF3aW5nLgotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExhc3RTZXRD
dXJzb3JUb0N1cnJlbnRDdXJzb3IoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgQVhTdGFy
dEZyYW1lTG9hZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBBWEZpbmlzaEZyYW1lTG9h
ZCgpIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2aXJ0dWFsIHZv
aWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFs
IGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVj
dGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+IGNy
ZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVT
ZWFyY2hQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25l
ZCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDaHJvbWVDbGllbnRXaW5DRV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRN
ZW51Q2xpZW50V2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9D
b250ZXh0TWVudUNsaWVudFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGZjZTdmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50V2lu
Q0UuaCIKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1Db250ZXh0TWVudUNsaWVudFdpbkNFOjpDb250ZXh0TWVudUNsaWVudFdpbkNFKFdlYlZpZXcg
KndlYlZpZXcpCi0gICAgOiBtX3dlYlZpZXcod2ViVmlldykKLXsKLX0KLQotdm9pZCBDb250ZXh0
TWVudUNsaWVudFdpbkNFOjpjb250ZXh0TWVudURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRo
aXM7Ci19Ci0KLVBhc3NPd25QdHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q2xpZW50V2luQ0U6
OmN1c3RvbWl6ZU1lbnUoUGFzc093blB0cjxDb250ZXh0TWVudT4gbWVudSkKLXsKLSAgICByZXR1
cm4gbWVudTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpkb3du
bG9hZFVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIENvbnRleHRNZW51Q2xpZW50V2luQ0U6OnNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUq
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRX
aW5DRTo6bG9va1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50V2luQ0U6OnNwZWFrKGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdp
bkNFOjpzdG9wU3BlYWtpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wg
Q29udGV4dE1lbnVDbGllbnRXaW5DRTo6aXNTcGVha2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNs
aWVudFdpbkNFLmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRN
ZW51Q2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1NTVlNi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRN
ZW51Q2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29udGV4dE1lbnVDbGllbnRXaW5DRV9oCi0jZGVmaW5lIENvbnRleHRNZW51Q2xpZW50V2lu
Q0VfaAotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIKLQotY2xhc3MgV2ViVmlldzsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvbnRleHRNZW51Q2xpZW50V2luQ0UgOiBw
dWJsaWMgV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnQgewotcHVibGljOgotICAgIENvbnRleHRN
ZW51Q2xpZW50V2luQ0UoV2ViVmlldyopOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51
RGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
Q29udGV4dE1lbnU+IGN1c3RvbWl6ZU1lbnUoUGFzc093blB0cjxXZWJDb3JlOjpDb250ZXh0TWVu
dT4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChX
ZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudSopIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IFdl
YkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGljdGlv
bmFyeShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzcGVhayhj
b25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtp
bmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTcGVha2luZygpIG92ZXJyaWRlOwot
Ci1wcml2YXRlOgotICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gQ29udGV4dE1lbnVDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNDM5MTguLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRyYWdDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIERy
YWdDbGllbnRXaW5DRTo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEcmFnQ2xpZW50V2luQ0U6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291
cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIERyYWdDbGllbnRXaW5DRTo6YWN0
aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKLX0KLQotRHJhZ1NvdXJjZUFjdGlvbiBE
cmFnQ2xpZW50V2luQ0U6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rp
b25Bbnk7Ci19Ci0KLXZvaWQgRHJhZ0NsaWVudFdpbkNFOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVm
LCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBi
b29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRHJhZ0NsaWVudFdpbkNF
OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhiYTFjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9y
dC9EcmFnQ2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29t
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRHJhZ0NsaWVudFdpbkNFX2gKLSNkZWZpbmUgRHJhZ0NsaWVudFdpbkNFX2gKLQotI2lu
Y2x1ZGUgIkRyYWdDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERyYWdD
bGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rp
b25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6
RnJhbWUmLCBib29sID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYWdD
b250cm9sbGVyRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIERyYWdDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWJjODJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQotICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRWRpdG9yQ2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJVbmRvU3RlcC5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1FZGl0b3JDbGllbnRXaW5D
RTo6RWRpdG9yQ2xpZW50V2luQ0UoV2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldyh3
ZWJWaWV3KQotewotfQotCi1FZGl0b3JDbGllbnRXaW5DRTo6fkVkaXRvckNsaWVudFdpbkNFKCkK
LXsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29s
IGFjdGl2ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVu
dFdpbkNFOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbnQgRWRpdG9yQ2xpZW50V2luQ0U6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFn
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEVk
aXRvckNsaWVudFdpbkNFOjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9y
Q2xpZW50V2luQ0U6OnNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50
V2luQ0U6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNl
cnRBY3Rpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5n
ZSosIFJhbmdlKiwgRUFmZmluaXR5LCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEFwcGx5
U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldCosIFdlYkNvcmU6OlJhbmdlKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNs
aWVudFdpbkNFOjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OlJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpkaWRCZWdpbkVkaXRpbmcoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpGcmFt
ZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5D
RTo6ZGlkRW5kRWRpdGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6Z2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+ID4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpVbmRvU3RlcD4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBFZGl0b3JDbGllbnRXaW5DRTo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlDdXQo
V2ViQ29yZTo6RnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5QYXN0ZShXZWJD
b3JlOjpGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBkZWZh
dWx0VmFsdWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhblVuZG8oKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVk
aXRvckNsaWVudFdpbkNFOjpjYW5SZWRvKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dW5kbygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
cmVkbygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRX
aW5DRTo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24p
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6cGFnZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19
Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCi17
Ci0gICAgUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc1NlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZp
ZXctPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdp
bkNFOjp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtl
eSA9IDEgPDwgMjsKLQotc3RydWN0IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWduZWQgdmlydHVh
bEtleTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07
Ci0KLXN0cnVjdCBLZXlQcmVzc0VudHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZTsKLSAgICB1
bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRpYyBj
b25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7IFZLX0xFRlQsICAg
MCwgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZUxl
ZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQs
ICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92
ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJ
R0hULCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAgICAi
TW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X1JJR0hULCAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0S2V5
LCAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX1VQLCAgICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAgICAg
ICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1BSSU9SLCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgMCwgICAgICAgICAg
ICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgU2hpZnRLZXks
ICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1BSSU9SLCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgMCwgICAg
ICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX0hPTUUsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgU2hp
ZnRLZXksICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9u
IiAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAg
Q3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNl
bGVjdGlvbiIgfSwKLQotICAgIHsgVktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJNb3Zl
VG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRU5E
LCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
RU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICB9LAotCi0gICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAgICAg
ICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAgICAg
ICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIEN0cmxLZXksICAg
ICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0KLSAgICB7ICdCJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgQ3RybEtl
eSwgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLQotICAgIHsgVktfRVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICAw
LCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRC
YWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJO
LCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNl
cnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVU
VVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJ
bnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgLy8g
SXQncyBub3QgcXVpdGUgY2xlYXIgd2hldGhlciBjbGlwYm9hcmQgc2hvcnRjdXRzIGFuZCBVbmRv
L1JlZG8gc2hvdWxkIGJlIGhhbmRsZWQKLSAgICAvLyBpbiB0aGUgYXBwbGljYXRpb24gb3IgaW4g
V2ViS2l0LiBXZSBjaG9zZSBXZWJLaXQgZm9yIG5vdy4KLSAgICB7ICdDJywgICAgICAgQ3RybEtl
eSwgICAgICAgICAgICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7ICdWJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiUGFzdGUiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdYJywgICAgICAgQ3Ry
bEtleSwgICAgICAgICAgICAiQ3V0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7ICdBJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiU2VsZWN0QWxs
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwg
Q3RybEtleSwgICAgICAgICAgICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX0RFTEVURSwgU2hpZnRLZXksICAgICAgICAgICAiQ3V0IiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VS
VCwgU2hpZnRLZXksICAgICAgICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7ICdaJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVW5k
byIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdaJywg
ICAgICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiUmVkbyIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotfTsKLQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJl
c3NFbnRyaWVzW10gPSB7Ci0gICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2Vy
dFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAg
IFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEN0
cmxLZXksICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xp
bmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtl
eSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLX07Ci0KLWNvbnN0IGNoYXIqIEVkaXRvckNsaWVudFdpbkNFOjppbnRlcnByZXRLZXlF
dmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQpOwotCi0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25z
dCBjaGFyKj4qIGtleURvd25Db21tYW5kc01hcCA9IDA7Ci0gICAgc3RhdGljIEhhc2hNYXA8aW50
LCBjb25zdCBjaGFyKj4qIGtleVByZXNzQ29tbWFuZHNNYXAgPSAwOwotCi0gICAgaWYgKCFrZXlE
b3duQ29tbWFuZHNNYXApIHsKLSAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hN
YXA8aW50LCBjb25zdCBjaGFyKj47Ci0gICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAgPSBuZXcg
SGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPjsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgoa2V5RG93bkVudHJpZXMpOyArK2kpCi0gICAgICAgICAgICBr
ZXlEb3duQ29tbWFuZHNNYXAtPnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYg
fCBrZXlEb3duRW50cmllc1tpXS52aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsK
LQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa2V5UHJl
c3NFbnRyaWVzKTsgKytpKQotICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtl
eVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hh
ckNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBt
b2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIG1vZGlm
aWVycyB8PSBBbHRLZXk7Ci0gICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIG1vZGlm
aWVycyB8PSBDdHJsS2V5OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCkgewotICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwg
ZXZlbnQtPmtleUNvZGUoKTsKLSAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5k
c01hcC0+Z2V0KG1hcEtleSkgOiAwOwotICAgIH0KLQotICAgIGludCBtYXBLZXkgPSBtb2RpZmll
cnMgPDwgMTYgfCBldmVudC0+Y2hhckNvZGUoKTsKLSAgICByZXR1cm4gbWFwS2V5ID8ga2V5UHJl
c3NDb21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdp
bkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsK
LSAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBBU1NFUlQo
bm9kZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAg
IEFTU0VSVChmcmFtZSk7Ci0KLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2
ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7Ci0gICAgaWYgKCFrZXlFdmVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gZnJhbWUtPnNldHRpbmdzKCku
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAg
ICBzd2l0Y2ggKGtleUV2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICBj
YXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlv
bkxlZnQsCi0gICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3Jh
bnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNl
clRyaWdnZXJlZCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19S
SUdIVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNo
aWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uUmlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJp
dHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdn
ZXJlZCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19VUDoKLSAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkg
PyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uTW92ZSwKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uQmFja3dhcmQsCi0gICAg
ICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0
eSA6IExpbmVHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAg
ICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLAotICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25Gb3J3YXJkLAotICAgICAgICAg
ICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBM
aW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgIFVzZXJUcmlnZ2VyZWQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBFZGl0b3I6OkNv
bW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS5jb21tYW5kKGludGVycHJldEtleUV2ZW50
KGV2ZW50KSk7Ci0KLSAgICBpZiAoa2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpS
YXdLZXlEb3duKSB7Ci0gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9y
bWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyBjb21tYW5kcyB0aGF0IGp1c3QgaW5zZXJ0
IHRleHQgaWYgZXhlY3V0ZWQgdmlhIEVkaXRvciBzaG91bGQgYmUgdHJlYXRlZCwKLSAgICAgICAg
Ly8gc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1l
ZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBl
dmVudCBiZSBnZW5lcmF0ZWQKLSAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRh
YiBjaGFyYWN0ZXIsIG9yIEVudGVyKS4KLSAgICAgICAgcmV0dXJuICFjb21tYW5kLmlzVGV4dElu
c2VydGlvbigpICYmIGNvbW1hbmQuZXhlY3V0ZShldmVudCk7Ci0gICAgfQotCi0gICAgaWYgKGNv
bW1hbmQuZXhlY3V0ZShldmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRG9u
J3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBp
biB1bmV4cGVjdGVkIGJlaGF2aW91cgotICAgIGlmIChldmVudC0+Y2hhckNvZGUoKSA8ICcgJykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlm
IGEgbW9kaWZpZXIgaXMgcHJlc3NlZAotICAgIGlmIChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtl
eUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZy
YW1lLT5lZGl0b3IoKS5pbnNlcnRUZXh0KGV2ZW50LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2ZW50
KTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQo
ZXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQq
IGV2ZW50KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50
V2luQ0U6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KikKLXsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KikKLXsKLX0K
LQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1l
bnQqKQotewotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpkb1RleHRGaWVsZENvbW1hbmRG
cm9tRXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVs
ZChFbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNs
aWVudFdpbkNFOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRFcmFzZU1h
cmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdAotewotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjppZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB0
ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2lu
Q0U6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotU3RyaW5nIEVkaXRvckNsaWVudFdpbkNFOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0V29yZCkKLXsKLSAgICAvLyBUaGlz
IG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgY3VzdG9taXplZCBhbGdvcml0aG1zIGZv
ciB0aGUgcGFydGljdWxhciBicm93c2VyLgotICAgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMg
YW4gZW1wdHkgc3RyaW5nLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBFZGl0b3JD
bGllbnRXaW5DRTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVklldywgVmVjdG9yPEdyYW1t
YXJEZXRhaWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEVkaXRvckNsaWVudFdpbkNFOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3dTcGVsbGluZ1VJKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c3BlbGxpbmdV
SUlzU2hvd2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBn
dWVzc2VzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50
V2luQ0U6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWQxODRkMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8
cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFZGl0b3JDbGllbnRXaW5DRV9oCi0jZGVmaW5lIEVkaXRv
ckNsaWVudFdpbkNFX2gKLQotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCi0KLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBFZGl0b3JDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGll
bnQsIHB1YmxpYyBXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRWRp
dG9yQ2xpZW50V2luQ0UoV2ViVmlldyopOwotICAgIH5FZGl0b3JDbGllbnRXaW5DRSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9k
ZSosIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBXVEY6OlN0cmluZyYs
IFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5n
ZSosIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dHlTZXQqLCBXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1l
Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6
OlJhbmdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gPiYgcGFzdGVib2Fy
ZERhdGEpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyUmVkb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuQ29weUN1dChXZWJDb3JlOjpGcmFtZSosIGJv
b2wgZGVmYXVsdFZhbHVlKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUGFz
dGUoV2ViQ29yZTo6RnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgY2FuUmVkbygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHVuZG8oKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVkbygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oV2ViQ29yZTo6
S2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVu
dCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZl
bnQoV2ViQ29yZTo6RWxlbWVudCosIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChXZWJDb3JlOjpF
bGVtZW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRB
cmVhKFdlYkNvcmU6OkVsZW1lbnQqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdU
eXBlKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBs
ZWFybldvcmQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCosIGludCopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3Qg
V2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBX
VEY6OlN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+KSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsg
cmV0dXJuIHRoaXM7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlF
dmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVFZGl0
aW5nS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0KLSAgICBXZWJWaWV3
KiBtX3dlYlZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVk
aXRvckNsaWVudFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0YzYxZGJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw2MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dFdp
bkNFLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgotI2luY2x1
ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKLSNpbmNsdWRlICJX
ZWJLaXRWZXJzaW9uLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6RnJhbWVMb2FkZXJDbGll
bnRXaW5DRShXZWJWaWV3KiB2aWV3KQotICAgIDogbV93ZWJWaWV3KHZpZXcpCi0gICAgLCBtX3Bs
dWdpblZpZXcoMCkKLXsKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKLX0KLQotRnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6fkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UoKQotewotfQotCi1TdHJpbmcgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6dXNlckFnZW50KGNvbnN0IFVSTCYpCi17Ci0gICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdXNlckFnZW50U3RyaW5nLCAoKSk7Ci0K
LSAgICBpZiAodXNlckFnZW50U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyB3ZWJL
aXRWZXJzaW9uID0gU3RyaW5nOjpmb3JtYXQoIiVkLiVkIiwgV0VCS0lUX01BSk9SX1ZFUlNJT04s
IFdFQktJVF9NSU5PUl9WRVJTSU9OKTsKLSAgICAgICAgdXNlckFnZW50U3RyaW5nID0gbWFrZVN0
cmluZygiTW96aWxsYS81LjAgKCIsIHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSwgIikgQXBw
bGVXZWJLaXQvIiwgd2ViS2l0VmVyc2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIE1vYmlsZSBT
YWZhcmkvIiwgd2ViS2l0VmVyc2lvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVzZXJBZ2VudFN0
cmluZzsKLX0KLQotUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCi17Ci0gICAg
cmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAo
bV9wbHVnaW5WaWV3KSB7Ci0gICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikg
ewotICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5y
ZXNwb25zZSgpKTsKLSAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwg
bGVuZ3RoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbG9hZGVyLT5jb21taXREYXRhKGRhdGEsIGxl
bmd0aCk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBE
b2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwb3N0
UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hh
bmdlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpmcmFtZUxvYWRlckRlc3Ryb3llZCgpCi17Ci0gICAgbV93ZWJWaWV3ID0gMDsKLSAgICBt
X2ZyYW1lID0gMDsKLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG1fcmVz
cG9uc2UgPSByZXNwb25zZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNw
YXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZVBvbGlj
eUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uKQotewotICAgIGlmIChjYW5TaG93TUlNRVR5cGUocmVz
cG9uc2UubWltZVR5cGUoKSkpCi0gICAgICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lEb3dubG9hZCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiwgRnJhbWVQb2xp
Y3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbikKLXsKLSAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lV
c2UpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGlj
eUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uKQotewotICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVz
ZSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsU3VibWl0
Rm9ybShQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVu
Y3Rpb24pCi17Ci0gICAgcG9saWN5RnVuY3Rpb24oUG9saWN5VXNlKTsKLX0KLQotUGFzc1JlZlB0
cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRT
aXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
Y3JlYXRlRnJhbWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKLXsKLSAgICByZXR1
cm4gbV93ZWJWaWV3LT5jcmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgcmVmZXJy
ZXIsIGFsbG93c1Njcm9sbGluZywgbWFyZ2luV2lkdGgsIG1hcmdpbkhlaWdodCwgbV9mcmFtZSk7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4o
V2lkZ2V0KiBwbHVnaW5XaWRnZXQpCi17Ci0gICAgbV9wbHVnaW5WaWV3ID0gdG9QbHVnaW5WaWV3
KHBsdWdpbldpZGdldCk7Ci0gICAgaWYgKHBsdWdpbldpZGdldCkKLSAgICAgICAgbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwg
SFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOwotfQotCi1PYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvYmpl
Y3RDb250ZW50VHlwZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQotewotICAgIHJldHVybiBGcmFtZUxvYWRl
cjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlKHVybCwgbWltZVR5cGUsIHNob3VsZFByZWZlclBs
dWdJbnNGb3JJbWFnZXMpOwotfQotCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b3Zl
cnJpZGVNZWRpYVR5cGUoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBwZXJXb3JsZCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb24oYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHko
Ym9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6Omhhc1dlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpm
cmFtZUxvYWRDb21wbGV0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpyZXN0b3JlVmlld1N0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5
SXRlbSogaXRlbSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXRlbTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJ1bklu
c2VjdXJlQ29udGVudChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFVSTCYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWREZXRlY3RY
U1MoY29uc3QgVVJMJiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRl
ciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpmb3JjZUxheW91dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmb3JjZUxheW91dEZvck5vbkhUTUwoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0
Q29waWVzT25TY3JvbGwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkZXRhY2hlZEZy
b21QYXJlbnQzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KGNvbnN0IFVSTCYsIGRvdWJsZSwgZG91YmxlKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDaGFu
Z2VMb2NhdGlvbldpdGhpblBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERp
ZFBvcFN0YXRlV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxDbG9zZSgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRj
aERpZFJlY2VpdmVJY29uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERpZENoYW5nZUljb25zKFdlYkNvcmU6Okljb25UeXBlKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hE
aWRDb21taXRMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRp
c3BhdGNoRGlkTGF5b3V0KExheW91dE1pbGVzdG9uZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFNob3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
Y2FuY2VsUG9saWN5Q2hlY2soKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50
TG9hZGVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRDaGFu
Z2VUaXRsZShEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgc2V0VGl0bGUo
ZG9jdW1lbnRMb2FkZXItPnRpdGxlKCksIGRvY3VtZW50TG9hZGVyLT51cmwoKSk7Ci19Ci0KLWJv
b2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01J
TUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gKE1JTUVUeXBl
UmVnaXN0cnk6OmNhblNob3dNSU1FVHlwZSh0eXBlKQotICAgICAgICAgICAgfHwgUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQodHlwZSkpOwot
fQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTChj
b25zdCBTdHJpbmcmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlcHJlc2VudGF0aW9u
RXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRl
ciopCi17Ci0gICAgaWYgKCFtX3BsdWdpblZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOwotICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0g
ICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkRmluaXNoTG9h
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNldFRpdGxlKGNv
bnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNl
aXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZywgY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21N
ZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBpbnQpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQotewotICAgIGRpc3BhdGNoRGlkRmFpbExvYWQoZXJyb3IpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbmNlbGxlZEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpibG9ja2Vk
RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewot
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19
Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2Fubm90U2hvd01JTUVU
eXBlRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7
Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkRmFsbEJhY2soY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgcmV0dXJuICEoZXJyb3IuaXNDYW5jZWxsYXRp
b24oKSk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuQ2FjaGVQYWdlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3Vy
Y2VFcnJvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGlmICghbV9wbHVnaW5WaWV3KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOwotICAgIG1fcGx1
Z2luVmlldyA9IDA7Ci0gICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWROYW1lICovKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RM
aW5rcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKTsKLSAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICBib29sIGlzTWFpbkZyYW1l
ID0gbV9mcmFtZSA9PSBwYWdlLT5tYWluRnJhbWUoKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXco
MCk7Ci0KLSAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXc7Ci0gICAgaWYgKGlzTWFpbkZy
YW1lKSB7Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgbV93ZWJWaWV3LT5mcmFtZVJlY3Qo
JnJlY3QpOwotICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSgqbV9mcmFtZSwg
SW50UmVjdChyZWN0KS5zaXplKCkpOwotICAgIH0gZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBG
cmFtZVZpZXc6OmNyZWF0ZSgqbV9mcmFtZSk7Ci0KLSAgICBtX2ZyYW1lLT5zZXRWaWV3KGZyYW1l
Vmlldyk7Ci0KLSAgICBpZiAobV9mcmFtZS0+b3duZXJSZW5kZXJlcigpKQotICAgICAgICBtX2Zy
YW1lLT5vd25lclJlbmRlcmVyKCktPnNldFdpZGdldChmcmFtZVZpZXcpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCi17Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKQotewotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQo
Ym9vbCkKLXsKLX0KLQotUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0
PiBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCi17Ci0g
ICAgcmV0dXJuIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6Y3JlYXRlKG1fZnJhbWUsIHVz
ZXJBZ2VudChVUkwoKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYTE3MzQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRV9oCi0jZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0VfaAotCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRShXZWJWaWV3Kik7Ci0gICAgdmlydHVhbCB+RnJhbWVMb2FkZXJDbGllbnRXaW5DRSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAg
V2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgdmly
dHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBtYWtlUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VMYXlvdXRGb3JOb25IVE1MKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29waWVzT25TY3JvbGwoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hl
ZEZyb21QYXJlbnQyKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBh
cmVudDMoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9J
bml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBpbnQgZGF0YUxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
RmluaXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlk
ZW50aWZpZXIpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2Fk
aW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJl
ZGlyZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1D
bGllbnRSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpVUkwmLCBkb3VibGUsIGRvdWJsZSkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdl
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGlu
UGFnZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlcGxhY2VTdGF0
ZVdpdGhpblBhZ2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRQb3BT
dGF0ZVdpdGhpblBhZ2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxs
Q2xvc2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlSWNv
bigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRp
dGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpJY29uVHlwZSkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZhaWxMb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTGF5b3V0KFdlYkNvcmU6OkxheW91dE1pbGVzdG9u
ZXMpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGcmFtZSogZGlzcGF0Y2hDcmVh
dGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWVQ
b2xpY3lGdW5jdGlvbikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24m
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6Rm9ybVN0YXRlPiwgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6RnJh
bWVQb2xpY3lGdW5jdGlvbikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0
aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkZvcm1TdGF0ZT4sIFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQb2xpY3lDaGVjaygpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
V2lsbFNlbmRTdWJtaXRFdmVudChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPikg
b3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4sIFdlYkNvcmU6OkZyYW1lUG9saWN5RnVu
Y3Rpb24pIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWxT
dGF0ZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYWluRG9jdW1lbnRFcnJvcihXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwb3N0
UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFtZShj
b25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRN
TEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyLCBib29sIGFs
bG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4o
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiwgY29u
c3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3Qg
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBib29sKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGVQbHVnaW4oV2ViQ29yZTo6V2lkZ2V0Kikg
b3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNv
cmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFdlYkNvcmU6OlVS
TCYgYmFzZVVSTCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdURjo6U3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdl
YkNvcmU6OkRPTVdyYXBwZXJXb3JsZCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
V2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgV2ViQ29y
ZTo6VVJMJiwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIHNob3VsZFByZWZlclBs
dWdJbnNGb3JJbWFnZXMpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1haW5GcmFt
ZURvY3VtZW50UmVhZHkoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZE5hbWUgPSBTdHJpbmcoKSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bENoYW5nZVRpdGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2hlZExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLQotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEdvVG9IaXN0b3J5SXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRl
bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZERldGVjdFhTUyhjb25zdCBXZWJDb3JlOjpVUkwmLCBib29sIGRp
ZEJsb2NrRW50aXJlUGFnZSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZmls
ZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRs
ZUxvYWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmFsbEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGVBc0hUTUwoY29uc3QgV1RGOjpTdHJp
bmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50YXRpb25FeGlz
dHNGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdURjo6U3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFdU
Rjo6U3RyaW5nJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2Fk
Q29tcGxldGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0
ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
dG9yZVZpZXdTdGF0ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExv
YWRTdGFydGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVu
dCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24m
LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV1RGOjpTdHJp
bmcgdXNlckFnZW50KGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1l
Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21D
YWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU2F2ZVRvUGFnZUNhY2hlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6
OkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHNldEZyYW1lKFdlYkNvcmU6OkZyYW1lICpmcmFtZSkgeyBtX2ZyYW1l
ID0gZnJhbWU7IH0KLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1l
OyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotICAgIFdlYkNvcmU6OkZy
YW1lKiBtX2ZyYW1lOwotICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsK
LQotICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KLSAgICBXZWJDb3JlOjpQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1
cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiNmNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmgiCi0KLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1GcmFtZU5ldHdvcmtpbmdDb250
ZXh0V2luQ0U6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRShGcmFtZSogZnJhbWUsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50KQotICAgIDogRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkK
LSAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudCkKLXsKLX0KLQotU3RyaW5nIEZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRTo6dXNlckFnZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2Vy
QWdlbnQ7Ci19Ci0KLVN0cmluZyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnJlZmVycmVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCkucmVmZXJyZXIoKTsKLX0K
LQotV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmJs
b2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oIGIvU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3NzU1Yi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRX
aW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFtZU5l
dHdvcmtpbmdDb250ZXh0V2luQ0VfaAotI2RlZmluZSBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2lu
Q0VfaAotCi0jaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFIDogcHVibGljIFdl
YkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRT4gY3JlYXRlKFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFKGZyYW1lLCB1c2Vy
QWdlbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIHVzZXJBZ2VudCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgcmVmZXJyZXIoKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2
YXRlOgotICAgIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRShXZWJDb3JlOjpGcmFtZSogZnJh
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiB1c2VyQWdlbnQpOwotCi0gICAgV1RGOjpTdHJpbmcgbV91
c2VyQWdlbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEZyYW1l
TmV0d29ya2luZ0NvbnRleHRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYTcwYjkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklu
c3BlY3RvckNsaWVudFdpbkNFLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUluc3BlY3Rv
ckNsaWVudFdpbkNFOjpJbnNwZWN0b3JDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAg
IDogbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi17Ci19Ci0KLUluc3BlY3RvckNsaWVudFdp
bkNFOjp+SW5zcGVjdG9yQ2xpZW50V2luQ0UoKQotewotfQotCi12b2lkIEluc3BlY3RvckNsaWVu
dFdpbkNFOjppbnNwZWN0b3JEZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCi1J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIEluc3BlY3RvckNsaWVudFdpbkNFOjpvcGVuSW5zcGVj
dG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdp
bkNFOjpjbG9zZUluc3BlY3RvckZyb250ZW5kKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpicmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXaW5DRTo6
aGlnaGxpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudFdpbkNFOjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIEluc3BlY3RvckNsaWVudFdpbkNFOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg2NDZkNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJp
Y2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluc3BlY3RvckNsaWVudFdpbkNF
X2gKLSNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRm9yd2FyZGluZy5oIgotCi1jbGFzcyBXZWJW
aWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgSW5zcGVjdG9yQ2xpZW50V2luQ0Ug
OiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnNwZWN0b3JDbGll
bnRXaW5DRShXZWJWaWV3Kik7Ci0gICAgfkluc3BlY3RvckNsaWVudFdpbkNFKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogb3Blbkluc3BlY3RvckZyb250ZW5k
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VJbnNwZWN0b3JGcm9udGVuZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBi
cmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6
U3RyaW5nJikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV9pbnNwZWN0ZWRX
ZWJWaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBJbnNwZWN0
b3JDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNjUxOTM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fu
c3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuaCIKLQotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29r
aWVKYXIuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aW5pdGlhbGl6ZSgpCi17
Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLCBwbGF0Zm9ybVN0cmF0ZWdpZXMsICgpKTsKLX0KLQotUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OlBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKCkKLXsKLSAgICBzZXRQbGF0Zm9ybVN0cmF0ZWdp
ZXModGhpcyk7Ci19Ci0KLUNvb2tpZXNTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLURhdGFi
YXNlU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVEYXRhYmFzZVN0cmF0
ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotTG9hZGVyU3RyYXRlZ3kqIFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVMb2FkZXJTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRo
aXM7Ci19Ci0KLVBhc3RlYm9hcmRTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNy
ZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsdWdpblN0
cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlUGx1Z2luU3RyYXRlZ3koKQot
ewotICAgIHJldHVybiB0aGlzOwotfQotCi1TaGFyZWRXb3JrZXJTdHJhdGVneSogUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVNoYXJlZFdvcmtlclN0cmF0ZWd5KCkKLXsKLSAgICByZXR1
cm4gdGhpczsKLX0KLQotU3RvcmFnZVN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Y3JlYXRlU3RvcmFnZVN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotVmlzaXRl
ZExpbmtTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5r
U3RyYXRlZ3koKQotewotICAgIHJldHVybiB0aGlzOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJl
dHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCi17Ci0gICAgV2ViQ29y
ZTo6c2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJp
bmcpOwotfQotCi1ib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5hYmxlZChj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVk
KHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJs
KQotewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShz
ZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOwotfQotCi1ib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwg
Zmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJD
b3JlOjpkZWxldGVDb29raWUoc2Vzc2lvbiwgdXJsLCBjb29raWVOYW1lKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6cmVmcmVzaFBsdWdpbnMoKQotewotICAgIFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKLX0KLQotdm9pZCBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdp
bkluZm8+JiBvdXRQbHVnaW5zKQotewotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4m
IHBsdWdpbnMgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7
Ci0KLSAgICBvdXRQbHVnaW5zLnJlc2l6ZShwbHVnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUGx1Z2luUGFj
a2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07Ci0KLSAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwot
ICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7Ci0gICAgICAgIGluZm8uZmlsZSA9
IHBhY2thZ2UtPmZpbGVOYW1lKCk7Ci0gICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRlc2Ny
aXB0aW9uKCk7Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9E
ZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKLQotICAgICAgICBp
bmZvLm1pbWVzLnJlc2VydmVDYXBhY2l0eShtaW1lVG9EZXNjcmlwdGlvbnMuc2l6ZSgpKTsKLQot
ICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotCi0gICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+a2V5OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVl
OwotICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmdldChtaW1lLnR5cGUpOwotCi0gICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1l
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dFBsdWdpbnNbaV0gPSBpbmZvOwotICAgIH0KLX0K
LQotYm9vbCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aXNMaW5rVmlzaXRlZChQYWdlKiBwYWdl
LCBMaW5rSGFzaCBoYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQotewotICAg
IHJldHVybiBwYWdlLT5ncm91cCgpLmlzTGlua1Zpc2l0ZWQoaGFzaCk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0U6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UqIHBhZ2UsIExpbmtIYXNo
IGhhc2gpCi17Ci0gICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGlua0hhc2goaGFzaCk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcw
NzllOWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9n
YS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRV9oCi0jZGVmaW5lIFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFX2gKLQotI2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgotI2luY2x1ZGUg
IkRhdGFiYXNlU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlBsdWdpblN0cmF0ZWd5LmgiCi0j
aW5jbHVkZSAiU2hhcmVkV29ya2VyU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3RyYXRl
Z3kuaCIKLSNpbmNsdWRlICJWaXNpdGVkTGlua1N0cmF0ZWd5LmgiCi0KLWNsYXNzIFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJp
dmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6RGF0YWJhc2VT
dHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3Jl
OjpQbHVnaW5TdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpTaGFyZWRXb3JrZXJTdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpTdG9yYWdlU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRl
ZExpbmtTdHJhdGVneSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwot
Ci1wcml2YXRlOgotICAgIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKCk7Ci0KLSAgICAvLyBXZWJD
b3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJh
dGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpEYXRhYmFzZVN0cmF0ZWd5KiBjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRl
Z3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSog
Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNoYXJlZFdvcmtlclN0cmF0ZWd5KiBjcmVhdGVTaGFyZWRXb3JrZXJT
dHJhdGVneSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RvcmFnZVN0cmF0ZWd5
KiBjcmVhdGVTdG9yYWdlU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RyYXRlZ3kqIGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSBvdmVycmlk
ZTsKLQotICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQotICAgIHZpcnR1YWwgU3RyaW5n
IGNvb2tpZXNGb3JET00oY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29u
c3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgY29va2llc0VuYWJsZWQoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRSYXdDb29raWVzKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNv
cmU6OlVSTCYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViQ29yZTo6RGF0
YWJhc2VTdHJhdGVneQotICAgIC8vIC0gVXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQot
ICAgIC8vIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQ
bHVnaW5zKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFBsdWdpbkluZm8oY29uc3Qg
V2ViQ29yZTo6UGFnZSosIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiYpIG92ZXJyaWRlOwot
Ci0gICAgLy8gV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneQotICAgIHZpcnR1YWwgYm9vbCBp
c0xpbmtWaXNpdGVkKFdlYkNvcmU6OlBhZ2UqLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2Vi
Q29yZTo6VVJMJiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNo
KSBvdmVycmlkZTsKLX07Ci0KLSNlbmRpZiAvLyBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC93aW5jZS9XZWJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmZTAz
OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlICJDaHJvbWVD
bGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50V2luQ0UuaCIKLSNpbmNs
dWRlICJEcmFnQ2xpZW50V2luQ0UuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRXaW5DRS5oIgot
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oIgot
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNvbnN0IExQ
Q1dTVFIga1dlYlZpZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlZpZXdXaW5kb3dDbGFzcyI7Ci0K
LQotTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBpZiAoV2Vi
Vmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KEdldFdpbmRvd0xvbmco
aFduZCwgMCkpKQotICAgICAgICByZXR1cm4gd2ViVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdl
LCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2Fk
UmVzb3VyY2VJbnRvQnVmZmVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi1XZWJWaWV3OjpXZWJWaWV3KEhXTkQgaHduZCwg
dW5zaWduZWQgZmVhdHVyZXMpCi0gICAgOiBtX2ZyYW1lKDApCi0gICAgLCBtX3BhZ2UoMCkKLSAg
ICAsIG1fcGFyZW50V2luZG93SGFuZGxlKGh3bmQpCi0gICAgLCBtX2VuYWJsZURvdWJsZUJ1ZmZl
cihmZWF0dXJlcyAmIEVuYWJsZURvdWJsZUJ1ZmZlcmluZykKLXsKLSAgICBSRUNUIHJjQ2xpZW50
OwotICAgIEdldENsaWVudFJlY3QoaHduZCwgJnJjQ2xpZW50KTsKLQotICAgIG1fd2luZG93SGFu
ZGxlID0gQ3JlYXRlV2luZG93KGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lLCAwLCBXU19DSElMRCwK
LSAgICAgICAgQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgaHduZCwgMCwgV2Vi
Q29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSAgICBTZXRXaW5kb3dMb25nKG1fd2luZG93
SGFuZGxlLCAwLCByZWludGVycHJldF9jYXN0PExPTkc+KHRoaXMpKTsKLQotICAgIE1vdmVXaW5k
b3cobV93aW5kb3dIYW5kbGUsIDAsIDAsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20s
IFRSVUUpOwotICAgIFNob3dXaW5kb3cobV93aW5kb3dIYW5kbGUsIFNXX1NIT1cpOwotCi0gICAg
UGFnZTo6UGFnZUNsaWVudHMgcGFnZUNsaWVudHM7Ci0gICAgcGFnZUNsaWVudHMuY2hyb21lQ2xp
ZW50ID0gbmV3IFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0UodGhpcyk7Ci0gICAgcGFnZUNsaWVu
dHMuY29udGV4dE1lbnVDbGllbnQgPSBuZXcgV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudFdpbkNF
KHRoaXMpOwotICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IG5ldyBXZWJLaXQ6OkVkaXRv
ckNsaWVudFdpbkNFKHRoaXMpOwotICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgV2Vi
S2l0OjpEcmFnQ2xpZW50V2luQ0UoKTsKLSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQg
PSBuZXcgV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRXaW5DRSh0aGlzKTsKLSAgICBtX3BhZ2UgPSBu
ZXcgUGFnZShwYWdlQ2xpZW50cyk7Ci0KLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3BhZ2Ut
PnNldHRpbmdzKCk7Ci0gICAgc2V0dGluZ3Muc2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOwot
ICAgIHNldHRpbmdzLnNldERlZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3Muc2V0TWlu
aW11bUZvbnRTaXplKDgpOwotICAgIHNldHRpbmdzLnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUo
OCk7Ci0gICAgc2V0dGluZ3Muc2V0U2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy5z
ZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0KLSAgICBXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UqIGxvYWRlckNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UodGhpcyk7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUo
bV9wYWdlLCAwLCBsb2FkZXJDbGllbnQpOwotICAgIG1fZnJhbWUgPSBmcmFtZS5nZXQoKTsKLSAg
ICBsb2FkZXJDbGllbnQtPnNldEZyYW1lKG1fZnJhbWUpOwotCi0gICAgbV9wYWdlLT5tYWluRnJh
bWUoKS5pbml0KCk7Ci0KLSAgICBpZiAodmlldygpKSB7Ci0gICAgICAgIFJFQ1Qgd2luZG93UmVj
dDsKLSAgICAgICAgZnJhbWVSZWN0KCZ3aW5kb3dSZWN0KTsKLSAgICAgICAgdmlldygpLT5yZXNp
emUoSW50UmVjdCh3aW5kb3dSZWN0KS5zaXplKCkpOwotICAgIH0KLX0KLQotV2ViVmlldzo6fldl
YlZpZXcoKQotewotICAgIGRlbGV0ZSBtX3BhZ2U7Ci0gICAgRGVzdHJveVdpbmRvdyhtX3dpbmRv
d0hhbmRsZSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZShISU5TVEFOQ0UgaW5zdGFu
Y2VIYW5kbGUpCi17Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOwotICAgIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0
aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpzZXRJbnN0YW5jZUhhbmRsZShpbnN0YW5jZUhhbmRs
ZSk7Ci0KLSAgICBXTkRDTEFTUyB3YzsKLSAgICB3Yy5zdHlsZSAgICAgICAgICA9IENTX0RCTENM
S1M7Ci0gICAgd2MubHBmblduZFByb2MgICAgPSBXZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYzsKLSAg
ICB3Yy5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2MuY2JXbmRFeHRyYSAgICAgPSBzaXplb2Yo
dm9pZCAqKTsKLSAgICB3Yy5oSW5zdGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlOwotICAgIHdj
LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Yy5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3Io
MCwgSURDX0FSUk9XKTsKLSAgICB3Yy5oYnJCYWNrZ3JvdW5kICA9IDA7Ci0gICAgd2MubHBzek1l
bnVOYW1lICAgPSAwOwotICAgIHdjLmxwc3pDbGFzc05hbWUgID0ga1dlYlZpZXdXaW5kb3dDbGFz
c05hbWU7Ci0KLSAgICBSZWdpc3RlckNsYXNzKCZ3Yyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xl
YW51cCgpCi17Ci0gICAgVW5yZWdpc3RlckNsYXNzKGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lLCBX
ZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxGcmFtZT4gV2ViVmll
dzo6Y3JlYXRlRnJhbWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsCi0g
ICAgYm9vbCAvKmFsbG93c1Njcm9sbGluZyovLCBpbnQgLyptYXJnaW5XaWR0aCovLCBpbnQgLypt
YXJnaW5IZWlnaHQqLywgRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRXaW5DRSAqbG9hZGVyQ2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRXaW5DRSh0aGlzKTsKLSAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6
Y3JlYXRlKG1fcGFnZSwgb3duZXJFbGVtZW50LCBsb2FkZXJDbGllbnQpOwotICAgIGxvYWRlckNs
aWVudC0+c2V0RnJhbWUoY2hpbGRGcmFtZS5nZXQoKSk7Ci0KLSAgICBwYXJlbnRGcmFtZS0+dHJl
ZSgpLmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOwotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS5zZXRO
YW1lKG5hbWUpOwotICAgIGNoaWxkRnJhbWUtPmluaXQoKTsKLQotICAgIC8vIFRoZSBjcmVhdGlv
biBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVuIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVt
b3ZlZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVhZHkuCi0gICAgaWYgKCFjaGlsZEZyYW1lLT5wYWdl
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWRV
UkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsKLQotICAg
IC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0
aGUgZG9jdW1lbnQuCi0gICAgaWYgKCFjaGlsZEZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOwotfQotCi12
b2lkIFdlYlZpZXc6OnJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpydW5KYXZhU2NyaXB0
Q29uZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlldzo6cnVuSmF2YVNjcmlwdFByb21w
dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJp
bmcmIHJlc3VsdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpmcmFtZVJlY3QoUkVDVCogcmVjdCkgY29uc3QKLXsKLSAgICBH
ZXRXaW5kb3dSZWN0KG1fd2luZG93SGFuZGxlLCByZWN0KTsKLX0KLQotRnJhbWVWaWV3KiBXZWJW
aWV3Ojp2aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnZpZXco
KSA6IDA7Ci19Ci0KLXZvaWQgV2ViVmlldzo6bG9hZChMUENXU1RSIHVybCkKLXsKLSAgICBsb2Fk
KFN0cmluZyh1cmwpKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpsb2FkKGNvbnN0IFN0cmluZyAmdXJs
KQotewotICAgIGxvYWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHVybCkpOwotfQotCi12b2lk
IFdlYlZpZXc6OmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0ICZyZXF1ZXN0KQot
ewotICAgIGZyYW1lKCktPmxvYWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdChmcmFtZSgpLCBy
ZXF1ZXN0KSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cmVsb2FkKCkKLXsKLSAgICBmcmFtZSgpLT5s
b2FkZXIoKS5yZWxvYWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzdG9wKCkKLXsKLSAgICBmcmFt
ZSgpLT5sb2FkZXIoKS5zdG9wQWxsTG9hZGVycygpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhaW50
KEhEQyBoREMsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQotewotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gdmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oY2xpcFJl
Y3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0Lm1heFgoKSwgY2xpcFJlY3QubWF4WSgpKSk7
Ci0gICAgU2VsZWN0Q2xpcFJnbihoREMsIGNsaXBSZ24uZ2V0KCkpOwotCi0gICAgZnJhbWVWaWV3
LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQgZ2MoaERDKTsKLSAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgY2xpcFJlY3QpOwot
fQotCi1ib29sIFdlYlZpZXc6OmhhbmRsZVBhaW50KEhXTkQgaFduZCkKLXsKLSAgICBSRUNUIHVw
ZGF0ZVJlY3Q7Ci0gICAgaWYgKCFHZXRVcGRhdGVSZWN0KGhXbmQsICZ1cGRhdGVSZWN0LCBmYWxz
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBBSU5UU1RSVUNUIHBzOwotICAgIEhE
QyBoREMgPSBCZWdpblBhaW50KG1fd2luZG93SGFuZGxlLCAmcHMpOwotCi0gICAgSW50UmVjdCBj
bGlwUmVjdCh1cGRhdGVSZWN0KTsKLQotICAgIGlmIChtX2VuYWJsZURvdWJsZUJ1ZmZlcikgewot
ICAgICAgICBpZiAoIW1fZG91YmxlQnVmZmVyREMpIHsKLSAgICAgICAgICAgIFJFQ1QgcmNDbGll
bnQ7Ci0gICAgICAgICAgICBHZXRDbGllbnRSZWN0KG1fd2luZG93SGFuZGxlLCAmcmNDbGllbnQp
OwotCi0gICAgICAgICAgICBtX2RvdWJsZUJ1ZmZlckRDID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVDb21wYXRpYmxlREMoaERDKSk7Ci0gICAgICAgICAgICBtX2RvdWJsZUJ1ZmZlckJpdG1hcCA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChoREMsIHJjQ2xpZW50LnJp
Z2h0LCByY0NsaWVudC5ib3R0b20pKTsKLSAgICAgICAgICAgIFNlbGVjdE9iamVjdChtX2RvdWJs
ZUJ1ZmZlckRDLmdldCgpLCBtX2RvdWJsZUJ1ZmZlckJpdG1hcC5nZXQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBwYWludChtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVjdCk7Ci0KLSAg
ICAgICAgQml0Qmx0KGhEQywgY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0Lndp
ZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpLCBtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVj
dC54KCksIGNsaXBSZWN0LnkoKSwgU1JDQ09QWSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhaW50
KGhEQywgY2xpcFJlY3QpOwotCi0gICAgRW5kUGFpbnQobV93aW5kb3dIYW5kbGUsICZwcyk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChIV05E
IGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAg
ICBzdGF0aWMgTE9ORyBnbG9iYWxDbGlja0NvdW50OwotICAgIHN0YXRpYyBJbnRQb2ludCBnbG9i
YWxQcmV2UG9pbnQ7Ci0gICAgc3RhdGljIE1vdXNlQnV0dG9uIGdsb2JhbFByZXZCdXR0b247Ci0g
ICAgc3RhdGljIExPTkcgZ2xvYmFsUHJldk1vdXNlRG93blRpbWU7Ci0KLSAgICAvLyBDcmVhdGUg
b3VyIGV2ZW50LgotICAgIC8vIE9uIFdNX01PVVNFTEVBVkUgd2UgbmVlZCB0byBjcmVhdGUgYSBt
b3VzZW91dCBldmVudCwgc28gd2UgZm9yY2UgdGhlIHBvc2l0aW9uCi0gICAgLy8gb2YgdGhlIGV2
ZW50IHRvIGJlIGF0IChNSU5TSE9SVCwgTUlOU0hPUlQpLgotICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBtb3VzZUV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIGJvb2wg
aW5zaWRlVGhyZXNob2xkID0gYWJzKGdsb2JhbFByZXZQb2ludC54KCkgLSBtb3VzZUV2ZW50LnBv
c2l0aW9uKCkueCgpKSA8IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWERPVUJMRUNMSykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIGFicyhnbG9iYWxQcmV2UG9pbnQueSgpIC0gbW91c2VF
dmVudC5wb3NpdGlvbigpLnkoKSkgPCA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1lET1VCTEVDTEsp
OwotICAgIExPTkcgbWVzc2FnZVRpbWUgPSAwOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
Ci0gICAgaWYgKG1lc3NhZ2UgPT0gV01fTEJVVFRPTkRPV04gfHwgbWVzc2FnZSA9PSBXTV9NQlVU
VE9ORE9XTiB8fCBtZXNzYWdlID09IFdNX1JCVVRUT05ET1dOKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgInJpZ2h0IiB3YXkgdG8gZG8gdGhpcwotICAg
ICAgICAvLyBidXQgd2l0aG91dCB0aGlzIGNhbGwsIHdlIG5ldmVyIGJlY29tZSBmb2N1c2VkIHNp
bmNlIHdlIGRvbid0IGFsbG93Ci0gICAgICAgIC8vIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIG1v
dXNlIGV2ZW50cy4KLSAgICAgICAgU2V0Rm9jdXMobV93aW5kb3dIYW5kbGUpOwotCi0gICAgICAg
IFBsYXRmb3JtTW91c2VFdmVudCBtb3ZlRXZlbnQoaFduZCwgV01fTU9VU0VNT1ZFLCAwLCBsUGFy
YW0sIGZhbHNlKTsKLSAgICAgICAgbW92ZUV2ZW50LnNldENsaWNrQ291bnQoMCk7Ci0gICAgICAg
IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQo
bW92ZUV2ZW50KTsKLQotICAgICAgICAvLyBBbHdheXMgc3RhcnQgY2FwdHVyaW5nIGV2ZW50cyB3
aGVuIHRoZSBtb3VzZSBnb2VzIGRvd24gaW4gb3VyIEhXTkQuCi0gICAgICAgIFNldENhcHR1cmUo
bV93aW5kb3dIYW5kbGUpOwotCi0gICAgICAgIGlmIChpbnNpZGVUaHJlc2hvbGQgJiYgbW91c2VF
dmVudC5idXR0b24oKSA9PSBnbG9iYWxQcmV2QnV0dG9uKQotICAgICAgICAgICAgZ2xvYmFsQ2xp
Y2tDb3VudCsrOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgY2xpY2sg
Y291bnQuCi0gICAgICAgICAgICBnbG9iYWxDbGlja0NvdW50ID0gMTsKLSAgICAgICAgZ2xvYmFs
UHJldk1vdXNlRG93blRpbWUgPSBtZXNzYWdlVGltZTsKLSAgICAgICAgZ2xvYmFsUHJldkJ1dHRv
biA9IG1vdXNlRXZlbnQuYnV0dG9uKCk7Ci0gICAgICAgIGdsb2JhbFByZXZQb2ludCA9IG1vdXNl
RXZlbnQucG9zaXRpb24oKTsKLQotICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xv
YmFsQ2xpY2tDb3VudCk7Ci0gICAgICAgIGhhbmRsZWQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmhhbmRsZU1vdXNlUHJlc3NFdmVudChtb3VzZUV2ZW50KTsKLSAgICB9IGVs
c2UgaWYgKG1lc3NhZ2UgPT0gV01fTEJVVFRPTkRCTENMSyB8fCBtZXNzYWdlID09IFdNX01CVVRU
T05EQkxDTEsgfHwgbWVzc2FnZSA9PSBXTV9SQlVUVE9OREJMQ0xLKSB7Ci0gICAgICAgIGdsb2Jh
bENsaWNrQ291bnQrKzsKLSAgICAgICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGdsb2JhbENs
aWNrQ291bnQpOwotICAgICAgICBoYW5kbGVkID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5oYW5kbGVNb3VzZVByZXNzRXZlbnQobW91c2VFdmVudCk7Ci0gICAgfSBlbHNlIGlm
IChtZXNzYWdlID09IFdNX0xCVVRUT05VUCB8fCBtZXNzYWdlID09IFdNX01CVVRUT05VUCB8fCBt
ZXNzYWdlID09IFdNX1JCVVRUT05VUCkgewotICAgICAgICAvLyBSZWNvcmQgdGhlIGdsb2JhbCBw
b3NpdGlvbiBhbmQgdGhlIGJ1dHRvbiBvZiB0aGUgdXAuCi0gICAgICAgIGdsb2JhbFByZXZCdXR0
b24gPSBtb3VzZUV2ZW50LmJ1dHRvbigpOwotICAgICAgICBnbG9iYWxQcmV2UG9pbnQgPSBtb3Vz
ZUV2ZW50LnBvc2l0aW9uKCk7Ci0gICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9i
YWxDbGlja0NvdW50KTsKLSAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtb3VzZUV2ZW50KTsKLSAgICAgICAgUmVsZWFzZUNh
cHR1cmUoKTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgPT0gV01fTU9VU0VNT1ZFKSB7Ci0gICAg
ICAgIGlmICghaW5zaWRlVGhyZXNob2xkKQotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCA9
IDA7Ci0gICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9iYWxDbGlja0NvdW50KTsK
LSAgICAgICAgaGFuZGxlZCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91
c2VNb3ZlZChtb3VzZUV2ZW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQot
Ym9vbCBXZWJWaWV3OjpoYW5kbGVNb3VzZVdoZWVsKEhXTkQgaFduZCwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSwgYm9vbCBpc0hvcml6b250YWwpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2
ZW50IHdoZWVsRXZlbnQoaFduZCwgd1BhcmFtLCBsUGFyYW0sIGlzSG9yaXpvbnRhbCk7Ci0gICAg
cmV0dXJuIGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlS2V5RG93bihXUEFSQU0gdmlydHVhbEtleUNv
ZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgRnJhbWUmIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQot
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgdmlydHVh
bEtleUNvZGUsIGtleURhdGEsIFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIHN5c3RlbUtleURv
d24pOwotICAgIGJvb2wgaGFuZGxlZCA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGtl
eUV2ZW50KTsKLQotICAgIC8vIFRoZXNlIGV2ZW50cyBjYW5ub3QgYmUgY2FuY2VsZWQsIGFuZCB3
ZSBoYXZlIG5vIGRlZmF1bHQgaGFuZGxpbmcgZm9yIHRoZW0uCi0gICAgLy8gRklYTUU6IG1hdGNo
IElFIGxpc3QgbW9yZSBjbG9zZWx5LCBzZWUgPGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvbXM1MzY5MzguYXNweD4uCi0gICAgaWYgKHN5c3RlbUtleURvd24gJiYgdmly
dHVhbEtleUNvZGUgIT0gVktfUkVUVVJOKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoaGFuZGxlZCkgewotICAgICAgICBNU0cgbXNnOwotICAgICAgICBpZiAoIXN5c3RlbUtleURv
d24pCi0gICAgICAgICAgICA6OlBlZWtNZXNzYWdlKCZtc2csIG1fd2luZG93SGFuZGxlLCBXTV9D
SEFSLCBXTV9DSEFSLCBQTV9SRU1PVkUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlQcmVzcyhX
UEFSQU0gY2hhckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0g
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKLQotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hh
bmRsZSwgY2hhckNvZGUsIGtleURhdGEsIFBsYXRmb3JtRXZlbnQ6OkNoYXIsIHN5c3RlbUtleURv
d24pOwotICAgIC8vIElFIGRvZXMgbm90IGRpc3BhdGNoIGtleXByZXNzIGV2ZW50IGZvciBXTV9T
WVNDSEFSLgotICAgIGlmIChzeXN0ZW1LZXlEb3duKQotICAgICAgICByZXR1cm4gZnJhbWUuZXZl
bnRIYW5kbGVyKCkuaGFuZGxlQWNjZXNzS2V5KGtleUV2ZW50KTsKLSAgICBpZiAoZnJhbWUuZXZl
bnRIYW5kbGVyKCkua2V5RXZlbnQoa2V5RXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlVcChXUEFSQU0g
dmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0g
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KG1fd2luZG93SGFuZGxlLCB2aXJ0dWFs
S2V5Q29kZSwga2V5RGF0YSwgUGxhdGZvcm1FdmVudDo6S2V5VXAsIHN5c3RlbUtleURvd24pOwot
Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoa2V5
RXZlbnQpOwotfQotCi1MUkVTVUxUIFdlYlZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0KLSAgICBpZiAodmlldygpKSB7Ci0gICAgICAgIHN3aXRjaCAobWVzc2FnZSkg
ewotICAgICAgICBjYXNlIFdNX1BBSU5UOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZVBh
aW50KGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9NT1VTRU1P
VkU6Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTUJVVFRP
TkRPV046Ci0gICAgICAgIGNhc2UgV01fUkJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTEJV
VFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9OREJMQ0xLOgotICAgICAgICBjYXNl
IFdNX1JCVVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAg
ICBpZiAodmlldygpLT5kaWRGaXJzdExheW91dCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSBoYW5kbGVNb3VzZUV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICAgICAgICAg
IGlmICh2aWV3KCktPmRpZEZpcnN0TGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9
IGhhbmRsZU1vdXNlV2hlZWwoaFduZCwgd1BhcmFtLCBsUGFyYW0sIHdQYXJhbSAmIE1LX1NISUZU
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKLSAg
ICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVLZXlEb3duKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fS0VZRE9XTjoKLSAgICAgICAg
ICAgIGhhbmRsZWQgPSBoYW5kbGVLZXlEb3duKHdQYXJhbSwgbFBhcmFtLCBmYWxzZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgICAgICAgICAg
aGFuZGxlZCA9IGhhbmRsZUtleVVwKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgICAgICBoYW5kbGVkID0g
aGFuZGxlS2V5VXAod1BhcmFtLCBsUGFyYW0sIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgV01fU1lTQ0hBUjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVL
ZXlQcmVzcyh3UGFyYW0sIGxQYXJhbSwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFdNX0NIQVI6Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5UHJlc3Mo
d1BhcmFtLCBsUGFyYW0sIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgV01fQ0xPU0U6Ci0gICAgICAgICAgICBQb3N0TWVzc2FnZShtX3BhcmVudFdpbmRvd0hhbmRs
ZSwgV01fQ0xPU0UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZWQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmggYi9T
b3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWFkNjk2Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdfaAotI2Rl
ZmluZSBXZWJWaWV3X2gKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9i
amVjdC5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBQYWdlOwotY2xhc3MgRnJhbWVWaWV3Owot
Y2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwotY2xhc3MgVVJMOwotY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OwotfQotCi1jbGFzcyBXZWJWaWV3IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZlYXR1cmVz
IHsKLSAgICAgICAgTm9GZWF0dXJlID0gMCwKLSAgICAgICAgRW5hYmxlRG91YmxlQnVmZmVyaW5n
ID0gMSA8PCAwCi0gICAgfTsKLQotICAgIFdlYlZpZXcoSFdORCBod25kLCB1bnNpZ25lZCBmZWF0
dXJlcyA9IEVuYWJsZURvdWJsZUJ1ZmZlcmluZyk7Ci0gICAgfldlYlZpZXcoKTsKLQotICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemUoSElOU1RBTkNFIGluc3RhbmNlSGFuZGxlKTsKLSAgICBzdGF0
aWMgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICBIV05EIHdpbmRvd0hhbmRsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2luZG93SGFuZGxlOyB9Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZTsgfQotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2U7IH0KLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKLQot
ICAgIHZvaWQgbG9hZChMUENXU1RSIHVybCk7Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFdURjo6U3Ry
aW5nICZ1cmwpOwotICAgIHZvaWQgbG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
JnJlcXVlc3QpOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICB2
b2lkIGZyYW1lUmVjdChSRUNUKiByZWN0KSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqLCAKLSAgICAgICAgY29u
c3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93U2Nyb2xsaW5nLCBpbnQgbWFyZ2lu
V2lkdGgsIGludCBtYXJnaW5IZWlnaHQsIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSk7Ci0K
LSAgICAvLyBKYXZhU2NyaXB0IERpYWxvZwotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNv
bnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJt
KGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRQcm9t
cHQoY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0
VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBMUkVT
VUxUIENBTExCQUNLIHdlYlZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLSAgICBMUkVTVUxUIHduZFByb2MoSFdORCwgVUlO
VCwgV1BBUkFNLCBMUEFSQU0pOwotCi0gICAgYm9vbCBoYW5kbGVQYWludChIV05EIGhXbmQpOwot
ICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVdoZWVsKEhXTkQg
aFduZCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCBpc0hvcml6b250YWwpOwot
ICAgIGJvb2wgaGFuZGxlS2V5RG93bihXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlE
YXRhLCBib29sIHN5c3RlbUtleURvd24pOwotICAgIGJvb2wgaGFuZGxlS2V5UHJlc3MoV1BBUkFN
IGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKTsKLSAgICBib29s
IGhhbmRsZUtleVVwKFdQQVJBTSB2aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wg
c3lzdGVtS2V5RG93bik7Ci0KLSAgICB2b2lkIHBhaW50KEhEQyBoREMsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KTsKLQotICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwotICAg
IFdlYkNvcmU6OlBhZ2UqIG1fcGFnZTsKLSAgICBIV05EIG1fcGFyZW50V2luZG93SGFuZGxlOwot
ICAgIEhXTkQgbV93aW5kb3dIYW5kbGU7Ci0gICAgYm9vbCBtX2VuYWJsZURvdWJsZUJ1ZmZlcjsK
LSAgICBHRElPYmplY3Q8SERDPiBtX2RvdWJsZUJ1ZmZlckRDOwotICAgIEdESU9iamVjdDxIQklU
TUFQPiBtX2RvdWJsZUJ1ZmZlckJpdG1hcDsKLX07Ci0KLSNlbmRpZiAvLyBXZWJWaWV3X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbkNFLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3YTQ4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21ha2UKKysrIC9kZXYv
bnVsbApAQCAtMSwzMCArMCwwIEBACi1pbmNsdWRlKE9wdGlvbnNXaW5kb3dzKQotCi1zZXQoUE9S
VF9GQUxMQkFDSyBXaW4pCi0KLWFkZF9kZWZpbml0aW9ucygtRF9DRV9DUlRfQUxMT1dfV0lOX01J
Tk1BWCkKLWFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfRVhQT1JUX01BQ1JPUz0wKQotYWRkX2Rl
ZmluaXRpb25zKC1EV1RGX1VTRV9XSU5HREk9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdURl9VU0Vf
V0lOSU5FVD0xKQotYWRkX2RlZmluaXRpb25zKC1EV0lOQ0VCQVNJQykKLWFkZF9kZWZpbml0aW9u
cygtREpTX05PX0VYUE9SVCkKLWFkZF9kZWZpbml0aW9ucygtREhBVkVfQUNDRVNTSUJJTElUWT0w
KQotYWRkX2RlZmluaXRpb25zKC1ESlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT049
MHgyMDAwMDApCi0KLWlmIChOT1QgM1JEUEFSVFlfRElSKQotICAgIGlmIChFWElTVFMgJEVOVntX
RUJLSVRUSElSRFBBUlRZRElSfSkKLSAgICAgICAgc2V0KDNSRFBBUlRZX0RJUiAkRU5We1dFQktJ
VFRISVJEUEFSVFlESVJ9KQotICAgIGVsc2UgKCkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJP
UiAiWW91IG11c3QgcHJvdmlkZSBhIHRoaXJkIHBhcnR5IGRpcmVjdG9yeSBmb3IgV2luQ0UgcG9y
dC4iKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7M1JE
UEFSVFlfRElSfS9jZS1jb21wYXQpCi1hZGRfc3ViZGlyZWN0b3J5KCR7M1JEUEFSVFlfRElSfSAi
JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LzNyZHBhcnR5IikKLQotV0VCS0lUX09QVElPTl9C
RUdJTigpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQ
T1JUIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVFBESVIg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOU1BFQ1RPUiBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBP
TikKLVdFQktJVF9PUFRJT05fRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQ
YWNrYWdpbmcuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0UGFja2FnaW5nLmNtYWtlCmluZGV4
IDVmOWIzMTguLjk2OWRjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdp
bmcuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFrZQpAQCAtMTE5
LDcgKzExOSw2IEBAIGlmIChOT1QgREVGSU5FRCBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTKQog
ICAgICAgICAgICAgIi9xdC8iICIvUXQvIiAicXRcXFxcLiIgIlF0XFxcXC4iCiAgICAgICAgICAg
ICAiL3F0NC8iICIvUXQ0LyIgInF0NFxcXFwuIiAiUXQ0XFxcXC4iCiAgICAgICAgICAgICAiL3dp
bi8iICIvV2luLyIgIndpblxcXFwuIiAiV2luXFxcXC4iCi0gICAgICAgICAgICAiL3dpbmNlLyIg
Ii9XaW5jZS8iICJ3aW5jZVxcXFwuIiAiV2luY2VcXFxcLiIKICAgICAgICAgICAgICIvd3hjb2Rl
LyIgIi9XeGNvZGUvIiAid3hjb2RlXFxcXC4iICJXeGNvZGVcXFxcLiIKICAgICAgICAgICAgICIv
V2ViS2l0TGlicmFyaWVzLyIKICAgICAgICAgICAgICIvRW5nbGlzaFxcXFwubHByb2ovIgpkaWZm
IC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
d2tidWlsZC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3drYnVpbGQucHkKaW5kZXggNDQxZmExOS4uZDNjYTkxYiAxMDA2NDQKLS0tIGEvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5weQorKysg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxk
LnB5CkBAIC01MSw3ICs1MSw2IEBAIGRlZiBfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJn
ZXRfcGxhdGZvcm0sIGZpbGUpOgogICAgICAgICAoIm9wZW5nbCIsIFtdKSwKICAgICAgICAgKCJv
cGVudHlwZSIsIFtdKSwKICAgICAgICAgKCJvcGVudmciLCBbXSksCi0gICAgICAgICgid2luY2Ui
LCBbXSksCiAgICAgICAgICgid3giLCBbXSksCiAKICAgICAgICAgIyBEaXJlY3RvcmllcyB0aGF0
IHNob3VsZCB0cmlnZ2VyIGJ1aWxkcyBvbiBvbmx5IHNvbWUgYm90cy4KQEAgLTg0LDcgKzgzLDYg
QEAgZGVmIF9zaG91bGRfZmlsZV90cmlnZ2VyX2J1aWxkKHRhcmdldF9wbGF0Zm9ybSwgZmlsZSk6
CiAgICAgICAgIChyIi9MSUNFTlNFW14vXSskIiwgW10pLAogICAgICAgICAociJBUk0oPzp2Nyk/
XC4oPzpjcHB8aCkkIiwgW10pLAogICAgICAgICAociJNSVBTXC4oPzpjcHB8aCkkIiwgW10pLAot
ICAgICAgICAociJXaW5DRVwuKD86Y3BwfGh8bW0pJCIsIFtdKSwKICAgICAgICAgKHIiXC4oPzpi
a2x8bWspJCIsIFtdKSwKIAogICAgICAgICAjIFBhdHRlcm5zIHRoYXQgc2hvdWxkIHRyaWdnZXIg
YnVpbGRzIG9uIG9ubHkgc29tZSBib3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weSBiL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRl
c3QucHkKaW5kZXggNTI2M2QzYy4uOTk4NzdjNyAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weQorKysg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxk
X3VuaXR0ZXN0LnB5CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFNob3VsZEJ1aWxkVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIChbIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9mb28iXSwgWyJtYWMtbGVvcGFyZCIsICJtYWMtbGlvbiIsICAibWFjLW1vdW50YWlu
bGlvbiIsICJtYWMtc25vd2xlb3BhcmQiXSksCiAgICAgICAgIChbIlNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L3d4Y29kZS93aW4vZm9vIl0sIFtdKSwKICAgICAgICAgKFsiU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIiwgIlNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5oIl0sIFsibWFjLWxlb3BhcmQiLCAibWFjLWxpb24iLCAgIm1hYy1t
b3VudGFpbmxpb24iLCAibWFjLXNub3dsZW9wYXJkIl0pLAotICAgICAgICAoWyJTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5oIl0sIFtdKSwKICAgICAgICAgKFsiVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
TGVha3NWaWV3ZXIvTGVha3NWaWV3ZXIuanMiXSwgW10pLAogICAgIF0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2ZiMDk2
Li40ZDRkNTk3IDEwMDY0NAotLS0gYS9Ub29scy9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9D
TWFrZUxpc3RzLnR4dApAQCAtMTYsOCArMTYsNiBAQCBlbHNlaWYgKCIke1BPUlR9IiBTVFJFUVVB
TCAiR1RLIikKICAgICBpZiAoRU5BQkxFX1gxMV9UQVJHRVQpCiAgICAgICAgIGFkZF9zdWJkaXJl
Y3RvcnkoRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luKQogICAgIGVuZGlmICgpCi1l
bHNlaWYgKCIke1BPUlR9IiBTVFJFUVVBTCAiV2luQ0UiKQotICAgIGFkZF9zdWJkaXJlY3Rvcnko
V2luQ0VMYXVuY2hlcikKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfV0VCS0lUMiBBTkQgRU5BQkxF
X0FQSV9URVNUUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAxOGRlNWQ5Li44N2NjYzdiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTQtMDktMTkgIENzYWJhIE9z
enRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgV2luQ0UgcG9y
dCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQu
cHk6CisgICAgICAgIChfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCk6CisgICAgICAgICogQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5w
eToKKyAgICAgICAgKFNob3VsZEJ1aWxkVGVzdCk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwOgorICAgICAg
ICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgICogU2NyaXB0cy9idWlsZC13
ZWJraXQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0ZGlycy5wbToKKyAgICAgICAgKGFyZ3VtZW50c0ZvckNvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAoYnVpbHREeWxpYlBhdGhGb3JOYW1lKToKKyAgICAgICAgKGlzQXBw
bGVXaW5XZWJLaXQpOgorICAgICAgICAobGF1bmNoZXJQYXRoKToKKyAgICAgICAgKGxhdW5jaGVy
TmFtZSk6CisgICAgICAgIChzaG91bGRSZW1vdmVDTWFrZUNhY2hlKToKKyAgICAgICAgKGNtYWtl
QmFzZWRQb3J0QXJndW1lbnRzKToKKyAgICAgICAgKGNtYWtlQmFzZWRQb3J0TmFtZSk6CisgICAg
ICAgIChpc0NNYWtlQnVpbGQpOgorICAgICAgICAoaXNXaW5DRSk6IERlbGV0ZWQuCisgICAgICAg
IChkZXRlcm1pbmVJc1dpbkNFKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG06CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRf
dGVzdGNhc2UucHk6CisgICAgICAgICh0ZXN0X2FwYWNoZV9jb25maWdfZmlsZV9uYW1lX2Zvcl9w
bGF0Zm9ybSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb25maWcuaDoKKyAgICAgICAgKiBX
aW5DRUxhdW5jaGVyL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIFdpbkNFTGF1
bmNoZXIvbWFpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZ3RrL21hbmlmZXN0LnR4dDoKKwog
MjAxNC0wOS0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSBz
aG91bGQgcmVjZWl2ZSB0aGUgbGlzdCBvZiBmaWxlcyBmcm9tIHRoZSBtYWtlZmlsZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCmluZGV4IGEzMzAzNmIuLjIzNWQ0
ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAKQEAgLTI2
OSw3ICsyNjksNiBAQCBTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNQVRF
VEMqIHBmb3JtYXRldGMsIFNUR01FRElVTSogcG1lZGl1bSwgQgogdm9pZCBEUlREYXRhT2JqZWN0
OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9S
TUFURVRDKiBwRm10U3JjKQogewogICAgIHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKLSNpZiAh
T1MoV0lOQ0UpCiAgICAgY2FzZSBUWU1FRF9IR0xPQkFMOgogICAgICAgICBwTWVkRGVzdC0+aEds
b2JhbCA9IHN0YXRpY19jYXN0PEhHTE9CQUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEds
b2JhbCwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKICAgICAgICAgYnJlYWs7CkBAIC0yODUsNyAr
Mjg0LDYgQEAgdm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERl
c3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVQKICAgICBjYXNlIFRZTUVEX0ZJTEU6CiAg
ICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQT0xFU1RSPihPbGVE
dXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDAp
KTsKICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICBjYXNlIFRZTUVEX0lTVFJFQU06CiAgICAg
ICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNyYy0+cHN0bTsKICAgICAgICAgcE1lZFNyYy0+cHN0
bS0+QWRkUmVmKCk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IGQ5NmQ5ODcuLmFiZWE2MTYgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CkBAIC05Niw3ICs5Niw2IEBAIFVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdIFtv
cHRpb25zIHRvIHBhc3MgdG8gYnVpbGQgc3lzdGVtXQogICAtLWVmbCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQnVpbGQgdGhlIEVGTCBwb3J0CiAgIC0tZ3RrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCdWlsZCB0aGUgR1RLKyBwb3J0CiAgIC0td2luY2Fpcm8gICAgICAgICAgICAg
ICAgICAgICAgICBCdWlsZCB1c2luZyBDYWlybyAocmF0aGVyIHRoYW4gQ29yZUdyYXBoaWNzKSBv
biBXaW5kb3dzCi0gIC0td2luY2UgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUg
V2luQ0UgcG9ydAogCiAgIC0taW5zcGVjdG9yLWZyb250ZW5kICAgICAgICAgICAgICBDb3B5IFdl
YiBJbnNwZWN0b3IgdXNlciBpbnRlcmZhY2UgcmVzb3VyY2VzIHRvIHRoZSBidWlsZCBkaXJlY3Rv
cnkKIApAQCAtMjQyLDExICsyNDEsOSBAQCBpZiAoaXNJbnNwZWN0b3JGcm9udGVuZCgpKSB7CiBp
ZiAoaXNDTWFrZUJ1aWxkKCkpIHsKIAogICAgICMgQnkgZGVmYXVsdCB3ZSBidWlsZCB1c2luZyBh
bGwgb2YgdGhlIGF2YWlsYWJsZSBDUFVzLgotICAgIGlmICghaXNXaW5DRSgpKSB7Ci0gICAgICAg
ICRtYWtlQXJncyAuPSAoJG1ha2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAuIG51bWJlck9mQ1BV
cygpIGlmICRtYWtlQXJncyAhfiAvLWpccypcZCsvOwotICAgICAgICBteSAkbWF4Q1BVTG9hZCA9
IG1heENQVUxvYWQoKSBpZiAkbWFrZUFyZ3MgIX4gLy1sXHMqXGQrXC4/XGQqLzsKLSAgICAgICAg
JG1ha2VBcmdzIC49ICIgLWwiIC4gbWF4Q1BVTG9hZCgpIGlmIGRlZmluZWQgJG1heENQVUxvYWQ7
Ci0gICAgfQorICAgICRtYWtlQXJncyAuPSAoJG1ha2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAu
IG51bWJlck9mQ1BVcygpIGlmICRtYWtlQXJncyAhfiAvLWpccypcZCsvOworICAgIG15ICRtYXhD
UFVMb2FkID0gbWF4Q1BVTG9hZCgpIGlmICRtYWtlQXJncyAhfiAvLWxccypcZCtcLj9cZCovOwor
ICAgICRtYWtlQXJncyAuPSAiIC1sIiAuIG1heENQVUxvYWQoKSBpZiBkZWZpbmVkICRtYXhDUFVM
b2FkOwogCiAgICAgIyBXZSByZW1vdmUgQ01ha2VDYWNoZSB0byBhdm9pZCB0aGUgYm90cyB0byBy
ZXVzZSBjYWNoZWQgZmxhZ3Mgd2hlbgogICAgICMgd2UgZW5hYmxlIG5ldyBmZWF0dXJlcy4gVGhp
cyBmb3JjZXMgYSByZWNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdC1idWlsZC1kaXJlY3RvcnkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3Rv
cnkKaW5kZXggMGEyMDdmYy4uNzVhMDBmZmYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0LWJ1aWxkLWRpcmVjdG9yeQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJl
Y3RvcnkKQEAgLTUwLDcgKzUwLDYgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10KICAg
LS1lZmwgICAgICAgICAgICAgICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIEVG
TCBwb3J0CiAgIC0tZ3RrICAgICAgICAgICAgICAgICBGaW5kIHRoZSBidWlsZCBkaXJlY3Rvcnkg
Zm9yIHRoZSBHVEsrIHBvcnQKICAgLS13aW5jYWlybyAgICAgICAgICAgIEZpbmQgdGhlIGJ1aWxk
IGRpcmVjdG9yeSBmb3IgdXNpbmcgQ2Fpcm8gKHJhdGhlciB0aGFuIENvcmVHcmFwaGljcykgb24g
V2luZG93cwotICAtLXdpbmNlICAgICAgICAgICAgICAgRmluZCB0aGUgYnVpbGQgZGlyZWN0b3J5
IGZvciB0aGUgV2luQ0UgcG9ydAogCiBFaXRoZXIgLS1jb25maWd1cmF0aW9uIG9yIC0tdG9wLWxl
dmVsIGlzIHJlcXVpcmVkLgogRU9GCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRp
cnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KaW5kZXggODk4MGUzYi4uMjhiNGQ2
MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMTA2LDcgKzEwNiw2IEBAIG15ICRubVBhdGg7CiBteSAk
b3NYVmVyc2lvbjsKIG15ICRnZW5lcmF0ZURzeW07CiBteSAkaXNHdGs7Ci1teSAkaXNXaW5DRTsK
IG15ICRpc1dpbkNhaXJvOwogbXkgJGlzV2luNjQ7CiBteSAkaXNFZmw7CkBAIC0zOTcsNyArMzk2
LDYgQEAgc3ViIGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKQogICAgIHB1c2goQGFyZ3MsICct
LWd0aycpIGlmIGlzR3RrKCk7CiAgICAgcHVzaChAYXJncywgJy0tZWZsJykgaWYgaXNFZmwoKTsK
ICAgICBwdXNoKEBhcmdzLCAnLS13aW5jYWlybycpIGlmIGlzV2luQ2Fpcm8oKTsKLSAgICBwdXNo
KEBhcmdzLCAnLS13aW5jZScpIGlmIGlzV2luQ0UoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1pbnNw
ZWN0b3ItZnJvbnRlbmQnKSBpZiBpc0luc3BlY3RvckZyb250ZW5kKCk7CiAgICAgcmV0dXJuIEBh
cmdzOwogfQpAQCAtODExLDkgKzgwOSw2IEBAIHN1YiBidWlsdER5bGliUGF0aEZvck5hbWUKICAg
ICBpZiAoaXNFZmwoKSkgewogICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERp
ci9saWIvbGliZXdlYmtpdDIuc28iOwogICAgIH0KLSAgICBpZiAoaXNXaW5DRSgpKSB7Ci0gICAg
ICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLyRsaWJyYXJ5TmFtZSI7Ci0gICAg
fQogICAgIGlmIChpc0lPU1dlYktpdCgpKSB7CiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRp
b25Qcm9kdWN0RGlyLyRsaWJyYXJ5TmFtZS5mcmFtZXdvcmsvJGxpYnJhcnlOYW1lIjsKICAgICB9
CkBAIC05NjIsMTggKzk1Nyw2IEBAIHN1YiBpc0d0aygpCiAgICAgcmV0dXJuICRpc0d0azsKIH0K
IAotc3ViIGlzV2luQ0UoKQotewotICAgIGRldGVybWluZUlzV2luQ0UoKTsKLSAgICByZXR1cm4g
JGlzV2luQ0U7Ci19Ci0KLXN1YiBkZXRlcm1pbmVJc1dpbkNFKCkKLXsKLSAgICByZXR1cm4gaWYg
ZGVmaW5lZCgkaXNXaW5DRSk7Ci0gICAgJGlzV2luQ0UgPSBjaGVja0ZvckFyZ3VtZW50QW5kUmVt
b3ZlRnJvbUFSR1YoIi0td2luY2UiKTsKLX0KLQogIyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBkZWJp
YW4sIHVidW50dSwgbGluc3BpcmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgogc3ViIGlzRGViaWFu
QmFzZWQoKQogewpAQCAtMTExMCw3ICsxMDkzLDcgQEAgc3ViIGlzQXBwbGVNYWNXZWJLaXQoKQog
CiBzdWIgaXNBcHBsZVdpbldlYktpdCgpCiB7Ci0gICAgcmV0dXJuIChpc0N5Z3dpbigpIHx8IGlz
V2luZG93cygpKSAmJiAhaXNXaW5DYWlybygpICYmICFpc0d0aygpICYmICFpc1dpbkNFKCk7Cisg
ICAgcmV0dXJuIChpc0N5Z3dpbigpIHx8IGlzV2luZG93cygpKSAmJiAhaXNXaW5DYWlybygpICYm
ICFpc0d0aygpOwogfQogCiBzdWIgaU9TU2ltdWxhdG9yRGV2aWNlc1BhdGgKQEAgLTEzNDMsNyAr
MTMyNiw3IEBAIHN1YiByZWxhdGl2ZVNjcmlwdHNEaXIoKQogc3ViIGxhdW5jaGVyUGF0aCgpCiB7
CiAgICAgbXkgJHJlbGF0aXZlU2NyaXB0c1BhdGggPSByZWxhdGl2ZVNjcmlwdHNEaXIoKTsKLSAg
ICBpZiAoaXNHdGsoKSB8fCBpc0VmbCgpIHx8IGlzV2luQ0UoKSkgeworICAgIGlmIChpc0d0aygp
IHx8IGlzRWZsKCkpIHsKICAgICAgICAgcmV0dXJuICIkcmVsYXRpdmVTY3JpcHRzUGF0aC9ydW4t
bGF1bmNoZXIiOwogICAgIH0gZWxzaWYgKGlzQXBwbGVXZWJLaXQoKSkgewogICAgICAgICByZXR1
cm4gIiRyZWxhdGl2ZVNjcmlwdHNQYXRoL3J1bi1zYWZhcmkiOwpAQCAtMTM1OCw4ICsxMzQxLDYg
QEAgc3ViIGxhdW5jaGVyTmFtZSgpCiAgICAgICAgIHJldHVybiAiU2FmYXJpIjsKICAgICB9IGVs
c2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAgICAgcmV0dXJuICJXaW5MYXVuY2hlciI7
Ci0gICAgfSBlbHNpZiAoaXNXaW5DRSgpKSB7Ci0gICAgICAgIHJldHVybiAiV2luQ0VMYXVuY2hl
ciI7CiAgICAgfQogfQogCkBAIC0xNzAwLDkgKzE2ODEsNiBAQCBzdWIgY21ha2VDYWNoZVBhdGgo
KQogc3ViIHNob3VsZFJlbW92ZUNNYWtlQ2FjaGUoQCkKIHsKICAgICBteSAoJGNhY2hlRmlsZVBh
dGgsIEBidWlsZEFyZ3MpID0gQF87Ci0gICAgaWYgKGlzV2luQ0UoKSkgewotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CiAKICAgICBpZiAoIWlzR3RrKCkpIHsKICAgICAgICAgcmV0dXJuIDE7CkBA
IC0xODk0LDIxICsxODcyLDE5IEBAIHN1YiBidWlsZENNYWtlUHJvamVjdE9yRXhpdCgkJCQkQCkK
IAogc3ViIGNtYWtlQmFzZWRQb3J0QXJndW1lbnRzKCkKIHsKLSAgICByZXR1cm4gKCctRyAiVmlz
dWFsIFN0dWRpbyA4IDIwMDUgU1RBTkRBUkRTREtfNTAwIChBUk1WNEkpIicpIGlmIGlzV2luQ0Uo
KTsKICAgICByZXR1cm4gKCk7CiB9CiAKIHN1YiBjbWFrZUJhc2VkUG9ydE5hbWUoKQogewogICAg
IHJldHVybiAiRWZsIiBpZiBpc0VmbCgpOwotICAgIHJldHVybiAiV2luQ0UiIGlmIGlzV2luQ0Uo
KTsKICAgICByZXR1cm4gIkdUSyIgaWYgaXNHdGsoKTsKICAgICByZXR1cm4gIiI7CiB9CiAKIHN1
YiBpc0NNYWtlQnVpbGQoKQogewotICAgIHJldHVybiBpc0VmbCgpIHx8IGlzV2luQ0UoKSB8fCBp
c0d0aygpOworICAgIHJldHVybiBpc0VmbCgpIHx8IGlzR3RrKCk7CiB9CiAKIHN1YiBwcm9tcHRV
c2VyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0g
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggMzdhMmE0ZS4u
YTE0ZTY4MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0
LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMjMx
LDcgKzIzMSw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZP
TlRfTE9BRF9FVkVOVFMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZm9udExvYWRFdmVudHNT
dXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiZnRwZGlyIiwgZGVzYyA9PiAiVG9nZ2xlIEZU
UCBEaXJlY3Rvcnkgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVFBESVIiLCBk
ZWZhdWx0ID0+ICFpc1dpbkNFKCksIHZhbHVlID0+IFwkZnRwRGlyU3VwcG9ydCB9LAorICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfRlRQRElSIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGZ0cERp
clN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJmdWxsc2NyZWVuLWFwaSIsIGRlc2MgPT4g
IlRvZ2dsZSBGdWxsc2NyZWVuIEFQSSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X0ZVTExTQ1JFRU5fQVBJIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzRWZs
KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkZnVsbHNjcmVlbkFQSVN1cHBvcnQgfSwKQEAgLTI3
Niw3ICsyNzYsNyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9J
TlBVVF9UWVBFX1dFRUsiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkaW5wdXRUeXBlV2Vla1N1
cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJpbnNwZWN0b3IiLCBkZXNjID0+ICJUb2dnbGUg
SW5zcGVjdG9yIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5TUEVDVE9SIiwg
ZGVmYXVsdCA9PiAhaXNXaW5DRSgpLCB2YWx1ZSA9PiBcJGluc3BlY3RvclN1cHBvcnQgfSwKKyAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0lOU1BFQ1RPUiIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4g
XCRpbnNwZWN0b3JTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAibGVnYWN5LW5vdGlmaWNh
dGlvbnMiLCBkZXNjID0+ICJUb2dnbGUgTGVnYWN5IE5vdGlmaWNhdGlvbnMgc3VwcG9ydCIsCiAg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUyIsIGRlZmF1bHQgPT4g
MCwgdmFsdWUgPT4gXCRsZWdhY3lOb3RpZmljYXRpb25zU3VwcG9ydCB9LApAQCAtMzc4LDcgKzM3
OCw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWR19GT05U
UyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdGb250c1N1cHBvcnQgfSwKIAogICAgIHsg
b3B0aW9uID0+ICJzeXN0ZW0tbWFsbG9jIiwgZGVzYyA9PiAiVG9nZ2xlIHN5c3RlbSBhbGxvY2F0
b3IgaW5zdGVhZCBvZiBUQ21hbGxvYyIsCi0gICAgICBkZWZpbmUgPT4gIlVTRV9TWVNURU1fTUFM
TE9DIiwgZGVmYXVsdCA9PiBpc1dpbkNFKCksIHZhbHVlID0+IFwkc3lzdGVtTWFsbG9jU3VwcG9y
dCB9LAorICAgICAgZGVmaW5lID0+ICJVU0VfU1lTVEVNX01BTExPQyIsIGRlZmF1bHQgPT4gMCwg
dmFsdWUgPT4gXCRzeXN0ZW1NYWxsb2NTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAidGVt
cGxhdGUtZWxlbWVudCIsIGRlc2MgPT4gIlRvZ2dsZSBIVE1MVGVtcGxhdGVFbGVtZW50IHN1cHBv
cnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCIsIGRlZmF1bHQg
PT4gMSwgdmFsdWUgPT4gXCR0ZW1wbGF0ZUVsZW1lbnRTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CmluZGV4IDY0Y2M3ZjIuLmVlMDI1ZWIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC01
NzAsNyArNTcwLDcgQEAgTU9DSyBvdXRwdXQgb2YgY2hpbGQgcHJvY2VzcwogICAgICAgICBzZWxm
Ll9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdsaW51eDInLCAnZGViaWFu
LWh0dHBkLTIuMi5jb25mJykKIAogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9y
X3BsYXRmb3JtKHBvcnQsICdtYWMnLCAnYXBhY2hlMi4yLWh0dHBkLmNvbmYnKQotICAgICAgICBz
ZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdhcGFj
aGUyLjItaHR0cGQuY29uZicpICAjIHdpbjMyIGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0Zm9y
bS4gIEFwcGxlV2luL1dpbkNhaXJvL1dpbkNFIHBvcnRzIGFsbCB1c2UgY3lnd2luLgorICAgICAg
ICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdh
cGFjaGUyLjItaHR0cGQuY29uZicpICAjIHdpbjMyIGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0
Zm9ybS4gIEFwcGxlV2luL1dpbkNhaXJvIHBvcnRzIGFsbCB1c2UgY3lnd2luLgogICAgICAgICBz
ZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdiYXJmJywgJ2FwYWNo
ZTIuMi1odHRwZC5jb25mJykKIAogICAgIGRlZiB0ZXN0X3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19m
aWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29uZmlnLmgKaW5kZXggZTVmMTllZi4uNTc5MDlhYiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvbmZpZy5oCkBAIC01Myw3ICs1Myw3IEBACiAjaWZuZGVmIF9XSU5TT0NLQVBJXwogI2Rl
ZmluZSBfV0lOU09DS0FQSV8gLy8gUHJldmVudCBpbmNsdXNpb24gb2Ygd2luc29jay5oIGluIHdp
bmRvd3MuaAogI2VuZGlmCi0jZWxpZiAhT1MoV0lOQ0UpCisjZWxzZQogI2RlZmluZSBXVEZfVVNF
X0NHIDEKICN1bmRlZiBXVEZfVVNFX0NBSVJPCiAjdW5kZWYgV1RGX1VTRV9DVVJMCmRpZmYgLS1n
aXQgYS9Ub29scy9XaW5DRUxhdW5jaGVyL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvV2luQ0VMYXVu
Y2hlci9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5ZmM2
MS4uMDAwMDAwMAotLS0gYS9Ub29scy9XaW5DRUxhdW5jaGVyL0NNYWtlTGlzdHMudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotc2V0KFdpbkNFTGF1bmNoZXJfSU5DTFVERV9ESVJF
Q1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9L3dpbmNlIgotICAgICIke1dFQkNPUkVfRElSfSIK
LSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrIgotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0IgotICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0iCi0gICAgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgIiR7
V1RGX0RJUn0iCi0gICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCi0gICAgIiR7Q01BS0VfQklO
QVJZX0RJUn0iCi0pCi0KLXNldChXaW5DRUxhdW5jaGVyX1NPVVJDRVMKLSAgICAke1RPT0xTX0RJ
Un0vV2luQ0VMYXVuY2hlci9tYWluLmNwcAotKQotCi1zZXQoV2luQ0VMYXVuY2hlcl9MSUJSQVJJ
RVMKLSAgICBXZWJLaXQKLSkKLQotaW5jbHVkZV9kaXJlY3Rvcmllcygke1dpbkNFTGF1bmNoZXJf
SU5DTFVERV9ESVJFQ1RPUklFU30pCi1hZGRfZXhlY3V0YWJsZShXaW5DRUxhdW5jaGVyIFdJTjMy
ICR7V2luQ0VMYXVuY2hlcl9TT1VSQ0VTfSkKLWFkZF9kZXBlbmRlbmNpZXMoV2luQ0VMYXVuY2hl
ciBXZWJLaXQpCi10YXJnZXRfbGlua19saWJyYXJpZXMoV2luQ0VMYXVuY2hlciAke1dpbkNFTGF1
bmNoZXJfTElCUkFSSUVTfSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhXaW5DRUxhdW5jaGVyIFBS
T1BFUlRJRVMgRk9MREVSICJUb29scyIpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoV2luQ0VMYXVu
Y2hlciBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllf
RElSfSIpCmRpZmYgLS1naXQgYS9Ub29scy9XaW5DRUxhdW5jaGVyL21haW4uY3BwIGIvVG9vbHMv
V2luQ0VMYXVuY2hlci9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBm
MmE1MS4uMDAwMDAwMAotLS0gYS9Ub29scy9XaW5DRUxhdW5jaGVyL21haW4uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmlj
ayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+Ci0KLXN0YXRpYyBjb25zdCBMUENXU1RSIGtNYWluV2luZG93VGl0bGUgPSBMIldlYktp
dCBmb3IgV2luQ0UiOwotc3RhdGljIGNvbnN0IExQQ1dTVFIga01haW5XaW5kb3dDbGFzc05hbWUg
PSBMIk1haW5XaW5kb3dDbGFzcyI7Ci0KLQotc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJv
YyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkK
LXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICBjYXNlIFdNX0RFU1RST1k6Ci0gICAgICAg
IFBvc3RRdWl0TWVzc2FnZSgwKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBBUElFTlRSWSBfdFdpbk1haW4oSElO
U1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQVFNUUiBscENtZExp
bmUsIGludCBuQ21kU2hvdykKLXsKLSAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcmV2SW5z
dGFuY2UpOwotCi0gICAgQ29Jbml0aWFsaXplRXgoMCwgQ09JTklUX01VTFRJVEhSRUFERUQpOwot
ICAgIFdlYlZpZXc6OmluaXRpYWxpemUoaEluc3RhbmNlKTsKLQotICAgIExQQ1dTVFIgaG9tZVVy
bCA9IGxwQ21kTGluZTsKLSAgICBib29sIGVuYWJsZURvdWJsZUJ1ZmZlciA9IHRydWU7Ci0gICAg
Ym9vbCBmdWxsc2NyZWVuID0gZmFsc2U7Ci0KLSAgICBpZiAoaG9tZVVybFswXSA9PSAnLScpIHsK
LSAgICAgICAgZm9yICg7ICpob21lVXJsICYmICpob21lVXJsICE9ICcgJzsgKytob21lVXJsKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKCpob21lVXJsKSB7Ci0gICAgICAgICAgICBjYXNlICdkJzoK
LSAgICAgICAgICAgICAgICBlbmFibGVEb3VibGVCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgIGZ1bGxz
Y3JlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoKmhvbWVVcmwpCi0gICAgICAgICAgICArK2hvbWVVcmw7Ci0gICAgfQotCi0gICAg
RFdPUkQgc3R5bGVzID0gV1NfVklTSUJMRTsKLQotICAgIGlmICghZnVsbHNjcmVlbikgewotICAg
ICAgICBzdHlsZXMgfD0gV1NfQ0FQVElPTgotICAgICAgICAgICAgfCBXU19NQVhJTUlaRUJPWAot
ICAgICAgICAgICAgfCBXU19NSU5JTUlaRUJPWAotICAgICAgICAgICAgfCBXU19PVkVSTEFQUEVE
Ci0gICAgICAgICAgICB8IFdTX1NZU01FTlUKLSAgICAgICAgICAgIHwgV1NfVEhJQ0tGUkFNRTsK
LSAgICB9Ci0KLSAgICBXTkRDTEFTU1cgd2M7Ci0gICAgd2Muc3R5bGUgICAgICAgICAgPSBDU19I
UkVEUkFXIHwgQ1NfVlJFRFJBVzsKLSAgICB3Yy5scGZuV25kUHJvYyAgICA9IFduZFByb2M7Ci0g
ICAgd2MuY2JDbHNFeHRyYSAgICAgPSAwOwotICAgIHdjLmNiV25kRXh0cmEgICAgID0gMDsKLSAg
ICB3Yy5oSW5zdGFuY2UgICAgICA9IGhJbnN0YW5jZTsKLSAgICB3Yy5oSWNvbiAgICAgICAgICA9
IDA7Ci0gICAgd2MuaEN1cnNvciAgICAgICAgPSAwOwotICAgIHdjLmhickJhY2tncm91bmQgID0g
c3RhdGljX2Nhc3Q8SEJSVVNIPihHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCkpOwotICAgIHdj
Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtNYWluV2luZG93
Q2xhc3NOYW1lOwotICAgIFJlZ2lzdGVyQ2xhc3MoJndjKTsKLQotICAgIEhXTkQgaE1haW5XaW5k
b3cgPSBDcmVhdGVXaW5kb3dXKGtNYWluV2luZG93Q2xhc3NOYW1lLCBrTWFpbldpbmRvd1RpdGxl
LCBzdHlsZXMsCi0gICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAs
IDAsIGhJbnN0YW5jZSwgMCk7Ci0KLSAgICBpZiAoZnVsbHNjcmVlbikgewotICAgICAgICBTZXRX
aW5kb3dQb3MoaE1haW5XaW5kb3csIEhXTkRfVE9QTU9TVCwgMCwgMCwgR2V0U3lzdGVtTWV0cmlj
cyhTTV9DWFNDUkVFTiksCi0gICAgICAgICAgICBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZU0NSRUVO
KSwgU1dQX1NIT1dXSU5ET1cpOwotICAgIH0KLQotICAgIFNob3dXaW5kb3coaE1haW5XaW5kb3cs
IG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5kb3coaE1haW5XaW5kb3cpOwotCi0gICAgV1RGOjpP
d25QdHI8V2ViVmlldz4gd2ViVmlldyA9IFdURjo6YWRvcHRQdHIobmV3IFdlYlZpZXcoaE1haW5X
aW5kb3csIGVuYWJsZURvdWJsZUJ1ZmZlciA/IFdlYlZpZXc6OkVuYWJsZURvdWJsZUJ1ZmZlcmlu
ZyA6IFdlYlZpZXc6Ok5vRmVhdHVyZSkpOwotICAgIHdlYlZpZXctPmxvYWQoaG9tZVVybCk7Ci0K
LSAgICAvLyBNYWluIG1lc3NhZ2UgbG9vcDoKLSAgICBNU0cgbXNnOwotICAgIEJPT0wgYlJldDsK
LSAgICB3aGlsZSAoYlJldCA9IEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCkpIHsKLSAgICAgICAg
aWYgKGJSZXQgPT0gLTEpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGVycm9y
IGFuZCBwb3NzaWJseSBleGl0LgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVHJhbnNs
YXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHdlYlZpZXcuY2xlYXIoKTsKLSAgICBEZXN0cm95V2luZG93
KGhNYWluV2luZG93KTsKLQotICAgIFdlYlZpZXc6OmNsZWFudXAoKTsKLSAgICBDb1VuaW5pdGlh
bGl6ZSgpOwotCi0gICAgcmV0dXJuIG1zZy53UGFyYW07Ci19CmRpZmYgLS1naXQgYS9Ub29scy9n
dGsvbWFuaWZlc3QudHh0IGIvVG9vbHMvZ3RrL21hbmlmZXN0LnR4dAppbmRleCAyYWYwNjAyLi44
NDIyMzM0IDEwMDY0NAotLS0gYS9Ub29scy9ndGsvbWFuaWZlc3QudHh0CisrKyBiL1Rvb2xzL2d0
ay9tYW5pZmVzdC50eHQKQEAgLTQsNyArNCw2IEBAIGV4Y2x1ZGUgQ2hhbmdlTG9nCiBleGNsdWRl
IE1ha2VmaWxlCiBleGNsdWRlIFBsYXRmb3JtRWZsLmNtYWtlCiBleGNsdWRlIFBsYXRmb3JtV2lu
LmNtYWtlCi1leGNsdWRlIFBsYXRmb3JtV2luQ0UuY21ha2UKIGV4Y2x1ZGUgdGFncyQKIGV4Y2x1
ZGUgfiQKIGV4Y2x1ZGUgXC4jJApAQCAtNDEsNyArNDAsNyBAQCBleGNsdWRlIFwueGNjb25maWck
CiBleGNsdWRlIFwueGNvZGVwcm9qJAogCiAjIEV4Y2x1ZGUgZGlyZWN0b3JpZXMgZnJvbSBvdGhl
ciBwb3J0cwotZXhjbHVkZSAuKlwvKG1hY3xpb3N8Y2Z8Y2d8Y29jb2F8Q29jb2F8b2JqY3xhdmZv
dW5kYXRpb258Y2F8Y3VybHxlZmx8d2lufHdpbmNlKVwvLiokCitleGNsdWRlIC4qXC8obWFjfGlv
c3xjZnxjZ3xjb2NvYXxDb2NvYXxvYmpjfGF2Zm91bmRhdGlvbnxjYXxjdXJsfGVmbHx3aW4pXC8u
KiQKIAogZGlyZWN0b3J5IFNvdXJjZQogZXhjbHVkZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMKQEAgLTUzLDcgKzUyLDYgQEAgZXhjbHVkZSBTb3VyY2UvYm1hbGxvYwogZXhjbHVkZSBTb3Vy
Y2UvY21ha2UvRUZMSGVscGVycy5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNX
aW5DYWlyby5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNXaW5kb3dzLmNtYWtl
JAotZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNFLmNtYWtlJAogZXhjbHVkZSBTb3Vy
Y2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0
aW9uc0VmbC5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyJAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238374</attachid>
            <date>2014-09-19 05:56:41 -0700</date>
            <delta_ts>2014-09-21 15:30:54 -0700</delta_ts>
            <desc>WIP patch for EWS</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>595135</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzZlMmY5Li5kZjIwNTE0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTQtMDktMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFr
ZToKKwogMjAxNC0wOS0xNyAgUmVuYXRvIE5hZ3kgIDxybmFneUBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgW0VGTF1bR1RLXSBSZW1vdmUgV2ViS2l0MSByZWxhdGVkIGNvZGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCA0MTJlZGY1Li4wYzcwYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmNhY2hlRmx1
c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogY29uZmlnLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbU90aGVyVGhyZWFkKToKKyAgICAgICAgKEpTQzo6c3dhcElmQmFj
a3dhcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNw
cDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorCiAyMDE0LTA5
LTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCByb2xsb3V0IHIxNzM3MzEuIEJyb2tlIG11bHRpcGxlIGJ1aWxkcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCmluZGV4IDA4N2QzMWMu
LjMyMjhhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuaApAQCAtMTExOSw4ICsxMTE5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVudCArIHBhZ2UpOwogCiAgICAgICAg
ICAgICBsaW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAg
ICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FDSEVfU1lOQ19BTEwpOwogI2Vs
c2UKICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTXY3QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TXY3QXNzZW1ibGVyLmgKaW5kZXggZmZjMzA5MC4uNjQ3ZmViMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMjQxMCw4ICsyNDEw
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVu
dCArIHBhZ2UpOwogCiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1cnJlbnQsIGVuZCk7Ci0jZWxp
ZiBPUyhXSU5DRSkKLSAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUsIENBQ0hFX1NZ
TkNfQUxMKTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2lu
ZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCmluZGV4IDI3
NjE2MjQuLjQ1OTY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTM5LDEyICszOSwxMiBA
QAogI2RlZmluZSBXSU5WRVIgMHgwNTAyCiAjZW5kaWYKIAotI2lmICFDT01QSUxFUihNU1ZDN19P
Ul9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUikKIC8v
IFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAjaW5jbHVkZSBvZiBzdGRs
aWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYgX0NSVF9SQU5EX1MKICNk
ZWZpbmUgX0NSVF9SQU5EX1MKICNlbmRpZgotI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9M
T1dFUikgJiYgIU9TKFdJTkNFKQorI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUgog
CiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggMDY1NGZmZS4uMTI2OWYwYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBA
IC02OSwxOCArNjksNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBJZkJhY2t3YXJkcyh2b2lkKiYgYmVnaW4sIHZvaWQq
JiBlbmQpCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKGJlZ2luIDw9IGVuZCkKLSAgICAgICAg
cmV0dXJuOwotICAgIHN0ZDo6c3dhcChiZWdpbiwgZW5kKTsKLSNlbHNlCi1VTlVTRURfUEFSQU0o
YmVnaW4pOwotVU5VU0VEX1BBUkFNKGVuZCk7Ci0jZW5kaWYKLX0KLQogI2lmIE9TKERBUldJTikK
IHR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7CiAjZWxpZiBPUyhXSU5ET1dTKQpA
QCAtMjQ4LDEyICsyMzYsMTAgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJl
bnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIAogICAgIHZvaWQq
IHJlZ2lzdGVyc0JlZ2luID0gJnJlZ2lzdGVyczsKICAgICB2b2lkKiByZWdpc3RlcnNFbmQgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcmVnaXN0ZXJzICsgMSkpKTsKLSAgICBzd2Fw
SWZCYWNrd2FyZHMocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0VuZCk7CiAgICAgY29uc2VydmF0
aXZlUm9vdHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKICAgICB2b2lkKiBzdGFja0JlZ2luID0gc3RhY2tDdXJyZW50Owog
ICAgIHZvaWQqIHN0YWNrRW5kID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCk7Ci0g
ICAgc3dhcElmQmFja3dhcmRzKHN0YWNrQmVnaW4sIHN0YWNrRW5kKTsKICAgICBjb25zZXJ2YXRp
dmVSb290cy5hZGQoc3RhY2tCZWdpbiwgc3RhY2tFbmQsIGppdFN0dWJSb3V0aW5lcywgY29kZUJs
b2Nrcyk7CiB9CiAKQEAgLTQ1Myw3ICs0MzksNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRo
ZXJGcm9tT3RoZXJUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLAog
CiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIocmVncyk7
CiAgICAgdm9pZCogc3RhY2tCYXNlID0gdGhyZWFkLT5zdGFja0Jhc2U7Ci0gICAgc3dhcElmQmFj
a3dhcmRzKHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKICAgICBzdGFja1BvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrUG9pbnRlcikpKTsKICAgICBjb25z
ZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgKaW5kZXggNTVmOWU3Ny4uNjM2YzJmYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTU1LDEyICs1NSw2IEBA
CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQotLy8gRnJvbSBw
a2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZpbGUgZnJvbSB0aGUgUGxhdGZvcm0gQnVpbGRlcikK
LSNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgwN0YKLWV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxp
bXBvcnQpIHZvaWQgQ2FjaGVSYW5nZUZsdXNoKExQVk9JRCBwQWRkciwgRFdPUkQgZHdMZW5ndGgs
IERXT1JEIGR3RmxhZ3MpOwotI2VuZGlmCi0KICNkZWZpbmUgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhD
TFVTSVZFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAwOTQ5M2FhLi42OTU4NzAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2Vu
ZGlmCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNW
QykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNpbmNsdWRlIDxtbXN5c3RlbS5oPgogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KQEAgLTExMDksNyArMTEwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIC8vIGJlIGluIGEg
c2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVp
cmVzIG9iamVjdAogLy8gdW53aW5kaW5nLgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmlu
ZWQoX0RFQlVHKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNWQykgJiYgIWRlZmluZWQo
X0RFQlVHKQogI2RlZmluZSBUUlkgICAgICAgX190cnkgewogI2RlZmluZSBFWENFUFQoeCkgfSBf
X2V4Y2VwdCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB4OyB9CiAjZWxzZQpAQCAtMTE0
MSw3ICsxMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2VuZGlmCiAK
ICNpZiBPUyhXSU5ET1dTKQotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDeWd3aW4gY2FsbHMgOjpT
ZXRFcnJvck1vZGUoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyksIHdoaWNoIHdlIHdpbGwgaW5oZXJp
dC4gVGhpcyBpcyBiYWQgZm9yCiAgICAgLy8gdGVzdGluZy9kZWJ1Z2dpbmcsIGFzIGl0IGNhdXNl
cyB0aGUgcG9zdC1tb3J0ZW0gZGVidWdnZXIgbm90IHRvIGJlIGludm9rZWQuIFdlIHJlc2V0IHRo
ZQogICAgIC8vIGVycm9yIG1vZGUgaGVyZSB0byB3b3JrIGFyb3VuZCBDeWd3aW4ncyBiZWhhdmlv
ci4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1MjIyPi4KQEAgLTExNTUsNyArMTE1NCw2IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX0FTU0VSVCwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJlcG9ydE1vZGUo
X0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9GSUxFKTsKICNlbmRpZgotI2VuZGlmCiAKICAgICB0
aW1lQmVnaW5QZXJpb2QoMSk7CiAjZW5kaWYKQEAgLTExNzAsNyArMTE2OCw2IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICNlbmRpZgogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChjaGFyKiB0aW1lb3V0U3RyaW5nID0g
Z2V0ZW52KCJKU0NfdGltZW91dCIpKSB7CiAgICAgICAgIGlmIChzc2NhbmYodGltZW91dFN0cmlu
ZywgIiVsZiIsICZzX2Rlc2lyZWRUaW1lb3V0KSAhPSAxKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KApAQCAtMTE3OSw3ICsxMTc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0VGhyZWFkTWFp
biwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KLSNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA0OWExYzM2Li5hZjU3MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQwLDEwICs0MCw2IEBACiAjaW5j
bHVkZSAiSlNSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCi0jaWYgT1MoV0lOQ0UpCi1leHRlcm4g
IkMiIHRpbWVfdCB0aW1lKHRpbWVfdCogdGltZXIpOyAvLyBQcm92aWRlZCBieSBsaWJjZS4KLSNl
bmRpZgotCiAjaWYgSEFWRShTWVNfVElNRV9IKQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggZjBkZGY5
OC4uNDcxOGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
QEAgLTEwNSw3ICsxMDUsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcs
IEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGJvb2wgb3Zl
cnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQog
ewotI2lmICFPUyhXSU5DRSkKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihu
YW1lKTsKICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTQsNyArMTEzLDYgQEAgYm9vbCBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMoVCYgdmFyaWFi
bGUsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlICVzPSVzXG4iLCBuYW1lLCBz
dHJpbmdWYWx1ZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0OTE0MTk3Li4xMzk2MzQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNjYsMTEgKzI2Niw5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVy
ID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOwogCiAgICAgICAgIFN0
cmluZ1ByaW50U3RyZWFtIHBhdGhPdXQ7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBjb25zdCBj
aGFyKiBwcm9maWxlclBhdGggPSBnZXRlbnYoIkpTQ19QUk9GSUxFUl9QQVRIIik7CiAgICAgICAg
IGlmIChwcm9maWxlclBhdGgpCiAgICAgICAgICAgICBwYXRoT3V0LnByaW50KHByb2ZpbGVyUGF0
aCwgIi8iKTsKLSNlbmRpZgogICAgICAgICBwYXRoT3V0LnByaW50KCJKU0NQcm9maWxlLSIsIGdl
dEN1cnJlbnRQcm9jZXNzSUQoKSwgIi0iLCBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPmRhdGFiYXNl
SUQoKSwgIi5qc29uIik7CiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+cmVnaXN0ZXJU
b1NhdmVBdEV4aXQocGF0aE91dC50b0NTdHJpbmcoKS5kYXRhKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0UmVnRXhwLmNwcAppbmRleCA5Mjg2Y2UxLi5hYjhkMWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KICNlbmRpZgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIU9TKFdJTkNFKQorI2lm
IENPTVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjaW5jbHVkZSA8bW1zeXN0ZW0u
aD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xNTAsNyArMTUwLDcgQEAgR2xvYmFsT2JqZWN0
OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGEKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRo
ZSByZWFsTWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKIC8vIHVud2luZGluZy4KIAotI2lm
IENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykgJiYgIU9TKFdJTkNFKQorI2lmIENP
TVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykKICNkZWZpbmUgVFJZICAgICAgIF9fdHJ5
IHsKICNkZWZpbmUgRVhDRVBUKHgpIH0gX19leGNlcHQgKEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRM
RVIpIHsgeDsgfQogI2Vsc2UKQEAgLTE2MywxMiArMTYzLDEwIEBAIGludCByZWFsTWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewog
I2lmIE9TKFdJTkRPV1MpCi0jaWYgIU9TKFdJTkNFKQogICAgIC8vIEN5Z3dpbiBjYWxscyA6OlNl
dEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKSwgd2hpY2ggd2Ugd2lsbCBpbmhlcml0
LiBUaGlzIGlzIGJhZCBmb3IKICAgICAvLyB0ZXN0aW5nL2RlYnVnZ2luZywgYXMgaXQgY2F1c2Vz
IHRoZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlciBub3QgdG8gYmUgaW52b2tlZC4gV2UgcmVzZXQgdGhl
CiAgICAgLy8gZXJyb3IgbW9kZSBoZXJlIHRvIHdvcmsgYXJvdW5kIEN5Z3dpbidzIGJlaGF2aW9y
LiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUyMjI+LgogICAgIDo6U2V0RXJyb3JNb2RlKDAp
OwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9ERUJVRykKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCmluZGV4IGM3NmE5YTguLjMwMmI1ZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKQEAgLTkyLDcgKzky
LDYgQEAgdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBv
aW50ZXIpCiAKIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDaGVjayBmb3Ig
SlNDX0NPREVfUFJPRklMSU5HLgogICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0g
Z2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKICAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2Rl
KQpAQCAtMTE5LDcgKzExOCw2IEBAIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9y
KFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgIEFTU0VSVCghc190cmFja2VyKTsK
ICAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigpOwogICAgIGFs
bG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwotI2VuZGlmCiB9CiAKIHZvaWQq
IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggN2Q2
OTc2YS4uNjc2MWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0
IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorICAgICAgICAq
IHd0Zi9Bc3NlcnRpb25zLmg6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYvQ3VycmVudFRpbWUuY3BwOgor
ICAgICAgICAoV1RGOjpsb3dSZXNVVENUaW1lKToKKyAgICAgICAgKiB3dGYvRGF0YUxvZy5jcHA6
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6Z2V0TG9jYWxUaW1l
KToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToKKyAgICAgICAgKiB3dGYvRmFz
dE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisgICAgICAgICog
d3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiB3dGYvUkFNU2l6ZS5jcHA6CisgICAgICAgIChXVEY6
OmNvbXB1dGVSQU1TaXplKToKKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyU2VlZC5oOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKToKKyAgICAgICAgKiB3
dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrQm91
bmRzOjppc0dyb3dpbmdEb3dud2FyZCk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgor
ICAgICAgICAod3RmX2JzZWFyY2gpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdHJpbmdFeHRy
YXMuaDoKKyAgICAgICAgKHN0cm5pY21wKTogRGVsZXRlZC4KKyAgICAgICAgKHN0cmljbXApOiBE
ZWxldGVkLgorICAgICAgICAoc3RyZHVwKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFk
U3BlY2lmaWMuaDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdU
Rjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9XaW5kb3dzRXh0cmFzLmg6
CisgICAgICAgIChXVEY6OmdldFJlZ2lzdHJ5VmFsdWUpOgorICAgICAgICAoV1RGOjpnZXRXaW5k
b3dQb2ludGVyKToKKyAgICAgICAgKFdURjo6c2V0V2luZG93UG9pbnRlcik6CisgICAgICAgICog
d3RmL2R0b2EvdXRpbHMuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmZvcm1hdCk6CisKIDIwMTQtMDktMTggIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERvdCBub3QgYWxs
b3cgdG8gY3JlYXRlIGRlbGV0ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvY29uZmlnLmggYi9Tb3VyY2UvV1RGL2NvbmZpZy5oCmluZGV4IDVjMjIz
MTYuLjI5MDNjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvY29uZmlnLmgKKysrIGIvU291cmNl
L1dURi9jb25maWcuaApAQCAtNDQsNyArNDQsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmICFD
T01QSUxFUihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZD
N19PUl9MT1dFUikKIC8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAj
aW5jbHVkZSBvZiBzdGRsaWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYg
X0NSVF9SQU5EX1MKICNkZWZpbmUgX0NSVF9SQU5EX1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0Fzc2VydGlvbnMuY3BwIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXgg
MzQxYmQwMS4uNmQ5ZDk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAK
ICNlbmRpZgogI2VuZGlmIC8vIFVTRShDRikKIAotI2lmIENPTVBJTEVSKE1TVkMpICYmICFPUyhX
SU5DRSkKKyNpZiBDT01QSUxFUihNU1ZDKQogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAK
QEAgLTEyMiwyMCArMTIyLDcgQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNv
bnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBpZiAoX3ZzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgYXJncykg
IT0gLTEpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgICAgICAvLyBXaW5DRSBvbmx5IHN1
cHBvcnRzIHdpZGUgY2hhcnMKLSAgICAgICAgICAgICAgICB3Y2hhcl90KiB3aWRlQnVmZmVyID0g
KHdjaGFyX3QqKW1hbGxvYyhzaXplICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgICAgICAg
ICBpZiAod2lkZUJ1ZmZlciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWRlQnVmZmVyW2ldID0gYnVmZmVyW2ldKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ1cod2lkZUJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
ZnJlZSh3aWRlQnVmZmVyKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJp
bmdBKGJ1ZmZlcik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xOTYsNyArMTgzLDcgQEAgc3Rh
dGljIHZvaWQgcHJpbnRmX3N0ZGVycl9jb21tb24oY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiAK
IHN0YXRpYyB2b2lkIHByaW50Q2FsbFNpdGUoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uKQogewotI2lmIE9TKFdJTkRPV1MpICYmICFPUyhXSU5DRSkgJiYg
ZGVmaW5lZChfREVCVUcpCisjaWYgT1MoV0lORE9XUykgJiYgZGVmaW5lZChfREVCVUcpCiAgICAg
X0NydERiZ1JlcG9ydChfQ1JUX1dBUk4sIGZpbGUsIGxpbmUsIE5VTEwsICIlc1xuIiwgZnVuY3Rp
b24pOwogI2Vsc2UKICAgICAvLyBCeSB1c2luZyB0aGlzIGZvcm1hdCwgd2hpY2ggbWF0Y2hlcyB0
aGUgZm9ybWF0IHVzZWQgYnkgTVNWQyBmb3IgY29tcGlsZXIgZXJyb3JzLCBkZXZlbG9wZXJzCkBA
IC0yMzUsNyArMjIyLDcgQEAgdm9pZCBXVEZHZXRCYWNrdHJhY2Uodm9pZCoqIHN0YWNrLCBpbnQq
IHNpemUpCiB7CiAjaWYgT1MoREFSV0lOKSB8fCAoT1MoTElOVVgpICYmICFkZWZpbmVkKF9fVUNM
SUJDX18pKQogICAgICpzaXplID0gYmFja3RyYWNlKHN0YWNrLCAqc2l6ZSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjZWxpZiBPUyhXSU5ET1dTKQogICAgIC8vIFRoZSBDYXB0
dXJlU3RhY2tCYWNrVHJhY2UgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIFhQLCBidXQgaXQgaXMg
bm90IGRlZmluZWQKICAgICAvLyBpbiB0aGUgV2luZG93cyBTZXJ2ZXIgMjAwMyBSMiBQbGF0Zm9y
bSBTREsuIFNvLCB3ZSdsbCBncmFiIHRoZSBmdW5jdGlvbgogICAgIC8vIHRocm91Z2ggR2V0UHJv
Y0FkZHJlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKaW5kZXggZjRjODkyYS4uZjhhMTA1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2Vy
dGlvbnMuaApAQCAtMTk2LDE0ICsxOTYsNiBAQCBleHRlcm4gIkMiIHsKICAgRXhwcmVzc2lvbnMg
aW5zaWRlIHRoZW0gYXJlIGV2YWx1YXRlZCBpbiBkZWJ1ZyBidWlsZHMgb25seS4KICovCiAKLSNp
ZiBPUyhXSU5DRSkKLS8qIEZJWE1FOiBXZSBpbmNsdWRlIHRoaXMgaGVyZSBvbmx5IHRvIGF2b2lk
IGEgY29uZmxpY3Qgd2l0aCB0aGUgQVNTRVJUIG1hY3JvLiAqLwotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSN1bmRlZiBtaW4KLSN1bmRlZiBtYXgKLSN1bmRlZiBFUlJPUgotI2VuZGlmCi0KICNpZiBP
UyhXSU5ET1dTKQogLyogRklYTUU6IENoYW5nZSB0byB1c2Ugc29tZXRoaW5nIG90aGVyIHRoYW4g
QVNTRVJUIHRvIGF2b2lkIHRoaXMgY29uZmxpY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBwbGF0Zm9y
bSAqLwogI3VuZGVmIEFTU0VSVApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXRvbWljcy5o
IGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDRlNjMwYzIuLjc4NzY4MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9BdG9t
aWNzLmgKQEAgLTc0LDExICs3NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogI2lmIE9TKFdJTkRPV1Mp
CiBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgdW5zaWduZWQqIGxvY2F0
aW9uLCB1bnNpZ25lZCBleHBlY3RlZCwgdW5zaWduZWQgbmV3VmFsdWUpCiB7Ci0jaWYgT1MoV0lO
Q0UpCi0gICAgcmV0dXJuIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHJlaW50ZXJwcmV0X2Nh
c3Q8TE9ORyo+KGNvbnN0X2Nhc3Q8dW5zaWduZWQqPihsb2NhdGlvbikpLCBzdGF0aWNfY2FzdDxM
T05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0gc3RhdGljX2Nh
c3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2Vsc2UKICAgICByZXR1cm4gSW50ZXJsb2NrZWRDb21wYXJl
RXhjaGFuZ2UocmVpbnRlcnByZXRfY2FzdDxMT05HIHZvbGF0aWxlKj4obG9jYXRpb24pLCBzdGF0
aWNfY2FzdDxMT05HPihuZXdWYWx1ZSksIHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKSkgPT0g
c3RhdGljX2Nhc3Q8TE9ORz4oZXhwZWN0ZWQpOwotI2VuZGlmCiB9CiAKIGlubGluZSBib29sIHdl
YWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlvbiwgdm9pZCogZXhwZWN0ZWQs
IHZvaWQqIG5ld1ZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUu
Y3BwIGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCmluZGV4IDk5MGNhYTEuLjQxMWU2
NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCkBAIC03MiwxMSArNzIsNyBAQCBzdGF0aWMgZG91
YmxlIGxvd1Jlc1VUQ1RpbWUoKQogewogICAgIEZJTEVUSU1FIGZpbGVUaW1lOwogCi0jaWYgT1Mo
V0lOQ0UpCi0gICAgR2V0Q3VycmVudEZUKCZmaWxlVGltZSk7Ci0jZWxzZQogICAgIEdldFN5c3Rl
bVRpbWVBc0ZpbGVUaW1lKCZmaWxlVGltZSk7Ci0jZW5kaWYKIAogICAgIC8vIEFzIHBlciBXaW5k
b3dzIGRvY3VtZW50YXRpb24gZm9yIEZJTEVUSU1FLCBjb3B5IHRoZSByZXN1bHRpbmcgRklMRVRJ
TUUgc3RydWN0dXJlIHRvIGEKICAgICAvLyBVTEFSR0VfSU5URUdFUiBzdHJ1Y3R1cmUgdXNpbmcg
bWVtY3B5ICh1c2luZyBtZW1jcHkgaW5zdGVhZCBvZiBkaXJlY3QgYXNzaWdubWVudCBjYW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwIGIvU291cmNlL1dURi93dGYvRGF0
YUxvZy5jcHAKaW5kZXggMjliZWQxNS4uZWEwNGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRGF0YUxvZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAKQEAgLTM1LDEy
ICszNSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQot
I2lmbmRlZiBfSU9OQkYKLSNkZWZpbmUgX0lPTkJGIDB4MDAwNAotI2VuZGlmCi0jZW5kaWYKLQog
I2RlZmluZSBEQVRBX0xPR19UT19GSUxFIDAKIAogLy8gU2V0IHRvIDEgdG8gdXNlIHRoZSB0ZW1w
IGRpcmVjdG9yeSBmcm9tIGNvbmZzdHIgaW5zdGVhZCBvZiBoYXJkY29kZWQgZGlyZWN0b3J5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYv
RGF0ZU1hdGguY3BwCmluZGV4IDZlZTM2ZDMuLjM3Y2YzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAg
LTEyMSw3ICsxMjEsNiBAQCBzdGF0aWMgY29uc3QgaW50IGZpcnN0RGF5T2ZNb250aFsyXVsxMl0g
PSB7CiAgICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMw
NSwgMzM1fQogfTsKIAotI2lmICFPUyhXSU5DRSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRMb2Nh
bFRpbWUoY29uc3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKIHsKICNp
ZiBDT01QSUxFUihNSU5HVykKQEAgLTEzMiw3ICsxMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Z2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1Y3QgdG0qIGxvY2FsVE0p
CiAgICAgbG9jYWx0aW1lX3IobG9jYWxUaW1lLCBsb2NhbFRNKTsKICNlbmRpZgogfQotI2VuZGlm
CiAKIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKIHsKQEAgLTQyNCwxMSArNDIyLDcgQEAgc3Rh
dGljIHZvaWQgVW5peFRpbWVUb0ZpbGVUaW1lKHRpbWVfdCB0LCBMUEZJTEVUSU1FIHBmdCkKICAq
Lwogc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQodGltZV90IGxvY2FsVGltZSwgZG91
YmxlIHV0Y09mZnNldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBVTlVTRURfUEFSQU0obG9jYWxU
aW1lKTsKLSAgICBVTlVTRURfUEFSQU0odXRjT2Zmc2V0KTsKLSAgICByZXR1cm4gMDsKLSNlbGlm
IE9TKFdJTkRPV1MpCisjaWYgT1MoV0lORE9XUykKICAgICBGSUxFVElNRSB1dGNGaWxlVGltZTsK
ICAgICBVbml4VGltZVRvRmlsZVRpbWUobG9jYWxUaW1lLCAmdXRjRmlsZVRpbWUpOwogICAgIFNZ
U1RFTVRJTUUgdXRjU3lzdGVtVGltZSwgbG9jYWxTeXN0ZW1UaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cAppbmRleCA3OThjMWRjLi4zMTM1NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtMTE4LDEx
ICsxMTgsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogI2lmIE9TKFdJTkRPV1MpCiAKLS8vIFRMU19P
VVRfT0ZfSU5ERVhFUyBpcyBub3QgZGVmaW5lZCBvbiBXaW5DRS4KLSNpZm5kZWYgVExTX09VVF9P
Rl9JTkRFWEVTCi0jZGVmaW5lIFRMU19PVVRfT0ZfSU5ERVhFUyAweGZmZmZmZmZmCi0jZW5kaWYK
LQogc3RhdGljIERXT1JEIGlzRm9yaWJpZGRlblRsc0luZGV4ID0gVExTX09VVF9PRl9JTkRFWEVT
Owogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzQWxsb3dWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TFBWT0lEPigwKTsgLy8gTXVzdCBiZSB6ZXJvLgogc3RhdGljIGNvbnN0IExQVk9JRCBrVGxzRm9y
YmlkZGVuVmFsdWUgPSByZWludGVycHJldF9jYXN0PExQVk9JRD4oMSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURl
ZmluZXMuaAppbmRleCBkZjc2YTdhLi42MDMyODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgK
QEAgLTIzOSw3ICsyMzksNyBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVk
IHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQogI2VuZGlmIC8qIFBM
QVRGT1JNKE1BQykgKi8KIAogLyogLS0tLS0tLS0tIEFwcGxlIFdpbmRvd3MgcG9ydCAtLS0tLS0t
LS0gKi8KLSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykKKyNpZiBQTEFURk9STShXSU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAKICNpZiAh
ZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpCiAjZGVmaW5lIEVOQUJMRV9GVUxMU0NSRUVO
X0FQSSAxCkBAIC0yNTMsMjYgKzI1Myw3IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBh
bHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVm
aW5lIEVOQUJMRV9XRUJHTCAxCiAjZW5kaWYKIAotI2VuZGlmIC8qIFBMQVRGT1JNKFdJTikgJiYg
IU9TKFdJTkNFKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAqLwotCi0vKiAtLS0tLS0tLS0gV2lu
Q0UgcG9ydCAtLS0tLS0tLS0gKi8KLS8qIFdpbkNFIHBvcnQgaXMgYSBzcGVjaWFsaXphdGlvbiBv
ZiBQTEFURk9STShXSU4pLiAqLwotLyogUExBVEZPUk0oV0lOKSBpcyBhbHdheXMgZW5hYmxlZCB3
aGVuIGJ1aWxkaW5nIGZvciB0aGUgV2luQ0UgcG9ydC4gKi8KLSNpZiBQTEFURk9STShXSU4pICYm
IE9TKFdJTkNFKQotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RSQUdfU1VQUE9SVCkKLSNkZWZpbmUg
RU5BQkxFX0RSQUdfU1VQUE9SVCAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9GVFBE
SVIpCi0jZGVmaW5lIEVOQUJMRV9GVFBESVIgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFC
TEVfSU5TUEVDVE9SKQotI2RlZmluZSBFTkFCTEVfSU5TUEVDVE9SIDAKLSNlbmRpZgotCi0jZW5k
aWYgLyogUExBVEZPUk0oV0lOKSAmJiBPUyhXSU5DRSkgKi8KKyNlbmRpZiAvKiBQTEFURk9STShX
SU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pICovCiAKIC8qIC0tLS0tLS0tLSBXaW5kb3dzIENB
SVJPIHBvcnQgLS0tLS0tLS0tICovCiAvKiBQTEFURk9STShXSU5fQ0FJUk8pIGlzIGEgc3BlY2lh
bGl6YXRpb24gb2YgUExBVEZPUk0oV0lOKS4gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCmluZGV4IGE1NzY2
NzIuLmJhMTI3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaApAQCAtNzksMTcgKzc5LDkgQEAgaW5saW5l
IHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwg
c2l6ZV90IGNvbW1pdFNpemUKICAgICByZXR1cm4gYmFzZTsKIH0KIAotaW5saW5lIHZvaWQgT1NB
bGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90IHJl
bGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJhc2UsIHNpemVfdCBkZWNvbW1pdFNpemUpCitpbmxp
bmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNl
LCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqLCBzaXplX3QpCiB7CiAgICAgQVNTRVJUKGRlY29t
bWl0QmFzZSA+PSByZWxlYXNlQmFzZSAmJiAoc3RhdGljX2Nhc3Q8Y2hhcio+KGRlY29tbWl0QmFz
ZSkgKyBkZWNvbW1pdFNpemUpIDw9IChzdGF0aWNfY2FzdDxjaGFyKj4ocmVsZWFzZUJhc2UpICsg
cmVsZWFzZVNpemUpKTsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBPbiBtb3N0IHBsYXRmb3JtcyB3
ZSBjYW4gYWN0dWFsbHkgc2tpcCB0aGlzIGZpbmFsIGRlY29tbWl0OyByZWxlYXNpbmcgdGhlIFZN
IHdpbGwKLSAgICAvLyBpbXBsaWNpdGx5IGRlY29tbWl0IGFueSBwaHlzaWNhbCBtZW1vcnkgaW4g
dGhlIHJlZ2lvbi4gVGhpcyBpcyBub3QgdHJ1ZSBvbiBXSU5DRS4KLSAgICBkZWNvbW1pdChkZWNv
bW1pdEJhc2UsIGRlY29tbWl0U2l6ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1p
dEJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1pdFNpemUpOwotI2VuZGlmCiAgICAgcmVs
ZWFzZURlY29tbWl0dGVkKHJlbGVhc2VCYXNlLCByZWxlYXNlU2l6ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDUzMjc3OGUuLmI2MDA3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMzk0LDExICszOTQsNiBA
QAogI2RlZmluZSBXVEZfT1NfU09MQVJJUyAxCiAjZW5kaWYKIAotLyogT1MoV0lOQ0UpIC0gV2lu
ZG93cyBDRTsgbm90ZSB0aGF0IGZvciB0aGlzIHBsYXRmb3JtIE9TKFdJTkRPV1MpIGlzIGFsc28g
ZGVmaW5lZCAqLwotI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKLSNkZWZpbmUgV1RGX09TX1dJTkNF
IDEKLSNlbmRpZgotCiAvKiBPUyhXSU5ET1dTKSAtIEFueSB2ZXJzaW9uIG9mIFdpbmRvd3MgKi8K
ICNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKICNkZWZpbmUgV1RGX09TX1dJ
TkRPV1MgMQpAQCAtNjAwLDcgKzU5NSw3IEBACiAKICNlbmRpZiAvKiBPUyhEQVJXSU4pICovCiAK
LSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaWYgT1MoV0lORE9XUykKIAogI2RlZmlu
ZSBIQVZFX1NZU19USU1FQl9IIDEKICNkZWZpbmUgSEFWRV9BTElHTkVEX01BTExPQyAxCkBAIC02
NTUsOCArNjUwLDcgQEAKIC8qIFRoZSBKSVQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGFsbCB4
ODYsIHg4Ni02NCwgQVJNICYgTUlQUyBwbGF0Zm9ybXMgZXhjZXB0IEFSTXY3ayBhbmQgV2luZG93
cy4gKi8KICNpZiAhZGVmaW5lZChFTkFCTEVfSklUKSBcCiAgICAgJiYgKENQVShYODYpIHx8IENQ
VShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKSBcCi0gICAg
JiYgIUNQVShBUFBMRV9BUk1WN0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgJiYgIU9TKFdJTkNFKQorICAgICYmICFDUFUo
QVBQTEVfQVJNVjdLKQogI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogCkBAIC05NDMsNyAr
OTM3LDcgQEAKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgog
Ci0jaWYgIWRlZmluZWQoV1RGX1VTRV9JTUxBTkdfRk9OVF9MSU5LMikgJiYgIU9TKFdJTkNFKQor
I2lmICFkZWZpbmVkKFdURl9VU0VfSU1MQU5HX0ZPTlRfTElOSzIpCiAjZGVmaW5lIFdURl9VU0Vf
SU1MQU5HX0ZPTlRfTElOSzIgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5k
ZXggY2IyYzUyNi4uNzRjOWViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1X
aW4uY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUsMTUg
KzUsOSBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIHdpbi9SdW5Mb29wV2luLmNwcAog
KQogCi1pZiAoV0lOQ0UpCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICAgICBt
bXRpbWVyCi0gICAgKQotZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAg
ICAgICAgd2lubW0KLSAgICApCi1lbmRpZiAoKQorbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwor
ICAgIHdpbm1tCispCiAKIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCiAgICAgIiR7REVSSVZFRF9T
T1VSQ0VTX1dURl9ESVJ9L1dURkhlYWRlckRldGVjdGlvbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUkFNU2l6ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAppbmRleCA1
MGI1MjIyLi5hNmQxZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SQU1TaXplLmNwcApAQCAtNjEsMTMgKzYxLDYgQEAgc3RhdGlj
IHNpemVfdCBjb21wdXRlUkFNU2l6ZSgpCiAgICAgaWYgKHBhZ2VzID09IC0xIHx8IHBhZ2VTaXpl
ID09IC0xKQogICAgICAgICByZXR1cm4gcmFtU2l6ZUd1ZXNzOwogICAgIHJldHVybiBwYWdlcyAq
IHBhZ2VTaXplOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgTUVNT1JZU1RBVFVTIHN0YXR1czsKLSAg
ICBzdGF0dXMuZHdMZW5ndGggPSBzaXplb2Yoc3RhdHVzKTsKLSAgICBHbG9iYWxNZW1vcnlTdGF0
dXMoJnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1cy5kd1RvdGFsUGh5cyA8PSAwKQotICAgICAgICBy
ZXR1cm4gcmFtU2l6ZUd1ZXNzOwotICAgIHJldHVybiBzdGF0dXMuZHdUb3RhbFBoeXM7CiAjZWxp
ZiBPUyhXSU5ET1dTKQogICAgIE1FTU9SWVNUQVRVU0VYIHN0YXR1czsKICAgICBzdGF0dXMuZHdM
ZW5ndGggPSBzaXplb2Yoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JhbmRv
bU51bWJlclNlZWQuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaAppbmRleCAx
M2FkNDhlLi5hNjVkN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJT
ZWVkLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oCkBAIC00NSw5ICs0
NSw2IEBAIGlubGluZSB2b2lkIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQogewog
I2lmIE9TKERBUldJTikKICAgICAvLyBPbiBEYXJ3aW4gd2UgdXNlIGFyYzRyYW5kb20gd2hpY2gg
aW5pdGlhbGlzZXMgaXRzZWxmLgotI2VsaWYgT1MoV0lOQ0UpCi0gICAgLy8gaW5pdGlhbGl6ZSBy
YW5kKCkKLSAgICBzcmFuZChHZXRUaWNrQ291bnQoKSk7CiAjZWxpZiBDT01QSUxFUihNU1ZDKSAm
JiBkZWZpbmVkKF9DUlRfUkFORF9TKQogICAgIC8vIE9uIFdpbmRvd3Mgd2UgdXNlIHJhbmRfcyB3
aGljaCBpbml0aWFsaXNlcyBpdHNlbGYKICNlbGlmIE9TKFVOSVgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5j
cHAKaW5kZXggMWM4Njc1MC4uZjMwOGFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3Rh
Y2tCb3VuZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmNwcApAQCAtMTI0
LDE2ICsxMjQsNiBAQCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICAvLyBzdGFj
a09yaWdpbi5BbGxvY2F0aW9uQmFzZSBwb2ludHMgdG8gdGhlIHJlc2VydmVkIHN0YWNrIG1lbW9y
eSBiYXNlIGFkZHJlc3MuCiAKICAgICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFj
a09yaWdpbi5CYXNlQWRkcmVzcykgKyBzdGFja09yaWdpbi5SZWdpb25TaXplOwotI2lmIE9TKFdJ
TkNFKQotICAgIFNZU1RFTV9JTkZPIHN5c3RlbUluZm87Ci0gICAgR2V0U3lzdGVtSW5mbygmc3lz
dGVtSW5mbyk7Ci0gICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7Ci0K
LSAgICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gc3RhY2tNZW1vcnk7Ci0gICAgVmlydHVhbFF1
ZXJ5KG1fb3JpZ2luLCAmc3RhY2tNZW1vcnksIHNpemVvZihzdGFja01lbW9yeSkpOwotCi0gICAg
bV9ib3VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihtX29yaWdpbikgLSBzdGFja01lbW9yeS5SZWdp
b25TaXplICsgcGFnZVNpemU7Ci0jZWxzZQogICAgIC8vIFRoZSBzdGFjayBvbiBXaW5kb3dzIGNv
bnNpc3RzIG91dCBvZiB0aHJlZSBwYXJ0cyAodW5jb21taXR0ZWQgbWVtb3J5LCBhIGd1YXJkIHBh
Z2UgYW5kIHByZXNlbnQKICAgICAvLyBjb21taXR0ZWQgbWVtb3J5KS4gVGhlIDMgcmVnaW9ucyBo
YXZlIGRpZmZlcmVudCBCYXNlQWRkcmVzc2VzIGJ1dCBhbGwgaGF2ZSB0aGUgc2FtZSBBbGxvY2F0
aW9uQmFzZQogICAgIC8vIHNpbmNlIHRoZXkgYXJlIGFsbCBmcm9tIHRoZSBzYW1lIFZpcnR1YWxB
bGxvYy4gVGhlIDMgcmVnaW9ucyBhcmUgbGFpZCBvdXQgaW4gbWVtb3J5IChmcm9tIGhpZ2ggdG8K
QEAgLTE3Myw3ICsxNjMsNiBAQCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICBB
U1NFUlQoZW5kT2ZTdGFjayA9PSBjb21wdXRlZEVuZCk7CiAjZW5kaWYgLy8gTkRFQlVHCiAgICAg
bV9ib3VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihlbmRPZlN0YWNrKSArIGd1YXJkUGFnZS5SZWdp
b25TaXplOwotI2VuZGlmIC8vIE9TKFdJTkNFKQogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgK
aW5kZXggYjU3YWFlMi4uMTc5Y2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC05OCwxMSArOTgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0dyb3dpbmdEb3dud2FyZCgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV9vcmlnaW4gJiYgbV9ib3VuZCk7Ci0jaWYgT1MoV0lOQ0UpCi0gICAg
ICAgIHJldHVybiBtX29yaWdpbiA+IG1fYm91bmQ7Ci0jZWxzZQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggYzFm
NDVlMC4uYTAxODcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgK
KysrIGIvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKQEAgLTI5NywzMSArMjk3LDYgQEAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNDb21waWxhdGlvblRocmVhZCgpOwogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAotI2lmIE9TKFdJTkNFKQotLy8gV2luZG93cyBDRSBDUlQgaGFzIGRvZXMg
bm90IGltcGxlbWVudCBic2VhcmNoKCkuCi1pbmxpbmUgdm9pZCogd3RmX2JzZWFyY2goY29uc3Qg
dm9pZCoga2V5LCBjb25zdCB2b2lkKiBiYXNlLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplLCBp
bnQgKCpjb21wYXJlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0gICAgY29uc3Qg
Y2hhciogZmlyc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSk7Ci0KLSAgICB3aGls
ZSAoY291bnQpIHsKLSAgICAgICAgc2l6ZV90IHBvcyA9IChjb3VudCAtIDEpID4+IDE7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGl0ZW0gPSBmaXJzdCArIHBvcyAqIHNpemU7Ci0gICAgICAgIGludCBj
b21wYXJlUmVzdWx0ID0gY29tcGFyZShpdGVtLCBrZXkpOwotICAgICAgICBpZiAoIWNvbXBhcmVS
ZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oaXRlbSk7Ci0gICAg
ICAgIGlmIChjb21wYXJlUmVzdWx0IDwgMCkgewotICAgICAgICAgICAgY291bnQgLT0gKHBvcyAr
IDEpOwotICAgICAgICAgICAgZmlyc3QgKz0gKHBvcyArIDEpICogc2l6ZTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjb3VudCA9IHBvczsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotI2RlZmluZSBic2VhcmNoKGtleSwgYmFzZSwgY291bnQsIHNpemUsIGNvbXBhcmUpIHd0Zl9i
c2VhcmNoKGtleSwgYmFzZSwgY291bnQsIHNpemUsIGNvbXBhcmUpCi0jZW5kaWYKLQogLy8gVGhp
cyB2ZXJzaW9uIG9mIHBsYWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgogZW51bSBOb3ROdWxs
VGFnIHsgTm90TnVsbCB9OwogaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51
bGxUYWcsIHZvaWQqIGxvY2F0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5n
RXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAppbmRleCAxMDNlMTczLi5i
MWFlYTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaApAQCAtNjksMjUgKzY5LDYgQEAgaW5saW5lIGRv
dWJsZSB3dGZfdnNucHJpbnRmKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFy
KiBmb3JtYXQsIHZhX2wKIC8vIHZzbnByaW50ZiBkb2VzIG5vdCBudWxsIHRlcm1pbmF0ZSB0aGUg
YnVmZmVyLiBXZWJLaXQgY2FuIHJlbHkgb24gdGhlIG51bGwgdGVybWluYXRpb24uCiAjZGVmaW5l
IHZzbnByaW50ZihidWZmZXIsIGNvdW50LCBmb3JtYXQsIGFyZ3MpIHd0Zl92c25wcmludGYoYnVm
ZmVyLCBjb3VudCwgZm9ybWF0LCBhcmdzKQogCi0jaWYgT1MoV0lOQ0UpCi0KLWlubGluZSBpbnQg
c3RybmljbXAoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hhciogc3RyaW5nMiwgc2l6ZV90
IGNvdW50KQotewotICAgIHJldHVybiBfc3RybmljbXAoc3RyaW5nMSwgc3RyaW5nMiwgY291bnQp
OwotfQotCi1pbmxpbmUgaW50IHN0cmljbXAoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hh
ciogc3RyaW5nMikKLXsKLSAgICByZXR1cm4gX3N0cmljbXAoc3RyaW5nMSwgc3RyaW5nMik7Ci19
Ci0KLWlubGluZSBjaGFyKiBzdHJkdXAoY29uc3QgY2hhciogc3RyU291cmNlKQotewotICAgIHJl
dHVybiBfc3RyZHVwKHN0clNvdXJjZSk7Ci19Ci0KLSNlbmRpZgotCiBpbmxpbmUgaW50IHN0cm5j
YXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IGxlbikKIHsKICAg
ICByZXR1cm4gX3N0cm5pY21wKHMxLCBzMiwgbGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZFNwZWNpZmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmlu
ZGV4IDFkY2IzNzguLmY0MDQwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNw
ZWNpZmljLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtMTU4LDEx
ICsxNTgsNiBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0cikKIAog
I2VsaWYgT1MoV0lORE9XUykKIAotLy8gVExTX09VVF9PRl9JTkRFWEVTIGlzIG5vdCBkZWZpbmVk
IG9uIFdpbkNFLgotI2lmbmRlZiBUTFNfT1VUX09GX0lOREVYRVMKLSNkZWZpbmUgVExTX09VVF9P
Rl9JTkRFWEVTIDB4ZmZmZmZmZmYKLSNlbmRpZgotCiAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
VExTIGtleXMgdGhhdCBjYW4gYmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1
bWUgdGhhdDoKIC8vIDEpIE9uY2UgdGhlIGluc3RhbmNlIG9mIFRocmVhZFNwZWNpZmljPD4gaXMg
Y3JlYXRlZCwgaXQgd2lsbCBub3QgYmUgZGVzdHJ1Y3RlZCB1bnRpbCB0aGUgcHJvZ3JhbSBkaWVz
LgogLy8gMikgV2UgZG8gbm90IG5lZWQgdG8gaG9sZCBtYW55IGluc3RhbmNlcyBvZiBUaHJlYWRT
cGVjaWZpYzw+IGRhdGEuIFRoaXMgZml4ZWQgbnVtYmVyIHNob3VsZCBiZSBmYXIgZW5vdWdoLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggZTcyYWZmZi4uMmU5NzY4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCkBAIC05NCw2ICs5NCw3IEBACiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgi
CiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCisjaW5jbHVkZSA8cHJvY2Vz
cy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTA3LDEwICsxMDgsNiBAQAogI2luY2x1ZGUg
IlRocmVhZFNwZWNpZmljLmgiCiAjZW5kaWYKIAotI2lmICFPUyhXSU5DRSkKLSNpbmNsdWRlIDxw
cm9jZXNzLmg+Ci0jZW5kaWYKLQogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5o
PgogI2VuZGlmCkBAIC0yMTgsMTcgKzIxNSw5IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAg
ICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCA9IDA7CiAgICAgT3duUHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2Nh
dGlvbiA9IGFkb3B0UHRyKG5ldyBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oZW50cnlQb2ludCwg
ZGF0YSkpOwotI2lmIE9TKFdJTkNFKQotICAgIC8vIFRoaXMgaXMgc2FmZSBvbiBXSU5DRSwgc2lu
Y2UgQ1JUIGlzIGluIHRoZSBjb3JlIGFuZCBpbm5hdGVseSBtdWx0aXRocmVhZGVkLgotICAgIC8v
IE9uIGRlc2t0b3AgV2luZG93cywgbmVlZCB0byB1c2UgX2JlZ2ludGhyZWFkZXggKG5vdCBhdmFp
bGFibGUgb24gV2luQ0UpIGlmIHVzaW5nIGFueSBDUlQgZnVuY3Rpb25zCi0gICAgSEFORExFIHRo
cmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZCgwLCAwLCAoTFBUSFJFQURfU1RBUlRfUk9VVElORSl3
dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAoTFBEV09SRCkmdGhyZWFk
SWRlbnRpZmllcik7Ci0jZWxzZQogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwg
aW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKLSNlbmRpZgogICAgIGlm
ICghdGhyZWFkSGFuZGxlKSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwOiAlbGQi
LCBlbnRyeVBvaW50LCBkYXRhLCA6OkdldExhc3RFcnJvcigpKTsKLSNlbGlmICFIQVZFKEVSUk5P
X0gpCisjaWYgIUhBVkUoRVJSTk9fSCkKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAuIiwgZW50cnlQb2ludCwg
ZGF0YSk7CiAjZWxzZQogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhyZWFk
IGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQb2ludCwgZGF0YSwg
ZXJybm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV2luZG93c0V4dHJhcy5oIGIvU291
cmNlL1dURi93dGYvV2luZG93c0V4dHJhcy5oCmluZGV4IDE2YmM4NjUuLjA2MWRiNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dpbmRvd3NFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9XaW5kb3dzRXh0cmFzLmgKQEAgLTM5LDM0ICszOSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAog
aW5saW5lIEhSRVNVTFQgZ2V0UmVnaXN0cnlWYWx1ZShIS0VZIGhrZXksIExQQ1dTVFIgcHN6U3Vi
S2V5LCBMUENXU1RSIHBzelZhbHVlLCBMUERXT1JEIHBkd1R5cGUsIExQVk9JRCBwdkRhdGEsIExQ
RFdPUkQgcGNiRGF0YSkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBIS0VZIGtleTsKLSAgICBpZiAo
OjpSZWdPcGVuS2V5RXhXKGhrZXksIHBzelN1YktleSwgMCwgMCwgJmtleSkgIT0gRVJST1JfU1VD
Q0VTUykKLSAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMSURfTkFNRTsKLSAgICBIUkVTVUxUIHJl
c3VsdCA9IDo6UmVnUXVlcnlWYWx1ZUV4VyhrZXksIHBzelZhbHVlLCAwLCBwZHdUeXBlLCBzdGF0
aWNfY2FzdDxMUEJZVEU+KHB2RGF0YSksIHBjYkRhdGEpOwotICAgIDo6UmVnQ2xvc2VLZXkoa2V5
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKICAgICByZXR1cm4gOjpTSEdldFZhbHVlVyho
a2V5LCBwc3pTdWJLZXksIHBzelZhbHVlLCBwZHdUeXBlLCBwdkRhdGEsIHBjYkRhdGEpOwotI2Vu
ZGlmCiB9CiAKIGlubGluZSB2b2lkKiBnZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGlu
ZGV4KQogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
Pig6OkdldFdpbmRvd0xvbmcoaFduZCwgaW5kZXgpKTsKLSNlbHNlCiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCBpbmRleCkpOwotI2Vu
ZGlmCiB9CiAKIGlubGluZSB2b2lkKiBzZXRXaW5kb3dQb2ludGVyKEhXTkQgaFduZCwgaW50IGlu
ZGV4LCB2b2lkKiB2YWx1ZSkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oOjpTZXRXaW5kb3dMb25nKGhXbmQsIGluZGV4LCByZWludGVycHJldF9j
YXN0PExPTkc+KHZhbHVlKSkpOwotI2Vsc2UKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oOjpTZXRXaW5kb3dMb25nUHRyKGhXbmQsIGluZGV4LCByZWludGVycHJldF9jYXN0PExP
TkdfUFRSPih2YWx1ZSkpKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2R0b2EvdXRpbHMuaCBiL1NvdXJjZS9XVEYvd3RmL2R0b2Ev
dXRpbHMuaAppbmRleCA1YzQxNDgyLi45ZTJmYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9kdG9hL3V0aWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oCkBAIC00OSw3
ICs0OSw3IEBACiBkZWZpbmVkKF9fQVJNRUxfXykgfHwgXAogZGVmaW5lZChfTUlQU19BUkNIX01J
UFMzMlIyKQogI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJ
T05TIDEKLSNlbGlmIENQVShNSVBTKSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQ
UEM2NExFKSB8fCBPUyhXSU5DRSkgfHwgQ1BVKFNINCkgfHwgQ1BVKFMzOTApIHx8IENQVShTMzkw
WCkgfHwgQ1BVKElBNjQpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoSFBQQSkK
KyNlbGlmIENQVShNSVBTKSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQUEM2NExF
KSB8fCBDUFUoU0g0KSB8fCBDUFUoUzM5MCkgfHwgQ1BVKFMzOTBYKSB8fCBDUFUoSUE2NCkgfHwg
Q1BVKEFMUEhBKSB8fCBDUFUoQVJNNjQpIHx8IENQVShIUFBBKQogI2RlZmluZSBET1VCTEVfQ09O
VkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKICNlbGlmIGRlZmluZWQoX01fSVg4
NikgfHwgZGVmaW5lZChfX2kzODZfXykKICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTU4LDggKzU4
LDYgQEAgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQogI2Vsc2UKICN1bmRlZiBET1VCTEVf
Q09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TCiAjZW5kaWYgIC8vIF9XSU4zMgot
I2VsaWYgZGVmaW5lZChXSU5DRSkgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotI2RlZmluZSBET1VC
TEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKICNlbHNlCiAjZXJyb3Ig
VGFyZ2V0IGFyY2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3Vi
bGUtQ29udmVyc2lvbi4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDA4
MDNjMmQuLmY2OWVjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTQ1MiwyOSAr
NDUyLDYgQEAgVmVjdG9yPFVDaGFyPiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkgY29uc3QKIAogU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQogewotI2lmIE9TKFdJTkNFKQotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChh
cmdzLCBmb3JtYXQpOwotCi0gICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOwotCi0gICAgaW50
IGJ1ZmZlclNpemUgPSAyNTY7Ci0gICAgYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGludCB3cml0dGVuID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlclNpemUsIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZhX2VuZChhcmdzKTsKLQotICAg
ICAgICBpZiAod3JpdHRlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiIik7Ci0g
ICAgICAgIGlmICh3cml0dGVuID4gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZlci5kYXRhKCkpLCB3cml0
dGVuKTsKLSAgICAgICAgCi0gICAgICAgIGJ1ZmZlclNpemUgPDw9IDE7Ci0gICAgICAgIGJ1ZmZl
ci5yZXNpemUoYnVmZmVyU2l6ZSk7Ci0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0g
ICAgfQotCi0jZWxzZQogICAgIHZhX2xpc3QgYXJnczsKICAgICB2YV9zdGFydChhcmdzLCBmb3Jt
YXQpOwogCkBAIC01MDksNyArNDg2LDYgQEAgU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQogICAgIHZhX2VuZChhcmdzKTsKICAgICAKICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0
YSgpKSwgbGVuKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgU3RyaW5nOjpudW1iZXIoaW50IG51bWJl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA5OTA5NmMzLi5iY2Y1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQ5IEBACisyMDE0LTA5LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0NETVByaXZhdGVNZWRpYVBsYXllci5jcHA6CisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFr
ZTogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgor
ICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvaWNv
bi93aW5jZS9JY29uRGF0YWJhc2VXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29u
dGV4dE1lbnVFdmVudEZvcktleSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAg
ICAgICogcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdEYXRhVHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL0NvbnRleHRNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om1heUZp
bGxXaXRoU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9y
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZVV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
SUJQaXhlbERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RElCUGl4ZWxEYXRhOjpzZXRSR0JB
Qml0bWFwQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc0FscGhhQmxlbmRTdXBwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OmFscGhhQmxlbmRJZlN1cHBvcnRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ljb25XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZv
ckZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmluaXRHRElGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJvdW5kc0ZvckdESUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjp3aWR0aEZvckdESUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpzY3JpcHRGb250UHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udENhY2hlV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZv
cm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9H
bHlwaFBhZ2VUcmVlTm9kZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFkaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJEYXRhV2luY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFn
ZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9N
ZWRpYVBsYXllclByaXZhdGVXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5D
RS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJp
dG1hcC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hh
cmVkQml0bWFwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
U2ltcGxlRm9udERhdGFXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0NPTVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250
ZXh0TWVudUl0ZW1XaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVt
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0
TWVudUZyb21JdGVtcyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmFnTGFiZWxGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OnN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Mb2dn
aW5nV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0xldmVsU3RyaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkT3duZXJXbmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0
ZUZvckNvcHlBbmRQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXRoUmVtb3ZlQmFkRlNDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2xvYmFsSERyb3BDb250ZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1lc3NhZ2VUb0V2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNl
RXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BsYXRm
b3JtU2NyZWVuV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUluZm9Gb3JXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdp
bjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcyk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnVXaW46OnduZFByb2MpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3Jv
bGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6
cGFpbnRCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaW1lcldpbmRvd1duZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6
ZU9mZlNjcmVlblRpbWVyV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXVlVGltZXJQcm9j
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Nv
ZnRMaW5raW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d2luZG93c1ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vz
c29yQXJjaGl0ZWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmFyY2hpdGVjdHVyZVRva2VuRm9y
VUFTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5WaWV3Tm9uZS5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJh
c2VXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rv
cmllcyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5zL3dp
bi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwT2Zmc2NyZWVuUGFp
bnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RlclBsdWdpblZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNl
VGhyZWFkV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvRGF0YWJh
c2VUaHJlYWRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2UvU3RvcmFn
ZVRocmVhZFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL1N0b3Jh
Z2VUaHJlYWRXaW5DRS5oOiBSZW1vdmVkLgorCiAyMDE0LTA5LTE4ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEb3Qgbm90IGFsbG93
IHRvIGNyZWF0ZSBkZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BTb3VyY2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBs
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZh
dGVNZWRpYVBsYXllci5jcHAKaW5kZXggYWM2ZjQ2Zi4uMTI3MWE3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0
ZU1lZGlhUGxheWVyLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBP
UyhXSU5DRSkKKyNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DRS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDZlODkxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdp
bkNFLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dp
bmNlIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZSIKLSAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4iCi0gICAgIiR7M1JEUEFSVFlfRElS
fS9saWJqcGVnIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlicG5nIgotICAgICIkezNSRFBBUlRZ
X0RJUn0vbGlieG1sMi9pbmNsdWRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vbGlieHNsdC9pbmNs
dWRlIgotICAgICIkezNSRFBBUlRZX0RJUn0vc3FsaXRlIgotICAgICIkezNSRFBBUlRZX0RJUn0v
emxpYiIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgcGFnZS93aW4vRnJh
bWVHZGlXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCi0KLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25X
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW50UmVjdFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5j
cHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9HcmFkaWVudFdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVy
V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvU2hhcmVkQml0bWFwLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBs
ZUZvbnREYXRhV2luY2UuY3BwCi0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvblN0dWIuY3BwCi0KLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vQ3JlZGVudGlhbFN0b3JhZ2VXaW4uY3BwCi0g
ICAgcGxhdGZvcm0vbmV0d29yay93aW4vUHJveHlTZXJ2ZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0v
bmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93
aW4vU29ja2V0U3RyZWFtSGFuZGxlV2luLmNwcAotCi0gICAgcGxhdGZvcm0vdGV4dC9Mb2NhbGVO
b25lLmNwcAotCi0gICAgcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAotCi0gICAg
cmVuZGVyaW5nL1JlbmRlclRoZW1lV2luY2UuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVf
TElCUkFSSUVTCi0gICAgY3J5cHQzMgotICAgIGlwaGxwYXBpCi0gICAgbGlianBlZwotICAgIGxp
YnBuZwotICAgIGxpYnhtbDIKLSAgICBsaWJ4c2x0Ci0gICAgc3FsaXRlCi0gICAgd2luaW5ldAot
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5k
ZXggZjE5NTNkNi4uZDY2MzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBBWE9iamVjdENhY2hl
OjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQogfQogICAgIAogICAgIAotI2lmICFQTEFURk9STShXSU4p
IHx8IE9TKFdJTkNFKQorI2lmICFQTEFURk9STShXSU4pCiBBWElEIEFYT2JqZWN0Q2FjaGU6OnBs
YXRmb3JtR2VuZXJhdGVBWElEKCkgY29uc3QKIHsKICAgICBzdGF0aWMgQVhJRCBsYXN0VXNlZElE
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggODZj
NTViYS4uNDY2ODI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTc3MCw4ICs3NzAsNiBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSkucmlnaHQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OiB7Ci0gICAgICAgIC8vIFZpc3VhbCB3b3JkIG1vdmVtZW50IHJlbGllcyBvbiBp
c1dvcmRUZXh0QnJlYWsgd2hpY2ggaXMgbm90IGltcGxlbWVudGVkIGluIFdpbkNFIGFuZCBRVC4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTM2
LgogICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1f
ZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0
KCk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSksIHNraXBzU3BhY2VXaGVu
TW92aW5nUmlnaHQpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzRmZDllYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi93aW5jZS9JY29uRGF0YWJhc2VXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSWNvbkRh
dGFiYXNlLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnQuaCIKLSNpbmNsdWRlICJJY29u
UmVjb3JkLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQ
b29sLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBJY29uRGF0YWJhc2UqIHNoYXJlZEljb25EYXRhYmFzZSA9IDA7Ci0KLS8v
IEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCi1JY29uRGF0YWJh
c2UmIGljb25EYXRhYmFzZSgpCi17Ci0gICAgaWYgKCFzaGFyZWRJY29uRGF0YWJhc2UpCi0gICAg
ICAgIHNoYXJlZEljb25EYXRhYmFzZSA9IG5ldyBJY29uRGF0YWJhc2U7Ci0gICAgcmV0dXJuICpz
aGFyZWRJY29uRGF0YWJhc2U7Ci19Ci0KLUljb25EYXRhYmFzZTo6SWNvbkRhdGFiYXNlKCkge30K
LUljb25EYXRhYmFzZTo6fkljb25EYXRhYmFzZSgpIHt9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpz
ZXRDbGllbnQoSWNvbkRhdGFiYXNlQ2xpZW50Kikge30KLQotYm9vbCBJY29uRGF0YWJhc2U6Om9w
ZW4oY29uc3QgU3RyaW5nJiBwYXRoKSB7IHJldHVybiBmYWxzZTsgfQotdm9pZCBJY29uRGF0YWJh
c2U6OmNsb3NlKCkge30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkge30K
LQotSW1hZ2UqIEljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIDA7IH0KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWFkSWNvbkZv
clBhZ2VVUkxGcm9tRGlzayhjb25zdCBTdHJpbmcmKSB7fQotU3RyaW5nIEljb25EYXRhYmFzZTo6
aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gU3RyaW5nKCk7IH0KLUlt
YWdlKiBJY29uRGF0YWJhc2U6OmRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmKSB7IHJldHVybiAw
O30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0
cmluZyYpIHt9Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpIHt9Ci12b2lkIEljb25E
YXRhYmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpIHt9Ci0KLUljb25Mb2FkRGVjaXNpb24gSWNvbkRhdGFiYXNlOjps
b2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIERvY3VtZW50TG9hZGVyKikgeyBy
ZXR1cm4gSWNvbkxvYWRObzsgfQotYm9vbCBJY29uRGF0YWJhc2U6Omljb25EYXRhS25vd25Gb3JJ
Y29uVVJMKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXZvaWQgSWNvbkRhdGFi
YXNlOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkge30KLWJvb2wgSWNvbkRhdGFiYXNlOjppc0Vu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi12b2lkIEljb25EYXRhYmFzZTo6c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpIHt9Ci1ib29sIEljb25EYXRhYmFzZTo6
aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotdm9p
ZCBJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCkge30KLXZvaWQgSWNvbkRhdGFi
YXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpIHt9Ci12b2lkIEljb25EYXRhYmFzZTo6Y2hlY2tJ
bnRlZ3JpdHlCZWZvcmVPcGVuaW5nKCkge30KLQotLy8gU3VwcG9ydCBmb3IgV2ViQ29yZVN0YXRp
c3RpY3MgaW4gV2ViS2l0Ci1zaXplX3QgSWNvbkRhdGFiYXNlOjpwYWdlVVJMTWFwcGluZ0NvdW50
KCkgeyByZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRhYmFzZTo6cmV0YWluZWRQYWdlVVJMQ291
bnQoKSB7cmV0dXJuIDA7IH0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudCgp
IHsgcmV0dXJuIDA7IH0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhE
YXRhKCkgeyByZXR1cm4gMDsgfQotCi1ib29sIEljb25EYXRhYmFzZTo6aXNPcGVuKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLVN0cmluZyBJY29uRGF0YWJhc2U6OmRhdGFiYXNlUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci1TdHJpbmcgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0
YWJhc2VGaWxlbmFtZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1MDJiMjRlLi40ZDk2
ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yODI0LDcgKzI4MjQs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogCiAg
ICAgc3RhdGljIGNvbnN0IGludCBrQ29udGV4dE1lbnVNYXJnaW4gPSAxOwogCi0jaWYgT1MoV0lO
RE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAgICAgaW50IHJpZ2h0QWxpZ25l
ZCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9NRU5VRFJPUEFMSUdOTUVOVCk7CiAjZWxzZQogICAg
IGludCByaWdodEFsaWduZWQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBmZTVh
M2Q1Li5iODU4NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIGJvb2wgU2V0dGluZ3M6OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxzZTsKIAogLy8gTk9U
RXMKIC8vICAxKSBFZGl0aW5nTWFjQmVoYXZpb3IgY29tcHJpc2VzIFRpZ2VyLCBMZW9wYXJkLCBT
bm93TGVvcGFyZCBhbmQgaU9TIGJ1aWxkcywgYXMgd2VsbCBhcyBRdFdlYktpdCB3aGVuIGJ1aWx0
IG9uIE1hYzsKLS8vICAyKSBFZGl0aW5nV2luZG93c0JlaGF2aW9yIGNvbXByaXNlcyBXaW4zMiBh
bmQgV2luQ0UgYnVpbGRzLCBhcyB3ZWxsIGFzIFF0V2ViS2l0IGFuZCBDaHJvbWl1bSB3aGVuIGJ1
aWx0IG9uIFdpbmRvd3M7CisvLyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMg
V2luMzIgYnVpbGQ7CiAvLyAgMykgRWRpdGluZ1VuaXhCZWhhdmlvciBjb21wcmlzZXMgYWxsIHVu
aXgtYmFzZWQgc3lzdGVtcywgYnV0IERhcndpbi9NYWNPUyAoYW5kIHRoZW4gYWJ1c2luZyB0aGUg
dGVybWlub2xvZ3kpOwogLy8gOTkpIE1hY0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFs
bGJhY2suCiBzdGF0aWMgRWRpdGluZ0JlaGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9y
UGxhdGZvcm0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5k
bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAK
aW5kZXggNjBiN2YyMC4uNjQ0MmVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRXZlbnRIYW5kbGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVu
dEhhbmRsZXJXaW4uY3BwCkBAIC05NCwxMSArOTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZl
bnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CiAj
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVyPiBFdmVudEhh
bmRsZXI6OmNyZWF0ZURyYWdnaW5nRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKLSNpZiBPUyhXSU5D
RSkKLSAgICByZXR1cm4gMDsKLSNlbHNlCiAgICAgcmV0dXJuIERhdGFUcmFuc2Zlcjo6Y3JlYXRl
Rm9yRHJhZ0FuZERyb3AoKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZXh0TWVudS5oCmluZGV4IGZmOWQzNmIuLmM4ZTJhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGV4dE1lbnUuaApAQCAtOTIsOSArOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9u
OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uOwotI2lmIE9TKFdJTkNFKQotICAgICAgICB1bnNpZ25lZCBtX2l0ZW1Db3VudDsKLSNl
bmRpZgogI2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5V
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDVmMWUxZGQuLjgxOTFj
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApAQCAtMjAxLDcgKzIwMSw3
IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JJbWFnZShGcmFtZSYgZnJhbWUsIE5v
ZGUmIG5vZGUsIEludFJlY3QmIGltYWdlUmVjCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZy
b21TbmFwc2hvdChzbmFwc2hvdE5vZGUoZnJhbWUsIG5vZGUpLCAmbm9kZSk7CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICghUExBVEZPUk0oV0lOKSB8fCBPUyhXSU5DRSkpCisjaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKQogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZvckxpbmsoVVJMJiwgY29uc3QgU3RyaW5nJiwgRm9udFJlbmRlcmluZ01vZGUpCiB7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXgg
NDNjZjg3Ni4uYTgxMzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAt
MTk3LDcgKzE5Nyw3IEBAIENTdHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpOwogdWludDY0X3Qg
Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpCisjaWYgUExBVEZPUk0oV0lOKQogU3RyaW5nIGxvY2Fs
VXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdVc2VyU3BlY2lm
aWNTdG9yYWdlRGlyZWN0b3J5KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBiZmE5ZDBmLi4yMjBiMzY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBA
IC02NzYsMTEgKzY3Niw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29saWRDb2xv
cigpCiB7CiAgICAgaWYgKCFtX2NoZWNrZWRGb3JTb2xpZENvbG9yICYmIGZyYW1lQ291bnQoKSA+
IDApIHsKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7Ci0gICAgICAgIC8vIFdJTkNFIFBP
UlQ6IGNoZWNrRm9yU29saWRDb2xvcigpIGRvZXNuJ3Qgc2V0IG1fY2hlY2tlZEZvclNvbGlkQ29s
b3IgdW50aWwKLSAgICAgICAgLy8gaXQgZ2V0cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbWFrZSBm
aW5hbCBkZWNpc2lvbi4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIEFTU0VSVChtX2NoZWNrZWRG
b3JTb2xpZENvbG9yKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gbV9pc1NvbGlkQ29sb3Ig
JiYgIW1fY3VycmVudEZyYW1lOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250R2x5cGhzLmNwcAppbmRleCBhOGNhZDQ0Li41MjBiNDU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcApAQCAtMzk0LDIwICsz
OTQsMTAgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6Z2x5
cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcihjb25zdAogICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IGZhbGxiYWNrUGFnZSAmJiBmYWxsYmFja1BhZ2UtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpID8g
ZmFsbGJhY2tQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBjaGFyYWN0ZXJGb250RGF0
YS0+bWlzc2luZ0dseXBoRGF0YSgpOwogICAgICAgICAvLyBDYWNoZSBpdCBzbyB3ZSBkb24ndCBo
YXZlIHRvIGRvIHN5c3RlbSBmYWxsYmFjayBhZ2FpbiBuZXh0IHRpbWUuCiAgICAgICAgIGlmICh2
YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgICAgIC8v
IG1pc3NpbmdHbHlwaERhdGEgcmV0dXJucyBhIG51bGwgY2hhcmFjdGVyLCB3aGljaCBpcyBub3Qg
c3VpdGFibGUgZm9yIEdESSB0byBkaXNwbGF5LgotICAgICAgICAgICAgLy8gQWxzbywgc29tZXRp
bWVzIHdlIGNhbm5vdCBtYXAgYSBmb250IGZvciB0aGUgY2hhcmFjdGVyIG9uIFdJTkNFLCBidXQg
R0RJIGNhbiBzdGlsbAotICAgICAgICAgICAgLy8gZGlzcGxheSB0aGUgY2hhcmFjdGVyLCBwcm9i
YWJseSBiZWNhdXNlIHRoZSBmb250IHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZCBjb3JyZWN0bHku
Ci0gICAgICAgICAgICAvLyBTbyB3ZSBqdXN0IGFsd2F5cyBzZXQgdGhlIGdseXBoIHRvIGJlIHNh
bWUgYXMgdGhlIGNoYXJhY3RlciwgYW5kIGxldCBHREkgc29sdmUgaXQuCi0gICAgICAgICAgICBw
YWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgYywgY2hhcmFjdGVyRm9udERhdGEuZ2V0
KCkpOwotICAgICAgICAgICAgY2hhcmFjdGVyRm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVM
ZXZlbChzdGQ6Om1heChjaGFyYWN0ZXJGb250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCks
IG5vZGUtPmxldmVsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKICAgICAgICAgICAgIHBh
Z2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRh
KTsKICAgICAgICAgICAgIGRhdGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChz
dGQ6Om1heChkYXRhLmZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2
ZWwoKSkpOwogICAgICAgICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
ICYmIGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgIT0gSG9yaXpv
bnRhbCAmJiAhZGF0YS5mb250RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFBbmRQYWdlRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0
aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
LCBkYXRhLCBmYWxsYmFja1BhZ2UsIHBhZ2VOdW1iZXIpOwotI2VuZGlmCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogICAgIH0KQEAgLTQxNiwx
NSArNDA2LDggQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udEdseXBoczo6
Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcihjb25zdAogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBuaWNlciB0byB1c2UgdGhlIG1pc3NpbmcgZ2x5cGggZnJvbSB0aGUgbGFzdCByZXNvcnQg
Zm9udCBpbnN0ZWFkLgogICAgIEdseXBoRGF0YSBkYXRhID0gcHJpbWFyeVNpbXBsZUZvbnREYXRh
KGRlc2NyaXB0aW9uKS0+bWlzc2luZ0dseXBoRGF0YSgpOwogICAgIGlmICh2YXJpYW50ID09IE5v
cm1hbFZhcmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJv
dXQgV0lOQ0UgR0RJIGhhbmRsaW5nIG5lYXIgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyIGFib3Zl
LgotICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgYywgZGF0YS5mb250
RGF0YSk7Ci0gICAgICAgIGRhdGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChz
dGQ6Om1heChkYXRhLmZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2
ZWwoKSkpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocGFnZS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpLCBwYWdlKTsKLSNlbHNlCiAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsKICAgICAgICAgZGF0YS5m
b250RGF0YS0+c2V0TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEt
Pm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7Ci0jZW5kaWYKICAgICB9
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDgy
MDMzYTAuLjk3ZTg1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTIzLDkgKzIzLDcgQEAKICAqLwogCiAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgYWxsIHBvcnRzIHN3aXRjaCB0byB1c2luZyB0aGlz
IGZpbGUuCi0jaWYgVVNFKFdJTkdESSkKLSNpbmNsdWRlICJ3aW5jZS9Gb250UGxhdGZvcm1EYXRh
LmgiCi0jZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJmcmVldHlwZS9Gb250UGxhdGZvcm1EYXRh
LmgiCiAjZWxzZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oCmluZGV4IGUxYTllNmIuLmZiZGFlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0yNyw2ICsy
Nyw0IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNlbGlmIFVTRShDQUlSTykK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VsaWYgVVNFKFdJTkdESSkKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFXaW5jZS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggYTdmNGIxZS4uNDA5
YTU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcApAQCAtNjYsOSArNjYsNiBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5oIgogI2VuZGlmCiAjZW5kaWYKLSNlbGlmIE9TKFdJTkNFKQotI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVdpbkNFLmgiCi0jZGVmaW5lIFBsYXRmb3JtTWVkaWFF
bmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlCiAjZWxpZiBQTEFURk9STShXSU4pICYm
ICFVU0UoR1NUUkVBTUVSKQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGQzMDI3MjIuLjJmNzhmZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aApAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgog
Ci0jaWYgKFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSkKKyNpZiBQTEFURk9STShXSU4pCiAj
aW5jbHVkZSA8dXNwMTAuaD4KICNlbmRpZgogCkBAIC0yMzAsMTAgKzIzMCw4IEBAIHB1YmxpYzoK
IAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTeXN0ZW1Gb250OyB9Ci0jaWYgIU9TKFdJTkNFKSAvLyBkaXNhYmxlIHVudXNlZCBt
ZW1iZXJzIHRvIHNhdmUgc3BhY2UKICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZv
bnRQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNv
bnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hlOyB9Ci0jZW5kaWYKICAgICBzdGF0aWMgdm9pZCBz
ZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxk
QXBwbHlNYWNBc2NlbnRIYWNrKCk7CiAgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5n
TWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7
CkBAIC0yNTQsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CiAKLSNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpKQorI2lm
IFBMQVRGT1JNKFdJTikKICAgICB2b2lkIGluaXRHRElGb250KCk7CiAgICAgdm9pZCBwbGF0Zm9y
bUNvbW1vbkRlc3Ryb3koKTsKICAgICBGbG9hdFJlY3QgYm91bmRzRm9yR0RJR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0OwpAQCAtMzM2LDExICszMzQsOSBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIGJvb2wgbV9pc1N5c3RlbUZvbnQ7Ci0jaWYgIU9TKFdJTkNFKSAvLyBkaXNh
YmxlIHVudXNlZCBtZW1iZXJzIHRvIHNhdmUgc3BhY2UKICAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOwogICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOwogI2VuZGlmCi0jZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgYm9vbCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRp
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuY3BwCmluZGV4IGQwOWM1YTQuLmY3ZDBhYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHAKQEAgLTQwOCw3ICs0MDgsNiBAQCBib29sIHJlbmFtZUZvbnQoY29uc3Qg
U2hhcmVkQnVmZmVyJiBmb250RGF0YSwgY29uc3QgU3RyaW5nJiBmb250TmFtZSwgVmVjdG9yPGNo
YQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgIU9TKFdJTkNFKQogLy8gUmVuYW1lIHRoZSBm
b250IGFuZCBpbnN0YWxsIHRoZSBuZXcgZm9udCBkYXRhIGludG8gdGhlIHN5c3RlbQogSEFORExF
IHJlbmFtZUFuZEFjdGl2YXRlRm9udChjb25zdCBTaGFyZWRCdWZmZXImIGZvbnREYXRhLCBjb25z
dCBTdHJpbmcmIGZvbnROYW1lKQogewpAQCAtNDI2LDYgKzQyNSw1IEBAIEhBTkRMRSByZW5hbWVB
bmRBY3RpdmF0ZUZvbnQoY29uc3QgU2hhcmVkQnVmZmVyJiBmb250RGF0YSwgY29uc3QgU3RyaW5n
JiBmb250TmFtCiAKICAgICByZXR1cm4gZm9udEhhbmRsZTsKIH0KLSNlbmRpZgogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVVdGlsaXRpZXMuaAppbmRleCBhYjgzOWUwLi44MzJhNGE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGll
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVXRpbGl0aWVzLmgKQEAgLTM3LDEwICszNyw2IEBAIHN0cnVjdCBCaWdFbmRpYW5VU2hvcnQ7
CiBzdHJ1Y3QgRU9UUHJlZml4OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCi0jaWYgT1MoV0lOQ0Up
Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBVSW50ODsKLSNlbmRpZgotCiBzdHJ1Y3QgRU9USGVh
ZGVyIHsKICAgICBFT1RIZWFkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAppbmRleCBlOWEwZjliLi4wYTg2NWJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4
ZWxEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElC
UGl4ZWxEYXRhLmNwcApAQCAtOTEsMTIgKzkxLDEwIEBAIHZvaWQgRElCUGl4ZWxEYXRhOjpzZXRS
R0JBQml0bWFwQWxwaGEoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgdW5zaWduZWQK
ICAgICBBU1NFUlQocGl4ZWxEYXRhLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKIAogICAgIEludFJl
Y3QgZHJhd1JlY3QoZHN0UmVjdCk7Ci0jaWYgIU9TKFdJTkNFKQogICAgIFhGT1JNIHRyYW5zOwog
ICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRyYW5zKTsKICAgICBJbnRTaXplIHRyYW5zZm9y
bWVkUG9zaXRpb24odHJhbnMuZUR4LCB0cmFucy5lRHkpOwogICAgIGRyYXdSZWN0Lm1vdmUodHJh
bnNmb3JtZWRQb3NpdGlvbik7Ci0jZW5kaWYKIAogICAgIGludCBwaXhlbERhdGFXaWR0aCA9IHBp
eGVsRGF0YS5zaXplKCkud2lkdGgoKTsKICAgICBpbnQgcGl4ZWxEYXRhSGVpZ2h0ID0gcGl4ZWxE
YXRhLnNpemUoKS5oZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dESUV4dHJhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRi
ZDk1ZGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dESUV4dHJhcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR0RJRXh0cmFzLmgiCi0KLSNpbmNsdWRlICJTb2Z0TGlu
a2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBPUyhXSU5DRSkKLVNPRlRfTElO
S19MSUJSQVJZKGNvcmVkbGwpCi1TT0ZUX0xJTktfT1BUSU9OQUwoY29yZWRsbCwgQWxwaGFCbGVu
ZCwgQk9PTCwgQVBJRU5UUlksIChIREMgaGRjRGVzdCwgaW50IG5YT3JpZ2luRGVzdCwgaW50IG5Z
T3JpZ2luRGVzdCwgaW50IG5XaWR0aERlc3QsIGludCBuSGVpZ2h0RGVzdCwgSERDIGhkY1NyYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBuWE9yaWdpblNyYywgaW50IG5ZT3JpZ2luU3JjLCBpbnQgbldpZHRoU3JjLCBpbnQgbkhl
aWdodFNyYywgQkxFTkRGVU5DVElPTiBibGVuZEZ1bmN0aW9uKSkKLQotQWxwaGFCbGVuZFBvaW50
ZXJUeXBlIEFscGhhQmxlbmRQb2ludGVyKCkKLXsKLSAgICByZXR1cm4gQWxwaGFCbGVuZFB0cigp
OwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuaAppbmRleCAwMTY2MTI0Li5jOTEy
OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJ
RXh0cmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4
dHJhcy5oCkBAIC0zMiwzMSArMzIsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBC
T09MIChBUElFTlRSWSAqQWxwaGFCbGVuZFBvaW50ZXJUeXBlKSAoSERDIGhkY0Rlc3QsIGludCBu
WE9yaWdpbkRlc3QsIGludCBuWU9yaWdpbkRlc3QsIGludCBuV2lkdGhEZXN0LCBpbnQgbkhlaWdo
dERlc3QsIEhEQyBoZGNTcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgblhPcmlnaW5TcmMsIGludCBuWU9yaWdpblNyYywgaW50IG5XaWR0aFNy
YywgaW50IG5IZWlnaHRTcmMsIEJMRU5ERlVOQ1RJT04gYmxlbmRGdW5jdGlvbik7CiAKLSNpZiBP
UyhXSU5DRSkKLUFscGhhQmxlbmRQb2ludGVyVHlwZSBBbHBoYUJsZW5kUG9pbnRlcigpOwotI2Vu
ZGlmCi0KIGlubGluZSBib29sIGhhc0FscGhhQmxlbmRTdXBwb3J0KCkKIHsKLSNpZiBPUyhXSU5D
RSkKLSAgICByZXR1cm4gQWxwaGFCbGVuZFBvaW50ZXIoKTsKLSNlbHNlCiAgICAgcmV0dXJuIHRy
dWU7Ci0jZW5kaWYKIH0KIAogaW5saW5lIGJvb2wgYWxwaGFCbGVuZElmU3VwcG9ydGVkKEhEQyBo
ZGNEZXN0LCBpbnQgblhPcmlnaW5EZXN0LCBpbnQgbllPcmlnaW5EZXN0LCBpbnQgbldpZHRoRGVz
dCwgaW50IG5IZWlnaHREZXN0LCBIREMgaGRjU3JjLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuWE9yaWdpblNyYywgaW50IG5ZT3JpZ2luU3JjLCBpbnQgbldpZHRoU3Jj
LCBpbnQgbkhlaWdodFNyYywgQkxFTkRGVU5DVElPTiBibGVuZEZ1bmN0aW9uKQogewotI2lmIE9T
KFdJTkNFKQotICAgIEFscGhhQmxlbmRQb2ludGVyVHlwZSBhbHBoYUJsZW5kUG9pbnRlciA9IEFs
cGhhQmxlbmRQb2ludGVyKCk7Ci0gICAgaWYgKCFhbHBoYUJsZW5kUG9pbnRlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYWxwaGFCbGVuZFBvaW50ZXIoaGRjRGVzdCwgblhPcmlnaW5E
ZXN0LCBuWU9yaWdpbkRlc3QsIG5XaWR0aERlc3QsIG5IZWlnaHREZXN0LCBoZGNTcmMsIG5YT3Jp
Z2luU3JjLCBuWU9yaWdpblNyYywgbldpZHRoU3JjLCBuSGVpZ2h0U3JjLCBibGVuZEZ1bmN0aW9u
KTsKLSNlbHNlCiAgICAgQWxwaGFCbGVuZChoZGNEZXN0LCBuWE9yaWdpbkRlc3QsIG5ZT3JpZ2lu
RGVzdCwgbldpZHRoRGVzdCwgbkhlaWdodERlc3QsIGhkY1NyYywgblhPcmlnaW5TcmMsIG5ZT3Jp
Z2luU3JjLCBuV2lkdGhTcmMsIG5IZWlnaHRTcmMsIGJsZW5kRnVuY3Rpb24pOwotI2VuZGlmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JY29uV2luLmNwcAppbmRleCA1MGNmM2U1Li5mM2IwZDBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCkBAIC0yNywxMSAr
MjcsNiBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAotI2lmIE9TKFdJTkNFKQotLy8gU0hHRklfU0hFTExJQ09OU0laRSBpcyBub3QgYXZh
aWxhYmxlIG9uIFdJTkNFCi0jZGVmaW5lIFNIR0ZJX1NIRUxMSUNPTlNJWkUgICAgICAgICAwCi0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IHNoZWxsMzJN
dWx0aXBsZUZpbGVJY29uSW5kZXggPSA1NDsKQEAgLTY0LDkgKzU5LDYgQEAgUGFzc1JlZlB0cjxJ
Y29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcykKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKHNmaS5oSWNvbikpOwogICAg
IH0KIAotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiAwOwotI2Vsc2UKICAgICBXQ0hBUiBidWZm
ZXJbTUFYX1BBVEhdOwogICAgIFVJTlQgbGVuZ3RoID0gOjpHZXRTeXN0ZW1EaXJlY3RvcnlXKGJ1
ZmZlciwgV1RGX0FSUkFZX0xFTkdUSChidWZmZXIpKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTc5
LDcgKzcxLDYgQEAgUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICBpZiAoITo6RXh0cmFjdEljb25FeFco
YnVmZmVyLCBzaGVsbDMyTXVsdGlwbGVGaWxlSWNvbkluZGV4LCAwLCAmaEljb24sIDEpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaEljb24pKTsKLSNl
bmRpZgogfQogCiB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcikKQEAgLTg3LDEyICs3OCw4IEBAIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIE9TKFdJTkNFKQotICAg
IGNvbnRleHQtPmRyYXdJY29uKG1faEljb24sIHIsIERJX05PUk1BTCk7Ci0jZWxzZQogICAgIExv
Y2FsV2luZG93c0NvbnRleHQgd2luZG93Q29udGV4dChjb250ZXh0LCByKTsKICAgICBEcmF3SWNv
bkV4KHdpbmRvd0NvbnRleHQuaGRjKCksIHIueCgpLCByLnkoKSwgbV9oSWNvbiwgci53aWR0aCgp
LCByLmhlaWdodCgpLCAwLCAwLCBESV9OT1JNQUwpOwotI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFXaW4uY3BwCmluZGV4IDZjMTQ4NjYuLjk2NTg0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcApA
QCAtOTYsMTMgKzk2LDExIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRHRElGb250KCkKICAg
ICBtX2F2Z0NoYXJXaWR0aCA9IHRleHRNZXRyaWNzLnRtQXZlQ2hhcldpZHRoOwogICAgIG1fbWF4
Q2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGg7CiAgICAgZmxvYXQgeEhlaWdo
dCA9IGFzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5
cGggaXMgcHJlc2VudC4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgR0xZUEhNRVRSSUNTIGdtOwogICAg
IHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAx
IH07CiAgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhPdXRsaW5lKGhkYywgJ3gnLCBHR09fTUVUUklD
UywgJmdtLCAwLCAwLCAmaWRlbnRpdHkpOwogICAgIGlmIChsZW4gIT0gR0RJX0VSUk9SICYmIGdt
LmdtcHRHbHlwaE9yaWdpbi55ID4gMCkKICAgICAgICAgeEhlaWdodCA9IGdtLmdtcHRHbHlwaE9y
aWdpbi55OwotI2VuZGlmCiAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwog
ICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbShtZXRyaWNzLm90bUVNU3F1YXJlKTsKIApA
QCAtMTIxLDEwICsxMTksOCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0
aEluaXQoKQogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewotI2lm
ICFPUyhXSU5DRSkKICAgICBTY3JpcHRGcmVlQ2FjaGUoJm1fc2NyaXB0Q2FjaGUpOwogICAgIGRl
bGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3QKQEAgLTIwMCw5ICsxOTYsNiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCiAKIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotI2Vsc2UKICAgICBIV25kREMgaGRjKDApOwogICAgIFNldEdyYXBoaWNzTW9kZShoZGMs
IEdNX0FEVkFOQ0VEKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBt
X3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKQEAgLTIxNSwzNSArMjA4LDI0IEBAIEZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAKICAg
ICByZXR1cm4gRmxvYXRSZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLngsIC1nZGlNZXRy
aWNzLmdtcHRHbHlwaE9yaWdpbi55LAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsgCi0jZW5kaWYK
IH0KIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgU2V0R3Jh
cGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQpOwotI2VuZGlmCiAgICAgSEdESU9CSiBvbGRGb250
ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7CiAKLSNpZiBPUyhX
SU5DRSkKLSAgICBXQ0hBUiBjID0gZ2x5cGg7Ci0gICAgU0laRSBmb250U2l6ZTsKLSAgICBHZXRU
ZXh0RXh0ZW50UG9pbnQzMlcoaGRjLCAmYywgMSwgJmZvbnRTaXplKTsKLSAgICBmbG9hdCByZXN1
bHQgPSBmb250U2l6ZS5jeCAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDcyLmY7Ci0jZWxzZQog
ICAgIEdMWVBITUVUUklDUyBnZGlNZXRyaWNzOwogICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50
aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07CiAgICAgR2V0R2x5cGhPdXRsaW5l
KGhkYywgZ2x5cGgsIEdHT19NRVRSSUNTIHwgR0dPX0dMWVBIX0lOREVYLCAmZ2RpTWV0cmljcywg
MCwgMCwgJmlkZW50aXR5KTsKICAgICBmbG9hdCByZXN1bHQgPSBnZGlNZXRyaWNzLmdtQ2VsbElu
Y1ggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci0jZW5kaWYKIAogICAgIFNlbGVjdE9iamVjdCho
ZGMsIG9sZEZvbnQpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmICFPUyhXSU5DRSkK
IFNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0
aWVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2NyaXB0Rm9udFByb3BlcnRpZXMpIHsKQEAgLTI2
MSw2ICsyNDMsNSBAQCBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIFNpbXBsZUZvbnREYXRhOjpzY3Jp
cHRGb250UHJvcGVydGllcygpIGNvbnN0CiAgICAgfQogICAgIHJldHVybiBtX3NjcmlwdEZvbnRQ
cm9wZXJ0aWVzOwogfQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdp
bkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllYmU0Yi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5D
RS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotKgotKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0qIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNp
bmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1leHRlcm4gSERD
IGdfc2NyZWVuREM7Ci0KLXN0YXRpYyBJTXVsdGlMYW5ndWFnZSAqbXVsdGlMYW5ndWFnZSA9IDA7
Ci1zdGF0aWMgSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSAwOwotCi1JTXVsdGlM
YW5ndWFnZSogRm9udENhY2hlOjpnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkKLXsKLSAgICBp
ZiAoIW11bHRpTGFuZ3VhZ2UpCi0gICAgICAgIENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfQ011bHRp
TGFuZ3VhZ2UsIDAsIENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURfSU11bHRpTGFuZ3VhZ2UsICh2
b2lkKiopJm11bHRpTGFuZ3VhZ2UpOwotCi0gICAgcmV0dXJuIG11bHRpTGFuZ3VhZ2U7Ci19Ci0K
LUlNTGFuZ0ZvbnRMaW5rVHlwZSogRm9udENhY2hlOjpnZXRGb250TGlua0ludGVyZmFjZSgpCi17
Ci0gICAgaWYgKCFsYW5nRm9udExpbmspIHsKLSAgICAgICAgaWYgKElNdWx0aUxhbmd1YWdlKiBt
bGkgPSBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkpCi0gICAgICAgICAgICBtbGktPlF1ZXJ5
SW50ZXJmYWNlKCZsYW5nRm9udExpbmspOwotICAgIH0KLQotICAgIHJldHVybiBsYW5nRm9udExp
bms7Ci19Ci0KLXN0YXRpYyBib29sIGN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIoSU1MYW5n
Rm9udExpbmtUeXBlKiBsYW5nRm9udExpbmssIEhEQyBoZGMsIEhGT05UIGhmb250LCBVQ2hhciBj
aGFyYWN0ZXIsIGNvbnN0IHdjaGFyX3QqIGZhY2VOYW1lKQotewotI2lmIFVTRShJTUxBTkdfRk9O
VF9MSU5LMikKLSAgICBVSU5UIHVuaWNvZGVSYW5nZXM7Ci0gICAgaWYgKFNfT0sgIT0gbGFuZ0Zv
bnRMaW5rLT5HZXRGb250VW5pY29kZVJhbmdlcyhoZGMsICZ1bmljb2RlUmFuZ2VzLCAwKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIFZlY3RvcjxVTklDT0RFUkFOR0UsIDY0
PiBnbHlwaHNldEJ1ZmZlcjsKLSAgICBnbHlwaHNldEJ1ZmZlci5yZXNpemUodW5pY29kZVJhbmdl
cyk7Ci0KLSAgICBpZiAoU19PSyAhPSBsYW5nRm9udExpbmstPkdldEZvbnRVbmljb2RlUmFuZ2Vz
KGhkYywgJnVuaWNvZGVSYW5nZXMsIGdseXBoc2V0QnVmZmVyLmRhdGEoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBhIGJpbmFyeSBzZWFy
Y2guIChZb25nIExpOiBUaGF0J3MgZWFzeS4gQnV0LCBpcyBpdCBndWFyYW50ZWVkIHRoYXQgdGhl
IHJhbmdlcyBhcmUgc29ydGVkPykKLSAgICBmb3IgKFZlY3RvcjxVTklDT0RFUkFOR0UsIDY0Pjo6
Y29uc3RfaXRlcmF0b3IgaSA9IGdseXBoc2V0QnVmZmVyLmJlZ2luKCk7IGkgIT0gZ2x5cGhzZXRC
dWZmZXIuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoaS0+d2NUbyA+PSBjaGFyYWN0ZXIpCi0g
ICAgICAgICAgICByZXR1cm4gaS0+d2NGcm9tIDw9IGNoYXJhY3RlcjsKLSAgICB9Ci0jZWxzZQot
ICAgIERXT1JEIGZvbnRDb2RlUGFnZXMgPSAwLCBjaGFyQ29kZVBhZ2VzID0gMDsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IGxhbmdGb250TGluay0+R2V0Rm9udENvZGVQYWdlcyhoZGMsIGhmb250LCAm
Zm9udENvZGVQYWdlcyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTX09LKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2VzKGNoYXJh
Y3RlciwgJmNoYXJDb2RlUGFnZXMpOwotICAgIGlmIChyZXN1bHQgIT0gU19PSykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZm9udENvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1EYXRhOjpn
ZXRLbm93bkZvbnRDb2RlUGFnZXMoZmFjZU5hbWUpOwotICAgIGlmIChmb250Q29kZVBhZ2VzICYg
Y2hhckNvZGVQYWdlcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdGb250TGlu
a1R5cGUqIGxhbmdGb250TGluaywgSERDIGhkYywgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcmVm
Rm9udCwgRFdPUkQgY29kZVBhZ2VNYXNrLCBVQ2hhciBjaGFyYWN0ZXIgPSAwKQotewotICAgIEhG
T05UIG1sYW5nRm9udDsKLQotI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLSAgICBIUkVTVUxU
IHJlc3VsdCA9IGxhbmdGb250TGluay0+TWFwRm9udChoZGMsIGNvZGVQYWdlTWFzaywgY2hhcmFj
dGVyLCAmbWxhbmdGb250KTsKLSNlbHNlCi0gICAgSFJFU1VMVCByZXN1bHQgPSBsYW5nRm9udExp
bmstPk1hcEZvbnQoaGRjLCBjb2RlUGFnZU1hc2ssIHJlZkZvbnQuaGZvbnQoKSwgJm1sYW5nRm9u
dCk7Ci0jZW5kaWYKLQotICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgcmV0dXJu
IG1sYW5nRm9udDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEV09S
RCwgND4mIGdldENKS0NvZGVQYWdlTWFza3MoKQotewotICAgIC8vIFRoZSBkZWZhdWx0IG9yZGVy
IGluIHdoaWNoIHdlIGxvb2sgZm9yIGEgZm9udCBmb3IgYSBDSksgY2hhcmFjdGVyLiBJZiB0aGUg
dXNlcidzIGRlZmF1bHQgY29kZSBwYWdlIGlzCi0gICAgLy8gb25lIG9mIHRoZXNlLCB3ZSB3aWxs
IHVzZSBpdCBmaXJzdC4KLSAgICBzdGF0aWMgY29uc3QgVUlOVCBDSktDb2RlUGFnZXNbXSA9IHsK
LSAgICAgICAgOTMyLCAvKiBKYXBhbmVzZSAqLwotICAgICAgICA5MzYsIC8qIFNpbXBsaWZpZWQg
Q2hpbmVzZSAqLwotICAgICAgICA5NTAsIC8qIFRyYWRpdGlvbmFsIENoaW5lc2UgKi8KLSAgICAg
ICAgOTQ5ICAvKiBLb3JlYW4gKi8KLSAgICB9OwotCi0gICAgc3RhdGljIFZlY3RvcjxEV09SRCwg
ND4gY29kZVBhZ2VNYXNrczsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLSAgICBpZiAo
IWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgSU1M
YW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0lu
dGVyZmFjZSgpOwotICAgICAgICBpZiAoIWxhbmdGb250TGluaykKLSAgICAgICAgICAgIHJldHVy
biBjb2RlUGFnZU1hc2tzOwotCi0gICAgICAgIFVJTlQgZGVmYXVsdENvZGVQYWdlOwotICAgICAg
ICBEV09SRCBkZWZhdWx0Q29kZVBhZ2VNYXNrID0gMDsKLSAgICAgICAgaWYgKEdldExvY2FsZUlu
Zm8oTE9DQUxFX1VTRVJfREVGQVVMVCwgTE9DQUxFX1JFVFVSTl9OVU1CRVIgfCBMT0NBTEVfSURF
RkFVTFRBTlNJQ09ERVBBR0UsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmZGVmYXVsdENvZGVQ
YWdlKSwgc2l6ZW9mKGRlZmF1bHRDb2RlUGFnZSkpKQotICAgICAgICAgICAgbGFuZ0ZvbnRMaW5r
LT5Db2RlUGFnZVRvQ29kZVBhZ2VzKGRlZmF1bHRDb2RlUGFnZSwgJmRlZmF1bHRDb2RlUGFnZU1h
c2spOwotCi0gICAgICAgIGlmIChkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzBdIHx8
IGRlZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFnZXNbMV0gfHwgZGVmYXVsdENvZGVQYWdlID09
IENKS0NvZGVQYWdlc1syXSB8fCBkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzNdKQot
ICAgICAgICAgICAgY29kZVBhZ2VNYXNrcy5hcHBlbmQoZGVmYXVsdENvZGVQYWdlTWFzayk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChkZWZhdWx0Q29kZVBhZ2UgIT0gQ0pLQ29kZVBhZ2VzW2ldKSB7Ci0gICAgICAgICAgICAgICAg
RFdPUkQgY29kZVBhZ2VNYXNrOwotICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+Q29kZVBh
Z2VUb0NvZGVQYWdlcyhDSktDb2RlUGFnZXNbaV0sICZjb2RlUGFnZU1hc2spOwotICAgICAgICAg
ICAgICAgIGNvZGVQYWdlTWFza3MuYXBwZW5kKGNvZGVQYWdlTWFzayk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvZGVQYWdlTWFza3M7Ci19Ci0KLQotc3Ry
dWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEo
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQotICAgICAgICA6IG1fZmFtaWx5TmFtZShm
YW1pbHlOYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1fZmFt
aWx5TmFtZTsKLSAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RyYWl0c01hc2tzOwotfTsKLQotc3Rh
dGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxv
Z0ZvbnQsIENPTlNUIFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqIHByb2NEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxUcmFpdHNJbkZhbWlseVByb2NEYXRhKj4obFBhcmFtKTsKLQotICAgIHVuc2ln
bmVkIHRyYWl0c01hc2sgPSAwOwotICAgIHRyYWl0c01hc2sgfD0gbG9nRm9udC0+bGZJdGFsaWMg
PyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzazsKLSAgICB0cmFpdHNN
YXNrIHw9IEZvbnRWYXJpYW50Tm9ybWFsTWFzazsKLSAgICBMT05HIHdlaWdodCA9IEZvbnRQbGF0
Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodChsb2dGb250LT5sZldlaWdodCwgcHJvY0Rh
dGEtPm1fZmFtaWx5TmFtZSk7Ci0gICAgdHJhaXRzTWFzayB8PSB3ZWlnaHQgPT0gRldfVEhJTiA/
IEZvbnRXZWlnaHQxMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX0VYVFJBTElHSFQgPyBG
b250V2VpZ2h0MjAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19MSUdIVCA/IEZvbnRXZWln
aHQzMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX05PUk1BTCA/IEZvbnRXZWlnaHQ0MDBN
YXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX01FRElVTSA/IEZvbnRXZWlnaHQ1MDBNYXNrIDoK
LSAgICAgICAgd2VpZ2h0ID09IEZXX1NFTUlCT0xEID8gRm9udFdlaWdodDYwME1hc2sgOgotICAg
ICAgICB3ZWlnaHQgPT0gRldfQk9MRCA/IEZvbnRXZWlnaHQ3MDBNYXNrIDoKLSAgICAgICAgd2Vp
Z2h0ID09IEZXX0VYVFJBQk9MRCA/IEZvbnRXZWlnaHQ4MDBNYXNrIDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZvbnRXZWlnaHQ5MDBNYXNrOwotICAgIHByb2NEYXRhLT5tX3Ry
YWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKLSAgICByZXR1cm4gMTsKLX0KLQotdm9pZCBGb250
Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpjb21Jbml0aWFs
aXplKCkKLXsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmNvbVVuaW5pdGlhbGl6ZSgpCi17Ci0gICAg
aWYgKGxhbmdGb250TGluaykgewotICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2UoKTsKLSAg
ICAgICAgbGFuZ0ZvbnRMaW5rID0gMDsKLSAgICB9Ci0gICAgaWYgKG11bHRpTGFuZ3VhZ2UpIHsK
LSAgICAgICAgbXVsdGlMYW5ndWFnZS0+UmVsZWFzZSgpOwotICAgICAgICBtdWx0aUxhbmd1YWdl
ID0gMDsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAgICBTdHJpbmcgZmFtaWx5TmFt
ZTsKLSAgICBXQ0hBUiBuYW1lW0xGX0ZBQ0VTSVpFXTsKLQotICAgIFVDaGFyIGNoYXJhY3RlciA9
IGNoYXJhY3RlcnNbMF07Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3JpZ0ZvbnQgPSBv
cmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLQotICAgIGlmIChJTUxhbmdGb250TGlu
a1R5cGUqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKLSAgICAgICAg
SEdESU9CSiBvbGRGb250ID0gR2V0Q3VycmVudE9iamVjdChnX3NjcmVlbkRDLCBPQkpfRk9OVCk7
Ci0gICAgICAgIEhGT05UIGhmb250ID0gMDsKLSAgICAgICAgRFdPUkQgY29kZVBhZ2VzID0gMDsK
LSAgICAgICAgVUlOVCBjb2RlUGFnZSA9IDA7Ci0gICAgICAgIC8vIFRyeSBNTGFuZyBmb250IGxp
bmtpbmcgZmlyc3QuCi0gICAgICAgIGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhjaGFy
YWN0ZXIsICZjb2RlUGFnZXMpOwotICAgICAgICBpZiAoY29kZVBhZ2VzICYmIHVfZ2V0SW50UHJv
cGVydHlWYWx1ZShjaGFyYWN0ZXIsIFVDSEFSX1VOSUZJRURfSURFT0dSQVBIKSkgewotICAgICAg
ICAgICAgLy8gVGhlIENKSyBjaGFyYWN0ZXIgbWF5IGJlbG9uZyB0byBtdWx0aXBsZSBjb2RlIHBh
Z2VzLiBXZSB3YW50IHRvCi0gICAgICAgICAgICAvLyBkbyBmb250IGxpbmtpbmcgYWdhaW5zdCBh
IHNpbmdsZSBvbmUgb2YgdGhlbSwgcHJlZmVycmluZyB0aGUgZGVmYXVsdAotICAgICAgICAgICAg
Ly8gY29kZSBwYWdlIGZvciB0aGUgdXNlcidzIGxvY2FsZS4KLSAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxEV09SRCwgND4mIENKS0NvZGVQYWdlTWFza3MgPSBnZXRDSktDb2RlUGFnZU1hc2tzKCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1Db2RlUGFnZXMgPSBDSktDb2RlUGFnZU1hc2tzLnNp
emUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db2RlUGFnZXM7
ICsraSkgewotICAgICAgICAgICAgICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxhbmdGb250
TGluaywgZ19zY3JlZW5EQywgb3JpZ0ZvbnQsIENKS0NvZGVQYWdlTWFza3NbaV0pOwotICAgICAg
ICAgICAgICAgIGlmICghaGZvbnQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhmb250KTsKLSAgICAgICAg
ICAgICAgICBHZXRUZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9GQUNFU0laRSwgbmFtZSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaGZvbnQgJiYgIShjb2RlUGFnZXMgJiBDSktDb2RlUGFnZU1hc2tz
W2ldKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc2tlZCBhYm91dCBhIGNvZGUgcGFn
ZSB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIGNvZGUgcGFnZXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gcmV0dXJuZWQgYnkgTUxhbmcsIHNvIHRoZSBmb250IG1pZ2h0IG5vdCBjb250YWluIHRoZSBj
aGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0No
YXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGhmb250LCBjaGFyYWN0ZXIsIG5hbWUp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RP
YmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYW5n
Rm9udExpbmstPlJlbGVhc2VGb250KGhmb250KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhm
b250ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaGZvbnQgPSBjcmVhdGVN
TGFuZ0ZvbnQobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBvcmlnRm9udCwgY29kZVBhZ2VzLCBj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhmb250KTsK
LSAgICAgICAgICAgIEdldFRleHRGYWNlKGdfc2NyZWVuREMsIExGX0ZBQ0VTSVpFLCBuYW1lKTsK
LSAgICAgICAgfQotICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7Ci0K
LSAgICAgICAgaWYgKGhmb250KSB7Ci0gICAgICAgICAgICBmYW1pbHlOYW1lID0gbmFtZTsKLSAg
ICAgICAgICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGE6Om1hcEtub3duRm9udChjb2RlUGFnZXMs
IGZhbWlseU5hbWUpOwotICAgIH0KLQotICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKLSAg
ICAgICAgZmFtaWx5TmFtZSA9IEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCk7
Ci0KLSAgICBpZiAoIWZhbWlseU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgVGhhaSBmb250IHByb2JsZW0KLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0gICAgICAgIGlmICh1Ymxv
Y2tfZ2V0Q29kZShjKSA9PSBVQkxPQ0tfVEhBSSAmJiBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkg
PiBGb250V2VpZ2h0Tm9ybWFsKQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dChGb250V2VpZ2h0Tm9ybWFsKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7
Ci0gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5oYXNoKCkgIT0gb3JpZ0ZvbnQuaGFzaCgp
KSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdl
dENhY2hlZEZvbnREYXRhKHJlc3VsdCwgRG9Ob3RSZXRhaW4pKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmb250RGF0YS5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCi17Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVy
IHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdl
J2xsIHBpY2sKLSAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRo
b3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9u
dERlc2MsIEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCksIGZhbHNlLCBzaG91
bGRSZXRhaW4pOwotfQotCi1QYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KSk7Ci19Ci0KLXZv
aWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQotewotICAgIExPR0ZPTlQgbG9n
Rm9udDsKLSAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKLSAgICB1bnNp
Z25lZCBmYW1pbHlMZW5ndGggPSBzdGQ6Om1pbihmYW1pbHlOYW1lLmxlbmd0aCgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oTEZfRkFDRVNJWkUgLSAxKSk7Ci0gICAgbWVtY3B5KGxvZ0ZvbnQubGZG
YWNlTmFtZSwgZmFtaWx5TmFtZS5jaGFyYWN0ZXJzKCksIGZhbWlseUxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOwotICAgIGxvZ0ZvbnQubGZGYWNlTmFtZVtmYW1pbHlMZW5ndGhdID0gMDsKLSAgICBs
b2dGb250LmxmUGl0Y2hBbmRGYW1pbHkgPSAwOwotCi0gICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0
YSBwcm9jRGF0YShmYW1pbHlOYW1lKTsKLSAgICBFbnVtRm9udEZhbWlsaWVzRXgoZ19zY3JlZW5E
QywgJmxvZ0ZvbnQsIHRyYWl0c0luRmFtaWx5RW51bVByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBB
UkFNPigmcHJvY0RhdGEpLCAwKTsKLSAgICBjb3B5VG9WZWN0b3IocHJvY0RhdGEubV90cmFpdHNN
YXNrcywgdHJhaXRzTWFza3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
Yjk0OGY4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRGb250LmgiCi0j
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIk9wZW5UeXBlVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBDdXN0b21Gb250Q2FjaGUqIGdfY3VzdG9tRm9udENhY2hlID0gMDsKLQotdm9p
ZCBzZXRDdXN0b21Gb250Q2FjaGUoQ3VzdG9tRm9udENhY2hlKiBjYWNoZSkKLXsKLSAgICBnX2N1
c3RvbUZvbnRDYWNoZSA9IGNhY2hlOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKGdfY3VzdG9tRm9udENhY2hlICYmICFt
X25hbWUuaXNFbXB0eSgpKQotICAgICAgICBnX2N1c3RvbUZvbnRDYWNoZS0+dW5yZWdpc3RlckZv
bnQobV9uYW1lKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250
T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCi17Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjOwotICAgIGZvbnREZXNjLnNl
dENvbXB1dGVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUp
OwotICAgIGZvbnREZXNjLnNldEl0YWxpYyhpdGFsaWMpOwotICAgIGZvbnREZXNjLnNldFdlaWdo
dChib2xkID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICByZXR1cm4g
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9uYW1lLCBmYWxzZSk7Ci19Ci0KLS8vIENyZWF0
ZXMgYSB1bmlxdWUgYW5kIHVucHJlZGljdGFibGUgZm9udCBuYW1lLCBpbiBvcmRlciB0byBhdm9p
ZCBjb2xsaXNpb25zIGFuZCB0bwotLy8gbm90IGFsbG93IGFjY2VzcyBmcm9tIENTUy4KLXN0YXRp
YyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQotewotICAgIEdVSUQgZm9udFV1aWQ7Ci0K
LSAgICB1bnNpZ25lZCBpbnQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
JmZvbnRVdWlkKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihHVUlEKSAvIHNpemVv
ZihpbnQpIDsgKytpKQotICAgICAgICAqKHB0ciArIGkpID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgKyAxLjApKTsKLQotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShyZWludGVy
cHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKLSAgICBBU1NF
UlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7Ci0gICAgcmV0dXJuIGZvbnROYW1l
LnJlcGxhY2UoJy8nLCAnXycpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3RvbVBsYXRm
b3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKLXsKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBjcmVhdGVVbmlxdWVGb250TmFtZSgpOwotCi0g
ICAgVmVjdG9yPGNoYXI+IHJld3JpdHRlbkZvbnREYXRhOwotICAgIGlmICghcmVuYW1lRm9udChi
dWZmZXIsIGZvbnROYW1lLCByZXdyaXR0ZW5Gb250RGF0YSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9jYWxCdWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHJld3JpdHRlbkZvbnREYXRhKTsKLSAgICBpZiAoIWdfY3VzdG9tRm9u
dENhY2hlIHx8ICFnX2N1c3RvbUZvbnRDYWNoZS0+cmVnaXN0ZXJGb250KGZvbnROYW1lLCBsb2Nh
bEJ1ZmZlci5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4oZm9udE5hbWUpOwotfQotCi1i
b29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYg
Zm9ybWF0KQotewotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJ0cnVldHlw
ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgIm9wZW50eXBlIik7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDQyZDc0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0jZGVmaW5l
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
Ci0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJGb250V2lkdGhWYXJp
YW50LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7Ci0gICAgY2xhc3MgQ2FjaGVkRm9udDsKLSAgICBjbGFzcyBTaGFyZWRCdWZmZXI7
Ci0KLSAgICBjbGFzcyBDdXN0b21Gb250Q2FjaGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmly
dHVhbCBib29sIHJlZ2lzdGVyRm9udChjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBjb25zdCBTaGFy
ZWRCdWZmZXIqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyRm9udChjb25z
dCBTdHJpbmcmIGZvbnROYW1lKSA9IDA7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSk7Ci0gICAgcHVibGljOgotICAgICAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICAgICAgICAgIDogbV9uYW1lKG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7Ci0KLSAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhW
YXJpYW50ID0gUmVndWxhcldpZHRoLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmlu
Z01vZGUpOwotCi0gICAgICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgc2V0Q3VzdG9tRm9udENhY2hlKEN1c3RvbUZvbnRD
YWNoZSopOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNhNmNhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw1MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250
Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvd2luL0dESU9iamVjdC5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPG1s
YW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhEQyBnX3NjcmVlbkRDOwot
Ci1zdGF0aWMgd2NoYXJfdCBzb25nVGlTdHJbXSA9IHsgMHg1YjhiLCAweDRmNTMsIDAgfTsKLXN0
YXRpYyB3Y2hhcl90IGhlaVRpU3RyW10gPSB7IDB4OWVkMSwgMHg0ZjUzLCAwIH07Ci0KLWNsYXNz
IEZvbnRGYW1pbHlDb2RlUGFnZUluZm8gewotcHVibGljOgotICAgIEZvbnRGYW1pbHlDb2RlUGFn
ZUluZm8oKQotICAgICAgICA6IG1fY29kZVBhZ2UoMCksIG1fY29kZVBhZ2VzKDApCi0gICAgewot
ICAgIH0KLSAgICBGb250RmFtaWx5Q29kZVBhZ2VJbmZvKGNvbnN0IHdjaGFyX3QqIGZhbWlseSwg
VUlOVCBjb2RlUGFnZSkKLSAgICAgICAgOiBtX2ZhbWlseShmYW1pbHkpLCBtX2NvZGVQYWdlKGNv
ZGVQYWdlKSwgbV9jb2RlUGFnZXMoMCkKLSAgICB7Ci0gICAgfQotICAgIERXT1JEIGNvZGVQYWdl
cygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fY29kZVBhZ2VzKSB7Ci0gICAgICAgICAg
ICBpZiAoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRG
b250TGlua0ludGVyZmFjZSgpKQotICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+Q29kZVBh
Z2VUb0NvZGVQYWdlcyhtX2NvZGVQYWdlLCAmbV9jb2RlUGFnZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX2NvZGVQYWdlczsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9mYW1pbHk7Ci0g
ICAgVUlOVCBtX2NvZGVQYWdlOwotcHJpdmF0ZToKLSAgICBtdXRhYmxlIERXT1JEIG1fY29kZVBh
Z2VzOwotfTsKLQotY2xhc3MgRm9udEZhbWlseUNoZWNrZXIgewotcHVibGljOgotICAgIEZvbnRG
YW1pbHlDaGVja2VyKGNvbnN0IHdjaGFyX3QqIGZhbWlseSkKLSAgICAgICAgOiBtX2V4aXN0cyhm
YWxzZSkKLSAgICB7Ci0gICAgICAgIEVudW1Gb250RmFtaWxpZXMoZ19zY3JlZW5EQywgZmFtaWx5
LCBlbnVtRm9udEZhbVByb2MsIChMUEFSQU0pdGhpcyk7Ci0gICAgfQotICAgIGJvb2wgaXNTdXBw
b3J0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4aXN0czsgfQotcHJpdmF0ZToKLSAgICBib29sIG1f
ZXhpc3RzOwotICAgIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExP
R0ZPTlQgRkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250
VHlwZSwgTFBBUkFNIGxQYXJhbSk7Ci19OwotCi1jbGFzcyBWYWxpZEZvbnRGYW1pbHlGaW5kZXIg
ewotcHVibGljOgotICAgIFZhbGlkRm9udEZhbWlseUZpbmRlcigpCi0gICAgewotICAgICAgICBF
bnVtRm9udEZhbWlsaWVzKGdfc2NyZWVuREMsIDAsIGVudW1Gb250RmFtUHJvYywgKExQQVJBTSl0
aGlzKTsKLSAgICB9Ci0gICAgY29uc3QgU3RyaW5nJiBmYW1pbHkoKSBjb25zdCB7IHJldHVybiBt
X2ZhbWlseTsgfQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHk7Ci0gICAgc3RhdGljIGlu
dCBDQUxMQkFDSyBlbnVtRm9udEZhbVByb2MoY29uc3QgTE9HRk9OVCBGQVIqIGxwZWxmLCBjb25z
dCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKTsK
LX07Ci0KLWNsYXNzIEZpeGVkU2l6ZUZvbnREYXRhOiBwdWJsaWMgUmVmQ291bnRlZDxGaXhlZFNp
emVGb250RGF0YT4gewotcHVibGljOgotICAgIExPR0ZPTlQgbV9mb250OwotICAgIEdESU9iamVj
dDxIRk9OVD4gbV9oZm9udDsKLSAgICBURVhUTUVUUklDIG1fbWV0cmljczsKLSAgICBEV09SRCBt
X2NvZGVQYWdlczsKLSAgICB1bnNpZ25lZCBtX3dlaWdodDsKLSAgICBib29sIG1faXRhbGljOwot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSwgdW5zaWduZWQgd2VpZ2h0LCBib29sIGl0YWxpYyk7Ci1wcml2
YXRlOgotICAgIEZpeGVkU2l6ZUZvbnREYXRhKCkKLSAgICAgICAgOiBtX2NvZGVQYWdlcygwKQot
ICAgICAgICAsIG1fd2VpZ2h0KDApCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0gICAgewot
ICAgICAgICBtZW1zZXQoJm1fZm9udCwgMCwgc2l6ZW9mKG1fZm9udCkpOwotICAgICAgICBtZW1z
ZXQoJm1fbWV0cmljcywgMCwgc2l6ZW9mKG1fbWV0cmljcykpOwotICAgIH0KLX07Ci0KLXN0cnVj
dCBGaXhlZFNpemVGb250RGF0YUtleSB7Ci0gICAgRml4ZWRTaXplRm9udERhdGFLZXkoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkgPSBBdG9taWNTdHJpbmcoKSwgdW5zaWduZWQgd2VpZ2h0ID0g
MCwgYm9vbCBpdGFsaWMgPSBmYWxzZSkKLSAgICAgICAgOiBtX2ZhbWlseShmYW1pbHkpCi0gICAg
ICAgICwgbV93ZWlnaHQod2VpZ2h0KQotICAgICAgICAsIG1faXRhbGljKGl0YWxpYykKLSAgICB7
Ci0gICAgfQotCi0gICAgRml4ZWRTaXplRm9udERhdGFLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKSA6IG1fd2VpZ2h0KC0yKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV93ZWlnaHQgPT0gLTI7IH0KLQotICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9mYW1pbHksIG90aGVyLm1fZmFtaWx5
KQotICAgICAgICAgICAgJiYgbV93ZWlnaHQgPT0gb3RoZXIubV93ZWlnaHQKLSAgICAgICAgICAg
ICYmIG1faXRhbGljID09IG90aGVyLm1faXRhbGljOwotICAgIH0KLQotICAgIEF0b21pY1N0cmlu
ZyBtX2ZhbWlseTsKLSAgICB1bnNpZ25lZCBtX3dlaWdodDsKLSAgICBib29sIG1faXRhbGljOwot
fTsKLQotc3RydWN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIGZvbnQpCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6
aGFzaChmb250Lm1fZmFtaWx5KSwKLSAgICAgICAgICAgIGZvbnQubV93ZWlnaHQsCi0gICAgICAg
ICAgICAvLyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZm9udC5tX2l0YWxpYyk7Ci0gICAgICAgIH07
Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rl
cyk+KGhhc2hDb2Rlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRml4
ZWRTaXplRm9udERhdGFLZXkmIGEsIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBiKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19OwotCi1zdHJ1Y3QgRml4
ZWRTaXplRm9udERhdGFLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZpeGVkU2l6
ZUZvbnREYXRhS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBlbXB0eVZhbHVl
KCkKLSAgICB7Ci0gICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGaXhlZFNp
emVGb250RGF0YUtleSwga2V5LCAobnVsbEF0b20pKTsKLSAgICAgICAgcmV0dXJuIGtleTsKLSAg
ICB9Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZpeGVkU2l6ZUZvbnRE
YXRhS2V5JiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRml4ZWRTaXplRm9udERh
dGFLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICB9
Ci19OwotCi1pbnQgQ0FMTEJBQ0sgRm9udEZhbWlseUNoZWNrZXI6OmVudW1Gb250RmFtUHJvYyhj
b25zdCBMT0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdP
UkQgRm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgKChGb250RmFtaWx5Q2hlY2tlciop
bFBhcmFtKS0+bV9leGlzdHMgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgQ0FMTEJB
Q0sgVmFsaWRGb250RmFtaWx5RmluZGVyOjplbnVtRm9udEZhbVByb2MoY29uc3QgTE9HRk9OVCBG
QVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZvbnRUeXBlLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIGlmIChscGVsZi0+bGZDaGFyU2V0ICE9IFNZTUJPTF9DSEFS
U0VUKSB7Ci0gICAgICAgICgoVmFsaWRGb250RmFtaWx5RmluZGVyKilsUGFyYW0pLT5tX2ZhbWls
eSA9IFN0cmluZyhscGVsZi0+bGZGYWNlTmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICByZXR1cm4gMTsKLX0KLQotdHlwZWRlZiBWZWN0b3I8Rm9udEZhbWlseUNvZGVQYWdlSW5m
bz4gS25vd25Gb250czsKLXN0YXRpYyBLbm93bkZvbnRzJiBrbm93bkZvbnRzKCkKLXsKLSAgICBz
dGF0aWMgS25vd25Gb250cyBmb250czsKLSAgICBzdGF0aWMgYm9vbCBmaXJzdFRpbWUgPSB0cnVl
OwotICAgIGlmIChmaXJzdFRpbWUpIHsKLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAg
ICAgIGlmIChGb250UGxhdGZvcm1EYXRhOjppc1NvbmdUaVN1cHBvcnRlZCgpKQotICAgICAgICAg
ICAgZm9udHMuYXBwZW5kKEZvbnRGYW1pbHlDb2RlUGFnZUluZm8oc29uZ1RpU3RyLCA5MzYpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZvbnRzOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldERlZmF1bHRG
b250RmFtaWx5KCkKLXsKLSAgICBpZiAoRm9udEZhbWlseUNoZWNrZXIoTCJUYWhvbWEiKS5pc1N1
cHBvcnRlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKEwiVGFob21hIik7Ci0KLSAgICBib29s
IGdvb2QgPSBmYWxzZTsKLSAgICBTdHJpbmcgZmFtaWx5OwotICAgIEhLRVkga2V5OwotICAgIGlm
IChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBMIlNZU1RFTVxcR0RJXFxTeXNGbnQi
LCAwLCAwLCAma2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERXT1JEIG1heGxlbiwg
dHlwZTsKLSAgICAgICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChrZXksIEwiTm0iLCAwLCAmdHlwZSwg
MCwgJm1heGxlbikgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgewotICAgICAg
ICAgICAgKyttYXhsZW47Ci0gICAgICAgICAgICBpZiAod2NoYXJfdCogYnVmZmVyID0gbmV3IHdj
aGFyX3RbbWF4bGVuXSkgewotICAgICAgICAgICAgICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoa2V5
LCBMIk5tIiwgMCwgJnR5cGUsIChMUEJZVEUpYnVmZmVyLCAmbWF4bGVuKSA9PSBFUlJPUl9TVUND
RVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IFN0cmluZyhidWZmZXIsIG1heGxl
bik7Ci0gICAgICAgICAgICAgICAgICAgIGdvb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBkZWxldGVbXSBidWZmZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci0gICAgaWYgKGdvb2QpCi0gICAg
ICAgIHJldHVybiBmYW1pbHk7Ci0KLSAgICByZXR1cm4gVmFsaWRGb250RmFtaWx5RmluZGVyKCku
ZmFtaWx5KCk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGaXhlZFNpemVGb250RGF0YUtleSwgUmVm
UHRyPEZpeGVkU2l6ZUZvbnREYXRhPiwgRml4ZWRTaXplRm9udERhdGFLZXlIYXNoLCBGaXhlZFNp
emVGb250RGF0YUtleVRyYWl0cz4gRml4ZWRTaXplRm9udENhY2hlOwotRml4ZWRTaXplRm9udENh
Y2hlIGdfZml4ZWRTaXplRm9udENhY2hlOwotCi1QYXNzUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRh
PiBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCB1
bnNpZ25lZCB3ZWlnaHQsIGJvb2wgaXRhbGljKQotewotICAgIEZpeGVkU2l6ZUZvbnREYXRhKiBm
b250RGF0YSA9IG5ldyBGaXhlZFNpemVGb250RGF0YSgpOwotCi0gICAgZm9udERhdGEtPm1fd2Vp
Z2h0ID0gd2VpZ2h0OwotICAgIGZvbnREYXRhLT5tX2l0YWxpYyA9IGl0YWxpYzsKLQotICAgIExP
R0ZPTlQmIHdpbkZvbnQgPSBmb250RGF0YS0+bV9mb250OwotICAgIC8vIFRoZSBzaXplIGhlcmUg
bG9va3MgdW51c3VhbC4gIFRoZSBuZWdhdGl2ZSBudW1iZXIgaXMgaW50ZW50aW9uYWwuCi0gICAg
d2luRm9udC5sZkhlaWdodCA9IC03MjsKLSAgICB3aW5Gb250LmxmV2lkdGggPSAwOwotICAgIHdp
bkZvbnQubGZFc2NhcGVtZW50ID0gMDsKLSAgICB3aW5Gb250LmxmT3JpZW50YXRpb24gPSAwOwot
ICAgIHdpbkZvbnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKLSAgICB3aW5Gb250LmxmU3RyaWtlT3V0
ID0gZmFsc2U7Ci0gICAgd2luRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0gICAg
d2luRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9ERUZBVUxUX1BSRUNJUzsKLSAgICB3aW5Gb250
LmxmUXVhbGl0eSA9IENMRUFSVFlQRV9RVUFMSVRZOyAvL0RFRkFVTFRfUVVBTElUWTsKLSAgICB3
aW5Gb250LmxmQ2xpcFByZWNpc2lvbiA9IENMSVBfREVGQVVMVF9QUkVDSVM7Ci0gICAgd2luRm9u
dC5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFOwotICAgIHdp
bkZvbnQubGZJdGFsaWMgPSBpdGFsaWM7Ci0gICAgd2luRm9udC5sZldlaWdodCA9IEZvbnRQbGF0
Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodCh3ZWlnaHQsIGZhbWlseSk7Ci0KLSAgICBp
bnQgbGVuID0gc3RkOjptaW4oZmFtaWx5Lmxlbmd0aCgpLCAodW5zaWduZWQgaW50KUxGX0ZBQ0VT
SVpFIC0gMSk7Ci0gICAgd21lbWNweSh3aW5Gb250LmxmRmFjZU5hbWUsIGZhbWlseS5jaGFyYWN0
ZXJzKCksIGxlbik7Ci0gICAgd2luRm9udC5sZkZhY2VOYW1lW2xlbl0gPSBMJ1wwJzsKLQotICAg
IGZvbnREYXRhLT5tX2hmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3Qo
JndpbkZvbnQpKTsKLQotICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChnX3NjcmVl
bkRDLCBmb250RGF0YS0+bV9oZm9udC5nZXQoKSk7Ci0KLSAgICBHZXRUZXh0TWV0cmljcyhnX3Nj
cmVlbkRDLCAmZm9udERhdGEtPm1fbWV0cmljcyk7Ci0KLSAgICBpZiAoSU1MYW5nRm9udExpbmtU
eXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7
Ci0gICAgICAgIGxhbmdGb250TGluay0+R2V0Rm9udENvZGVQYWdlcyhnX3NjcmVlbkRDLCBmb250
RGF0YS0+bV9oZm9udC5nZXQoKSwgJmZvbnREYXRhLT5tX2NvZGVQYWdlcyk7Ci0gICAgICAgIGZv
bnREYXRhLT5tX2NvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1EYXRhOjpnZXRLbm93bkZvbnRDb2Rl
UGFnZXMod2luRm9udC5sZkZhY2VOYW1lKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoZ19z
Y3JlZW5EQywgb2xkRm9udCk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoZm9udERhdGEpOwotfQot
Ci1zdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9u
dERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIHVuc2lnbmVkIHdlaWdodCwgYm9vbCBp
dGFsaWMpCi17Ci0gICAgRml4ZWRTaXplRm9udERhdGFLZXkga2V5KGZhbWlseSwgd2VpZ2h0LCBp
dGFsaWMpOwotICAgIEZpeGVkU2l6ZUZvbnRDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGdfZml4
ZWRTaXplRm9udENhY2hlLmFkZChrZXksIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4oKSk7Ci0g
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKLQot
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1zdGF0aWMgTE9ORyB0b0dE
SUZvbnRXZWlnaHQoRm9udFdlaWdodCBmb250V2VpZ2h0KQotewotICAgIHN0YXRpYyBMT05HIGdk
aUZvbnRXZWlnaHRzW10gPSB7Ci0gICAgICAgIEZXX1RISU4sICAgICAgICAvLyBGb250V2VpZ2h0
MTAwCi0gICAgICAgIEZXX0VYVFJBTElHSFQsICAvLyBGb250V2VpZ2h0MjAwCi0gICAgICAgIEZX
X0xJR0hULCAgICAgICAvLyBGb250V2VpZ2h0MzAwCi0gICAgICAgIEZXX05PUk1BTCwgICAgICAv
LyBGb250V2VpZ2h0NDAwCi0gICAgICAgIEZXX01FRElVTSwgICAgICAvLyBGb250V2VpZ2h0NTAw
Ci0gICAgICAgIEZXX1NFTUlCT0xELCAgICAvLyBGb250V2VpZ2h0NjAwCi0gICAgICAgIEZXX0JP
TEQsICAgICAgICAvLyBGb250V2VpZ2h0NzAwCi0gICAgICAgIEZXX0VYVFJBQk9MRCwgICAvLyBG
b250V2VpZ2h0ODAwCi0gICAgICAgIEZXX0hFQVZZICAgICAgICAvLyBGb250V2VpZ2h0OTAwCi0g
ICAgfTsKLSAgICByZXR1cm4gZ2RpRm9udFdlaWdodHNbZm9udFdlaWdodF07Ci19Ci0KLWNsYXNz
IEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhIHsKLXB1YmxpYzoKLSAgICBpbnQgbV9yZWZlcmVuY2U7
Ci0gICAgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBtX3Jvb3RGb250RGF0YTsKLSAgICBBdG9t
aWNTdHJpbmcgbV9mYW1pbHk7Ci0gICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9u
OwotICAgIEdESU9iamVjdDxIRk9OVD4gbV9oZm9udFNjYWxlZDsKLSAgICBpbnQgbV9zaXplOwot
ICAgIGxvbmcgbV9mb250U2NhbGVkV2lkdGg7Ci0gICAgbG9uZyBtX2ZvbnRTY2FsZWRIZWlnaHQ7
Ci0gICAgYm9vbCBtX2Rpc2FibGVkOwotICAgIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKGludCBz
aXplLCB1bnNpZ25lZCB3ZWlnaHQpCi0gICAgICAgIDogbV9yZWZlcmVuY2UoMSkKLSAgICAgICAg
LCBtX2ZhbWlseShGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpKQotICAgICAg
ICAsIG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fZm9udFNjYWxlZFdpZHRoKDApCi0gICAgICAg
ICwgbV9mb250U2NhbGVkSGVpZ2h0KDApCi0gICAgICAgICwgbV9kaXNhYmxlZChmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIG1fcm9vdEZvbnREYXRhID0gY3JlYXRlRml4ZWRTaXplRm9udERhdGEobV9m
YW1pbHksIHdlaWdodCwgZmFsc2UpOwotICAgIH0KLSAgICBGb250UGxhdGZvcm1Qcml2YXRlRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHkpCi0gICAgICAgIDogbV9yZWZlcmVuY2UoMSkKLSAgICAgICAgLCBtX3NpemUo
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCi0gICAgICAgICwgbV9mb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQotICAgICAgICAsIG1fZmFtaWx5KGZhbWlseSkKLSAg
ICAgICAgLCBtX2ZvbnRTY2FsZWRXaWR0aCgwKQotICAgICAgICAsIG1fZm9udFNjYWxlZEhlaWdo
dCgwKQotICAgICAgICAsIG1fZGlzYWJsZWQoIWZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXpl
KCkpCi0gICAgewotICAgICAgICBtX3Jvb3RGb250RGF0YSA9IEZpeGVkU2l6ZUZvbnREYXRhOjpj
cmVhdGUoZmFtaWx5LCB0b0dESUZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKSwg
Zm9udERlc2NyaXB0aW9uLml0YWxpYygpKTsKLSAgICB9Ci19OwotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGRlc2lyZWRGYW1pbHksIGJvb2wgdXNlRGVmYXVsdEZvbnRJ
Zk5vdFByZXNlbnQpCi17Ci0gICAgU3RyaW5nIGZhbWlseShkZXNpcmVkRmFtaWx5KTsKLSAgICBp
ZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgZGVmYXVsdEZvbnRGYW1pbHkoKSkgJiYgIUZv
bnRGYW1pbHlDaGVja2VyKGZhbWlseS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRh
dGEoKSkuaXNTdXBwb3J0ZWQoKSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFt
aWx5LCBTdHJpbmcoaGVpVGlTdHIpKSAmJiBpc1NvbmdUaVN1cHBvcnRlZCgpKQotICAgICAgICAg
ICAgZmFtaWx5ID0gU3RyaW5nKHNvbmdUaVN0cik7Ci0gICAgICAgIGVsc2UgaWYgKHVzZURlZmF1
bHRGb250SWZOb3RQcmVzZW50KQotICAgICAgICAgICAgZmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1p
bHkoKTsKLSAgICB9Ci0KLSAgICBtX3ByaXZhdGUgPSBuZXcgRm9udFBsYXRmb3JtUHJpdmF0ZURh
dGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQotewotICAg
IGlmICghc2l6ZSkKLSAgICAgICAgbV9wcml2YXRlID0gMDsKLSAgICBlbHNlCi0gICAgICAgIG1f
cHJpdmF0ZSA9IG5ldyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSgoaW50KShzaXplICsgMC41KSwg
Ym9sZCA/IEZXX0JPTEQgOiBGV19OT1JNQUwpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9u
dFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKGlzVmFsaWQoKSAmJiAhLS1tX3ByaXZhdGUtPm1f
cmVmZXJlbmNlKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5yZWZD
b3VudCgpID09IDIpIHsKLSAgICAgICAgICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShtX3By
aXZhdGUtPm1fZmFtaWx5LCBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX3dlaWdodCwgbV9w
cml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9pdGFsaWMpOwotICAgICAgICAgICAgZ19maXhlZFNp
emVGb250Q2FjaGUucmVtb3ZlKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIG1fcHJp
dmF0ZTsKLSAgICB9Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9w
ZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKQotewotICAgIGlmIChpc1ZhbGlkKCkg
JiYgIS0tbV9wcml2YXRlLT5tX3JlZmVyZW5jZSkKLSAgICAgICAgZGVsZXRlIG1fcHJpdmF0ZTsK
LQotICAgIGlmIChtX3ByaXZhdGUgPSBvLm1fcHJpdmF0ZSkKLSAgICAgICAgKyttX3ByaXZhdGUt
Pm1fcmVmZXJlbmNlOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1IRk9OVCBGb250UGxhdGZv
cm1EYXRhOjpoZm9udCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQpCi0gICAg
ICAgIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQgPSBhZG9wdEdESU9iamVjdCg6
OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9mb250KSk7
Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udC5nZXQoKTsK
LX0KLQotSEZPTlQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0U2NhbGVkRm9udEhhbmRsZShpbnQgaGVp
Z2h0LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkgfHwgbV9wcml2YXRl
LT5tX2Rpc2FibGVkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghbV9wcml2YXRlLT5t
X2hmb250U2NhbGVkIHx8IG1fcHJpdmF0ZS0+bV9mb250U2NhbGVkSGVpZ2h0ICE9IGhlaWdodCB8
fCBtX3ByaXZhdGUtPm1fZm9udFNjYWxlZFdpZHRoICE9IHdpZHRoKSB7Ci0gICAgICAgIG1fcHJp
dmF0ZS0+bV9mb250U2NhbGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtX3ByaXZhdGUtPm1f
Zm9udFNjYWxlZFdpZHRoID0gd2lkdGg7Ci0gICAgICAgIExPR0ZPTlQgZm9udCA9IG1fcHJpdmF0
ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udDsKLSAgICAgICAgZm9udC5sZkhlaWdodCA9IC1oZWln
aHQ7Ci0gICAgICAgIGZvbnQubGZXaWR0aCA9IHdpZHRoOwotICAgICAgICBtX3ByaXZhdGUtPm1f
aGZvbnRTY2FsZWQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmZm9udCkp
OwotICAgIH0KLQotICAgIHJldHVybiBtX3ByaXZhdGUtPm1faGZvbnRTY2FsZWQuZ2V0KCk7Ci19
Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6ZGlzY2FyZEZvbnRIYW5kbGUoKQotewotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9wcml2YXRl
LT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udCkgewotICAgICAgICBtX3ByaXZhdGUtPm1fcm9vdEZv
bnREYXRhLT5tX2hmb250ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9oZm9udFNjYWxlZCkgewotICAgICAgICBtX3ByaXZhdGUt
Pm1faGZvbnRTY2FsZWQgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBURVhUTUVUUklDJiBGb250UGxhdGZvcm1EYXRh
OjptZXRyaWNzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0
YS0+bV9tZXRyaWNzOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzU3lzdGVtRm9udCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgRm9udFBsYXRmb3JtRGF0YTo6
c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9zaXplOwotfQotCi1jb25z
dCBGb250RGVzY3JpcHRpb24mIEZvbnRQbGF0Zm9ybURhdGE6OmZvbnREZXNjcmlwdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9mb250RGVzY3JpcHRpb247Ci19Ci0KLWNv
bnN0IEF0b21pY1N0cmluZyYgRm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX2ZhbWlseTsKLX0KLQotY29uc3QgTE9HRk9OVCYgRm9udFBs
YXRmb3JtRGF0YTo6bG9nRm9udCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9y
b290Rm9udERhdGEtPm1fZm9udDsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0Rpc2Fi
bGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWlzVmFsaWQoKSB8fCBtX3ByaXZhdGUtPm1fZGlz
YWJsZWQ7Ci19Ci0KLURXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmNvZGVQYWdlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fY29kZVBhZ2VzOwotfQot
Ci1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzU29uZ1RpU3VwcG9ydGVkKCkKLXsKLSAgICBzdGF0
aWMgYm9vbCBleGlzdHMgPSBGb250RmFtaWx5Q2hlY2tlcihzb25nVGlTdHIpLmlzU3VwcG9ydGVk
KCk7Ci0gICAgcmV0dXJuIGV4aXN0czsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjptYXBL
bm93bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBLbm93bkZv
bnRzJiBmb250cyA9IGtub3duRm9udHMoKTsKLSAgICBmb3IgKEtub3duRm9udHM6Oml0ZXJhdG9y
IGkgPSBmb250cy5iZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGktPmNvZGVQYWdlcygpICYgY29kZVBhZ2VzKSB7Ci0gICAgICAgICAgICBmYW1pbHkgPSBpLT5t
X2ZhbWlseTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotRFdPUkQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25vd25Gb250
Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSkKLXsKLSAgICBLbm93bkZvbnRzJiBmb250
cyA9IGtub3duRm9udHMoKTsKLSAgICBmb3IgKEtub3duRm9udHM6Oml0ZXJhdG9yIGkgPSBmb250
cy5iZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGktPm1fZmFtaWx5LCBTdHJpbmcoZmFtaWx5KSkpCi0gICAgICAgICAgICByZXR1
cm4gaS0+Y29kZVBhZ2VzKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1jb25zdCBTdHJp
bmcmIEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCkKLXsKLSAgICBzdGF0aWMg
U3RyaW5nIGZhbWlseShnZXREZWZhdWx0Rm9udEZhbWlseSgpKTsKLSAgICByZXR1cm4gZmFtaWx5
OwotfQotCi1MT05HIEZvbnRQbGF0Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodChMT05H
IGdkaUZvbnRXZWlnaHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQotewotICAgIHN0YXRpYyBBdG9t
aWNTdHJpbmcgbHVjaWRhU3RyKCJMdWNpZGEgR3JhbmRlIik7Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseSwgbHVjaWRhU3RyKSkgewotICAgICAgICBpZiAoZ2RpRm9udFdlaWdodCA9
PSBGV19OT1JNQUwpCi0gICAgICAgICAgICByZXR1cm4gRldfTUVESVVNOwotICAgICAgICBpZiAo
Z2RpRm9udFdlaWdodCA9PSBGV19CT0xEKQotICAgICAgICAgICAgcmV0dXJuIEZXX1NFTUlCT0xE
OwotICAgIH0KLSAgICByZXR1cm4gZ2RpRm9udFdlaWdodDsKLX0KLQotI2lmbmRlZiBOREVCVUcK
LVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjOTQ2OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVy
bmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFu
eW9uZSBvdGhlciB0aGFuCi0gKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3Bw
LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YV9oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdJbXBsLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHRhZ1RFWFRNRVRSSUNXIFRFWFRN
RVRSSUM7Ci10eXBlZGVmIHN0cnVjdCB0YWdMT0dGT05UVyBMT0dGT05UOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YTsKLQotICAgIGNs
YXNzIEZvbnRQbGF0Zm9ybURhdGEgewotCi0gICAgcHVibGljOgotCi0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEoKTogbV9wcml2YXRlKDApIHt9Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotCi0gICAgICAgIC8vIFVzZWQgZm9y
IGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuCi0gICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fcHJp
dmF0ZSgoRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEqKTEpIHt9Ci0gICAgICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAodW5zaWduZWQpbV9wcml2YXRlID09
IDE7IH0KLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCB1c2VEZWZh
dWx0Rm9udElmTm90UHJlc2VudCA9IHRydWUpOwotCi0gICAgICAgIH5Gb250UGxhdGZvcm1EYXRh
KCk7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBv
KSA6IG1fcHJpdmF0ZSgwKSB7IG9wZXJhdG9yPShvKTsgfQotICAgICAgICBGb250UGxhdGZvcm1E
YXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgbyk7Ci0KLSAgICAgICAgaW50
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX3By
aXZhdGUpICYgfjE7IH0KLSAgICAgICAgSEZPTlQgaGZvbnQoKSBjb25zdDsKLSAgICAgICAgY29u
c3QgVEVYVE1FVFJJQyYgbWV0cmljcygpIGNvbnN0OwotICAgICAgICBib29sIGlzU3lzdGVtRm9u
dCgpIGNvbnN0OwotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gKHVuc2lnbmVkKW1fcHJpdmF0ZTsgfQotICAgICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OwotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSgpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0IHsgICAgIHJldHVybiBtX3ByaXZh
dGUgPT0gb3RoZXIubV9wcml2YXRlOyB9Ci0gICAgICAgIEhGT05UIGdldFNjYWxlZEZvbnRIYW5k
bGUoaW50IGhlaWdodCwgaW50IHdpZHRoKSBjb25zdDsKLSAgICAgICAgY29uc3QgTE9HRk9OVCYg
bG9nRm9udCgpIGNvbnN0OwotICAgICAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBkaXNjYXJkRm9udEhhbmRsZSgpOwotICAgICAgICBEV09SRCBjb2RlUGFnZXMoKSBj
b25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBpc1NvbmdUaVN1cHBvcnRlZCgpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBtYXBLbm93bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcmIGZhbWls
eSk7Ci0gICAgICAgIHN0YXRpYyBEV09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2No
YXJfdCogZmFtaWx5KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdEZvbnRG
YW1pbHkoKTsKLSAgICAgICAgc3RhdGljIExPTkcgYWRqdXN0ZWRHRElGb250V2VpZ2h0KExPTkcg
Z2RpRm9udFdlaWdodCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpOwotCi0gICAgICAgIEZvbnRPcmll
bnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIEhvcml6b250YWw7IH0gLy8gRklY
TUU6IEltcGxlbWVudC4KLSAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRp
b24pIHsgfSAvLyBGSVhNRTogSW1wbGVtZW50LgotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBT
dHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEqIG1fcHJpdmF0ZTsKLSAgICB9OwotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMjg0OGMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNF
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgi
Ci0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIldpZHRo
SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjo6
VW5pY29kZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1IREMgZ19zY3JlZW5EQyA9IEdldERD
KDApOwotCi1jbGFzcyBTY3JlZW5EY1JlbGVhc2VyIHsKLXB1YmxpYzoKLSAgICB+U2NyZWVuRGNS
ZWxlYXNlcigpCi0gICAgewotICAgICAgICBSZWxlYXNlREMoMCwgZ19zY3JlZW5EQyk7Ci0gICAg
fQotfTsKLQotU2NyZWVuRGNSZWxlYXNlciByZWxlYXNlU2NyZWVuRGM7Ci0KLXZvaWQgRm9udDo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAot
ewotICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RleHQoZm9udERhdGEsIGdseXBoQnVmZmVyLCBm
cm9tLCBudW1HbHlwaHMsIHBvaW50KTsKLX0KLQotY2xhc3MgVGV4dFJ1bkNvbXBvbmVudCB7Ci1w
dWJsaWM6Ci0gICAgVGV4dFJ1bkNvbXBvbmVudCgpIDogbV90ZXh0UnVuKDAsIDApIHt9Ci0gICAg
VGV4dFJ1bkNvbXBvbmVudChjb25zdCBVQ2hhciAqc3RhcnQsIGludCBsZW5ndGgsIGNvbnN0IFRl
eHRSdW4mIHBhcmVudFRleHRSdW4sIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvZmZzZXQpOwotICAg
IFRleHRSdW5Db21wb25lbnQoaW50IHNwYWNlcywgY29uc3QgRm9udCAmZm9udCwgaW50IG9mZnNl
dCk7Ci0gICAgflRleHRSdW5Db21wb25lbnQoKSB7IG1fdGV4dFJ1bjsgfQotCi0gICAgYm9vbCBp
c1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZXM7IH0KLSAgICBpbnQgdGV4dExlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VzID8gbV9zcGFjZXMgOiBtX3RleHRSdW4ubGVuZ3RoKCk7
IH0KLQotICAgIFRleHRSdW4gbV90ZXh0UnVuOwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgaW50
IG1fb2Zmc2V0OwotICAgIGludCBtX3NwYWNlczsKLX07Ci0KLVRleHRSdW5Db21wb25lbnQ6OlRl
eHRSdW5Db21wb25lbnQoY29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQgbGVuZ3RoLCBjb25zdCBUZXh0
UnVuJiBwYXJlbnRUZXh0UnVuLCBjb25zdCBGb250ICZmb250LCBpbnQgbykKLSAgICA6IG1fdGV4
dFJ1bihzdGFydCwgbGVuZ3RoLCAwLCAwCi0gICAgICAgICwgcGFyZW50VGV4dFJ1bi5hbGxvd3NU
cmFpbGluZ0V4cGFuc2lvbigpID8gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiA6IFRl
eHRSdW46OkZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uCi0gICAgICAgICwgcGFyZW50VGV4dFJ1bi5k
aXJlY3Rpb24oKQotICAgICAgICAsIHBhcmVudFRleHRSdW4uZGlyZWN0aW9uYWxPdmVycmlkZSgp
KQotICAgICwgbV9vZmZzZXQobykKLSAgICAsIG1fc3BhY2VzKDApCi17Ci0gICAgbV90ZXh0UnVu
LnNldFRhYlNpemUocGFyZW50VGV4dFJ1bi5hbGxvd1RhYnMoKSwgcGFyZW50VGV4dFJ1bi50YWJT
aXplKCkpOwotCi0gICAgV2lkdGhJdGVyYXRvciBpdCgmZm9udCwgbV90ZXh0UnVuKTsKLSAgICBp
dC5hZHZhbmNlKG1fdGV4dFJ1bi5sZW5ndGgoKSwgMCk7Ci0gICAgbV93aWR0aCA9IGl0Lm1fcnVu
V2lkdGhTb0ZhcjsKLX0KLQotVGV4dFJ1bkNvbXBvbmVudDo6VGV4dFJ1bkNvbXBvbmVudChpbnQg
cywgY29uc3QgRm9udCAmZm9udCwgaW50IG8pCi0gICAgOiBtX3RleHRSdW4oMCwgMCkKLSAgICAs
IG1fb2Zmc2V0KG8pCi0gICAgLCBtX3NwYWNlcyhzKQotewotICAgIG1fd2lkdGggPSBzICogZm9u
dC5wcmltYXJ5Rm9udCgpLT53aWR0aEZvckdseXBoKCcgJyk7Ci19Ci0KLXR5cGVkZWYgVmVjdG9y
PFRleHRSdW5Db21wb25lbnQsIDEyOD4gVGV4dFJ1bkNvbXBvbmVudHM7Ci0KLXN0YXRpYyBpbnQg
Z2VuZXJhdGVDb21wb25lbnRzKFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBjb25zdCBG
b250ICZmb250LCBjb25zdCBUZXh0UnVuICZydW4pCi17Ci0gICAgaW50IGxldHRlclNwYWNpbmcg
PSBmb250LmxldHRlclNwYWNpbmcoKTsKLSAgICBpbnQgd29yZFNwYWNpbmcgPSBmb250LndvcmRT
cGFjaW5nKCk7Ci0gICAgaW50IHBhZGRpbmcgPSBydW4uZXhwYW5zaW9uKCk7Ci0gICAgaW50IG51
bVNwYWNlcyA9IDA7Ci0gICAgaWYgKHBhZGRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBydW4ubGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3Bh
Y2UocnVuW2ldKSkKLSAgICAgICAgICAgICAgICArK251bVNwYWNlczsKLSAgICB9Ci0KLSAgICBp
bnQgb2Zmc2V0ID0gMDsKLSAgICBpZiAobGV0dGVyU3BhY2luZykgewotICAgICAgICAvLyBuZWVk
IHRvIGRyYXcgZXZlcnkgbGV0dGVyIG9uIGl0J3Mgb3duCi0gICAgICAgIGludCBzdGFydCA9IDA7
Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuWzBdKSkgewotICAgICAgICAgICAg
aW50IGFkZCA9IDA7Ci0gICAgICAgICAgICBpZiAobnVtU3BhY2VzKSB7Ci0gICAgICAgICAgICAg
ICAgYWRkID0gcGFkZGluZy9udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgcGFkZGluZyAtPSBh
ZGQ7Ci0gICAgICAgICAgICAgICAgLS1udW1TcGFjZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudCgxLCBmb250LCBvZmZzZXQp
KTsKLSAgICAgICAgICAgIG9mZnNldCArPSBhZGQgKyBsZXR0ZXJTcGFjaW5nICsgY29tcG9uZW50
cy0+bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgICAgICBzdGFydCA9IDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBydW4ubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgVUNoYXIgY2ggPSBydW5baV07Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQoY2gpICYm
IFUxNl9JU19UUkFJTChydW5baS0xXSkpCi0gICAgICAgICAgICAgICAgY2ggPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2gsIHJ1bltpLTFdKTsKLSAgICAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwo
Y2gpIHx8IFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NTl9NQVNLKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5baV0pKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGFkZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGkgLSBz
dGFydCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRS
dW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGkgLSBzdGFydCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLCBm
b250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMt
Pmxhc3QoKS5tX3dpZHRoICsgbGV0dGVyU3BhY2luZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAgICAgICAgICBhZGQgPSBw
YWRkaW5nL251bVNwYWNlczsKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZyAtPSBhZGQ7Ci0g
ICAgICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudCgxLCBmb250LCBv
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gd29yZFNwYWNpbmcgKyBhZGQgKyBj
b21wb25lbnRzLT5sYXN0KCkubV93aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICAg
ICAgc3RhcnQgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29t
cG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsgc3Rh
cnQsIGkgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNv
bXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoICsgbGV0dGVyU3BhY2luZzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmxlbmd0
aCgpIC0gc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1
bkNvbXBvbmVudChydW4uY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgcnVuLmxlbmd0aCgpIC0gc3Rh
cnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LCBv
ZmZzZXQpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0
aDsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0gbGV0dGVyU3BhY2luZzsKLSAgICB9IGVs
c2UgewotICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJ1bi5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNl
KHJ1bltpXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSAtIHN0YXJ0ID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChydW4uY2hh
cmFjdGVyczE2KCkgKyBzdGFydCwgaSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsIG9mZnNldCkpOwotICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludCBhZGQgPSAwOwotICAgICAgICAg
ICAgICAgIGlmIChudW1TcGFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkID0gcGFkZGlu
Zy9udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwotICAgICAg
ICAgICAgICAgICAgICAtLW51bVNwYWNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGFkZCArIGNvbXBvbmVudHMtPmxhc3QoKS5t
X3dpZHRoOwotICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gd29yZFNwYWNpbmc7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmxlbmd0aCgpIC0gc3RhcnQgPiAw
KSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChydW4u
Y2hhcmFjdGVyczE2KCkgKyBzdGFydCwgcnVuLmxlbmd0aCgpIC0gc3RhcnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LCBvZmZzZXQpKTsKLSAgICAg
ICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGlmICh0byA8
IDApCi0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotICAgIGlmIChmcm9tIDwgMCkKLSAgICAg
ICAgZnJvbSA9IDA7Ci0KLSAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwotICAgIGlu
dCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKLQotICAg
IGZsb2F0IHdpZHRoT2ZEcmF3blRleHQgPSAwOwotICAgIGludCBjdXJQb3MgPSAwOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgKGludCljb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOwotICAgICAg
ICBpbnQgbGVuID0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIGludCBjdXJFbmQgPSBjdXJQ
b3MgKyBsZW47Ci0gICAgICAgIGlmIChjdXJQb3MgPCB0byAmJiBmcm9tIDwgY3VyRW5kICYmICFj
b21wLmlzU3BhY2UoKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwdCA9IHBvaW50OwotICAg
ICAgICAgICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50Lngo
KSArIHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dpZHRoKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50LngoKSArIGNvbXAubV9vZmZzZXQpOwotICAg
ICAgICAgICAgd2lkdGhPZkRyYXduVGV4dCArPSBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBjb21w
Lm1fdGV4dFJ1biwgcHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6bWluKHRvLCBjdXJFbmQpIC0gY3Vy
UG9zKTsKLSAgICAgICAgfQotICAgICAgICBjdXJQb3MgKz0gbGVuOwotICAgICAgICBpZiAoZnJv
bSA8IGN1clBvcykKLSAgICAgICAgICAgIGZyb20gPSBjdXJQb3M7Ci0gICAgfQotICAgIHJldHVy
biB3aWR0aE9mRHJhd25UZXh0OwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVu
JiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQ
b2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAot
ewotICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0
ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwotICAgIHJldHVybiB3OwotfQot
Ci1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUws
IGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0
Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgotICAgIGludCBwb3NpdGlv
biA9IHN0YXRpY19jYXN0PGludD4oeEZsb2F0KTsKLQotICAgIFRleHRSdW5Db21wb25lbnRzIGNv
bXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0
aGlzLCBydW4pOwotCi0gICAgaWYgKHBvc2l0aW9uID49IHcpCi0gICAgICAgIHJldHVybiBydW4u
bGVuZ3RoKCk7Ci0KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQo
aSk7Ci0gICAgICAgICAgICBpbnQgeGUgPSB3IC0gY29tcC5tX29mZnNldDsKLSAgICAgICAgICAg
IGludCB4cyA9IHhlIC0gY29tcC5tX3dpZHRoOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49
IHhzKQotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAoY29tcC5pc1NwYWNlKCkKLSAg
ICAgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxpbnQ+KChwb3NpdGlvbiAtIHhlKSAqIGNv
bXAubV9zcGFjZXMgLyBzdGQ6Om1heCgxLmYsIGNvbXAubV93aWR0aCkgKyAwLjUpCi0gICAgICAg
ICAgICAgICAgICAgIDogb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbXAubV90ZXh0
UnVuLCBwb3NpdGlvbiAtIHhzLCBpbmNsdWRlUGFydGlhbEdseXBocykpOwotCi0gICAgICAgICAg
ICBvZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0
KGkpOwotICAgICAgICAgICAgaW50IHhzID0gY29tcC5tX29mZnNldDsKLSAgICAgICAgICAgIGlu
dCB4ZSA9IHhzICsgY29tcC5tX3dpZHRoOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDw9IHhl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIC0geHMgPj0geGUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvZmZzZXQgKyBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gb2Zmc2V0ICsgKGNvbXAuaXNTcGFjZSgpCi0gICAgICAgICAgICAgICAgICAg
ID8gc3RhdGljX2Nhc3Q8aW50PigocG9zaXRpb24gLSB4cykgKiBjb21wLm1fc3BhY2VzIC8gc3Rk
OjptYXgoMS5mLCBjb21wLm1fd2lkdGgpICsgMC41KQotICAgICAgICAgICAgICAgICAgICA6IG9m
ZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb21wLm1fdGV4dFJ1biwgcG9zaXRpb24gLSB4
cywgaW5jbHVkZVBhcnRpYWxHbHlwaHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9m
ZnNldCArPSBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cnVuLmxlbmd0aCgpOwotfQotCi0KLXN0YXRpYyBmbG9hdCBjdXJzb3JUb1goY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1bkNvbXBvbmVudHMmIGNvbXBvbmVudHMsIGludCB3aWR0aCwgYm9v
bCBydGwsIGludCBjdXJzb3IpCi17Ci0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVGV4
dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7Ci0gICAgICAgIGlmIChzdGFy
dCArIGNvbXAudGV4dExlbmd0aCgpIDw9IGN1cnNvcikgewotICAgICAgICAgICAgc3RhcnQgKz0g
Y29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpbnQgeHMgPSBjb21wLm1fb2Zmc2V0OwotICAgICAgICBpZiAocnRsKQotICAgICAgICAg
ICAgeHMgPSB3aWR0aCAtIHhzIC0gY29tcC5tX3dpZHRoOwotCi0gICAgICAgIGludCBwb3MgPSBj
dXJzb3IgLSBzdGFydDsKLSAgICAgICAgaWYgKGNvbXAuaXNTcGFjZSgpKSB7Ci0gICAgICAgICAg
ICBpZiAocnRsKQotICAgICAgICAgICAgICAgIHBvcyA9IGNvbXAudGV4dExlbmd0aCgpIC0gcG9z
OwotICAgICAgICAgICAgcmV0dXJuIHhzICsgcG9zICogY29tcC5tX3dpZHRoIC8gY29tcC5tX3Nw
YWNlczsKLSAgICAgICAgfQotICAgICAgICBXaWR0aEl0ZXJhdG9yIGl0KGZvbnQsIGNvbXAubV90
ZXh0UnVuKTsKLSAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgICAgIGl0LmFk
dmFuY2UocG9zLCAmZ2x5cGhCdWZmZXIpOwotICAgICAgICByZXR1cm4geHMgKyBpdC5tX3J1bldp
ZHRoU29GYXI7Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHB0LAotICAgIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAg
IFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBv
bmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwotCi0gICAgaWYgKCFmcm9tICYmIHRvID09
IHJ1bi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCksIHB0LnkoKSwg
dywgaCk7Ci0KLSAgICBmbG9hdCB4MSA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25lbnRzLCB3LCBy
dW4ucnRsKCksIGZyb20pOwotICAgIGZsb2F0IHgyID0gY3Vyc29yVG9YKHRoaXMsIGNvbXBvbmVu
dHMsIHcsIHJ1bi5ydGwoKSwgdG8pOwotICAgIGlmICh4MiA8IHgxKQotICAgICAgICBzdGQ6OnN3
YXAoeDEsIHgyKTsKLQotICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgeDEsIHB0LnkoKSwg
eDIgLSB4MSwgaCk7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNv
bXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5DRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdpbkNF
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjNTVmNC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9k
ZVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgotCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1E
V09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKLQotdHlw
ZWRlZiB1bnNpZ25lZCAoKmZ1bmNHZXRDaGFyQ29kZVBhZ2VzKSh1bnNpZ25lZCBzaG9ydCBjLCB1
bnNpZ25lZCYgbGFzdFBvcyk7Ci1mdW5jR2V0Q2hhckNvZGVQYWdlcyBnZXRDaGFyQ29kZVBhZ2Vz
ID0gMDsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhKQotewotICAgIGlmIChsZW5ndGggIT0gYnVmZmVyTGVuZ3RoKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lmhmb250KCkpIHsKLSAgICAgICAgRFdPUkQgZm9udENvZGVQYWdlcyA9IGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5jb2RlUGFnZXMoKTsKLSAgICAgICAgaWYgKGZvbnRDb2RlUGFnZXMpIHsKLSAg
ICAgICAgICAgIGlmIChnZXRDaGFyQ29kZVBhZ2VzKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGFzdFBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ1ZmZlckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIERXT1JEIGFjdHVhbENv
ZGVQYWdlcyA9IGdldENoYXJDb2RlUGFnZXMoYnVmZmVyW2ldLCBsYXN0UG9zKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhY3R1YWxDb2RlUGFnZXMgfHwgKGFjdHVhbENvZGVQYWdlcyAmIGZv
bnRDb2RlUGFnZXMpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCBmb250RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNl
dCArIGksIDAsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9u
dExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIERXT1JEIGFjdHVhbENvZGVQYWdlczsKLSAgICAgICAgICAgICAgICAg
ICAgbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2VzKGJ1ZmZlcltpXSwgJmFjdHVhbENvZGVQ
YWdlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWN0dWFsQ29kZVBhZ2VzIHx8IChhY3R1
YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHNldEds
eXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5DRS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MzU4ODEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5DRS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHcmFkaWVudDo6cGxh
dGZvcm1EZXN0cm95KCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVTdG9wcyhj
b25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBi
KQotewotICAgIHJldHVybiBhLnN0b3AgPCBiLnN0b3A7Ci19Ci0KLWNvbnN0IFZlY3RvcjxHcmFk
aWVudDo6Q29sb3JTdG9wLCAyPiYgR3JhZGllbnQ6OmdldFN0b3BzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fc3RvcHNTb3J0ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RvcHMuc2l6ZSgpKQotICAgICAg
ICAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNv
bXBhcmVTdG9wcyk7Ci0gICAgICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gbV9zdG9wczsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQq
IGMsIGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBjLT5maWxsUmVjdChyLCB0aGlzKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjY5ZjAwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE4NTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkdESUV4dHJhcy5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgotI2luY2x1
ZGUgIlNoYXJlZEJpdG1hcC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVk
ZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYg
dm9pZCAoKkZ1bmNHcmFkaWVudEZpbGxSZWN0TGluZWFyKShIREMgaGRjLCBjb25zdCBJbnRSZWN0
JiByLCBjb25zdCBJbnRQb2ludCYgcDAsIGNvbnN0IEludFBvaW50JiBwMSwgY29uc3QgVmVjdG9y
PEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyk7Ci10eXBlZGVmIHZvaWQgKCpGdW5jR3JhZGll
bnRGaWxsUmVjdFJhZGlhbCkoSERDIGhkYywgY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50UG9p
bnQmIHAwLCBjb25zdCBJbnRQb2ludCYgcDEsIGZsb2F0IHIwLCBmbG9hdCByMSwgY29uc3QgVmVj
dG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyk7Ci1GdW5jR3JhZGllbnRGaWxsUmVjdExp
bmVhciBnX2xpbmVhckdyYWRpZW50RmlsbGVyID0gMDsKLUZ1bmNHcmFkaWVudEZpbGxSZWN0UmFk
aWFsIGdfcmFkaWFsR3JhZGllbnRGaWxsZXIgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNa
ZXJvKGRvdWJsZSBkKQotewotICAgIHJldHVybiBkID4gMCA/IGQgPD0gMS5FLTEwIDogZCA+PSAt
MS5FLTEwOwotfQotCi0vLyBzdGFibGVSb3VuZCByb3VuZHMgLTAuNSB0byAwLCB3aGVyZSBscm91
bmQgcm91bmRzIC0wLjUgdG8gLTEuCi1zdGF0aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3Vi
bGUgZCkKLXsKLSAgICBpZiAoZCA+IDApCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGQgKyAwLjUpOwotCi0gICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwotICAgIHJldHVy
biBpIC0gZCA+IDAuNSA/IGkgLSAxIDogaTsKLX0KLQotLy8gVW5saWtlIGVuY2xvc2luZ0ludFJl
Y3QoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIHN0cmljdCByb3VuZGluZy4KLXN0YXRpYyBpbmxpbmUg
SW50UmVjdCByb3VuZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIHJldHVybiBJbnRS
ZWN0KHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChy
Lm1heFgoKSkgLSBzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIubWF4WSgpKSAtIHN0
YWJsZVJvdW5kKHIueSgpKSk7Ci19Ci0KLS8vIFJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uCi1jbGFz
cyBSb3RhdGlvblRyYW5zZm9ybSB7Ci1wdWJsaWM6Ci0gICAgUm90YXRpb25UcmFuc2Zvcm0oKQot
ICAgICAgICA6IG1fY29zQSgxLikKLSAgICAgICAgLCBtX3NpbkEoMC4pCi0gICAgICAgICwgbV9w
cmVTaGlmdFgoMCkKLSAgICAgICAgLCBtX3ByZVNoaWZ0WSgwKQotICAgICAgICAsIG1fcG9zdFNo
aWZ0WCgwKQotICAgICAgICAsIG1fcG9zdFNoaWZ0WSgwKQotICAgIHsKLSAgICB9Ci0gICAgUm90
YXRpb25UcmFuc2Zvcm0gb3BlcmF0b3ItKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJvdGF0aW9u
VHJhbnNmb3JtIHJ0bjsKLSAgICAgICAgcnRuLm1fY29zQSA9IG1fY29zQTsKLSAgICAgICAgcnRu
Lm1fc2luQSA9IC1tX3NpbkE7Ci0gICAgICAgIHJ0bi5tX3ByZVNoaWZ0WCA9IG1fcG9zdFNoaWZ0
WDsKLSAgICAgICAgcnRuLm1fcHJlU2hpZnRZID0gbV9wb3N0U2hpZnRZOwotICAgICAgICBydG4u
bV9wb3N0U2hpZnRYID0gbV9wcmVTaGlmdFg7Ci0gICAgICAgIHJ0bi5tX3Bvc3RTaGlmdFkgPSBt
X3ByZVNoaWZ0WTsKLSAgICAgICAgcmV0dXJuIHJ0bjsKLSAgICB9Ci0gICAgdm9pZCBtYXAoZG91
YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0Ci0gICAgewot
ICAgICAgICB4MSArPSBtX3ByZVNoaWZ0WDsKLSAgICAgICAgeTEgKz0gbV9wcmVTaGlmdFk7Ci0g
ICAgICAgICp4MiA9IHgxICogbV9jb3NBICsgeTEgKiBtX3NpbkEgKyBtX3Bvc3RTaGlmdFg7Ci0g
ICAgICAgICp5MiA9IHkxICogbV9jb3NBIC0geDEgKiBtX3NpbkEgKyBtX3Bvc3RTaGlmdFk7Ci0g
ICAgfQotICAgIHZvaWQgbWFwKGludCB4MSwgaW50IHkxLCBpbnQqIHgyLCBpbnQqIHkyKSBjb25z
dAotICAgIHsKLSAgICAgICAgeDEgKz0gbV9wcmVTaGlmdFg7Ci0gICAgICAgIHkxICs9IG1fcHJl
U2hpZnRZOwotICAgICAgICAqeDIgPSBzdGFibGVSb3VuZCh4MSAqIG1fY29zQSArIHkxICogbV9z
aW5BKSArIG1fcG9zdFNoaWZ0WDsKLSAgICAgICAgKnkyID0gc3RhYmxlUm91bmQoeTEgKiBtX2Nv
c0EgLSB4MSAqIG1fc2luQSkgKyBtX3Bvc3RTaGlmdFk7Ci0gICAgfQotCi0gICAgZG91YmxlIG1f
Y29zQTsKLSAgICBkb3VibGUgbV9zaW5BOwotICAgIGludCBtX3ByZVNoaWZ0WDsKLSAgICBpbnQg
bV9wcmVTaGlmdFk7Ci0gICAgaW50IG1fcG9zdFNoaWZ0WDsKLSAgICBpbnQgbV9wb3N0U2hpZnRZ
OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBJbnRQb2ludCBtYXBQb2lu
dChjb25zdCBJbnRQb2ludCYgcCwgY29uc3QgVCYgdCkKLXsKLSAgICBpbnQgeCwgeTsKLSAgICB0
Lm1hcChwLngoKSwgcC55KCksICZ4LCAmeSk7Ci0gICAgcmV0dXJuIEludFBvaW50KHgsIHkpOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgbWFwUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgVCYgdCkKLXsKLSAgICBkb3VibGUgeCwgeTsKLSAg
ICB0Lm1hcChwLngoKSwgcC55KCksICZ4LCAmeSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBUcmFuc2Zvcm0sIGNsYXNzIFJlY3QsIGNsYXNzIFZhbHVlPiBzdGF0aWMgaW5saW5l
IFJlY3QgbWFwUmVjdChjb25zdCBSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBWYWx1ZSB4WzRdLCB5WzRdOwotICAgIFZhbHVlIGwsIHQsIHIsIGI7Ci0gICAg
ciA9IHJlY3QubWF4WCgpIC0gMTsKLSAgICBiID0gcmVjdC5tYXhZKCkgLSAxOwotICAgIHRyYW5z
Zm9ybS5tYXAocmVjdC54KCksIHJlY3QueSgpLCB4LCB5KTsKLSAgICB0cmFuc2Zvcm0ubWFwKHJl
Y3QueCgpLCBiLCB4ICsgMSwgeSArIDEpOwotICAgIHRyYW5zZm9ybS5tYXAociwgYiwgeCArIDIs
IHkgKyAyKTsKLSAgICB0cmFuc2Zvcm0ubWFwKHIsIHJlY3QueSgpLCB4ICsgMywgeSArIDMpOwot
ICAgIGwgPSByID0geFszXTsKLSAgICB0ID0gYiA9IHlbM107Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKHhbaV0gPCBsKQotICAgICAgICAgICAgbCA9IHhb
aV07Ci0gICAgICAgIGVsc2UgaWYgKHhbaV0gPiByKQotICAgICAgICAgICAgciA9IHhbaV07Ci0K
LSAgICAgICAgaWYgKHlbaV0gPCB0KQotICAgICAgICAgICAgdCA9IHlbaV07Ci0gICAgICAgIGVs
c2UgaWYgKHlbaV0gPiBiKQotICAgICAgICAgICAgYiA9IHlbaV07Ci0gICAgfQotCi0gICAgcmV0
dXJuIEludFJlY3QobCwgdCwgciAtIGwgKyAxLCBiIC0gdCArIDEpOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBUPiBzdGF0aWMgaW5saW5lIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBUJiB0cmFuc2Zvcm0pCi17Ci0gICAgcmV0dXJuIG1hcFJlY3Q8VCwgSW50UmVjdCwg
aW50PihyZWN0LCB0cmFuc2Zvcm0pOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5s
aW5lIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVCYgdHJh
bnNmb3JtKQotewotICAgIHJldHVybiBtYXBSZWN0PFQsIEZsb2F0UmVjdCwgZG91YmxlPihyZWN0
LCB0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVE
YXRhIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhKCkK
LSAgICAgICAgOiBtX3RyYW5zZm9ybSgpCi0gICAgICAgICwgbV9vcGFjaXR5KDEuMCkKLSAgICB7
Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotICAgIGZsb2F0IG1f
b3BhY2l0eTsKLX07Ci0KLWVudW0gQWxwaGFQYWludFR5cGUgewotICAgIEFscGhhUGFpbnROb25l
LAotICAgIEFscGhhUGFpbnRJbWFnZSwKLSAgICBBbHBoYVBhaW50T3RoZXIsCi19OwotCi1jbGFz
cyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKEhEQyBkYykKLSAgICAgICAgOiBtX2RjKGRjKQotICAgIHsKLSAgICB9Ci0gICAg
fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCi0gICAgewotICAgICAgICB3aGlsZSAo
IW1fYmFja3VwRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN0b3JlKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICB7Ci0gICAgICAgIG1f
dHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcm90
YXRlKGZsb2F0IHJhZGlhbnMpCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybS5yb3RhdGUocmFk
MmRlZyhyYWRpYW5zKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybSAqPSB0cmFu
c2Zvcm07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKLSAgICB9
Ci0KLSAgICBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwotICAgIH0KLQotICAg
IEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwotICAgIH0KLQotICAgIElu
dFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Ci0gICAgfQotCi0gICAgRmxv
YXRQb2ludCBtYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Ci0gICAgfQotCi0gICAg
RmxvYXRTaXplIG1hcFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAotICAgIHsKLSAg
ICAgICAgZG91YmxlIHcsIGg7Ci0gICAgICAgIG1fdHJhbnNmb3JtLm1hcChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIHcsIGgpOwotICAgICAgICByZXR1cm4gRmxvYXRTaXplKHN0YXRpY19j
YXN0PGZsb2F0Pih3KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNhdmUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGMpCi0gICAgICAgICAgICBTYXZlREMobV9k
Yyk7Ci0KLSAgICAgICAgbV9iYWNrdXBEYXRhLmFwcGVuZCgqc3RhdGljX2Nhc3Q8R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSo+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJl
c3RvcmUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmFja3VwRGF0YS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fZGMpCi0gICAgICAgICAgICBSZXN0b3Jl
REMobV9kYywgLTEpOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURh
dGE6Om9wZXJhdG9yPShtX2JhY2t1cERhdGEubGFzdCgpKTsKLSAgICAgICAgbV9iYWNrdXBEYXRh
LnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRtYXAgJiYgbV9iaXRtYXAtPmhhc0FscGhhKCk7IH0KLQotICAgIFBhc3NSZWZQdHI8
U2hhcmVkQml0bWFwPiBnZXRUcmFuc3BhcmVudExheWVyQml0bWFwKEludFJlY3QmIG9yaWdSZWN0
LCBBbHBoYVBhaW50VHlwZSBhbHBoYVBhaW50LCBSRUNUJiBibXBSZWN0LCBib29sIGNoZWNrQ2xp
cEJveCwgYm9vbCBmb3JjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX29wYWNpdHkgPD0g
MCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmIChmb3JjZSB8fCBtX29wYWNp
dHkgPCAxLikgIHsKLSAgICAgICAgICAgIGlmIChjaGVja0NsaXBCb3gpIHsKLSAgICAgICAgICAg
ICAgICBSRUNUIGNsaXBCb3g7Ci0gICAgICAgICAgICAgICAgaW50IGNsaXBUeXBlID0gR2V0Q2xp
cEJveChtX2RjLCAmY2xpcEJveCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsaXBUeXBlID09IFNJ
TVBMRVJFR0lPTiB8fCBjbGlwVHlwZSA9PSBDT01QTEVYUkVHSU9OKQotICAgICAgICAgICAgICAg
ICAgICBvcmlnUmVjdC5pbnRlcnNlY3QoY2xpcEJveCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9y
aWdSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IFNoYXJlZEJp
dG1hcDo6Y3JlYXRlKG9yaWdSZWN0LnNpemUoKSwgYWxwaGFQYWludCA9PSBBbHBoYVBhaW50Tm9u
ZSA/IEJpdG1hcEluZm86OkJpdENvdW50MTYgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDMyLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBTZXRSZWN0KCZibXBSZWN0LCAwLCAwLCBvcmlnUmVjdC53aWR0aCgp
LCBvcmlnUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoYm1wKSB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChhbHBoYVBhaW50KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBbHBoYVBh
aW50Tm9uZToKLSAgICAgICAgICAgICAgICBjYXNlIEFscGhhUGFpbnRJbWFnZToKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkQml0bWFwOjpEQ0hv
bGRlciBkYyhibXAuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRjLmdldCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0Qmx0KGRjLmdldCgpLCAwLCAwLCBv
cmlnUmVjdC53aWR0aCgpLCBvcmlnUmVjdC5oZWlnaHQoKSwgbV9kYywgb3JpZ1JlY3QueCgpLCBv
cmlnUmVjdC55KCksIFNSQ0NPUFkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
bXAtPmlzMzJiaXQoKSAmJiAoIW1fYml0bWFwIHx8IG1fYml0bWFwLT5pczE2Yml0KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBhbHBoYSBjaGFubmVsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbHMgPSAodW5zaWduZWQq
KWJtcC0+Ynl0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQqIGNvbnN0IHBpeGVsc0VuZCA9IHBpeGVscyArIGJtcC0+Yml0bWFwSW5mbygpLm51bVBp
eGVscygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGl4ZWxzIDwg
cGl4ZWxzRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGl4ZWxz
IHw9IDB4RkYwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3Bp
eGVsczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm1wOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vY2FzZSBBbHBoYVBhaW50T3Ro
ZXI6Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0
KGJtcC0+Ynl0ZXMoKSwgMHhGRiwgYm1wLT5iaXRtYXBJbmZvKCkubnVtUGl4ZWxzKCkgKiA0KTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJtcDsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgYm1wUmVjdCA9IG9yaWdSZWN0OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2
b2lkIHBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAoSERDIGhkYywgU2hhcmVkQml0bWFw
KiBibXAsIGNvbnN0IEludFJlY3QmIG9yaWdSZWN0LCBBbHBoYVBhaW50VHlwZSBhbHBoYVBhaW50
LCBjb25zdCBSRUNUJiBibXBSZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGhkYyA9PSBtX2RjKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhbHBoYVBhaW50ID09IEFscGhhUGFp
bnRPdGhlciAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
Ym1wICYmIGJtcC0+Ynl0ZXMoKSAmJiBibXAtPmlzMzJiaXQoKSk7Ci0gICAgICAgICAgICB1bnNp
Z25lZCogcGl4ZWxzID0gKHVuc2lnbmVkKilibXAtPmJ5dGVzKCk7Ci0gICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCogY29uc3QgcGl4ZWxzRW5kID0gcGl4ZWxzICsgYm1wLT5iaXRtYXBJbmZvKCku
bnVtUGl4ZWxzKCk7Ci0gICAgICAgICAgICB3aGlsZSAocGl4ZWxzIDwgcGl4ZWxzRW5kKSB7Ci0g
ICAgICAgICAgICAgICAgKnBpeGVscyBePSAweEZGMDAwMDAwOwotICAgICAgICAgICAgICAgICsr
cGl4ZWxzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgobV9vcGFjaXR5
IDwgMS4gfHwgYWxwaGFQYWludCA9PSBBbHBoYVBhaW50T3RoZXIpICYmIGhhc0FscGhhQmxlbmRT
dXBwb3J0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEJMRU5ERlVOQ1RJT04gYmxlbmQgPSB7IEFD
X1NSQ19PVkVSLCAwCi0gICAgICAgICAgICAgICAgLCBtX29wYWNpdHkgPj0gMS4gPyAyNTUgOiAo
QllURSkobV9vcGFjaXR5ICogMjU1KQotICAgICAgICAgICAgICAgICwgYWxwaGFQYWludCA9PSBB
bHBoYVBhaW50Tm9uZSA/IDAgOiBBQ19TUkNfQUxQSEEgfTsKLSAgICAgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IGFscGhhQmxlbmRJZlN1cHBvcnRlZChtX2RjLCBvcmlnUmVjdC54KCksIG9yaWdSZWN0
LnkoKSwgb3JpZ1JlY3Qud2lkdGgoKSwgb3JpZ1JlY3QuaGVpZ2h0KCksIGhkYywgMCwgMCwgYm1w
UmVjdC5yaWdodCwgYm1wUmVjdC5ib3R0b20sIGJsZW5kKTsKLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgU3Ry
ZXRjaEJsdChtX2RjLCBvcmlnUmVjdC54KCksIG9yaWdSZWN0LnkoKSwgb3JpZ1JlY3Qud2lkdGgo
KSwgb3JpZ1JlY3QuaGVpZ2h0KCksIGhkYywgMCwgMCwgYm1wUmVjdC5yaWdodCwgYm1wUmVjdC5i
b3R0b20sIFNSQ0NPUFkpOwotICAgIH0KLQotICAgIEhEQyBtX2RjOwotICAgIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IG1fYml0bWFwOwotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVEYXRhPiBtX2JhY2t1cERhdGE7Ci19OwotCi1zdGF0aWMgR0RJT2JqZWN0PEhQRU4+IGNy
ZWF0ZVBlbihjb25zdCBDb2xvciYgY29sLCBkb3VibGUgZldpZHRoLCBTdHJva2VTdHlsZSBzdHls
ZSkKLXsKLSAgICBpbnQgd2lkdGggPSBzdGFibGVSb3VuZChmV2lkdGgpOwotICAgIGlmICh3aWR0
aCA8IDEpCi0gICAgICAgIHdpZHRoID0gMTsKLQotICAgIGludCBwZW5TdHlsZSA9IFBTX05VTEw7
Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgICAgICBjYXNlIFNvbGlkU3Ryb2tlOgotICAgICAg
ICBjYXNlIERvdWJsZVN0cm9rZToKLSAgICAgICAgY2FzZSBXYXZ5U3Ryb2tlOiAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MTE0IC0gTmVlZHMgcGxh
dGZvcm0gc3VwcG9ydC4KLSAgICAgICAgICAgIHBlblN0eWxlID0gUFNfU09MSUQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEb3R0ZWRTdHJva2U6ICAvLyBub3Qgc3VwcG9ydGVk
IG9uIFdpbmRvd3MgQ0UKLSAgICAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAgICAgICBw
ZW5TdHlsZSA9IFBTX0RBU0g7Ci0gICAgICAgICAgICB3aWR0aCA9IDE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IHJldHVybiBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBlbihwZW5TdHlsZSwgd2lkdGgsIFJHQihj
b2wucmVkKCksIGNvbC5ncmVlbigpLCBjb2wuYmx1ZSgpKSkpOwotfQotCi1zdGF0aWMgaW5saW5l
IEdESU9iamVjdDxIQlJVU0g+IGNyZWF0ZUJydXNoKGNvbnN0IENvbG9yJiBjb2wpCi17Ci0gICAg
cmV0dXJuIGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChSR0IoY29sLnJlZCgpLCBj
b2wuZ3JlZW4oKSwgY29sLmJsdWUoKSkpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFBpeGVs
VHlwZSwgYm9vbCBJczE2Yml0PiBzdGF0aWMgdm9pZCBfcm90YXRlQml0bWFwKFNoYXJlZEJpdG1h
cCogZGVzdEJtcCwgY29uc3QgU2hhcmVkQml0bWFwKiBzb3VyY2VCbXAsIGNvbnN0IFJvdGF0aW9u
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaW50IGRlc3RXID0gZGVzdEJtcC0+d2lkdGgo
KTsKLSAgICBpbnQgZGVzdEggPSBkZXN0Qm1wLT5oZWlnaHQoKTsKLSAgICBpbnQgc291cmNlVyA9
IHNvdXJjZUJtcC0+d2lkdGgoKTsKLSAgICBpbnQgc291cmNlSCA9IHNvdXJjZUJtcC0+aGVpZ2h0
KCk7Ci0gICAgUGl4ZWxUeXBlKiBkZXN0ID0gKFBpeGVsVHlwZSopZGVzdEJtcC0+Ynl0ZXMoKTsK
LSAgICBjb25zdCBQaXhlbFR5cGUqIHNvdXJjZSA9IChjb25zdCBQaXhlbFR5cGUqKXNvdXJjZUJt
cC0+Ynl0ZXMoKTsKLSAgICBpbnQgcGFkZGluZzsKLSAgICBpbnQgcGFkZGVkU291cmNlVzsKLSAg
ICBpZiAoSXMxNmJpdCkgewotICAgICAgICBwYWRkaW5nID0gZGVzdFcgJiAxOwotICAgICAgICBw
YWRkZWRTb3VyY2VXID0gc291cmNlVyArIChzb3VyY2VXICYgMSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcGFkZGluZyA9IDA7Ci0gICAgICAgIHBhZGRlZFNvdXJjZVcgPSBzb3VyY2VXOwotICAg
IH0KLSAgICBpZiAoaXNaZXJvKHRyYW5zZm9ybS5tX3NpbkEpKSB7Ci0gICAgICAgIGludCBjb3NB
ID0gdHJhbnNmb3JtLm1fY29zQSA+IDAgPyAxIDogLTE7Ci0gICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgZGVzdEg7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkZXN0
VzsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgxID0geCArIHRyYW5zZm9ybS5tX3ByZVNo
aWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgeTEgPSB5ICsgdHJhbnNmb3JtLm1fcHJlU2hpZnRZ
OwotICAgICAgICAgICAgICAgIGludCBzcmNYID0geDEgKiBjb3NBICsgdHJhbnNmb3JtLm1fcG9z
dFNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWSA9IHkxICogY29zQSAtIHRyYW5zZm9y
bS5tX3Bvc3RTaGlmdFk7Ci0gICAgICAgICAgICAgICAgaWYgKHNyY1ggPj0gMCAmJiBzcmNYIDw9
IHNvdXJjZVcgJiYgc3JjWSA+PSAwICYmIHNyY1kgPD0gc291cmNlSCkKLSAgICAgICAgICAgICAg
ICAgICAgKmRlc3QrKyA9IHNvdXJjZVtzcmNZICogcGFkZGVkU291cmNlVyArIHNyY1hdIHwgMHhG
RjAwMDAwMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICpkZXN0
KysgfD0gMHhGRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgKz0gcGFkZGluZzsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXNaZXJvKHRyYW5zZm9ybS5tX2Nvc0EpKSB7Ci0g
ICAgICAgIGludCBzaW5BID0gdHJhbnNmb3JtLm1fc2luQSA+IDAgPyAxIDogLTE7Ci0gICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgZGVzdEg7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBkZXN0VzsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgxID0geCArIHRy
YW5zZm9ybS5tX3ByZVNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgeTEgPSB5ICsgdHJhbnNm
b3JtLm1fcHJlU2hpZnRZOwotICAgICAgICAgICAgICAgIGludCBzcmNYID0geTEgKiBzaW5BICsg
dHJhbnNmb3JtLm1fcG9zdFNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWSA9IC14MSAq
IHNpbkEgKyB0cmFuc2Zvcm0ubV9wb3N0U2hpZnRZOwotICAgICAgICAgICAgICAgIGlmIChzcmNY
ID49IDAgJiYgc3JjWCA8PSBzb3VyY2VXICYmIHNyY1kgPj0gMCAmJiBzcmNZIDw9IHNvdXJjZUgp
Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBzb3VyY2Vbc3JjWSAqIHBhZGRlZFNvdXJj
ZVcgKyBzcmNYXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgKz0gcGFkZGluZzsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZGVz
dEg7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkZXN0VzsgKyt4KSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IGZvciBiZXN0IHF1YWxpdHksIHdlIHNob3VsZCBn
ZXQgd2VpZ2h0ZWQgc3VtIG9mIGZvdXIgbmVpZ2hib3VycywKLSAgICAgICAgICAgICAgICAvLyBi
dXQgdGhhdCB3aWxsIGJlIHRvbyBleHBlbnNpdmUKLSAgICAgICAgICAgICAgICBpbnQgc3JjWCwg
c3JjWTsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubWFwKHgsIHksICZzcmNYLCAmc3JjWSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHNyY1ggPj0gMCAmJiBzcmNYIDw9IHNvdXJjZVcgJiYgc3Jj
WSA+PSAwICYmIHNyY1kgPD0gc291cmNlSCkKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9
IHNvdXJjZVtzcmNZICogcGFkZGVkU291cmNlVyArIHNyY1hdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVzdCArPSBwYWRkaW5nOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCByb3RhdGVCaXRtYXAoU2hhcmVkQml0bWFwKiBkZXN0Qm1wLCBjb25zdCBTaGFyZWRCaXRt
YXAqIHNvdXJjZUJtcCwgY29uc3QgUm90YXRpb25UcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAg
ICBBU1NFUlQoZGVzdEJtcC0+aXMxNmJpdCgpID09IHNvdXJjZUJtcC0+aXMxNmJpdCgpKTsKLSAg
ICBpZiAoZGVzdEJtcC0+aXMxNmJpdCgpKQotICAgICAgICBfcm90YXRlQml0bWFwPHVuc2lnbmVk
IHNob3J0LCB0cnVlPihkZXN0Qm1wLCBzb3VyY2VCbXAsIHRyYW5zZm9ybSk7Ci0gICAgZWxzZQot
ICAgICAgICBfcm90YXRlQml0bWFwPHVuc2lnbmVkLCBmYWxzZT4oZGVzdEJtcCwgc291cmNlQm1w
LCB0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBUcmFuc3BhcmVudExheWVyREMgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRyYW5zcGFyZW50TGF5ZXJEQyk7Ci1wdWJsaWM6Ci0gICAgVHJhbnNw
YXJlbnRMYXllckRDKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGF0YSwgSW50UmVj
dCYgb3JpZ1JlY3QsIGNvbnN0IEludFJlY3QqIHJlY3RCZWZvcmVUcmFuc2Zvcm0gPSAwLCBpbnQg
YWxwaGEgPSAyNTUsIGJvb2wgcGFpbnRJbWFnZSA9IGZhbHNlKTsKLSAgICB+VHJhbnNwYXJlbnRM
YXllckRDKCk7Ci0KLSAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9tZW1EYzsgfQotICAg
IGNvbnN0IFJFQ1QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX2JtcFJlY3Q7IH0KLSAgICBJbnRT
aXplIHRvU2hpZnQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fYm1wUmVjdC5sZWZ0IC0gbV9v
cmlnUmVjdC54KCksIG1fYm1wUmVjdC50b3AgLSBtX29yaWdSZWN0LnkoKSk7IH0KLSAgICB2b2lk
IGZpbGxBbHBoYUNoYW5uZWwoKTsKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIG1fZGF0YTsKLSAgICBJbnRSZWN0IG1fb3JpZ1JlY3Q7Ci0gICAgSW50UmVj
dCBtX3JvdGF0ZWRPcmlnUmVjdDsKLSAgICBIREMgbV9tZW1EYzsKLSAgICBSZWZQdHI8U2hhcmVk
Qml0bWFwPiBtX2JpdG1hcDsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBtX3JvdGF0ZWRCaXRt
YXA7Ci0gICAgUkVDVCBtX2JtcFJlY3Q7Ci0gICAgdW5zaWduZWQgbV9rZXk7Ci0gICAgUm90YXRp
b25UcmFuc2Zvcm0gbV9yb3RhdGlvbjsKLSAgICBmbG9hdCBtX29sZE9wYWNpdHk7Ci0gICAgQWxw
aGFQYWludFR5cGUgbV9hbHBoYVBhaW50VHlwZTsKLX07Ci0KLVRyYW5zcGFyZW50TGF5ZXJEQzo6
VHJhbnNwYXJlbnRMYXllckRDKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGF0YSwg
SW50UmVjdCYgb3JpZ1JlY3QsIGNvbnN0IEludFJlY3QqIHJlY3RCZWZvcmVUcmFuc2Zvcm0sIGlu
dCBhbHBoYSwgYm9vbCBwYWludEltYWdlKQotOiBtX2RhdGEoZGF0YSkKLSwgbV9vcmlnUmVjdChv
cmlnUmVjdCkKLSwgbV9vbGRPcGFjaXR5KGRhdGEtPm1fb3BhY2l0eSkKLS8vIG1fa2V5MSBhbmQg
bV9rZXkyIGFyZSBub3QgaW5pdGFsaXplZCBoZXJlLiBUaGV5IGFyZSB1c2VkIG9ubHkgaW4gdGhl
IGNhc2UgdGhhdAotLy8gU2hhcmVkQml0bWFwOjpnZXREQygpIGlzIGNhbGxlZCwgSS5FLiwgd2hl
biBtX2JpdG1hcCBpcyBub3QgbnVsbC4KLXsKLSAgICBtX2RhdGEtPm1fb3BhY2l0eSAqPSBhbHBo
YSAvIDI1NS47Ci0gICAgYm9vbCBtdXN0Q3JlYXRlTGF5ZXI7Ci0gICAgaWYgKCFtX2RhdGEtPmhh
c0FscGhhKCkpIHsKLSAgICAgICAgbXVzdENyZWF0ZUxheWVyID0gZmFsc2U7Ci0gICAgICAgIG1f
YWxwaGFQYWludFR5cGUgPSBBbHBoYVBhaW50Tm9uZTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
dXN0Q3JlYXRlTGF5ZXIgPSB0cnVlOwotICAgICAgICBtX2FscGhhUGFpbnRUeXBlID0gcGFpbnRJ
bWFnZSA/IEFscGhhUGFpbnRJbWFnZSA6IEFscGhhUGFpbnRPdGhlcjsKLSAgICB9Ci0gICAgaWYg
KHJlY3RCZWZvcmVUcmFuc2Zvcm0gJiYgIWlzWmVybyhtX2RhdGEtPm1fdHJhbnNmb3JtLmIoKSkp
IHsKLSAgICAgICAgbV9yb3RhdGVkT3JpZ1JlY3QgPSBvcmlnUmVjdDsKLSAgICAgICAgbV9yb3Rh
dGVkQml0bWFwID0gbV9kYXRhLT5nZXRUcmFuc3BhcmVudExheWVyQml0bWFwKG1fcm90YXRlZE9y
aWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2JtcFJlY3QsIGZhbHNlLCB0cnVlKTsKLSAgICAg
ICAgaWYgKG1fcm90YXRlZEJpdG1hcCkgewotICAgICAgICAgICAgZG91YmxlIGEgPSBtX2RhdGEt
Pm1fdHJhbnNmb3JtLmEoKTsKLSAgICAgICAgICAgIGRvdWJsZSBiID0gbV9kYXRhLT5tX3RyYW5z
Zm9ybS5iKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IF9oeXBvdChhLCBiKTsKLSAgICAgICAg
ICAgIG1fcm90YXRpb24ubV9jb3NBID0gYSAvIGM7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1f
c2luQSA9IGIgLyBjOwotCi0gICAgICAgICAgICBpbnQgY2VudGVyWCA9IG9yaWdSZWN0LngoKSAr
IG9yaWdSZWN0LndpZHRoKCkgLyAyOwotICAgICAgICAgICAgaW50IGNlbnRlclkgPSBvcmlnUmVj
dC55KCkgKyBvcmlnUmVjdC5oZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1f
cHJlU2hpZnRYID0gLWNlbnRlclg7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcHJlU2hpZnRZ
ID0gLWNlbnRlclk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WCA9IGNlbnRl
clg7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSA9IGNlbnRlclk7Ci0KLSAg
ICAgICAgICAgIG1fb3JpZ1JlY3QgPSBtYXBSZWN0KG1fcm90YXRlZE9yaWdSZWN0LCBtX3JvdGF0
aW9uKTsKLQotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WCArPSBtX3JvdGF0ZWRP
cmlnUmVjdC54KCk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcHJlU2hpZnRZICs9IG1fcm90
YXRlZE9yaWdSZWN0LnkoKTsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRYIC09
IG1fb3JpZ1JlY3QueCgpOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFkgLT0g
bV9vcmlnUmVjdC55KCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCA9IG1fZGF0
YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludChyZWN0QmVmb3JlVHJhbnNmb3JtLT5s
b2NhdGlvbigpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHJlY3RCZWZvcmVU
cmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7Ci0gICAgICAg
ICAgICB0b3BSaWdodCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQodG9wUmlnaHQpOwot
ICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngo
KSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+bWF4WSgpIC0gMSk7Ci0gICAgICAgICAgICBib3R0b21M
ZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludChib3R0b21MZWZ0KTsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSBzaWRlVG9wID0gdG9wUmlnaHQgLSB0b3BMZWZ0OwotICAgICAgICAgICAg
RmxvYXRTaXplIHNpZGVMZWZ0ID0gYm90dG9tTGVmdCAtIHRvcExlZnQ7Ci0gICAgICAgICAgICBm
bG9hdCB3aWR0aCA9IF9oeXBvdChzaWRlVG9wLndpZHRoKCkgKyAxLCBzaWRlVG9wLmhlaWdodCgp
ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBoZWlnaHQgPSBfaHlwb3Qoc2lkZUxlZnQud2lkdGgo
KSArIDEsIHNpZGVMZWZ0LmhlaWdodCgpICsgMSk7Ci0KLSAgICAgICAgICAgIG9yaWdSZWN0Lmlu
ZmxhdGVYKHN0YWJsZVJvdW5kKCh3aWR0aCAtIG9yaWdSZWN0LndpZHRoKCkpICogMC41KSk7Ci0g
ICAgICAgICAgICBvcmlnUmVjdC5pbmZsYXRlWShzdGFibGVSb3VuZCgoaGVpZ2h0IC0gb3JpZ1Jl
Y3QuaGVpZ2h0KCkpICogMC41KSk7Ci0KLSAgICAgICAgICAgIG1fYml0bWFwID0gU2hhcmVkQml0
bWFwOjpjcmVhdGUobV9vcmlnUmVjdC5zaXplKCksIG1fcm90YXRlZEJpdG1hcC0+aXMxNmJpdCgp
ID8gQml0bWFwSW5mbzo6Qml0Q291bnQxNiA6IEJpdG1hcEluZm86OkJpdENvdW50MzIsIHRydWUp
OwotICAgICAgICAgICAgaWYgKG1fYml0bWFwKQotICAgICAgICAgICAgICAgIHJvdGF0ZUJpdG1h
cChtX2JpdG1hcC5nZXQoKSwgbV9yb3RhdGVkQml0bWFwLmdldCgpLCAtbV9yb3RhdGlvbik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yb3RhdGVkQml0bWFwID0gMDsKLSAg
ICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBtX2JpdG1hcCA9IG1fZGF0YS0+Z2V0VHJhbnNw
YXJlbnRMYXllckJpdG1hcChtX29yaWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2JtcFJlY3Qs
IHRydWUsIG11c3RDcmVhdGVMYXllcik7Ci0gICAgaWYgKG1fYml0bWFwKQotICAgICAgICBtX21l
bURjID0gbV9iaXRtYXAtPmdldERDKCZtX2tleSk7Ci0gICAgZWxzZQotICAgICAgICBtX21lbURj
ID0gbV9kYXRhLT5tX2RjOwotfQotCi1UcmFuc3BhcmVudExheWVyREM6On5UcmFuc3BhcmVudExh
eWVyREMoKQotewotICAgIGlmIChtX3JvdGF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9iaXRtYXAt
PnJlbGVhc2VEQyhtX21lbURjLCBtX2tleSk7Ci0gICAgICAgIG1fa2V5ID0gMDsKLSAgICAgICAg
cm90YXRlQml0bWFwKG1fcm90YXRlZEJpdG1hcC5nZXQoKSwgbV9iaXRtYXAuZ2V0KCksIG1fcm90
YXRpb24pOwotICAgICAgICBtX21lbURjID0gbV9yb3RhdGVkQml0bWFwLT5nZXREQygmbV9rZXkp
OwotICAgICAgICBtX2RhdGEtPnBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAobV9tZW1E
YywgbV9yb3RhdGVkQml0bWFwLmdldCgpLCBtX3JvdGF0ZWRPcmlnUmVjdCwgbV9hbHBoYVBhaW50
VHlwZSwgbV9ibXBSZWN0KTsKLSAgICAgICAgbV9yb3RhdGVkQml0bWFwLT5yZWxlYXNlREMobV9t
ZW1EYywgbV9rZXkpOwotICAgIH0gZWxzZSBpZiAobV9iaXRtYXApIHsKLSAgICAgICAgbV9kYXRh
LT5wYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0bWFwKG1fbWVtRGMsIG1fYml0bWFwLmdldCgp
LCBtX29yaWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2JtcFJlY3QpOwotICAgICAgICBtX2Jp
dG1hcC0+cmVsZWFzZURDKG1fbWVtRGMsIG1fa2V5KTsKLSAgICB9Ci0gICAgbV9kYXRhLT5tX29w
YWNpdHkgPSBtX29sZE9wYWNpdHk7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbnRMYXllckRDOjpmaWxs
QWxwaGFDaGFubmVsKCkKLXsKLSAgICBpZiAoIW1fYml0bWFwIHx8ICFtX2JpdG1hcC0+aXMzMmJp
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCogcGl4ZWxzID0gKHVuc2lnbmVk
KiltX2JpdG1hcC0+Ynl0ZXMoKTsKLSAgICBjb25zdCB1bnNpZ25lZCogY29uc3QgcGl4ZWxzRW5k
ID0gcGl4ZWxzICsgbV9iaXRtYXAtPmJpdG1hcEluZm8oKS5udW1QaXhlbHMoKTsKLSAgICB3aGls
ZSAocGl4ZWxzIDwgcGl4ZWxzRW5kKSB7Ci0gICAgICAgICpwaXhlbHMgfD0gMHhGRjAwMDAwMDsK
LSAgICAgICAgKytwaXhlbHM7Ci0gICAgfQotfQotCi1jbGFzcyBTY29wZURDUHJvdmlkZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlRENQcm92aWRlcik7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgU2NvcGVEQ1Byb3ZpZGVyKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSog
ZGF0YSkKLSAgICAgICAgOiBtX2RhdGEoZGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEt
Pm1fYml0bWFwKQotICAgICAgICAgICAgbV9kYXRhLT5tX2RjID0gbV9kYXRhLT5tX2JpdG1hcC0+
Z2V0REMoJm1fa2V5KTsKLSAgICB9Ci0gICAgflNjb3BlRENQcm92aWRlcigpCi0gICAgewotICAg
ICAgICBpZiAobV9kYXRhLT5tX2JpdG1hcCkgewotICAgICAgICAgICAgbV9kYXRhLT5tX2JpdG1h
cC0+cmVsZWFzZURDKG1fZGF0YS0+bV9kYywgbV9rZXkpOwotICAgICAgICAgICAgbV9kYXRhLT5t
X2RjID0gMDsKLSAgICAgICAgfQotICAgIH0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9rZXk7Ci19OwotCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IGRjLCBib29sKQotewotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoZGMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkK
LXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Qml0
bWFwKFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBibXApCi17Ci0gICAgQVNTRVJUKCFtX2RhdGEt
Pm1fZGMpOwotICAgIG1fZGF0YS0+bV9iaXRtYXAgPSBibXA7Ci19Ci0KLUhEQyBHcmFwaGljc0Nv
bnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgQWxwaGFCbGVuZC4KLSAgICBBU1NFUlQoIXN1cHBvcnRBbHBoYUJsZW5k
KTsKLSAgICByZXR1cm4gbV9kYXRhLT5tX2RjOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJv
b2wgc3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQotewotICAgIG1fZGF0YS0+c2F2
ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQot
ewotICAgIG1fZGF0YS0+cmVzdG9yZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+
bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCByZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAg
ICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJl
Y3QgPSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5z
cGFyZW50REMobV9kYXRhLCB0clJlY3QsICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVu
dERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92
ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJSVVNIPiBicnVz
aDsKLSAgICBIR0RJT0JKIG9sZEJydXNoOwotICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7
Ci0gICAgICAgIGJydXNoID0gY3JlYXRlQnJ1c2goZmlsbENvbG9yKCkpOwotICAgICAgICBvbGRC
cnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkp
OwotCi0gICAgR0RJT2JqZWN0PEhQRU4+IHBlbjsKLSAgICBIR0RJT0JKIG9sZFBlbjsKLSAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewotICAgICAgICBwZW4gPSBjcmVhdGVQZW4o
c3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotICAgICAg
ICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsK
LQotICAgIGlmIChicnVzaCB8fCBwZW4pIHsKLSAgICAgICAgaWYgKHRyUmVjdC53aWR0aCgpIDw9
IDApCi0gICAgICAgICAgICB0clJlY3Quc2V0V2lkdGgoMSk7Ci0gICAgICAgIGlmICh0clJlY3Qu
aGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgICAgIHRyUmVjdC5zZXRIZWlnaHQoMSk7Ci0KLSAgICAg
ICAgUmVjdGFuZ2xlKGRjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0
clJlY3QubWF4WSgpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0g
ICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0
YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBv
aW50IHRyUG9pbnQxID0gbV9kYXRhLT5tYXBQb2ludChwb2ludDEpOwotICAgIEludFBvaW50IHRy
UG9pbnQyID0gbV9kYXRhLT5tYXBQb2ludChwb2ludDIpOwotCi0gICAgSW50UmVjdCBsaW5lUmVj
dCh0clBvaW50MSwgdHJQb2ludDIgLSB0clBvaW50MSk7Ci0gICAgbGluZVJlY3Quc2V0SGVpZ2h0
KGxpbmVSZWN0LmhlaWdodCgpICsgc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIFRyYW5zcGFyZW50
TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgbGluZVJlY3QsIDAsIHN0cm9rZUNvbG9yKCku
YWxwaGEoKSk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRj
KQotICAgICAgICByZXR1cm47Ci0gICAgdHJQb2ludDEgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0
KCk7Ci0gICAgdHJQb2ludDIgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0KCk7Ci0KLSAgICBhdXRv
IHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc3Ryb2tl
U3R5bGUoKSk7Ci0gICAgSEdESU9CSiBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQo
KSk7Ci0KLSAgICBNb3ZlVG9FeChkYywgdHJQb2ludDEueCgpLCB0clBvaW50MS55KCksIDApOwot
ICAgIExpbmVUbyhkYywgdHJQb2ludDIueCgpLCB0clBvaW50Mi55KCkpOwotCi0gICAgU2VsZWN0
T2JqZWN0KGRjLCBvbGRQZW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlw
c2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8
IHBhaW50aW5nRGlzYWJsZWQoKSB8fCAoIWZpbGxDb2xvcigpLmFscGhhKCkgJiYgc3Ryb2tlU3R5
bGUoKSA9PSBOb1N0cm9rZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRl
ciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotICAg
IFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmcmVjdCk7
Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAg
ICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0g
ICAgR0RJT2JqZWN0PEhCUlVTSD4gYnJ1c2g7Ci0gICAgSEdESU9CSiBvbGRCcnVzaDsKLSAgICBp
ZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBicnVzaCA9IGNyZWF0ZUJydXNoKGZp
bGxDb2xvcigpKTsKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIGJydXNoLmdl
dCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIEdl
dFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLQotICAgIEdESU9iamVjdDxIUEVOPiBwZW47Ci0g
ICAgSEdESU9CSiBvbGRQZW4gPSAwOwotICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tl
KSB7Ci0gICAgICAgIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25l
c3MoKSwgc3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywg
cGVuLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRj
LCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAgaWYgKGJydXNoIHx8IHBlbikKLSAg
ICAgICAgRWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwg
dHJSZWN0Lm1heFkoKSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0gICAgU2Vs
ZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbEFu
Z2xlKGRvdWJsZSBhLCBkb3VibGUgYikgCi17Ci0gICAgcmV0dXJuIGZhYnMoYSAtIGIpIDwgMUUt
NTsKLX0KLQotdm9pZCBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGRvdWJsZSBhbmdsZSwgZG91Ymxl
IGEsIGRvdWJsZSBiLCBmbG9hdCYgeCwgZmxvYXQmIHkpCi17Ci0gICAgd2hpbGUgKGFuZ2xlIDwg
MCkKLSAgICAgICAgYW5nbGUgKz0gMiAqIHBpRG91YmxlOwotICAgIHdoaWxlIChhbmdsZSA+PSAy
ICogcGlEb3VibGUpCi0gICAgICAgIGFuZ2xlIC09IDIgKiBwaURvdWJsZTsKLQotICAgIGlmIChl
cXVhbEFuZ2xlKGFuZ2xlLCAwKSB8fCBlcXVhbEFuZ2xlKGFuZ2xlLCAyICogcGlEb3VibGUpKSB7
Ci0gICAgICAgIHggPSBhOwotICAgICAgICB5ID0gMDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsQW5n
bGUoYW5nbGUsIHBpRG91YmxlKSkgewotICAgICAgICB4ID0gLWE7Ci0gICAgICAgIHkgPSAwOwot
ICAgIH0gZWxzZSBpZiAoZXF1YWxBbmdsZShhbmdsZSwgLjUgKiBwaURvdWJsZSkpIHsKLSAgICAg
ICAgeCA9IDA7Ci0gICAgICAgIHkgPSBiOwotICAgIH0gZWxzZSBpZiAoZXF1YWxBbmdsZShhbmds
ZSwgMS41ICogcGlEb3VibGUpKSB7Ci0gICAgICAgIHggPSAwOwotICAgICAgICB5ID0gLWI7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGsgPSB0YW4oYW5nbGUpOwotICAgICAgICBkb3Vi
bGUgc3FBID0gYSAqIGE7Ci0gICAgICAgIGRvdWJsZSBzcUIgPSBiICogYjsKLSAgICAgICAgZG91
YmxlIHRtcCA9IDEuIC8gKDEuIC8gc3FBICsgKGsgKiBrKSAvIHNxQik7Ci0gICAgICAgIHRtcCA9
IHRtcCA8PSAwID8gMCA6IHNxcnQodG1wKTsKLSAgICAgICAgaWYgKGFuZ2xlID4gLjUgKiBwaURv
dWJsZSAmJiBhbmdsZSA8IDEuNSAqIHBpRG91YmxlKQotICAgICAgICAgICAgdG1wID0gLXRtcDsK
LSAgICAgICAgeCA9IHRtcDsKLQotICAgICAgICBrID0gdGFuKC41ICogcGlEb3VibGUgLSBhbmds
ZSk7Ci0gICAgICAgIHRtcCA9IDEuIC8gKChrICogaykgLyBzcUEgKyAxIC8gc3FCKTsKLSAgICAg
ICAgdG1wID0gdG1wIDw9IDAgPyAwIDogc3FydCh0bXApOwotICAgICAgICBpZiAoYW5nbGUgPiBw
aURvdWJsZSkKLSAgICAgICAgICAgIHRtcCA9IC10bXA7Ci0gICAgICAgIHkgPSB0bXA7Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5w
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCi17
Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgbnBv
aW50cyA8PSAxIHx8ICFwb2ludHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92
aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFZlY3RvcjxQT0lOVCwgMjA+IHdpblBvaW50cyhucG9pbnRzKTsKLSAg
ICBGbG9hdFBvaW50IHRyUG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50c1swXSk7Ci0gICAg
d2luUG9pbnRzWzBdLnggPSBzdGFibGVSb3VuZCh0clBvaW50LngoKSk7Ci0gICAgd2luUG9pbnRz
WzBdLnkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7Ci0gICAgUkVDVCByZWN0ID0geyB3aW5Q
b2ludHNbMF0ueCwgd2luUG9pbnRzWzBdLnksIHdpblBvaW50c1swXS54LCB3aW5Qb2ludHNbMF0u
eSB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgKytpKSB7Ci0gICAgICAg
IHRyUG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50c1tpXSk7Ci0gICAgICAgIHdpblBvaW50
c1tpXS54ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwotICAgICAgICB3aW5Qb2ludHNbaV0u
eSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKLSAgICAgICAgaWYgKHJlY3QubGVmdCA+IHdp
blBvaW50c1tpXS54KQotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gd2luUG9pbnRzW2ldLng7Ci0g
ICAgICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPCB3aW5Qb2ludHNbaV0ueCkKLSAgICAgICAgICAg
IHJlY3QucmlnaHQgPSB3aW5Qb2ludHNbaV0ueDsKLSAgICAgICAgaWYgKHJlY3QudG9wID4gd2lu
UG9pbnRzW2ldLnkpCi0gICAgICAgICAgICByZWN0LnRvcCA9IHdpblBvaW50c1tpXS55OwotICAg
ICAgICBlbHNlIGlmIChyZWN0LmJvdHRvbSA8IHdpblBvaW50c1tpXS55KQotICAgICAgICAgICAg
cmVjdC5ib3R0b20gPSB3aW5Qb2ludHNbaV0ueTsKLSAgICB9Ci0gICAgcmVjdC5ib3R0b20gKz0g
MTsKLSAgICByZWN0LnJpZ2h0ICs9IDE7Ci0KLSAgICBJbnRSZWN0IGludFJlY3QocmVjdCk7Ci0g
ICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBpbnRSZWN0KTsKLSAg
ICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBvaW50czsgKytpKSB7Ci0gICAg
ICAgIHdpblBvaW50c1tpXS54ICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndpZHRoKCk7Ci0g
ICAgICAgIHdpblBvaW50c1tpXS55ICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpLmhlaWdodCgp
OwotICAgIH0KLQotICAgIEdESU9iamVjdDxIQlJVU0g+IGJydXNoOwotICAgIEhHRElPQkogb2xk
QnJ1c2g7Ci0gICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKLSAgICAgICAgYnJ1c2ggPSBj
cmVhdGVCcnVzaChmaWxsQ29sb3IoKSk7Ci0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0
KGRjLCBicnVzaC5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0
T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0KLSAgICBHRElPYmplY3Q8
SFBFTj4gcGVuOwotICAgIEhHRElPQkogb2xkUGVuOwotICAgIGlmIChzdHJva2VTdHlsZSgpICE9
IE5vU3Ryb2tlKSB7Ci0gICAgICAgIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJv
a2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9i
amVjdChkYywgcGVuLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0
T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAgaWYgKGJydXNoIHx8
IHBlbikKLSAgICAgICAgUG9seWdvbihkYywgd2luUG9pbnRzLmRhdGEoKSwgbnBvaW50cyk7Ci0K
LSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRC
cnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG51bVBvaW50cyA8PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6
IElNUExFTUVOVCEhCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgYWxwaGEgPSBjb2xvci5hbHBoYSgpOwotICAgIGlm
ICghYWxwaGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3Zp
ZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEludFJlY3QgaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci0gICAgVHJhbnNw
YXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBtX2RhdGEtPm1hcFJlY3QoaW50UmVj
dCksICZpbnRSZWN0LCBhbHBoYSk7Ci0KLSAgICBpZiAoIXRyYW5zcGFyZW50REMuaGRjKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaGJydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVTb2xpZEJydXNoKFJHQihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgp
KSkpOwotICAgIEZpbGxSZWN0KHRyYW5zcGFyZW50REMuaGRjKCksICZ0cmFuc3BhcmVudERDLnJl
Y3QoKSwgaGJydXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHJl
Y3QpKTsKLQotICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJn
bigwLCAwLCAwLCAwKSk7Ci0gICAgaWYgKEdldENsaXBSZ24obV9kYXRhLT5tX2RjLCBjbGlwUmdu
LmdldCgpKSA+IDApCi0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJS
ZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24o
dHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSkpOwot
ICAgICAgICBTZWxlY3RDbGlwUmduKG1fZGF0YS0+bV9kYywgY2xpcFJnbi5nZXQoKSk7Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJS
ZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotCi0gICAgRXhjbHVkZUNsaXBSZWN0KG1fZGF0
YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1h
eFkoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8
fCBwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92
aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDI7Ci0gICAgb2Zmc2V0
ICs9IHJhZGl1czsKLQotICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKLSAg
ICBJbnRSZWN0IGZpbmFsRm9jdXNSZWN0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWN0Q291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdCA9IHJlY3RzW2ldOwot
ICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShvZmZzZXQpOwotICAgICAgICBmaW5hbEZvY3VzUmVj
dC51bml0ZShmb2N1c1JlY3QpOwotICAgIH0KLQotICAgIEludFJlY3QgaW50UmVjdCA9IGZpbmFs
Rm9jdXNSZWN0OwotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGZpbmFsRm9j
dXNSZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRy
UmVjdCwgJmludFJlY3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAg
aWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMu
dG9TaGlmdCgpKTsKLQotICAgIFJFQ1QgcmVjdCA9IHRyUmVjdDsKLSAgICBEcmF3Rm9jdXNSZWN0
KGRjLCAmcmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5l
Qm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29s
IHByaW50aW5nKQotewotICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUod2lk
dGgsIHN0cm9rZVRoaWNrbmVzcygpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cm9rZVN0eWxlIG9sZFN0eWxlID0gc3Ry
b2tlU3R5bGUoKTsKLSAgICBzZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgZHJhd0xp
bmUocm91bmRlZEludFBvaW50KG9yaWdpbiksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9h
dFNpemUod2lkdGgsIDApKSk7Ci0gICAgaWYgKGRvdWJsZVVuZGVybGluZXMpCi0gICAgICAgIGRy
YXdMaW5lKHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9hdFNpemUoMCwgc3Ryb2tlVGhpY2tu
ZXNzKCkgKiAyKSksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9hdFNpemUod2lkdGgsIHN0
cm9rZVRoaWNrbmVzcygpICogMikpKTsKLSAgICBzZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2lkdGhzLnNp
emUoKTsgaSArPSAyKQotICAgICAgICBkcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChwb2ludC54
KCkgKyB3aWR0aHNbaV0sIHBvaW50LnkoKSksIHdpZHRoc1tpKzFdIC0gd2lkdGhzW2ldLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp1cGRh
dGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2wsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxG
b3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGF0YS0+aGFzQWxwaGEoKSkgewotICAgICAgICBJ
bnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHJlY3QpKTsK
LSAgICAgICAgbV9kYXRhLT5tX2JpdG1hcC0+Y2xlYXJQaXhlbHModHJSZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0gCi0KLSAgICBmaWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6d2hpdGUp
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VTdHlsZSgpID09
IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92
aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAgIEludFJl
Y3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGludFJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5
ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmaW50UmVjdCk7Ci0gICAgSERDIGRj
ID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0g
ICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgYXV0byBwZW4g
PSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxl
KCkpOwotICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwot
Ci0gICAgaW50IHJpZ2h0ID0gdHJSZWN0Lm1heFgoKSAtIDE7Ci0gICAgaW50IGJvdHRvbSA9IHRy
UmVjdC5tYXhZKCkgLSAxOwotICAgIGNvbnN0IFBPSU5UIGludFBvaW50c1s1XSA9Ci0gICAgewot
ICAgICAgICB7IHRyUmVjdC54KCksIHRyUmVjdC55KCkgfSwKLSAgICAgICAgeyByaWdodCwgdHJS
ZWN0LnkoKSB9LAotICAgICAgICB7IHJpZ2h0LCBib3R0b20gfSwKLSAgICAgICAgeyB0clJlY3Qu
eCgpLCBib3R0b20gfSwKLSAgICAgICAgeyB0clJlY3QueCgpLCB0clJlY3QueSgpIH0KLSAgICB9
OwotCi0gICAgUG9seWxpbmUoZGMsIGludFBvaW50cywgNSk7Ci0KLSAgICBTZWxlY3RPYmplY3Qo
ZGMsIG9sZFBlbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBtX2RhdGEtPnNhdmUoKTsKLSAg
ICBtX2RhdGEtPm1fb3BhY2l0eSAqPSBvcGFjaXR5OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgbV9kYXRhLT5yZXN0b3Jl
KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9kYXRhLT5j
b25jYXRDVE0odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBtX2RhdGEtPnNldENUTSh0
cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0mIEdyYXBoaWNzQ29udGV4dDo6YWZmaW5l
VHJhbnNmb3JtKCkKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLX0KLQotY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBHcmFwaGljc0NvbnRleHQ6OmFmZmluZVRyYW5zZm9ybSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXNldEFmZmluZVRyYW5zZm9ybSgpCi17Ci0gICAgbV9kYXRhLT5tX3RyYW5z
Zm9ybS5tYWtlSWRlbnRpdHkoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAgbV9k
YXRhLT5yb3RhdGUocmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgbV9kYXRhLT5zY2FsZShzaXplKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQg
YWxwaGEpCi17Ci0gICAgbV9kYXRhLT5tX29wYWNpdHkgPSBhbHBoYTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
YW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNs
aXAocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgaW5saW5l
IEludFBvaW50IHJlY3RDZW50ZXJQb2ludChjb25zdCBSRUNUJiByZWN0KQotewotICAgIHJldHVy
biBJbnRQb2ludChyZWN0LmxlZnQgKyAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgLyAyLCByZWN0
LnRvcCArIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAvIDIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgU2NvcGVEQ1Byb3Zp
ZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dC
bHVyID0gMDsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBDb2xvclNwYWNlIHNoYWRvd0Nv
bG9yU3BhY2U7Ci0gICAgICAgIAotICAgIGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0Js
dXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKLSAgICAKLSAgICBjb25zdCBGbG9h
dFJlY3QmIGZpbGxSZWN0ID0gcmVjdC5yZWN0KCk7Ci0gICAgSW50UmVjdCBkc3RSZWN0ID0gZmls
bFJlY3Q7Ci0gICAgCi0gICAgZHN0UmVjdC5tb3ZlKHN0YWJsZVJvdW5kKHNoYWRvd09mZnNldC53
aWR0aCgpKSwgc3RhYmxlUm91bmQoc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7Ci0gICAgZHN0UmVj
dC5pbmZsYXRlKHN0YWJsZVJvdW5kKHNoYWRvd0JsdXIpKTsKLSAgICBkc3RSZWN0ID0gbV9kYXRh
LT5tYXBSZWN0KGRzdFJlY3QpOwotICAKLSAgICBGbG9hdFNpemUgbmV3VG9wTGVmdChtX2RhdGEt
Pm1hcFNpemUocmVjdC5yYWRpaSgpLnRvcExlZnQoKSkpOwotICAgIEZsb2F0U2l6ZSBuZXdUb3BS
aWdodChtX2RhdGEtPm1hcFNpemUocmVjdC5yYWRpaSgpLnRvcFJpZ2h0KCkpKTsKLSAgICBGbG9h
dFNpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUocmVjdC5yYWRpaSgpLmJvdHRvbUxl
ZnQoKSkpOwotICAgIEZsb2F0U2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1hcFNpemUocmVj
dC5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKLQotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFu
c3BhcmVudERjKG1fZGF0YSwgZHN0UmVjdCwgJmZpbGxSZWN0KTsKLSAgICBIREMgZGMgPSB0cmFu
c3BhcmVudERjLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRz
dFJlY3QubW92ZSh0cmFuc3BhcmVudERjLnRvU2hpZnQoKSk7Ci0KLSAgICBSRUNUIHJlY3RXaW4g
PSBkc3RSZWN0OwotCi0gICAgYXV0byBicnVzaCA9IGNyZWF0ZUJydXNoKHNoYWRvd0NvbG9yKTsK
LSAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBicnVzaC5nZXQoKSk7Ci0K
LSAgICBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0KLSAgICBJ
bnRQb2ludCBjZW50ZXJQb2ludCA9IHJlY3RDZW50ZXJQb2ludChyZWN0V2luKTsKLSAgICAvLyBE
cmF3IHRvcCBsZWZ0IGhhbGYKLSAgICBSRUNUIGNsaXBSZWN0KHJlY3RXaW4pOwotICAgIGNsaXBS
ZWN0LnJpZ2h0ID0gY2VudGVyUG9pbnQueCgpOwotICAgIGNsaXBSZWN0LmJvdHRvbSA9IGNlbnRl
clBvaW50LnkoKTsKLQotICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
UmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgYm9vbCBuZWVkc05ld0NsaXAgPSAoR2V0Q2xpcFJn
bihkYywgY2xpcFJnbi5nZXQoKSkgPD0gMCk7Ci0KLSAgICBkcmF3Um91bmRDb3JuZXIobmVlZHNO
ZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld1RvcExlZnQud2lk
dGgoKSAqIDIpLCBzdGFibGVSb3VuZChuZXdUb3BMZWZ0LmhlaWdodCgpICogMikpOwotCi0gICAg
Ly8gRHJhdyB0b3AgcmlnaHQKLSAgICBjbGlwUmVjdCA9IHJlY3RXaW47Ci0gICAgY2xpcFJlY3Qu
bGVmdCA9IGNlbnRlclBvaW50LngoKTsKLSAgICBjbGlwUmVjdC5ib3R0b20gPSBjZW50ZXJQb2lu
dC55KCk7Ci0KLSAgICBkcmF3Um91bmRDb3JuZXIobmVlZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVj
dFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld1RvcFJpZ2h0LndpZHRoKCkgKiAyKSwgc3RhYmxlUm91
bmQobmV3VG9wUmlnaHQuaGVpZ2h0KCkgKiAyKSk7Ci0KLSAgICAgLy8gRHJhdyBib3R0b20gbGVm
dAotICAgIGNsaXBSZWN0ID0gcmVjdFdpbjsKLSAgICBjbGlwUmVjdC5yaWdodCA9IGNlbnRlclBv
aW50LngoKTsKLSAgICBjbGlwUmVjdC50b3AgPSBjZW50ZXJQb2ludC55KCk7Ci0KLSAgICBkcmF3
Um91bmRDb3JuZXIobmVlZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJv
dW5kKG5ld0JvdHRvbUxlZnQud2lkdGgoKSAqIDIpLCBzdGFibGVSb3VuZChuZXdCb3R0b21MZWZ0
LmhlaWdodCgpICogMikpOwotCi0gICAgLy8gRHJhdyBib3R0b20gcmlnaHQKLSAgICBjbGlwUmVj
dCA9IHJlY3RXaW47Ci0gICAgY2xpcFJlY3QubGVmdCA9IGNlbnRlclBvaW50LngoKTsKLSAgICBj
bGlwUmVjdC50b3AgPSBjZW50ZXJQb2ludC55KCk7Ci0KLSAgICBkcmF3Um91bmRDb3JuZXIobmVl
ZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld0JvdHRvbVJp
Z2h0LndpZHRoKCkgKiAyKSwgc3RhYmxlUm91bmQobmV3Qm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAy
KSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSb3VuZENvcm5lcihib29sIG5lZWRzTmV3Q2xpcCwgUkVDVCBjbGlwUmVj
dCwgUkVDVCByZWN0V2luLCBIREMgZGMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBp
ZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgIGlmIChuZWVkc05ld0NsaXAp
IHsKLSAgICAgICAgY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihjbGlw
UmVjdC5sZWZ0LCBjbGlwUmVjdC50b3AsIGNsaXBSZWN0LnJpZ2h0LCBjbGlwUmVjdC5ib3R0b20p
KTsKLSAgICAgICAgU2VsZWN0Q2xpcFJnbihkYywgY2xpcFJnbi5nZXQoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KGRjLCBjbGlwUmVjdC5sZWZ0LCBjbGlwUmVjdC50
b3AsIGNsaXBSZWN0LnJpZ2h0LCBjbGlwUmVjdC5ib3R0b20pOwotCi0gICAgOjpSb3VuZFJlY3Qo
ZGMsIHJlY3RXaW4ubGVmdCAsIHJlY3RXaW4udG9wICwgcmVjdFdpbi5yaWdodCAsIHJlY3RXaW4u
Ym90dG9tICwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBTZWxlY3RDbGlwUmduKGRjLCBuZWVkc05l
d0NsaXAgPyAwIDogY2xpcFJnbi5nZXQoKSk7Ci19Ci0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGlu
Z01vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZnJlY3Q7Ci19Ci0K
LUNvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9yKGNvbnN0IEdyYWRpZW50KiBncmFkaWVudCkKLXsK
LSAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzID0gZ3JhZGllbnQt
PmdldFN0b3BzKCk7Ci0gICAgaWYgKHN0b3BzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENv
bG9yKCk7Ci0KLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wID0gc3RvcHMuZmly
c3QoKTsKLSAgICBpZiAoc3RvcHMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBDb2xvcihz
dG9wLnJlZCwgc3RvcC5ncmVlbiwgc3RvcC5ibHVlLCBzdG9wLmFscGhhKTsKLQotICAgIGNvbnN0
IEdyYWRpZW50OjpDb2xvclN0b3AmIGxhc3RTdG9wID0gc3RvcHMubGFzdCgpOwotICAgIHJldHVy
biBDb2xvcigoc3RvcC5yZWQgKyBsYXN0U3RvcC5yZWQpICogMC41ZgotICAgICAgICAsIChzdG9w
LmdyZWVuICsgbGFzdFN0b3AuZ3JlZW4pICogMC41ZgotICAgICAgICAsIChzdG9wLmJsdWUgKyBs
YXN0U3RvcC5ibHVlKSAqIDAuNWYKLSAgICAgICAgLCAoc3RvcC5hbHBoYSArIGxhc3RTdG9wLmFs
cGhhKSAqIDAuNWYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ29sb3IgYyA9IG1fc3RhdGUuZmlsbEdyYWRpZW50Ci0gICAgICAgID8gZ3JhZGllbnRB
dmVyYWdlQ29sb3IobV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpCi0gICAgICAgIDogZmlsbENv
bG9yKCk7Ci0KLSAgICBpZiAoIWMuYWxwaGEoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0g
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYnJ1c2gg
PSBjcmVhdGVCcnVzaChjKTsKLQotICAgIGlmIChtX2RhdGEtPm1fb3BhY2l0eSA8IDEuMGYgfHwg
bV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0gICAgICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChtX2RhdGEtPm1hcFJlY3QocGF0aC5ib3VuZGluZ1JlY3QoKSkpOwotICAgICAgICB0
clJlY3QuaW5mbGF0ZSgxKTsKLSAgICAgICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50
REMobV9kYXRhLCB0clJlY3QpOwotICAgICAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygp
OwotICAgICAgICBpZiAoIWRjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0ciA9IG1fZGF0YS0+bV90cmFuc2Zvcm07Ci0gICAgICAgIHRyLnRyYW5zbGF0
ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0cmFuc3BhcmVudERDLnRvU2hpZnQo
KS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChO
VUxMX1BFTikpOwotICAgICAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBi
cnVzaC5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRoKCktPmZpbGxQYXRoKGRjLCAm
dHIpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBHZXRTdG9ja09iamVjdChOVUxMX1BF
TikpOwotICAgICAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9k
YywgYnJ1c2guZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRmb3JtUGF0aCgpLT5maWxsUGF0aCht
X2RhdGEtPm1fZGMsICZtX2RhdGEtPm1fdHJhbnNmb3JtKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0
KG1fZGF0YS0+bV9kYywgb2xkQnJ1c2gpOwotICAgIH0KLX0KLQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzTnVs
bCgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVE
Q1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwg
c3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotCi0gICAgaWYgKG1fZGF0YS0+bV9v
cGFjaXR5IDwgMS4wZiB8fCBtX2RhdGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAgSW50UmVjdCB0
clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChwYXRoLmJvdW5kaW5nUmVj
dCgpKSk7Ci0gICAgICAgIHRyUmVjdC5pbmZsYXRlKDEpOwotICAgICAgICBUcmFuc3BhcmVudExh
eWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCk7Ci0gICAgICAgIEhEQyBkYyA9IHRy
YW5zcGFyZW50REMuaGRjKCk7Ci0gICAgICAgIGlmICghZGMpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLSAg
ICAgICAgdHIudHJhbnNsYXRlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndpZHRoKCksIHRyYW5z
cGFyZW50REMudG9TaGlmdCgpLmhlaWdodCgpKTsKLQotICAgICAgICBTZWxlY3RPYmplY3QoZGMs
IEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLSAgICAgICAgSEdESU9CSiBvbGRQZW4gPSBT
ZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRoKCkt
PnN0cm9rZVBhdGgoZGMsICZ0cik7Ci0gICAgICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBHZXRTdG9j
a09iamVjdChOVUxMX0JSVVNIKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2Jq
ZWN0KG1fZGF0YS0+bV9kYywgcGVuLmdldCgpKTsKLSAgICAgICAgcGF0aC5wbGF0Zm9ybVBhdGgo
KS0+c3Ryb2tlUGF0aChtX2RhdGEtPm1fZGMsICZtX2RhdGEtPm1fdHJhbnNmb3JtKTsKLSAgICAg
ICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgb2xkUGVuKTsKLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEdyYWRp
ZW50KiBncmFkaWVudCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzID0g
Z3JhZGllbnQtPmdldFN0b3BzKCk7Ci0gICAgaWYgKHN0b3BzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2l6ZV90IG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotICAgIGlmIChu
dW1TdG9wcyA9PSAxKSB7Ci0gICAgICAgIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3Ag
PSBzdG9wcy5maXJzdCgpOwotICAgICAgICBDb2xvciBjb2xvcihzdG9wLnJlZCwgc3RvcC5ncmVl
biwgc3RvcC5ibHVlLCBzdG9wLmFscGhhKTsKLSAgICAgICAgZmlsbFJlY3QociwgY29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICByZXR1cm47Ci0gICAgfSAKLSAgICAKLSAgICBT
Y29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2Rj
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHIpOwotICAgIEludFJlY3QgcmVjdCA9IG1fZGF0YS0+bWFwUmVjdChpbnRSZWN0KTsKLSAg
ICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHJlY3QsICZpbnRSZWN0
LCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYg
KCFkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9T
aGlmdCgpKTsKLSAgICBGbG9hdFBvaW50IGZwMCA9IG1fZGF0YS0+bWFwUG9pbnQoZ3JhZGllbnQt
PnAwKCkpOwotICAgIEZsb2F0UG9pbnQgZnAxID0gbV9kYXRhLT5tYXBQb2ludChncmFkaWVudC0+
cDEoKSk7Ci0gICAgSW50UG9pbnQgcDAoc3RhYmxlUm91bmQoZnAwLngoKSksIHN0YWJsZVJvdW5k
KGZwMC55KCkpKTsKLSAgICBJbnRQb2ludCBwMShzdGFibGVSb3VuZChmcDEueCgpKSwgc3RhYmxl
Um91bmQoZnAxLnkoKSkpOwotICAgIHAwICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotICAg
IHAxICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotCi0gICAgaWYgKGdyYWRpZW50LT5pc1Jh
ZGlhbCgpKSB7Ci0gICAgICAgIGlmIChnX3JhZGlhbEdyYWRpZW50RmlsbGVyKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogZG9uJ3Qgc3VwcG9ydCAyRCBzY2FsaW5nIGF0IHRoaXMgdGltZQotICAg
ICAgICAgICAgZG91YmxlIHNjYWxlID0gKG1fZGF0YS0+bV90cmFuc2Zvcm0uYSgpICsgbV9kYXRh
LT5tX3RyYW5zZm9ybS5kKCkpICogMC41OwotICAgICAgICAgICAgZmxvYXQgcjAgPSBncmFkaWVu
dC0+c3RhcnRSYWRpdXMoKSAqIHNjYWxlOwotICAgICAgICAgICAgZmxvYXQgcjEgPSBncmFkaWVu
dC0+ZW5kUmFkaXVzKCkgKiBzY2FsZTsKLSAgICAgICAgICAgIGdfcmFkaWFsR3JhZGllbnRGaWxs
ZXIoZGMsIHJlY3QsIHAwLCBwMSwgcjAsIHIxLCBncmFkaWVudC0+Z2V0U3RvcHMoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGdfbGluZWFyR3JhZGll
bnRGaWxsZXIpIHsKLSAgICAgICAgZ19saW5lYXJHcmFkaWVudEZpbGxlcihkYywgcmVjdCwgcDAs
IHAxLCBncmFkaWVudC0+Z2V0U3RvcHMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBTaW1wbGUgMUQgbGluZWFyIHNvbHV0aW9uIHRoYXQgYXNzdW1lcyBwMCBpcyBvbiB0aGUg
dG9wIG9yIGxlZnQgc2lkZSwgYW5kIHAxIGlzIG9uIHRoZSByaWdodCBvciBib3R0b20gc2lkZQot
ICAgIHNpemVfdCBudW1SZWN0cyA9IChudW1TdG9wcyAtIDEpOwotICAgIFZlY3RvcjxUUklWRVJU
RVgsIDIwPiB0djsKLSAgICB0di5yZXNpemUobnVtUmVjdHMgKiAyKTsKLSAgICBWZWN0b3I8R1JB
RElFTlRfUkVDVCwgMTA+IG1lc2g7Ci0gICAgbWVzaC5yZXNpemUobnVtUmVjdHMpOwotICAgIGlu
dCB4ID0gcmVjdC54KCk7Ci0gICAgaW50IHkgPSByZWN0LnkoKTsKLSAgICBpbnQgd2lkdGggPSBy
ZWN0LndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgRmxvYXRT
aXplIGQgPSBncmFkaWVudC0+cDEoKSAtIGdyYWRpZW50LT5wMCgpOwotICAgIGJvb2wgdmVydGlj
YWwgPSBmYWJzKGQuaGVpZ2h0KCkpID4gZmFicyhkLndpZHRoKCkpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICBjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wID0gc3RvcHNbaV07Ci0gICAgICAgIGludCBpVHYgPSBpID8gMiAqIGkgLSAx
IDogMDsKLSAgICAgICAgdHZbaVR2XS5SZWQgPSBzdG9wLnJlZCAqIDB4RkZGRjsKLSAgICAgICAg
dHZbaVR2XS5HcmVlbiA9IHN0b3AuZ3JlZW4gKiAweEZGRkY7Ci0gICAgICAgIHR2W2lUdl0uQmx1
ZSA9IHN0b3AuYmx1ZSAqIDB4RkZGRjsKLSAgICAgICAgdHZbaVR2XS5BbHBoYSA9IHN0b3AuYWxw
aGEgKiAweEZGRkY7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICB0dltpVHZdLnggPSB2
ZXJ0aWNhbCA/IHggKyB3aWR0aDogeCArIHdpZHRoICogc3RvcC5zdG9wOwotICAgICAgICAgICAg
dHZbaVR2XS55ID0gdmVydGljYWwgPyB5ICsgaGVpZ2h0ICogc3RvcC5zdG9wIDogeSArIGhlaWdo
dDsKLSAgICAgICAgICAgIG1lc2hbaSAtIDFdLlVwcGVyTGVmdCA9IGlUdiAtIDE7Ci0gICAgICAg
ICAgICBtZXNoW2kgLSAxXS5Mb3dlclJpZ2h0ID0gaVR2OwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdHZbaVR2XS54ID0geDsKLSAgICAgICAgICAgIHR2W2lUdl0ueSA9IHk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaSAmJiBpIDwgbnVtUmVjdHMpIHsKLSAgICAgICAgICAgIHR2
W2lUdiArIDFdID0gdHZbaVR2XTsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkKLSAgICAgICAg
ICAgICAgICB0dltpVHYgKyAxXS54ID0geDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB0dltpVHYgKyAxXS55ID0geTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdyYWRpZW50
RmlsbChkYywgdHYuZGF0YSgpLCB0di5zaXplKCksIG1lc2guZGF0YSgpLCBtZXNoLnNpemUoKSwg
dmVydGljYWwgPyBHUkFESUVOVF9GSUxMX1JFQ1RfViA6IEdSQURJRU5UX0ZJTExfUkVDVF9IKTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9y
bTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwotCi0gICAgaWYgKG1fc3RhdGUuZmls
bEdyYWRpZW50KQotICAgICAgICBmaWxsUmVjdChyZWN0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC5n
ZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LCBmaWxsQ29sb3IoKSwgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0KLSAgICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3ND
b250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGlzQ2hhclZpc2libGUoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyAmJiBjICE9IHplcm9X
aWR0aFNwYWNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFmaWxsQ29s
b3IoKS5hbHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBtdXN0U3VwcG9ydEFscGhhID0gbV9kYXRhLT5oYXNBbHBoYSgpOwotCi0gICAgaWYg
KCFtdXN0U3VwcG9ydEFscGhhICYmIGZpbGxDb2xvcigpLmFscGhhKCkgPT0gMHhGRiAmJiBtX2Rh
dGEtPm1fb3BhY2l0eSA+PSAxLjApIHsKLSAgICAgICAgZm9udC5kcmF3VGV4dCh0aGlzLCBydW4s
IHBvaW50LCBmcm9tLCB0byk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCBv
bGRPcGFjaXR5ID0gbV9kYXRhLT5tX29wYWNpdHk7Ci0gICAgbV9kYXRhLT5tX29wYWNpdHkgKj0g
ZmlsbENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwotCi0gICAgRmxvYXRSZWN0IHRleHRSZWN0ID0g
Zm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBmb250LmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCksIGZyb20sIHRvKTsKLSAgICB0ZXh0UmVjdC5zZXRZKHRleHRSZWN0LnkoKSAtIGZv
bnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgSW50UmVjdCB0clJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdCh0ZXh0UmVjdCkpOwotICAgIFJFQ1QgYm1wUmVjdDsK
LSAgICBBbHBoYVBhaW50VHlwZSBhbHBoYVBhaW50VHlwZSA9IG11c3RTdXBwb3J0QWxwaGEgPyBB
bHBoYVBhaW50T3RoZXIgOiBBbHBoYVBhaW50Tm9uZTsKLSAgICBpZiAoUmVmUHRyPFNoYXJlZEJp
dG1hcD4gYm1wID0gbV9kYXRhLT5nZXRUcmFuc3BhcmVudExheWVyQml0bWFwKHRyUmVjdCwgYWxw
aGFQYWludFR5cGUsIGJtcFJlY3QsIHRydWUsIG11c3RTdXBwb3J0QWxwaGEpKSB7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYygwKTsKLSAgICAgICAgICAgIGdjLnNl
dEJpdG1hcChibXApOwotICAgICAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKG1fZGF0YS0+bV90
cmFuc2Zvcm0uYSgpLCBtX2RhdGEtPm1fdHJhbnNmb3JtLmQoKSkpOwotICAgICAgICAgICAgZm9u
dC5kcmF3VGV4dCgmZ2MsIHJ1biwgSW50UG9pbnQoMCwgZm9udC5mb250TWV0cmljcygpLmFzY2Vu
dCgpKSwgZnJvbSwgdG8pOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGtleTE7Ci0gICAg
ICAgIEhEQyBtZW1EQyA9IGJtcC0+Z2V0REMoJmtleTEpOwotICAgICAgICBpZiAobWVtREMpIHsK
LSAgICAgICAgICAgIG1fZGF0YS0+cGFpbnRCYWNrVHJhbnNwYXJlbnRMYXllckJpdG1hcChtZW1E
QywgYm1wLmdldCgpLCB0clJlY3QsIGFscGhhUGFpbnRUeXBlLCBibXBSZWN0KTsKLSAgICAgICAg
ICAgIGJtcC0+cmVsZWFzZURDKG1lbURDLCBrZXkxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fZGF0YS0+bV9vcGFjaXR5ID0gb2xkT3BhY2l0eTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+
bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlm
ICghbnVtR2x5cGhzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoaXNDaGFyVmlz
aWJsZSgqZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICArK2Zyb207Ci0gICAgICAgIC0tbnVtR2x5cGhzOwotICAgIH0KLQotICAgIGRvdWJsZSBz
Y2FsZVggPSBtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKTsKLSAgICBkb3VibGUgc2NhbGVZID0gbV9k
YXRhLT5tX3RyYW5zZm9ybS5kKCk7Ci0KLSAgICBpbnQgaGVpZ2h0ID0gZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLnNpemUoKSAqIHNjYWxlWTsKLSAgICBpbnQgd2lkdGggPSBmb250RGF0YS0+YXZn
Q2hhcldpZHRoKCkgKiBzY2FsZVg7Ci0KLSAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0g
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhGT05UIGhGb250
ID0gaGVpZ2h0ID4gMQotICAgICAgICA/IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5nZXRTY2Fs
ZWRGb250SGFuZGxlKGhlaWdodCwgc2NhbGVYID09IHNjYWxlWSA/IDAgOiB3aWR0aCkKLSAgICAg
ICAgOiAwOwotCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgp
IC0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgIEZsb2F0UG9pbnQgdHJQ
b2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2ludCk7Ci0gICAgaW50IHkgPSBzdGFibGVS
b3VuZCh0clBvaW50LnkoKSk7Ci0KLSAgICBDb2xvciBjb2xvciA9IGZpbGxDb2xvcigpOwotICAg
IGlmICghY29sb3IuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09MT1JSRUYgZm9u
dENvbG9yID0gUkdCKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCkpOwot
Ci0gICAgaWYgKCFoRm9udCkgewotICAgICAgICBkb3VibGUgb2Zmc2V0ID0gdHJQb2ludC54KCk7
Ci0gICAgICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZSA9IGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pOwotICAgICAgICBpZiAoc2NhbGVYID09IDEuKQotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBudW1HbHlwaHM7ICsraSkKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgbnVtR2x5cGhzOyArK2kpCi0gICAgICAgICAgICAgICAgb2Zmc2V0
ICs9ICgqYWR2YW5jZSsrKS53aWR0aCgpICogc2NhbGVYOwotCi0gICAgICAgIG9mZnNldCArPSB3
aWR0aDsKLQotICAgICAgICBhdXRvIGhQZW4gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBlbihQ
U19EQVNILCAxLCBmb250Q29sb3IpKTsKLSAgICAgICAgSEdESU9CSiBvbGRQZW4gPSBTZWxlY3RP
YmplY3QobV9kYXRhLT5tX2RjLCBoUGVuLmdldCgpKTsKLQotICAgICAgICBNb3ZlVG9FeChtX2Rh
dGEtPm1fZGMsIHN0YWJsZVJvdW5kKHRyUG9pbnQueCgpKSwgeSwgMCk7Ci0gICAgICAgIExpbmVU
byhtX2RhdGEtPm1fZGMsIHN0YWJsZVJvdW5kKG9mZnNldCksIHkpOwotCi0gICAgICAgIFNlbGVj
dE9iamVjdChtX2RhdGEtPm1fZGMsIG9sZFBlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXIgPSAwOwot
ICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsK
LSAgICBib29sIGhhc1NoYWRvdyA9IHRleHREcmF3aW5nTW9kZSgpID09IFRleHRNb2RlRmlsbAot
ICAgICAgICAmJiBnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xv
ciwgc2hhZG93Q29sb3JTcGFjZSkKLSAgICAgICAgJiYgc2hhZG93Q29sb3IuYWxwaGEoKTsKLSAg
ICBDT0xPUlJFRiBzaGFkb3dSR0JDb2xvcjsKLSAgICBGbG9hdFBvaW50IHRyU2hhZG93UG9pbnQ7
Ci0gICAgaWYgKGhhc1NoYWRvdykgewotICAgICAgICBzaGFkb3dSR0JDb2xvciA9IFJHQihzaGFk
b3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpKTsK
LSAgICAgICAgdHJTaGFkb3dQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2ludCArIHNo
YWRvd09mZnNldCk7Ci0gICAgfQotCi0gICAgSEdESU9CSiBoT2xkRm9udCA9IFNlbGVjdE9iamVj
dChtX2RhdGEtPm1fZGMsIGhGb250KTsKLSAgICBDT0xPUlJFRiBvbGRUZXh0Q29sb3IgPSBHZXRU
ZXh0Q29sb3IobV9kYXRhLT5tX2RjKTsKLSAgICBpbnQgb2xkVGV4dEFsaWduID0gR2V0VGV4dEFs
aWduKG1fZGF0YS0+bV9kYyk7Ci0gICAgU2V0VGV4dEFsaWduKG1fZGF0YS0+bV9kYywgMCk7Ci0K
LSAgICBpbnQgb2xkQmtNb2RlID0gR2V0QmtNb2RlKG1fZGF0YS0+bV9kYyk7Ci0gICAgU2V0QmtN
b2RlKG1fZGF0YS0+bV9kYywgVFJBTlNQQVJFTlQpOwotCi0gICAgaWYgKG51bUdseXBocyA+IDEp
IHsKLSAgICAgICAgZG91YmxlIG9mZnNldCA9IHRyUG9pbnQueCgpOwotICAgICAgICBWZWN0b3I8
aW50LCAyNTY+IGdseXBoU3BhY2UobnVtR2x5cGhzKTsKLSAgICAgICAgVmVjdG9yPFVDaGFyLCAy
NTY+IHRleHQobnVtR2x5cGhzKTsKLSAgICAgICAgaW50KiBjdXJTcGFjZSA9IGdseXBoU3BhY2Uu
ZGF0YSgpOwotICAgICAgICBVQ2hhciogY3VyQ2hhciA9IHRleHQuZGF0YSgpOwotICAgICAgICBj
b25zdCBVQ2hhciogc3JjQ2hhciA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIGNvbnN0IHNyY0NoYXJFbmQgPSBzcmNDaGFyICsgbnVtR2x5cGhzOwotICAg
ICAgICAqY3VyQ2hhcisrID0gKnNyY0NoYXIrKzsKLSAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0g
c3RhYmxlUm91bmQob2Zmc2V0KTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBmaXJzdE9mZnNl
dDsKLSAgICAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlID0gZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSk7Ci0gICAgICAgIC8vIEZJWE1FOiBFeHRUZXh0T3V0KCkgY2FuIGZs
aXAgb3ZlciBlYWNoIHdvcmQgZm9yIFJUTCBsYW5ndWFnZXMsIGV2ZW4gd2hlbiBUQV9SVExSRUFE
SU5HIGlzIG9mZi4KLSAgICAgICAgLy8gKHRoaXMgY2FuIGJlIEdESSBidWcgb3IgZm9udCBkcml2
ZXIgYnVnPykKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBjbGVhciBob3cgaXQgcHJvY2Vzc2VzIGNo
YXJhY3RlcnMgYW5kIGhhbmRsZXMgc3BlY2lmaWVkIHNwYWNlcy4gT24gdGhlIG90aGVyIHNpZGUs
Ci0gICAgICAgIC8vIG91ciBnbHlwaCBidWZmZXIgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBv
cmRlciBmb3IgcmVuZGVyaW5nLiBTbywgdGhlIHNvbHV0aW9uIGlzIHRoYXQgd2UKLSAgICAgICAg
Ly8gY2FsbCBFeHRUZXh0T3V0KCkgZm9yIGVhY2ggc2luZ2xlIGNoYXJhY3RlciB3aGVuIHRoZSB0
ZXh0IGNvbnRhaW5zIGFueSBSVEwgY2hhcmFjdGVyLgotICAgICAgICAvLyBUaGlzIHNvbHV0aW9u
IGlzIG5vdCBwZXJmZWN0IGFzIGl0IGlzIHNsb3dlciB0aGFuIGNhbGxpbmcgRXh0VGV4dE91dCgp
IG9uZSB0aW1lIGZvciBhbGwgY2hhcmFjdGVycy4KLSAgICAgICAgLy8gRHJhd2luZyBjaGFyYWN0
ZXJzIG9uZSBieSBvbmUgbWF5IGJlIHRvbyBzbG93LgotICAgICAgICBib29sIGRyYXdPbmVCeU9u
ZSA9IGZhbHNlOwotICAgICAgICBpZiAoc2NhbGVYID09IDEuKSB7Ci0gICAgICAgICAgICBmb3Ig
KDsgc3JjQ2hhciA8IHNyY0NoYXJFbmQ7ICsrc3JjQ2hhcikgewotICAgICAgICAgICAgICAgIG9m
ZnNldCArPSAoKmFkdmFuY2UrKykud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
SW50ID0gc3RhYmxlUm91bmQob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNDaGFyVmlz
aWJsZSgqc3JjQ2hhcikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkcmF3T25lQnlPbmUg
JiYgdV9jaGFyRGlyZWN0aW9uKCpzcmNDaGFyKSA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3T25lQnlPbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAqY3VyQ2hhcisrID0gKnNyY0NoYXI7Ci0gICAgICAgICAgICAgICAgICAgICpjdXJTcGFjZSsr
ID0gb2Zmc2V0SW50IC0gbGFzdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdE9mZnNl
dCA9IG9mZnNldEludDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKDsgc3JjQ2hhciA8IHNyY0NoYXJFbmQ7ICsrc3Jj
Q2hhcikgewotICAgICAgICAgICAgICAgIG9mZnNldCArPSAoKmFkdmFuY2UrKykud2lkdGgoKSAq
IHNjYWxlWDsKLSAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0SW50ID0gc3RhYmxlUm91bmQob2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNDaGFyVmlzaWJsZSgqc3JjQ2hhcikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkcmF3T25lQnlPbmUgJiYgdV9jaGFyRGlyZWN0aW9uKCpz
cmNDaGFyKSA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3
T25lQnlPbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAqY3VyQ2hhcisrID0gKnNyY0No
YXI7Ci0gICAgICAgICAgICAgICAgICAgICpjdXJTcGFjZSsrID0gb2Zmc2V0SW50IC0gbGFzdE9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdE9mZnNldCA9IG9mZnNldEludDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbnVtR2x5cGhz
ID0gY3VyQ2hhciAtIHRleHQuZGF0YSgpOwotICAgICAgICBpZiAoaGFzU2hhZG93KSB7Ci0gICAg
ICAgICAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBzaGFkb3dSR0JDb2xvcik7Ci0gICAg
ICAgICAgICBpZiAoZHJhd09uZUJ5T25lKSB7Ci0gICAgICAgICAgICAgICAgaW50IHhTaGFkb3cg
PSBmaXJzdE9mZnNldCArIHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueCgpIC0gdHJQb2ludC54
KCkpOwotICAgICAgICAgICAgICAgIGludCB5U2hhZG93ID0gc3RhYmxlUm91bmQodHJTaGFkb3dQ
b2ludC55KCkpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIHhT
aGFkb3csIHlTaGFkb3csIDAsIE5VTEwsIHRleHQuZGF0YSgpICsgaSwgMSwgMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHhTaGFkb3cgKz0gZ2x5cGhTcGFjZVtpXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBFeHRUZXh0T3V0KG1fZGF0YS0+
bV9kYywgZmlyc3RPZmZzZXQgKyBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSAtIHRyUG9p
bnQueCgpKSwgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC55KCkpLCAwLCBOVUxMLCB0ZXh0LmRh
dGEoKSwgbnVtR2x5cGhzLCBnbHlwaFNwYWNlLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
U2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywgZm9udENvbG9yKTsKLSAgICAgICAgaWYgKGRyYXdP
bmVCeU9uZSkgewotICAgICAgICAgICAgaW50IHggPSBmaXJzdE9mZnNldDsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBF
eHRUZXh0T3V0KG1fZGF0YS0+bV9kYywgeCwgeSwgMCwgTlVMTCwgdGV4dC5kYXRhKCkgKyBpLCAx
LCAwKTsKLSAgICAgICAgICAgICAgICB4ICs9IGdseXBoU3BhY2VbaV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIGZp
cnN0T2Zmc2V0LCB5LCAwLCBOVUxMLCB0ZXh0LmRhdGEoKSwgbnVtR2x5cGhzLCBnbHlwaFNwYWNl
LmRhdGEoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIgYyA9ICpnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSk7Ci0gICAgICAgIGlmIChoYXNTaGFkb3cpIHsKLSAgICAgICAgICAgIFNldFRl
eHRDb2xvcihtX2RhdGEtPm1fZGMsIHNoYWRvd1JHQkNvbG9yKTsKLSAgICAgICAgICAgIEV4dFRl
eHRPdXQobV9kYXRhLT5tX2RjLCBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSksIHN0YWJs
ZVJvdW5kKHRyU2hhZG93UG9pbnQueSgpKSwgMCwgTlVMTCwgJmMsIDEsIDApOwotICAgICAgICB9
Ci0gICAgICAgIFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIGZvbnRDb2xvcik7Ci0gICAgICAg
IEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCBzdGFibGVSb3VuZCh0clBvaW50LngoKSksIHksIDAs
IE5VTEwsICZjLCAxLCAwKTsKLSAgICB9Ci0KLSAgICBTZXRUZXh0QWxpZ24obV9kYXRhLT5tX2Rj
LCBvbGRUZXh0QWxpZ24pOwotICAgIFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIG9sZFRleHRD
b2xvcik7Ci0gICAgU2V0QmtNb2RlKG1fZGF0YS0+bV9kYywgb2xkQmtNb2RlKTsKLSAgICBTZWxl
Y3RPYmplY3QobV9kYXRhLT5tX2RjLCBoT2xkRm9udCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RnJhbWVDb250cm9sKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHR5cGUs
IHVuc2lnbmVkIHN0YXRlKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IGludCBib3hXaWR0aEJlc3QgPSA4OwotICAgIGNvbnN0IGlu
dCBib3hIZWlnaHRCZXN0ID0gODsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1f
ZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIElu
dFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5
ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmcmVjdCwgMjU1LCB0cnVlKTsKLSAg
ICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJl
dHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBS
RUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0KLSAgICBpZiAoKHJlY3RXaW4ucmlnaHQgLSByZWN0V2lu
LmxlZnQpIDwgYm94V2lkdGhCZXN0KSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJt
cCA9IFNoYXJlZEJpdG1hcDo6Y3JlYXRlKEludFNpemUoYm94V2lkdGhCZXN0LCBib3hIZWlnaHRC
ZXN0KSwgQml0bWFwSW5mbzo6Qml0Q291bnQxNiwgdHJ1ZSk7Ci0gICAgICAgIFNoYXJlZEJpdG1h
cDo6RENIb2xkZXIgbWVtREMoYm1wLmdldCgpKTsKLSAgICAgICAgaWYgKG1lbURDLmdldCgpKSB7
Ci0gICAgICAgICAgICBSRUNUIHRlbXBSZWN0ID0gezAsIDAsIGJveFdpZHRoQmVzdCwgYm94SGVp
Z2h0QmVzdH07Ci0gICAgICAgICAgICBEcmF3RnJhbWVDb250cm9sKG1lbURDLmdldCgpLCAmdGVt
cFJlY3QsIHR5cGUsIHN0YXRlKTsKLQotICAgICAgICAgICAgOjpTdHJldGNoQmx0KGRjLCByZWN0
V2luLmxlZnQsIHJlY3RXaW4udG9wLCByZWN0V2luLnJpZ2h0IC0gcmVjdFdpbi5sZWZ0LCByZWN0
V2luLmJvdHRvbSAtIHJlY3RXaW4udG9wLCBtZW1EQy5nZXQoKSwgMCwgMCwgYm94V2lkdGhCZXN0
LCBib3hIZWlnaHRCZXN0LCBTUkNDT1BZKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIERyYXdGcmFtZUNvbnRyb2woZGMsICZyZWN0V2luLCB0eXBlLCBzdGF0
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1f
ZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJlY3QgPSBtX2Rh
dGEtPm1hcFJlY3QocmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMo
bV9kYXRhLCB0clJlY3QsICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygp
OwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3Bh
cmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBSRUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0gICAgRHJh
d0ZvY3VzUmVjdChkYywgJnJlY3RXaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRUZXh0RmllbGQoY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgc3RhdGUpCi17Ci0gICAg
aWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1By
b3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7
Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZy
ZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0g
ICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7
Ci0KLSAgICBSRUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0gICAgRHJhd0VkZ2UoZGMsICZyZWN0V2lu
LCBFREdFX0VUQ0hFRCwgQkZfUkVDVCB8IEJGX0FESlVTVCk7Ci0gICAgRmlsbFJlY3QoZGMsICZy
ZWN0V2luLCByZWludGVycHJldF9jYXN0PEhCUlVTSD4oKChzdGF0ZSAmIERGQ1NfSU5BQ1RJVkUp
ID8gQ09MT1JfQlRORkFDRSA6IENPTE9SX1dJTkRPVykgKyAxKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Qml0bWFwKFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBJbnRSZWN0JiBk
c3RSZWN0SW4sIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
LXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
Y29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2Rj
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRzdFJlY3QgPSBtX2RhdGEtPm1hcFJl
Y3QoZHN0UmVjdEluKTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2Rh
dGEsIGRzdFJlY3QsICZkc3RSZWN0SW4sIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJhbnNw
YXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgZHN0UmVj
dC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIGJtcC0+ZHJhdyhkYywgZHN0
UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoYm1wLT5p
czE2Yml0KCkpCi0gICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hhbm5lbCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0bWFwKiBi
bXAsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3RJbiwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpCi17
Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nv
cGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbnREc3RSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChkZXN0UmVjdEluKTsKLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChp
bnREc3RSZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEs
IHRyUmVjdCwgJmludERzdFJlY3QsIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJl
bnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1v
dmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UmVjdCBtb3ZlZERzdFJlY3Qg
PSBtX2RhdGEtPm1fdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdCh0clJlY3Qp
KTsKLSAgICBGbG9hdFNpemUgbW92ZWQobW92ZWREc3RSZWN0LmxvY2F0aW9uKCkgLSBkZXN0UmVj
dEluLmxvY2F0aW9uKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX2RhdGEt
Pm1fdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobW92ZWQud2lkdGgoKSwgbW92
ZWQuaGVpZ2h0KCkpOwotCi0gICAgYm1wLT5kcmF3UGF0dGVybihkYywgdHJhbnNmb3JtLCB0aWxl
UmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVz
dFJlY3RJbiwgb3JpZ1NvdXJjZVNpemUpOwotCi0gICAgaWYgKCFibXAtPmhhc0FscGhhKCkpCi0g
ICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hhbm5lbCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ljb24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYgZHN0UmVjdElu
LCBVSU5UIGZsYWdzKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYg
KCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZHN0UmVjdCA9
IG1fZGF0YS0+bWFwUmVjdChkc3RSZWN0SW4pOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFu
c3BhcmVudERDKG1fZGF0YSwgZHN0UmVjdCwgJmRzdFJlY3RJbiwgMjU1LCB0cnVlKTsKLSAgICBI
REMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVy
bjsKLSAgICBkc3RSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgRHJh
d0ljb25FeChkYywgZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBpY29uLCBkc3RSZWN0LndpZHRo
KCksIGRzdFJlY3QuaGVpZ2h0KCksIDAsIE5VTEwsIGZsYWdzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJEYXRh
V2luY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyRGF0YVdpbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDZkMzguLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJEYXRhV2luY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewotcHVibGlj
OgotICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7Ci0gICAgUmVmUHRyPFNoYXJl
ZEJpdG1hcD4gbV9iaXRtYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2MyM2Y4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBCdWZmZXJlZEltYWdlOiBwdWJsaWMgSW1hZ2UgewotCi1wdWJsaWM6Ci0gICAg
QnVmZmVyZWRJbWFnZShjb25zdCBJbWFnZUJ1ZmZlckRhdGEqIGRhdGEpCi0gICAgICAgIDogbV9k
YXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVL
bm93blRvQmVPcGFxdWUoKSB7IHJldHVybiAhbV9kYXRhLT5tX2JpdG1hcC0+aGFzQWxwaGEoKSA7
IH0KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9k
YXRhLT5tX2JpdG1hcC0+d2lkdGgoKSwgbV9kYXRhLT5tX2JpdG1hcC0+aGVpZ2h0KCkpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVl
KSB7fQotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Ci0KLSAgICBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEqIG1fZGF0YTsKLX07Ci0KLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikK
LXsKLSAgICBJbnRSZWN0IGludERzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpOwot
ICAgIEludFJlY3QgaW50U3JjUmVjdChzcmNSZWN0KTsKLSAgICBtX2RhdGEtPm1fYml0bWFwLT5k
cmF3KGN0eHQsIGludERzdFJlY3QsIGludFNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUpCi17Ci0gICAgbV9kYXRhLT5t
X2JpdG1hcC0+ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBzaXplKCkpOwotfQotCi1JbWFn
ZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDog
bV9iaXRtYXAoU2hhcmVkQml0bWFwOjpjcmVhdGUoc2l6ZSwgQml0bWFwSW5mbzo6Qml0Q291bnQz
MiwgZmFsc2UpKQotewotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtaHRtbDUt
MjAwOTAyMTIvdGhlLWNhbnZhcy1lbGVtZW50Lmh0bWwjY2FudmFzcGl4ZWxhcnJheQotICAgIC8v
ICJXaGVuIHRoZSBjYW52YXMgaXMgaW5pdGlhbGl6ZWQgaXQgbXVzdCBiZSBzZXQgdG8gZnVsbHkg
dHJhbnNwYXJlbnQgYmxhY2suIgotICAgIG1fYml0bWFwLT5yZXNldFBpeGVscyh0cnVlKTsKLSAg
ICBtX2JpdG1hcC0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1
ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0
YShzaXplKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi17
Ci0gICAgLy8gRklYTUU6IFJlc3BlY3QgcmVzb3V0aW9uU2NhbGUgdG8gc3VwcG9ydCBoaWdoLURQ
SSBjYW52YXMuCi0gICAgVU5VU0VEX1BBUkFNKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgLy8gRklY
TUU6IGNvbG9yU3BhY2UgaXMgbm90IHVzZWQKLSAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7
Ci0KLSAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KDApKTsKLSAg
ICBtX2NvbnRleHQtPnNldEJpdG1hcChtX2RhdGEubV9iaXRtYXApOwotICAgIHN1Y2Nlc3MgPSB0
cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKLXsKLX0KLQotR3JhcGhpY3ND
b250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWhhdmlvcikgY29uc3QKLXsK
LSAgICBBU1NFUlQoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQnVmZmVyZWRJbWFnZSgmbV9kYXRhKSk7Ci19Ci0KLUJhY2tpbmdTdG9y
ZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gQ29w
eUJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCi17
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uKCksIHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpOwotICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RS
ZWN0KTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4KLXN0YXRpYyBQYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgU2hhcmVkQml0bWFwKiBiaXRtYXApCi17Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChy
ZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBzcmMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYml0bWFwLT5ieXRl
cygpKTsKLSAgICBpZiAoIXNyYykKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7
Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoMCwgMCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAt
PmhlaWdodCgpKTsKLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChyZWN0KTsKLSAgICBpZiAoc291
cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwot
Ci0gICAgdW5zaWduZWQgY2hhciogZHN0ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgaW1hZ2VE
YXRhLT56ZXJvRmlsbCgpOwotICAgIHNyYyArPSAoc291cmNlUmVjdC55KCkgKiBiaXRtYXAtPndp
ZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwotICAgIGRzdCArPSAoKHNvdXJjZVJlY3QueSgp
IC0gcmVjdC55KCkpICogcmVjdC53aWR0aCgpICsgc291cmNlUmVjdC54KCkgLSByZWN0LngoKSkg
KiA0OwotICAgIGludCBieXRlc1RvQ29weSA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAg
aW50IHNyY1NraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gc291cmNlUmVjdC53aWR0aCgpKSAqIDQ7
Ci0gICAgaW50IGRzdFNraXAgPSAocmVjdC53aWR0aCgpIC0gc291cmNlUmVjdC53aWR0aCgpKSAq
IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgc291cmNlUmVjdC5o
ZWlnaHQoKSAqIHJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgd2hpbGUgKGRzdCA8IGRzdEVuZCkgewot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RSb3dFbmQgPSBkc3QgKyBieXRlc1RvQ29w
eTsKLSAgICAgICAgd2hpbGUgKGRzdCA8IGRzdFJvd0VuZCkgewotICAgICAgICAgICAgLy8gQ29u
dmVydCBBUkdCIGxpdHRsZSBlbmRpYW4gdG8gUkdCQSBiaWcgZW5kaWFuCi0gICAgICAgICAgICBp
bnQgYmx1ZSA9ICpzcmMrKzsKLSAgICAgICAgICAgIGludCBncmVlbiA9ICpzcmMrKzsKLSAgICAg
ICAgICAgIGludCByZWQgPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgYWxwaGEgPSAqc3JjKys7
Ci0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgICpkc3Qr
KyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTUp
OwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KChn
cmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTUpOwotICAg
ICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFscGhhKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4ocmVkKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbik7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYmx1ZSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYWxwaGEpOwotICAgICAgICAgICAgICAgICsrc3Jj
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNyYyArPSBzcmNTa2lwOwotICAg
ICAgICBkc3QgKz0gZHN0U2tpcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVh
c2UoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6Omdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lz
dGVtKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8ZmFsc2U+KHJlY3QsIG1fZGF0
YS5tX2JpdG1hcC5nZXQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTx0cnVl
PihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkqIHNvdXJj
ZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBTaGFy
ZWRCaXRtYXAqIGJpdG1hcCA9IG1fZGF0YS5tX2JpdG1hcC5nZXQoKTsKLSAgICB1bnNpZ25lZCBj
aGFyKiBkc3QgPSAodW5zaWduZWQgY2hhciopYml0bWFwLT5ieXRlcygpOwotICAgIGlmICghZHN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KGRlc3RQb2ludCwgc291
cmNlUmVjdC5zaXplKCkpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGJp
dG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSkpOwotCi0gICAgaWYgKGRlc3RSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogc3Jj
ID0gc291cmNlLT5kYXRhKCk7Ci0gICAgZHN0ICs9IChkZXN0UmVjdC55KCkgKiBiaXRtYXAtPndp
ZHRoKCkgKyBkZXN0UmVjdC54KCkpICogNDsKLSAgICBzcmMgKz0gKHNvdXJjZVJlY3QueSgpICog
c291cmNlU2l6ZS53aWR0aCgpICsgc291cmNlUmVjdC54KCkpICogNDsKLSAgICBpbnQgYnl0ZXNU
b0NvcHkgPSBkZXN0UmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgZHN0U2tpcCA9IChiaXRtYXAt
PndpZHRoKCkgLSBkZXN0UmVjdC53aWR0aCgpKSAqIDQ7Ci0gICAgaW50IHNyY1NraXAgPSAoc291
cmNlU2l6ZS53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0OwotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRzdEVuZCA9IGRzdCArIGRlc3RSZWN0LmhlaWdodCgpICogYml0bWFwLT53aWR0
aCgpICogNDsKLSAgICB3aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRzdFJvd0VuZCA9IGRzdCArIGJ5dGVzVG9Db3B5OwotICAgICAgICB3aGlsZSAo
ZHN0IDwgZHN0Um93RW5kKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IFJHQkEgYmlnIGVuZGlh
biB0byBBUkdCIGxpdHRsZSBlbmRpYW4KLSAgICAgICAgICAgIGludCByZWQgPSAqc3JjKys7Ci0g
ICAgICAgICAgICBpbnQgZ3JlZW4gPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgYmx1ZSA9ICpz
cmMrKzsKLSAgICAgICAgICAgIGludCBhbHBoYSA9ICpzcmMrKzsKLSAgICAgICAgICAgIGlmICht
dWx0aXBsaWVkID09IFByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihibHVlICogMjU1IC8gYWxwaGEpOwotICAgICAgICAg
ICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGdyZWVuICogMjU1IC8g
YWxwaGEpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KHJlZCAqIDI1NSAvIGFscGhhKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJsdWUpOwotICAg
ICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGdyZWVuKTsK
LSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihyZWQp
OwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFs
cGhhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzcmMgKz0gc3JjU2tpcDsK
LSAgICAgICAgZHN0ICs9IGRzdFNraXA7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxl
KQotewotICAgIFVOVVNFRF9QQVJBTShsb29rVXBUYWJsZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgY29uc3QgZG91YmxlKiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZGF0YS5tX2JpdG1hcC0+Ynl0ZXMoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJj
MGE5NjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvSW1hZ2VXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJXaW5jZUdyYXBo
aWNzRXh0cmFzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFNoYXJlZEJpdG1hcDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX3NpemUsIGhhc0FscGhh
KCkpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFEYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFEYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZSA9IDA7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKLXsK
LSAgICBpZiAoIWJtcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQklUTUFQIGJtcElu
Zm87Ci0gICAgR2V0T2JqZWN0KGJtcCwgc2l6ZW9mKEJJVE1BUCksICZibXBJbmZvKTsKLQotICAg
IEFTU0VSVChibXBJbmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpbnQgYnVmZmVyU2l6ZSA9
IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLQotICAgIGF1dG8gaGRj
ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotICAgIEhHRElPQkog
aE9sZEJtcCA9IFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGJtcCk7Ci0KLSAgICB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhoZGMuZ2V0KCkpOwotCi0gICAgICAgIEludFNpemUgaW1hZ2VT
aXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICAgICAgaWYgKHNpemUpCi0gICAgICAgICAg
ICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5m
by5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgKnNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3KCZnYywgRmxv
YXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0UmVj
dCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24oKSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwg
aE9sZEJtcCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCi17Ci0gICAgaW50IGZy
YW1lcyA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lczsgKytp
KSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IGZyYW1lQXRJbmRleChpKTsK
LSAgICAgICAgaWYgKCFibXAgfHwgYm1wLT5oZWlnaHQoKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3JjU2l6ZS5oZWlnaHQoKSkgfHwgYm1wLT53aWR0aCgpICE9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzcmNTaXplLndpZHRoKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
c2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwotICAgICAgICBtX2N1cnJlbnRG
cmFtZSA9IGk7Ci0gICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAsIDAsIHNy
Y1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpOwot
ICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBm
YWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCi0gICAgSW50U2l6ZSBpbWFnZVNp
emUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbigpKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0SW4sIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
KQotewotICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKQotICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY3R4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSW50UmVjdCBpbnRTcmNSZWN0KHNyY1JlY3RJ
bik7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IGZyYW1lQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7Ci0gICAgICAgIGlmIChibXApIHsKLSAgICAgICAgICAgIGlmIChibXAtPndp
ZHRoKCkgIT0gbV9zb3VyY2Uuc2l6ZSgpLndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBkb3Vi
bGUgc2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGJtcC0+d2lkdGgoKSkgLyBtX3Nv
dXJjZS5zaXplKCkud2lkdGgoKTsKLQotICAgICAgICAgICAgICAgIGludFNyY1JlY3Quc2V0WChz
dGFibGVSb3VuZChzcmNSZWN0SW4ueCgpICogc2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgICAg
ICBpbnRTcmNSZWN0LnNldFdpZHRoKHN0YWJsZVJvdW5kKHNyY1JlY3RJbi53aWR0aCgpICogc2Nh
bGVGYWN0b3IpKTsKLSAgICAgICAgICAgICAgICBpbnRTcmNSZWN0LnNldFkoc3RhYmxlUm91bmQo
c3JjUmVjdEluLnkoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgaW50U3JjUmVj
dC5zZXRIZWlnaHQoc3RhYmxlUm91bmQoc3JjUmVjdEluLmhlaWdodCgpICogc2NhbGVGYWN0b3Ip
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJtcC0+ZHJhdyhjdHh0LCBlbmNsb3NpbmdJ
bnRSZWN0KGRzdFJlY3QpLCBpbnRTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9w
LCBibGVuZE1vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhcnRBbmltYXRpb24oKTsK
LX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghYm1wKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBibXAtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgbV9zb3VyY2Uuc2l6ZSgp
KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2
ZWwoKSBjb25zdAotewotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgPSAwOwotfQotCi12
b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQotewotICAgIGlmIChtX2NoZWNr
ZWRGb3JTb2xpZENvbG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZnJhbWVDb3VudCgp
ICE9IDEpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgbV9jaGVj
a2VkRm9yU29saWRDb2xvciA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgoMCk7Ci0gICAgaWYgKCFibXAg
fHwgIWJtcC0+dmFsaWRIZWlnaHQoKSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGJtcC0+d2lkdGgoKSAhPSAxIHx8
IGJtcC0+dmFsaWRIZWlnaHQoKSAhPSAxKSB7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFs
c2U7Ci0gICAgICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwotCi0gICAgaWYgKGJtcC0+
aXMxNmJpdCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGMgPSAoKHVuc2lnbmVkIHNob3J0
ICopYm1wLT5ieXRlcygpKVswXTsKLSAgICAgICAgaW50IHIgPSAoYyA+PiA3KSAmIDB4Rjg7Ci0g
ICAgICAgIGludCBnID0gKGMgPj4gMikgJiAweEY4OwotICAgICAgICBpbnQgYiA9IChjIDw8IDMp
ICYgMHhGODsKLSAgICAgICAgaWYgKGJtcC0+dXNlc1RyYW5zcGFyZW50Q29sb3IoKSAmJiBibXAt
PnRyYW5zcGFyZW50Q29sb3IoKSA9PSBSR0IociwgZywgYikpCi0gICAgICAgICAgICBtX3NvbGlk
Q29sb3IgPSBDb2xvcihyLCBnLCBiLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9z
b2xpZENvbG9yID0gQ29sb3IociwgZywgYik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWdu
ZWQgYyA9ICgodW5zaWduZWQgKilibXAtPmJ5dGVzKCkpWzBdOwotICAgICAgICBtX3NvbGlkQ29s
b3IgPSBDb2xvcihjKTsKLSAgICB9Ci0KLSAgICBpZiAoYm1wLT52YWxpZEhlaWdodCgpID09IGJt
cC0+aGVpZ2h0KCkpCi0gICAgICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZhdGVXaW5DRS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjMjUyMy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZhdGVXaW5D
RS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE1lZGlh
UGxheWVyUHJpdmF0ZVdpbkNFX2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0VfaAot
Ci0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgSW50UmVjdDsKLQotICAgIGNs
YXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2lu
ZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7Ci0KLSAgICAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgp
OwotCi0gICAgICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKLSAgICAgICAgYm9vbCBo
YXNWaWRlbygpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCk7
Ci0gICAgICAgIHZvaWQgY2FuY2VsTG9hZCgpOwotCi0gICAgICAgIHZvaWQgcGxheSgpOwotICAg
ICAgICB2b2lkIHBhdXNlKCk7Ci0KLSAgICAgICAgYm9vbCBwYXVzZWQoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgZmxvYXQgZHVyYXRpb24oKSBjb25z
dDsKLSAgICAgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZWVr
KGZsb2F0IHRpbWUpOwotCi0gICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0gICAgICAgIHZv
aWQgc2V0Vm9sdW1lKGZsb2F0KTsKLQotICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1N0YXRlOyB9Ci0gICAgICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
YWR5U3RhdGU7IH0KLQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2Vz
PiBidWZmZXJlZCgpIGNvbnN0OwotICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25z
dDsKLSAgICAgICAgLy8gRklYTUU6IGJ5dGVzTG9hZGVkKCkgc2hvdWxkIGJlIHJlcGxhY2VkIHdp
dGggZGlkTG9hZGluZ1Byb2dyZXNzKCkgKGJ5IHNvbWVib2R5IHdobyBjYW4gZmluZCB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcykuCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVzTG9hZGVk
KCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRT
aXplJik7Ci0KLSAgICAgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAgIHZvaWQg
ZGlkRW5kKCk7Ci0KLSAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVk
aWFQbGF5ZXIqKTsKLQotICAgICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgICAgICB2b2lk
IGRvU2VlaygpOwotICAgICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICAgICAgdm9pZCBzZWVr
VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7Ci0gICAgICAgIGZsb2F0IG1h
eFRpbWVMb2FkZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzYXdVbnN1cHBvcnRlZFRyYWNrcygp
OwotCi0gICAgICAgIC8vIGVuZ2luZSBzdXBwb3J0Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRy
PE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMp
OwotICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOwotICAgICAgICBzdGF0aWMgYm9v
bCBpc0F2YWlsYWJsZSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuZ2luZURlc2NyaXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gIldpbkNFIjsgfQotCi0gICAgICAgIE1lZGlhUGxheWVyKiBt
X3BsYXllcjsKLSAgICAgICAgZmxvYXQgbV9zZWVrVG87Ci0gICAgICAgIGZsb2F0IG1fZW5kVGlt
ZTsKLSAgICAgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3NlZWtUaW1lcjsKLSAgICAg
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKLSAgICAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgICAgICB1bnNpZ25lZCBtX2Vu
YWJsZWRUcmFja0NvdW50OwotICAgICAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tDb3VudDsKLSAg
ICAgICAgYm9vbCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzOwotICAgICAgICBib29sIG1fc3RhcnRl
ZFBsYXlpbmc7Ci0gICAgICAgIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICB9OwotCi19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCi0KLSNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVXaW5D
RV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9N
ZWRpYVBsYXllclByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL01lZGlhUGxheWVyUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
OGQxMDQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL01lZGlhUGxheWVyUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByb3h5LmgiCi0KLSNpbmNsdWRlICJCcmlkZ2VK
U0MuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5F
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgotI2luY2x1ZGUgIkpTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oIgotI2luY2x1
ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBsdWdpblZp
ZXcuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSAiY19jbGFzcy5oIgotI2luY2x1
ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJucHJ1
bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBCaW5kaW5nczsKLXVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Ci0KLVdlYk1lZGlhUGxheWVyUHJveHk6OldlYk1lZGlhUGxheWVyUHJveHko
TWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fbWVkaWFQbGF5ZXIocGxheWVyKQotICAgICwg
bV9pbml0KGZhbHNlKQotICAgICwgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbihmYWxzZSkKLXsK
LSAgICBpZiAoIW1faW5pdCkKLSAgICAgICAgaW5pdEVuZ2luZSgpOwotfQotCi1XZWJNZWRpYVBs
YXllclByb3h5Ojp+V2ViTWVkaWFQbGF5ZXJQcm94eSgpCi17Ci0gICAgbV9pbnN0YW5jZS5yZWxl
YXNlKCk7Ci19Ci0KLVNjcmlwdEluc3RhbmNlIFdlYk1lZGlhUGxheWVyUHJveHk6OnBsdWdpbklu
c3RhbmNlKCkKLXsKLSAgICBpZiAoIW1faW5zdGFuY2UpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiByID0gZWxlbWVudCgpLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXIgfHwgIXItPmlzV2lk
Z2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBGcmFtZSogZnJhbWUgPSBl
bGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLQotICAgICAgICBSZW5kZXJXaWRnZXQqIHJl
bmRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KGVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJXaWRnZXQgJiYgcmVuZGVyV2lkZ2V0LT53aWRnZXQo
KSkKLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+c2NyaXB0KCkuY3JlYXRlU2NyaXB0
SW5zdGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1faW5zdGFuY2U7Ci19Ci0KLXZvaWQgV2ViTWVkaWFQbGF5ZXJQcm94eTo6bG9hZChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoIW1faW5pdCkKLSAgICAgICAgaW5pdEVuZ2lu
ZSgpOwotICAgIGlmIChtX2luaXQpCi0gICAgICAgIGludm9rZU1ldGhvZCgicGxheSIpOwotfQot
Ci12b2lkIFdlYk1lZGlhUGxheWVyUHJveHk6OmluaXRFbmdpbmUoKQotewotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobV9tZWRpYVBsYXllci0+bWVk
aWFQbGF5ZXJDbGllbnQoKSk7Ci0gICAgU3RyaW5nIHVybCA9IGVsZW1lbnQtPmluaXRpYWxVUkwo
KTsKLQotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFt
ZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gcGFyYW1OYW1lczsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKLSAgICBTdHJp
bmcgc2VydmljZVR5cGU7Ci0KLSAgICAvLyBhZGQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBl
bWJlZCBvYmplY3QKLSAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOyArK2kp
IHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBlbGVtZW50LT5hdHRyaWJ1dGVJdGVtKGkp
OwotICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5z
dHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuc3Ry
aW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9u
L3gtbXBsYXllcjIiOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVx
dWVzdE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4oZWxlbWVudC0+cmVuZGVy
ZXIoKSksIHVybCwgbnVsbEF0b20sIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7Ci0gICAgbV9pbml0ID0gdHJ1ZTsKLQotfQotCi1IVE1MTWVkaWFFbGVtZW50KiBXZWJNZWRp
YVBsYXllclByb3h5OjplbGVtZW50KCkKLXsKLSAgICByZXR1cm4gdG9IVE1MTWVkaWFFbGVtZW50
KG1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOwotCi19Ci0KLXZvaWQgV2ViTWVk
aWFQbGF5ZXJQcm94eTo6aW52b2tlTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSkKLXsK
LSAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBS
b290T2JqZWN0KiByb290ID0gZnJhbWUtPnNjcmlwdCgpLmJpbmRpbmdSb290T2JqZWN0KCk7Ci0g
ICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0gICAgRXhlY1N0YXRlICpleGVjID0gcm9v
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBJbnN0YW5jZSogaW5zdGFuY2Ug
PSBwbHVnaW5JbnN0YW5jZSgpLmdldCgpOwotICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIENsYXNzICphQ2xhc3MgPSBpbnN0
YW5jZS0+Z2V0Q2xhc3MoKTsKLSAgICBJZGVudGlmaWVyIGlkZW4oZXhlYywgbWV0aG9kTmFtZSk7
Ci0gICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gYUNsYXNzLT5tZXRob2RzTmFtZWQoaWRlbiwg
aW5zdGFuY2UpOwotICAgIEFyZ0xpc3QgYXJnczsKLSAgICBpbnN0YW5jZS0+aW52b2tlTWV0aG9k
KGV4ZWMsIG1ldGhvZExpc3QgLCBhcmdzKTsKLSAgICBpbnN0YW5jZS0+ZW5kKCk7Ci19Ci0KLX0K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9NZWRpYVBsYXllclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE0OTVhMjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvTWVkaWFQbGF5ZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJveHlfaAotI2RlZmlu
ZSBNZWRpYVBsYXllclByb3h5X2gKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEludFJlY3Q7
Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBNZWRpYVBsYXllcjsKLSAgICBjbGFzcyBQ
bHVnaW5WaWV3OwotICAgIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci0KLSAgICBlbnVtIE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKLSAgICAgICAgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25QbGF5UGF1c2VCdXR0b25QcmVzc2VkLAotICAgICAgICBJZGxlLAotICAgICAgICBMb2Fk
aW5nLAotICAgICAgICBMb2FkZWQsCi0gICAgICAgIEZvcm1hdEVycm9yLAotICAgICAgICBOZXR3
b3JrRXJyb3IsCi0gICAgICAgIERlY29kZUVycm9yCi0gICAgfTsKLQotICAgIGNsYXNzIFdlYk1l
ZGlhUGxheWVyUHJveHkgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2ViTWVkaWFQbGF5ZXJQcm94
eShNZWRpYVBsYXllciogcGxheWVyKTsKLSAgICAgICAgfldlYk1lZGlhUGxheWVyUHJveHkoKTsK
LQotICAgICAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSB7cmV0dXJuIG1fbWVkaWFQbGF5
ZXI7fQotICAgICAgICB2b2lkIGluaXRFbmdpbmUoKTsKLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0
IFN0cmluZyYgdXJsKTsKLSAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCgpOwotICAg
ICAgICB2b2lkIGludm9rZU1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUpOwotICAgICAg
ICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IHBsdWdpbkluc3RhbmNlKCk7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKLSAgICAgICAg
Ym9vbCBtX2luaXQ7Ci0gICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsK
LSAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwotICAgICAgICBTY3JpcHRJ
bnN0YW5jZSBtX2luc3RhbmNlOwotICAgIH07Ci0KLX0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8p
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvUGF0aFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL1BhdGhXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2U5ZTcu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0
aFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXRoOjpQYXRoKCkKLSAgICA6IG1fcGF0aChuZXcgUGxhdGZvcm1QYXRoKCkpCi17Ci19
Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi0gICAgOiBtX3BhdGgobmV3IFBsYXRm
b3JtUGF0aCgqb3RoZXIubV9wYXRoKSkKLXsKLX0KLQotUGF0aDo6flBhdGgoKQotewotICAgIGRl
bGV0ZSBtX3BhdGg7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhl
cikKLXsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKLSAgICAgICAgZGVsZXRlIG1fcGF0aDsK
LSAgICAgICAgbV9wYXRoID0gbmV3IFBsYXRmb3JtUGF0aCgqb3RoZXIubV9wYXRoKTsKLSAgICB9
Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgt
PmNvbnRhaW5zKHBvaW50LCBydWxlKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQotewotICAgIG1fcGF0aC0+dHJhbnNsYXRlKHNpemUpOwotfQotCi1G
bG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRo
LT5ib3VuZGluZ1JlY3QoKTsKLX0KLQotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOwotfQotCi12b2lkIFBhdGg6
OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBtX3BhdGgtPmFkZExp
bmVUbyhwb2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgbV9wYXRoLT5hZGRRdWFkQ3Vy
dmVUbyhjcCwgcCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9h
dFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkK
LXsKLSAgICBtX3BhdGgtPmFkZEJlemllckN1cnZlVG8oY3AxLCBjcDIsIHApOwotfQotCi12b2lk
IFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBw
MiwgZmxvYXQgcmFkaXVzKQotewotICAgIG1fcGF0aC0+YWRkQXJjVG8ocDEsIHAyLCByYWRpdXMp
OwotfQotCi12b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCi17Ci0gICAgbV9wYXRoLT5jbG9zZVN1
YnBhdGgoKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxv
YXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBt
X3BhdGgtPmFkZEVsbGlwc2UocCwgciwgciwgc2FyLCBlYXIsIGFudGljbG9ja3dpc2UpOwotfQot
Ci12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG1fcGF0aC0+
YWRkUmVjdChyKTsKLX0KLQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cikKLXsKLSAgICBtX3BhdGgtPmFkZEVsbGlwc2Uocik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUGF0
aChjb25zdCBQYXRoJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmNsZWFyKCkKLXsKLSAgICBtX3BhdGgtPmNsZWFyKCk7
Ci19Ci0KLWJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGF0aC0+
aXNFbXB0eSgpOwotfQotCi12b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVy
RnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgbV9wYXRoLT5hcHBseShpbmZvLCBmdW5j
dGlvbik7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dCkKLXsKLSAgICBtX3BhdGgtPnRyYW5zZm9ybSh0KTsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OnN0
cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqKSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi1ib29sIFBhdGg6OnN0
cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0Ci17Ci0gICAgLy8gTm90IHN1cmUgaWYgdGhp
cyBpcyBjb3JyZWN0LiBBdCB0aGUgbWVhbnRpbWUsIHdlIGRvIHdoYXQgb3RoZXIgcG9ydHMKLSAg
ICAvLyBkby4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3MjY2LAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzE4NywgYW5kIAotICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQ1
ODczCi0gICAgcmV0dXJuICFpc0VtcHR5KCk7Ci19Ci0KLUZsb2F0UG9pbnQgUGF0aDo6Y3VycmVu
dFBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRoLT5sYXN0UG9pbnQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiNTc5ZDkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDc3MiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJXaW5DRUdyYXBoaWNzRXh0cmFzLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gSW1wbGVtZW50ZWQgaW4gR3JhcGhpY3NDb250ZXh0V2luQ0UuY3Bw
Ci12b2lkIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoZG91YmxlIGFuZ2xlLCBkb3VibGUgYSwgZG91
YmxlIGIsIGZsb2F0JiB4LCBmbG9hdCYgeSk7Ci0KLXN0YXRpYyB2b2lkIHF1YWRDdXJ2ZShpbnQg
c2VnbWVudHMsIFZlY3RvcjxQYXRoUG9pbnQ+JiBwdHMsIGNvbnN0IFBhdGhQb2ludCogY29udHJv
bCkKLXsKLSAgICBjb25zdCBmbG9hdCBzdGVwID0gMS4wIC8gc2VnbWVudHM7Ci0gICAgcmVnaXN0
ZXIgZmxvYXQgdEEgPSAwLjA7Ci0gICAgcmVnaXN0ZXIgZmxvYXQgdEIgPSAxLjA7Ci0KLSAgICBm
bG9hdCBjMXggPSBjb250cm9sWzBdLngoKTsKLSAgICBmbG9hdCBjMXkgPSBjb250cm9sWzBdLnko
KTsKLSAgICBmbG9hdCBjMnggPSBjb250cm9sWzFdLngoKTsKLSAgICBmbG9hdCBjMnkgPSBjb250
cm9sWzFdLnkoKTsKLSAgICBmbG9hdCBjM3ggPSBjb250cm9sWzJdLngoKTsKLSAgICBmbG9hdCBj
M3kgPSBjb250cm9sWzJdLnkoKTsKLQotICAgIGNvbnN0IGludCBvZmZzZXQgPSBwdHMuc2l6ZSgp
OwotICAgIHB0cy5yZXNpemUob2Zmc2V0ICsgc2VnbWVudHMpOwotICAgIFBhdGhQb2ludCBwcDsK
LSAgICBwcC5tX3ggPSBjMXg7Ci0gICAgcHAubV95ID0gYzF5OwotCi0gICAgZm9yIChpbnQgaSA9
IDE7IGkgPCBzZWdtZW50czsgKytpKSB7Ci0gICAgICAgIHRBICs9IHN0ZXA7Ci0gICAgICAgIHRC
IC09IHN0ZXA7Ci0KLSAgICAgICAgY29uc3QgZmxvYXQgYSA9IHRCICogdEI7Ci0gICAgICAgIGNv
bnN0IGZsb2F0IGIgPSAyLjAgKiB0QSAqIHRCOwotICAgICAgICBjb25zdCBmbG9hdCBjID0gdEEg
KiB0QTsKLQotICAgICAgICBwcC5tX3ggPSBjMXggKiBhICsgYzJ4ICogYiArIGMzeCAqIGM7Ci0g
ICAgICAgIHBwLm1feSA9IGMxeSAqIGEgKyBjMnkgKiBiICsgYzN5ICogYzsKLQotICAgICAgICBw
dHNbb2Zmc2V0ICsgaSAtIDFdID0gcHA7Ci0gICAgfQotCi0gICAgcHAubV94ID0gYzN4OwotICAg
IHBwLm1feSA9IGMzeTsKLSAgICBwdHNbb2Zmc2V0ICsgc2VnbWVudHMgLSAxXSA9IHBwOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYmV6aWVyKGludCBzZWdtZW50cywgVmVjdG9yPFBhdGhQb2lu
dD4mIHB0cywgY29uc3QgUGF0aFBvaW50KiBjb250cm9sKQotewotICAgIGNvbnN0IGZsb2F0IHN0
ZXAgPSAxLjAgLyBzZWdtZW50czsKLSAgICByZWdpc3RlciBmbG9hdCB0QSA9IDAuMDsKLSAgICBy
ZWdpc3RlciBmbG9hdCB0QiA9IDEuMDsKLQotICAgIGZsb2F0IGMxeCA9IGNvbnRyb2xbMF0ueCgp
OwotICAgIGZsb2F0IGMxeSA9IGNvbnRyb2xbMF0ueSgpOwotICAgIGZsb2F0IGMyeCA9IGNvbnRy
b2xbMV0ueCgpOwotICAgIGZsb2F0IGMyeSA9IGNvbnRyb2xbMV0ueSgpOwotICAgIGZsb2F0IGMz
eCA9IGNvbnRyb2xbMl0ueCgpOwotICAgIGZsb2F0IGMzeSA9IGNvbnRyb2xbMl0ueSgpOwotICAg
IGZsb2F0IGM0eCA9IGNvbnRyb2xbM10ueCgpOwotICAgIGZsb2F0IGM0eSA9IGNvbnRyb2xbM10u
eSgpOwotCi0gICAgY29uc3QgaW50IG9mZnNldCA9IHB0cy5zaXplKCk7Ci0gICAgcHRzLnJlc2l6
ZShvZmZzZXQgKyBzZWdtZW50cyk7Ci0gICAgUGF0aFBvaW50IHBwOwotICAgIHBwLm1feCA9IGMx
eDsKLSAgICBwcC5tX3kgPSBjMXk7Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlZ21lbnRz
OyArK2kpIHsKLSAgICAgICAgdEEgKz0gc3RlcDsKLSAgICAgICAgdEIgLT0gc3RlcDsKLSAgICAg
ICAgY29uc3QgZmxvYXQgdEFzcSA9IHRBICogdEE7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHRCc3Eg
PSB0QiAqIHRCOwotCi0gICAgICAgIGNvbnN0IGZsb2F0IGEgPSB0QnNxICogdEI7Ci0gICAgICAg
IGNvbnN0IGZsb2F0IGIgPSAzLjAgKiB0QSAqIHRCc3E7Ci0gICAgICAgIGNvbnN0IGZsb2F0IGMg
PSAzLjAgKiB0QiAqIHRBc3E7Ci0gICAgICAgIGNvbnN0IGZsb2F0IGQgPSB0QXNxICogdEE7Ci0K
LSAgICAgICAgcHAubV94ID0gYzF4ICogYSArIGMyeCAqIGIgKyBjM3ggKiBjICsgYzR4ICogZDsK
LSAgICAgICAgcHAubV95ID0gYzF5ICogYSArIGMyeSAqIGIgKyBjM3kgKiBjICsgYzR5ICogZDsK
LQotICAgICAgICBwdHNbb2Zmc2V0ICsgaSAtIDFdID0gcHA7Ci0gICAgfQotCi0gICAgcHAubV94
ID0gYzR4OwotICAgIHBwLm1feSA9IGM0eTsKLSAgICBwdHNbb2Zmc2V0ICsgc2VnbWVudHMgLSAx
XSA9IHBwOwotfQotCi1zdGF0aWMgYm9vbCBjb250YWluc1BvaW50KGNvbnN0IEZsb2F0UmVjdCYg
ciwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gcC54KCkgPj0gci54KCkgJiYg
cC55KCkgPj0gci55KCkgJiYgcC54KCkgPCByLm1heFgoKSAmJiBwLnkoKSA8IHIubWF4WSgpOwot
fQotCi1zdGF0aWMgdm9pZCBub3JtYWxpemVBbmdsZShmbG9hdCYgYW5nbGUpCi17Ci0gICAgYW5n
bGUgPSBmbW9kKGFuZ2xlLCAyICogcGlGbG9hdCk7Ci0gICAgaWYgKGFuZ2xlIDwgMCkKLSAgICAg
ICAgYW5nbGUgKz0gMiAqIHBpRmxvYXQ7Ci0gICAgaWYgKGFuZ2xlIDwgMC4wMDAwMWYpCi0gICAg
ICAgIGFuZ2xlID0gMDsKLX0KLQotc3RhdGljIHZvaWQgdHJhbnNmb3JtQXJjUG9pbnQoZmxvYXQm
IHgsIGZsb2F0JiB5LCBjb25zdCBGbG9hdFBvaW50JiBjKQotewotICAgIHggKz0gYy54KCk7Ci0g
ICAgeSArPSBjLnkoKTsKLX0KLQotc3RhdGljIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Qb2lu
dChGbG9hdFJlY3QmIHIsIGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaWYgKHIuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHIuc2V0WCh4KTsKLSAgICAgICAgci5zZXRZKHkpOwotICAgICAgICByLnNl
dFNpemUoRmxvYXRTaXplKDEsIDEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
eCA8IHIueCgpKSB7Ci0gICAgICAgIHIuc2V0V2lkdGgoci5tYXhYKCkgLSB4KTsKLSAgICAgICAg
ci5zZXRYKHgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IHcgPSB4IC0gci54KCkgKyAx
OwotICAgICAgICBpZiAodyA+IHIud2lkdGgoKSkKLSAgICAgICAgICAgIHIuc2V0V2lkdGgodyk7
Ci0gICAgfQotICAgIGlmICh5IDwgci55KCkpIHsKLSAgICAgICAgci5zZXRIZWlnaHQoci5tYXhZ
KCkgLSB5KTsKLSAgICAgICAgci5zZXRZKHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGggPSAgeSAtIHIueSgpICsgMTsKLSAgICAgICAgaWYgKGggPiByLmhlaWdodCgpKQotICAgICAg
ICAgICAgci5zZXRIZWlnaHQoaCk7Ci0gICAgfQotfQotCi0vLyByZXR1cm4gMC1iYXNlZCB2YWx1
ZTogMCAtIGZpcnN0IFF1YWRyYW50ICggMCAtIDkwIGRlZ3JlZSkKLXN0YXRpYyBpbmxpbmUgaW50
IHF1YWRyYW50KGNvbnN0IFBhdGhQb2ludCYgcG9pbnQsIGNvbnN0IFBhdGhQb2ludCYgb3JpZ2lu
KQotewotICAgIHJldHVybiBwb2ludC5tX3ggPCBvcmlnaW4ubV94ID8KLSAgICAgICAgKHBvaW50
Lm1feSA8IG9yaWdpbi5tX3kgPyAyIDogMSkKLSAgICAgICAgOiAocG9pbnQubV95IDwgb3JpZ2lu
Lm1feSA/IDMgOiAwKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUXVhZHJhbnRPbkxlZnQo
aW50IHEpIHsgcmV0dXJuIHEgPT0gMSB8fCBxID09IDI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1F1YWRyYW50T25SaWdodChpbnQgcSkgeyByZXR1cm4gcSA9PSAwIHx8IHEgPT0gMzsgfQotc3Rh
dGljIGlubGluZSBib29sIGlzUXVhZHJhbnRPblRvcChpbnQgcSkgeyByZXR1cm4gcSA9PSAyIHx8
IHEgPT0gMzsgfQotc3RhdGljIGlubGluZSBib29sIGlzUXVhZHJhbnRPbkJvdHRvbShpbnQgcSkg
eyByZXR1cm4gcSA9PSAwIHx8IHEgPT0gMTsgfQotCi1zdGF0aWMgaW5saW5lIGludCBuZXh0UXVh
ZHJhbnQoaW50IHEpIHsgcmV0dXJuIHEgPT0gMyA/IDAgOiBxICsgMTsgfQotc3RhdGljIGlubGlu
ZSBpbnQgcXVhZHJhbnREaWZmKGludCBxMSwgaW50IHEyKQotewotICAgIGludCBkID0gcTEgLSBx
MjsKLSAgICB3aGlsZSAoZCA8IDApCi0gICAgICAgIGQgKz0gNDsKLSAgICByZXR1cm4gZDsKLX0K
LQotc3RydWN0IFBhdGhWZWN0b3IgewotICAgIGZsb2F0IG1feDsKLSAgICBmbG9hdCBtX3k7Ci0K
LSAgICBQYXRoVmVjdG9yKCkgOiBtX3goMCksIG1feSgwKSB7fQotICAgIFBhdGhWZWN0b3IoZmxv
YXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7fQotICAgIGRvdWJsZSBhbmdsZSgpIGNv
bnN0IHsgcmV0dXJuIGF0YW4yKG1feSwgbV94KTsgfQotICAgIG9wZXJhdG9yIGRvdWJsZSAoKSBj
b25zdCB7IHJldHVybiBhbmdsZSgpOyB9Ci0gICAgZG91YmxlIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIF9oeXBvdChtX3gsIG1feSk7IH0KLX07Ci0KLVBhdGhWZWN0b3Igb3BlcmF0b3ItKGNvbnN0
IFBhdGhQb2ludCYgcDEsIGNvbnN0IFBhdGhQb2ludCYgcDIpCi17Ci0gICAgcmV0dXJuIFBhdGhW
ZWN0b3IocDEubV94IC0gcDIubV94LCBwMS5tX3kgLSBwMi5tX3kpOwotfQotCi1zdGF0aWMgdm9p
ZCBhZGRBcmNQb2ludChQYXRoUG9seWdvbiYgcG9seSwgY29uc3QgUGF0aFBvaW50JiBjZW50ZXIs
IGNvbnN0IFBhdGhQb2ludCYgcmFkaXVzLCBkb3VibGUgYW5nbGUpCi17Ci0gICAgUGF0aFBvaW50
IHA7Ci0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShhbmdsZSwgcmFkaXVzLm1feCwgcmFkaXVz
Lm1feSwgcC5tX3gsIHAubV95KTsKLSAgICB0cmFuc2Zvcm1BcmNQb2ludChwLm1feCwgcC5tX3ks
IGNlbnRlcik7Ci0gICAgaWYgKHBvbHkuaXNFbXB0eSgpIHx8IHBvbHkubGFzdCgpICE9IHApCi0g
ICAgICAgIHBvbHkuYXBwZW5kKHApOwotfQotCi1zdGF0aWMgdm9pZCBhZGRBcmNQb2ludHMoUGF0
aFBvbHlnb24mIHBvbHksIGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkFyY1RvJiBkYXRhKQot
ewotICAgIGNvbnN0IFBhdGhQb2ludCYgc3RhcnRQb2ludCA9IHBvbHkubGFzdCgpOwotICAgIGRv
dWJsZSBjdXJBbmdsZSA9IHN0YXJ0UG9pbnQgLSBkYXRhLm1fY2VudGVyOwotICAgIGRvdWJsZSBl
bmRBbmdsZSA9IGRhdGEubV9lbmQgLSBkYXRhLm1fY2VudGVyOwotICAgIGRvdWJsZSBhbmdsZVN0
ZXAgPSAyLiAvIHN0ZDo6bWF4KGRhdGEubV9yYWRpdXMubV94LCBkYXRhLm1fcmFkaXVzLm1feSk7
Ci0gICAgaWYgKGRhdGEubV9jbG9ja3dpc2UpIHsKLSAgICAgICAgaWYgKGVuZEFuZ2xlIDw9IGN1
ckFuZ2xlIHx8IHN0YXJ0UG9pbnQgPT0gZGF0YS5tX2VuZCkKLSAgICAgICAgICAgIGVuZEFuZ2xl
ICs9IDIgKiBwaURvdWJsZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhbmdsZVN0ZXAgPSAtYW5n
bGVTdGVwOwotICAgICAgICBpZiAoZW5kQW5nbGUgPj0gY3VyQW5nbGUgfHwgc3RhcnRQb2ludCA9
PSBkYXRhLm1fZW5kKQotICAgICAgICAgICAgZW5kQW5nbGUgLT0gMiAqIHBpRG91YmxlOwotICAg
IH0KLQotICAgIGZvciAoY3VyQW5nbGUgKz0gYW5nbGVTdGVwOyBkYXRhLm1fY2xvY2t3aXNlID8g
Y3VyQW5nbGUgPCBlbmRBbmdsZSA6IGN1ckFuZ2xlID4gZW5kQW5nbGU7IGN1ckFuZ2xlICs9IGFu
Z2xlU3RlcCkKLSAgICAgICAgYWRkQXJjUG9pbnQocG9seSwgZGF0YS5tX2NlbnRlciwgZGF0YS5t
X3JhZGl1cywgY3VyQW5nbGUpOwotCi0gICAgaWYgKHBvbHkuaXNFbXB0eSgpIHx8IHBvbHkubGFz
dCgpICE9IGRhdGEubV9lbmQpCi0gICAgICAgIHBvbHkuYXBwZW5kKGRhdGEubV9lbmQpOwotfQot
Ci1zdGF0aWMgdm9pZCBkcmF3UG9seWdvbnMoSERDIGRjLCBjb25zdCBWZWN0b3I8UGF0aFBvbHln
b24+JiBwb2x5Z29ucywgYm9vbCBmaWxsLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9y
bWF0aW9uKQotewotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6Y29uc3RfaXRlcmF0b3Ig
aSA9IHBvbHlnb25zLmJlZ2luKCk7IGkgIT0gcG9seWdvbnMuZW5kKCk7ICsraSkgewotICAgICAg
ICBpbnQgbnBvaW50cyA9IGktPnNpemUoKTsKLSAgICAgICAgaWYgKCFucG9pbnRzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUE9JTlQqIHdpblBvaW50cyA9IDA7Ci0gICAgICAg
IGlmIChmaWxsKSB7Ci0gICAgICAgICAgICBpZiAobnBvaW50cyA+IDIpCi0gICAgICAgICAgICAg
ICAgd2luUG9pbnRzID0gbmV3IFBPSU5UW25wb2ludHMgKyAxXTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB3aW5Qb2ludHMgPSBuZXcgUE9JTlRbbnBvaW50c107Ci0KLSAgICAgICAgaWYg
KHdpblBvaW50cykgewotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8IG5wb2ludHM7ICsraTIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludCB0clBvaW50ID0gdHJhbnNmb3JtYXRpb24tPm1hcFBvaW50
KGktPmF0KGkyKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0ueCA9IHN0YWJs
ZVJvdW5kKHRyUG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9pbnRzW2kyXS55
ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8IG5wb2lu
dHM7ICsraTIpIHsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9pbnRzW2kyXS54ID0gc3RhYmxl
Um91bmQoaS0+YXQoaTIpLngoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0u
eSA9IHN0YWJsZVJvdW5kKGktPmF0KGkyKS55KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpbGwgJiYgd2luUG9pbnRzW25wb2ludHMgLSAx
XSAhPSB3aW5Qb2ludHNbMF0pIHsKLSAgICAgICAgICAgICAgICB3aW5Qb2ludHNbbnBvaW50c10u
eCA9IHdpblBvaW50c1swXS54OwotICAgICAgICAgICAgICAgIHdpblBvaW50c1tucG9pbnRzXS55
ID0gd2luUG9pbnRzWzBdLnk7Ci0gICAgICAgICAgICAgICAgKytucG9pbnRzOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoZmlsbCkKLSAgICAgICAgICAgICAgICA6OlBvbHlnb24o
ZGMsIHdpblBvaW50cywgbnBvaW50cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgOjpQb2x5bGluZShkYywgd2luUG9pbnRzLCBucG9pbnRzKTsKLSAgICAgICAgICAgIGRlbGV0
ZVtdIHdpblBvaW50czsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi1pbnQgUGxhdGZvcm1QYXRo
RWxlbWVudDo6bnVtQ29udHJvbFBvaW50cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUp
IHsKLSAgICBjYXNlIFBhdGhNb3ZlVG86Ci0gICAgY2FzZSBQYXRoTGluZVRvOgotICAgICAgICBy
ZXR1cm4gMTsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAgICBjYXNlIFBhdGhBcmNUbzoK
LSAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBQYXRoQmV6aWVyQ3VydmVUbzoKLSAgICAgICAg
cmV0dXJuIDM7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQYXRoQ2xv
c2VTdWJwYXRoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUGxhdGZvcm1Q
YXRoRWxlbWVudDo6bnVtUG9pbnRzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgUGF0aE1vdmVUbzoKLSAgICBjYXNlIFBhdGhMaW5lVG86Ci0gICAgY2FzZSBQYXRo
QXJjVG86Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgUGF0aFF1YWRDdXJ2ZVRvOgotICAg
ICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFBhdGhCZXppZXJDdXJ2ZVRvOgotICAgICAgICByZXR1
cm4gMzsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQobV90eXBlID09IFBhdGhDbG9zZVN1
YnBhdGgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgUGF0aFBvbHlnb246
Om1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi17Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBv
aW50Pjo6aXRlcmF0b3IgaSA9IGJlZ2luKCk7IGkgPCBlbmQoKTsgKytpKQotICAgICAgICBpLT5t
b3ZlKG9mZnNldCk7Ci19Ci0KLXZvaWQgUGF0aFBvbHlnb246OnRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHQpCi17Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvaW50Pjo6aXRlcmF0b3Ig
aSA9IGJlZ2luKCk7IGkgPCBlbmQoKTsgKytpKQotICAgICAgICAqaSA9IHQubWFwUG9pbnQoKmkp
OwotfQotCi1ib29sIFBhdGhQb2x5Z29uOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgpIDwgMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gVGVzdCBpbnRlcnNlY3Rpb25zIGJldHdlZW4gdGhlIHBvbHlnb24gYW5kIHRoZSB2
ZXJ0aWNhbCBsaW5lOiB4ID0gcG9pbnQueCgpCi0KLSAgICBpbnQgaW50ZXJzZWN0ZWQgPSAwOwot
ICAgIGNvbnN0IFBhdGhQb2ludCogcG9pbnQxID0gJmxhc3QoKTsKLSAgICBWZWN0b3I8UGF0aFBv
aW50Pjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGVuZCgpOwotICAgIC8vIHdhc05lZ2F0aXZlOiAt
MSBtZWFucyB1bmtub3duLCAwIG1lYW5zIGZhbHNlLCAxIG1lYW5zIHRydWUuCi0gICAgaW50IHdh
c05lZ2F0aXZlID0gLTE7Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvaW50Pjo6Y29uc3RfaXRlcmF0
b3IgaSA9IGJlZ2luKCk7IGkgIT0gbGFzdDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFBhdGhQb2lu
dCYgcG9pbnQyID0gKmk7Ci0gICAgICAgIGlmIChwb2ludDEtPngoKSAhPSBwb2ludC54KCkpIHsK
LSAgICAgICAgICAgIGlmIChwb2ludDIueCgpID09IHBvaW50LngoKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSBnZXR0aW5nIG9uIHRoZSB2ZXJ0aWNhbCBsaW5lCi0gICAgICAgICAgICAg
ICAgd2FzTmVnYXRpdmUgPSBwb2ludDEtPngoKSA8IHBvaW50LngoKSA/IDEgOiAwOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChwb2ludDIueCgpIDwgcG9pbnQueCgpICE9IHBvaW50MS0+eCgpIDwg
cG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgeSA9IChwb2ludDIueSgpIC0gcG9p
bnQxLT55KCkpIC8gKHBvaW50Mi54KCkgLSBwb2ludDEtPngoKSkgKiAocG9pbnQueCgpIC0gcG9p
bnQxLT54KCkpICsgcG9pbnQxLT55KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHkgPj0gcG9pbnQu
eSgpKQotICAgICAgICAgICAgICAgICAgICArK2ludGVyc2VjdGVkOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugd2VyZSBvbiB0aGUgdmVydGljYWwg
bGluZQotCi0gICAgICAgICAgICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlCi0gICAgICAgICAgICBp
ZiAocG9pbnQxLT55KCkgPT0gcG9pbnQueSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgICAgICBpZiAocG9pbnQxLT55KCkgPiBwb2ludC55KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocG9pbnQyLngoKSA9PSBwb2ludC54KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gc2VlIGlmIHRoZSBwb2ludCBpcyBvbiB0aGlzIHNlZ21lbnQKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHBvaW50Mi55KCkgPD0gcG9pbnQueSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHN0aWxsIG9u
IHRoZSBsaW5lCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIGxlYXZpbmcgdGhlIGxpbmUgbm93LgotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGdldCBiYWNrIHRvIHNlZSB3aGljaCBzaWRlIHdlIGNvbWUgZnJvbS4gSWYgd2Ug
Y29tZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIHNpZGUgd2UgYXJlIGxl
YXZpbmcsIG5vIGludGVyc2VjdGlvbiBzaG91bGQgYmUgY291bnRlZAotICAgICAgICAgICAgICAg
ICAgICBpZiAod2FzTmVnYXRpdmUgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8UGF0aFBvaW50Pjo6Y29uc3RfaXRlcmF0b3Igakxhc3QgPSBpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJhdG9yIGogPSBpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChq
ID09IGJlZ2luKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBsYXN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLS1qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqLT54KCkgIT0g
cG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqLT54KCkg
PiBwb2ludC54KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNOZWdh
dGl2ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc05lZ2F0aXZlID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaiAhPSBqTGFzdCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh3YXNOZWdhdGl2ZSA8IDApCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh3YXNOZWdhdGl2ZSA/IHBvaW50Mi54KCkgPiBwb2ludC54KCkgOiBw
b2ludDIueCgpIDwgcG9pbnQueCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgKytpbnRlcnNl
Y3RlZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvaW50Mi54
KCkgPT0gcG9pbnQueCgpICYmIHBvaW50Mi55KCkgPj0gcG9pbnQueSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHBvaW50MSA9ICZwb2ludDI7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGludGVyc2VjdGVkICYgMTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBh
dGhFbGVtZW50Ojptb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotewotICAgIGludCBuID0g
bnVtQ29udHJvbFBvaW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQotICAg
ICAgICBtX2RhdGEubV9wb2ludHNbaV0ubW92ZShvZmZzZXQpOwotfQotCi12b2lkIFBsYXRmb3Jt
UGF0aEVsZW1lbnQ6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi17Ci0gICAg
aW50IG4gPSBudW1Db250cm9sUG9pbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKLSAgICAgICAgRmxvYXRQb2ludCBwID0gdC5tYXBQb2ludChtX2RhdGEubV9wb2ludHNb
aV0pOwotICAgICAgICBtX2RhdGEubV9wb2ludHNbaV0uc2V0KHAueCgpLCBwLnkoKSk7Ci0gICAg
fQotfQotCi12b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OmluZmxhdGVSZWN0VG9Db250YWluTWUo
RmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFBvaW50JiBsYXN0UG9pbnQpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fdHlwZSA9PSBQYXRoQXJjVG8pIHsKLSAgICAgICAgY29uc3QgQXJjVG8mIGRhdGEgPSBt
X2RhdGEubV9hcmNUb0RhdGE7Ci0gICAgICAgIFBhdGhQb2ludCBzdGFydFBvaW50OwotICAgICAg
ICBzdGFydFBvaW50ID0gbGFzdFBvaW50OwotICAgICAgICBQYXRoUG9pbnQgZW5kUG9pbnQgPSBk
YXRhLm1fZW5kOwotICAgICAgICBpZiAoIWRhdGEubV9jbG9ja3dpc2UpCi0gICAgICAgICAgICBz
dGQ6OnN3YXAoc3RhcnRQb2ludCwgZW5kUG9pbnQpOwotCi0gICAgICAgIGludCBxMCA9IHF1YWRy
YW50KHN0YXJ0UG9pbnQsIGRhdGEubV9jZW50ZXIpOwotICAgICAgICBpbnQgcTEgPSBxdWFkcmFu
dChlbmRQb2ludCwgZGF0YS5tX2NlbnRlcik7Ci0gICAgICAgIGJvb2wgY29udGFpbnNFeHRyZW1l
c1s0XSA9IHsgZmFsc2UgfTsgLy8gYm90dG9tLCBsZWZ0LCB0b3AsIHJpZ2h0Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBQYXRoUG9pbnQgZXh0cmVtZVZlY3RvcnNbNF0gPSB7IHsgMCwgMSB9LCB7IC0x
LCAwIH0sIHsgMCwgLTEgfSwgeyAxLCAwIH0gfTsKLSAgICAgICAgaWYgKHEwID09IHExKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RhcnRQb2ludC5tX3ggPT0gZW5kUG9pbnQubV94IHx8IGlzUXVhZHJh
bnRPbkJvdHRvbShxMCkgIT0gc3RhcnRQb2ludC5tX3ggPiBlbmRQb2ludC5tX3gpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGFpbnNFeHRyZW1lc1tpXSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgZXh0cmVtZSA9IHEwOwotICAgICAgICAgICAgaW50IGRp
ZmYgPSBxdWFkcmFudERpZmYocTEsIHEwKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZGlmZjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29udGFpbnNFeHRyZW1lc1tleHRyZW1l
XSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZXh0cmVtZSA9IG5leHRRdWFkcmFudChleHRyZW1l
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGluZmxhdGVSZWN0VG9Db250
YWluUG9pbnQociwgc3RhcnRQb2ludC5tX3gsIHN0YXJ0UG9pbnQubV95KTsKLSAgICAgICAgaW5m
bGF0ZVJlY3RUb0NvbnRhaW5Qb2ludChyLCBlbmRQb2ludC5tX3gsIGVuZFBvaW50Lm1feSk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoY29u
dGFpbnNFeHRyZW1lc1tpXSkKLSAgICAgICAgICAgICAgICBpbmZsYXRlUmVjdFRvQ29udGFpblBv
aW50KHIsIGRhdGEubV9jZW50ZXIubV94ICsgZGF0YS5tX3JhZGl1cy5tX3ggKiBleHRyZW1lVmVj
dG9yc1tpXS5tX3gsIGRhdGEubV9jZW50ZXIubV95ICsgZGF0YS5tX3JhZGl1cy5tX3kgKiBleHRy
ZW1lVmVjdG9yc1tpXS5tX3kpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50
IG4gPSBudW1Qb2ludHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCi0g
ICAgICAgICAgICBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KHIsIG1fZGF0YS5tX3BvaW50c1tp
XS5tX3gsIG1fZGF0YS5tX3BvaW50c1tpXS5tX3kpOwotICAgIH0KLX0KLQotUGF0aEVsZW1lbnRU
eXBlIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90
eXBlKSB7Ci0gICAgY2FzZSBQYXRoTW92ZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRN
b3ZlVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhMaW5lVG86Ci0gICAgICAgIHJldHVybiBQYXRoRWxl
bWVudEFkZExpbmVUb1BvaW50OwotICAgIGNhc2UgUGF0aEFyY1RvOgotICAgICAgICAvLyBGSVhN
RTogdGhlcmUncyBubyBhcmNUbyB0eXBlIGZvciBQYXRoRWxlbWVudAotICAgICAgICByZXR1cm4g
UGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDsKLSAgICAgICAgLy8gcmV0dXJuIFBhdGhFbGVtZW50
QWRkUXVhZEN1cnZlVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAgICAgICAg
cmV0dXJuIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhCZXpp
ZXJDdXJ2ZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQYXRoQ2xvc2VTdWJwYXRoKTsK
LSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOwotICAgIH0KLX0KLQotUGxh
dGZvcm1QYXRoOjpQbGF0Zm9ybVBhdGgoKQotICAgIDogbV9wZW5MaWZ0ZWQodHJ1ZSkKLXsKLSAg
ICBtX2N1cnJlbnRQb2ludC5jbGVhcigpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6ZW5zdXJl
U3VicGF0aCgpCi17Ci0gICAgaWYgKG1fcGVuTGlmdGVkKSB7Ci0gICAgICAgIG1fcGVuTGlmdGVk
ID0gZmFsc2U7Ci0gICAgICAgIG1fc3VicGF0aHMuYXBwZW5kKFBhdGhQb2x5Z29uKCkpOwotICAg
ICAgICBtX3N1YnBhdGhzLmxhc3QoKS5hcHBlbmQobV9jdXJyZW50UG9pbnQpOwotICAgIH0gZWxz
ZQotICAgICAgICBBU1NFUlQoIW1fc3VicGF0aHMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVBhdGg6OmFkZFRvU3VicGF0aChjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKQotewot
ICAgIGlmIChlLnBsYXRmb3JtVHlwZSgpID09IFBsYXRmb3JtUGF0aEVsZW1lbnQ6OlBhdGhNb3Zl
VG8pIHsKLSAgICAgICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwotICAgICAgICBtX2N1cnJlbnRQb2lu
dCA9IGUucG9pbnRBdCgwKTsKLSAgICB9IGVsc2UgaWYgKGUucGxhdGZvcm1UeXBlKCkgPT0gUGxh
dGZvcm1QYXRoRWxlbWVudDo6UGF0aENsb3NlU3VicGF0aCkgewotICAgICAgICBtX3BlbkxpZnRl
ZCA9IHRydWU7Ci0gICAgICAgIGlmICghbV9zdWJwYXRocy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGlmIChtX2N1cnJlbnRQb2ludCAhPSBtX3N1YnBhdGhzLmxhc3QoKVswXSkgewotICAgICAg
ICAgICAgICAgIC8vIEFjY29yZGluZyB0byBXM0MsIHdlIGhhdmUgdG8gZHJhdyBhIGxpbmUgZnJv
bSBjdXJyZW50IHBvaW50IHRvIHRoZSBpbml0aWFsIHBvaW50Ci0gICAgICAgICAgICAgICAgbV9z
dWJwYXRocy5sYXN0KCkuYXBwZW5kKG1fc3VicGF0aHMubGFzdCgpWzBdKTsKLSAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IG1fc3VicGF0aHMubGFzdCgpWzBdOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50LmNsZWFyKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZW5zdXJlU3VicGF0aCgpOwotICAgICAgICBzd2l0Y2ggKGUu
cGxhdGZvcm1UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRo
TGluZVRvOgotICAgICAgICAgICAgbV9zdWJwYXRocy5sYXN0KCkuYXBwZW5kKGUucG9pbnRBdCgw
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBhdGhFbGVtZW50
OjpQYXRoQXJjVG86Ci0gICAgICAgICAgICBhZGRBcmNQb2ludHMobV9zdWJwYXRocy5sYXN0KCks
IGUuYXJjVG8oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBh
dGhFbGVtZW50OjpQYXRoUXVhZEN1cnZlVG86Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgUGF0aFBvaW50IGNvbnRyb2xbXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
UG9pbnQsCi0gICAgICAgICAgICAgICAgICAgIGUucG9pbnRBdCgwKSwKLSAgICAgICAgICAgICAg
ICAgICAgZS5wb2ludEF0KDEpLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IG1hZ2ljIG51bWJlcj8KLSAgICAgICAgICAgICAgICBxdWFkQ3VydmUoNTAsIG1f
c3VicGF0aHMubGFzdCgpLCBjb250cm9sKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OlBhdGhCZXppZXJDdXJ2ZVRv
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBhdGhQb2ludCBjb250cm9sW10gPSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50LAotICAgICAgICAgICAgICAgICAg
ICBlLnBvaW50QXQoMCksCi0gICAgICAgICAgICAgICAgICAgIGUucG9pbnRBdCgxKSwKLSAgICAg
ICAgICAgICAgICAgICAgZS5wb2ludEF0KDIpLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IG1hZ2ljIG51bWJlcj8KLSAgICAgICAgICAgICAgICBiZXppZXIo
MTAwLCBtX3N1YnBhdGhzLmxhc3QoKSwgY29udHJvbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50
UG9pbnQgPSBtX3N1YnBhdGhzLmxhc3QoKS5sYXN0KCk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRm
b3JtUGF0aDo6YXBwZW5kKGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQmIGUpCi17Ci0gICAgZS5p
bmZsYXRlUmVjdFRvQ29udGFpbk1lKG1fYm91bmRpbmdSZWN0LCBsYXN0UG9pbnQoKSk7Ci0gICAg
YWRkVG9TdWJwYXRoKGUpOwotICAgIG1fZWxlbWVudHMuYXBwZW5kKGUpOwotfQotCi12b2lkIFBs
YXRmb3JtUGF0aDo6YXBwZW5kKGNvbnN0IFBsYXRmb3JtUGF0aCYgcCkKLXsKLSAgICBjb25zdCBQ
bGF0Zm9ybVBhdGhFbGVtZW50cyYgZSA9IHAuZWxlbWVudHMoKTsKLSAgICBmb3IgKFBsYXRmb3Jt
UGF0aEVsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdChlLmJlZ2luKCkpOyBpdCAhPSBlLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGFkZFRvU3VicGF0aCgqaXQpOwotICAgICAgICBpdC0+aW5mbGF0
ZVJlY3RUb0NvbnRhaW5NZShtX2JvdW5kaW5nUmVjdCwgbGFzdFBvaW50KCkpOwotICAgICAgICBt
X2VsZW1lbnRzLmFwcGVuZCgqaXQpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmNs
ZWFyKCkKLXsKLSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci0gICAgbV9ib3VuZGluZ1JlY3QgPSBG
bG9hdFJlY3QoKTsKLSAgICBtX3N1YnBhdGhzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50UG9pbnQu
Y2xlYXIoKTsKLSAgICBtX3BlbkxpZnRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRo
OjpzdHJva2VQYXRoKEhEQyBkYywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm1hdGlv
bikgY29uc3QKLXsKLSAgICBkcmF3UG9seWdvbnMoZGMsIG1fc3VicGF0aHMsIGZhbHNlLCB0cmFu
c2Zvcm1hdGlvbik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpmaWxsUGF0aChIREMgZGMsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17Ci0gICAgSEdESU9C
SiBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0g
ICAgZHJhd1BvbHlnb25zKGRjLCBtX3N1YnBhdGhzLCB0cnVlLCB0cmFuc2Zvcm1hdGlvbik7Ci0g
ICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6dHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBmb3IgKFBsYXRmb3JtUGF0aEVs
ZW1lbnRzOjppdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2VsZW1lbnRz
LmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+bW92ZShzaXplKTsKLQotICAgIG1fYm91bmRpbmdS
ZWN0Lm1vdmUoc2l6ZSk7Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHlnb24+OjppdGVyYXRvciBp
dCA9IG1fc3VicGF0aHMuYmVnaW4oKTsgaXQgIT0gbV9zdWJwYXRocy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgaXQtPm1vdmUoc2l6ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQotewotICAgIGZvciAoUGxhdGZvcm1QYXRoRWxlbWVu
dHM6Oml0ZXJhdG9yIGl0KG1fZWxlbWVudHMuYmVnaW4oKSk7IGl0ICE9IG1fZWxlbWVudHMuZW5k
KCk7ICsraXQpCi0gICAgICAgIGl0LT50cmFuc2Zvcm0odCk7Ci0KLSAgICBtX2JvdW5kaW5nUmVj
dCA9IHQubWFwUmVjdChtX2JvdW5kaW5nUmVjdCk7Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHln
b24+OjppdGVyYXRvciBpdCA9IG1fc3VicGF0aHMuYmVnaW4oKTsgaXQgIT0gbV9zdWJwYXRocy5l
bmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnRyYW5zZm9ybSh0KTsKLX0KLQotYm9vbCBQbGF0Zm9y
bVBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBj
b25zdAotewotICAgIC8vIG9wdGltaXphdGlvbjogY2hlY2sgdGhlIGJvdW5kaW5nIHJlY3QgZmly
c3QKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQobV9ib3VuZGluZ1JlY3QsIHBvaW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHlnb24+Ojpjb25zdF9p
dGVyYXRvciBpID0gbV9zdWJwYXRocy5iZWdpbigpOyBpICE9IG1fc3VicGF0aHMuZW5kKCk7ICsr
aSkgewotICAgICAgICBpZiAoaS0+Y29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsYXRmb3JtUGF0
aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIFBsYXRmb3JtUGF0aEVs
ZW1lbnQ6Ok1vdmVUbyBkYXRhID0geyB7IHBvaW50LngoKSwgcG9pbnQueSgpIH0gfTsKLSAgICBQ
bGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1QYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAg
UGxhdGZvcm1QYXRoRWxlbWVudDo6TGluZVRvIGRhdGEgPSB7IHsgcG9pbnQueCgpLCBwb2ludC55
KCkgfSB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBl
KTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6
OlF1YWRDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AueCgpLCBjcC55KCkgfSwgeyBwLngoKSwgcC55KCkg
fSB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBlKTsK
LX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0g
ICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6QmV6aWVyQ3VydmVUbyBkYXRhID0geyB7IGNwMS54KCks
IGNwMS55KCkgfSwgeyBjcDIueCgpLCBjcDIueSgpIH0sIHsgcC54KCksIHAueSgpIH0gfTsKLSAg
ICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1QYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBmcDEsIGNvbnN0IEZs
b2F0UG9pbnQmIGZwMiwgZmxvYXQgcmFkaXVzKQotewotICAgIGNvbnN0IFBhdGhQb2ludCYgcDAg
PSBtX2N1cnJlbnRQb2ludDsKLSAgICBQYXRoUG9pbnQgcDE7Ci0gICAgcDEgPSBmcDE7Ci0gICAg
UGF0aFBvaW50IHAyOwotICAgIHAyID0gZnAyOwotICAgIGlmICghcmFkaXVzIHx8IHAwID09IHAx
IHx8IHAxID09IHAyKSB7Ci0gICAgICAgIGFkZExpbmVUbyhwMSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBQYXRoVmVjdG9yIHYwMSA9IHAwIC0gcDE7Ci0gICAgUGF0aFZlY3RvciB2
MjEgPSBwMiAtIHAxOwotCi0gICAgLy8gc2luKEEgLSBCKSA9IHNpbihBKSAqIGNvcyhCKSAtIHNp
bihCKSAqIGNvcyhBKQotICAgIGRvdWJsZSBjcm9zcyA9IHYwMS5tX3ggKiB2MjEubV95IC0gdjAx
Lm1feSAqIHYyMS5tX3g7Ci0KLSAgICBpZiAoZmFicyhjcm9zcykgPCAxRS0xMCkgewotICAgICAg
ICAvLyBvbiBvbmUgbGluZQotICAgICAgICBhZGRMaW5lVG8ocDEpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZG91YmxlIGQwMSA9IHYwMS5sZW5ndGgoKTsKLSAgICBkb3VibGUgZDIx
ID0gdjIxLmxlbmd0aCgpOwotICAgIGRvdWJsZSBhbmdsZSA9IChwaURvdWJsZSAtIGZhYnMoYXNp
bihjcm9zcyAvIChkMDEgKiBkMjEpKSkpICogMC41OwotICAgIGRvdWJsZSBzcGFuID0gcmFkaXVz
ICogdGFuKGFuZ2xlKTsKLSAgICBkb3VibGUgcmF0ZSA9IHNwYW4gLyBkMDE7Ci0gICAgUGF0aFBv
aW50IHN0YXJ0UG9pbnQ7Ci0gICAgc3RhcnRQb2ludC5tX3ggPSBwMS5tX3ggKyB2MDEubV94ICog
cmF0ZTsKLSAgICBzdGFydFBvaW50Lm1feSA9IHAxLm1feSArIHYwMS5tX3kgKiByYXRlOwotCi0g
ICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOwotCi0gICAgUGF0aFBvaW50IGVuZFBvaW50OwotICAg
IHJhdGUgPSBzcGFuIC8gZDIxOwotICAgIGVuZFBvaW50Lm1feCA9IHAxLm1feCArIHYyMS5tX3gg
KiByYXRlOwotICAgIGVuZFBvaW50Lm1feSA9IHAxLm1feSArIHYyMS5tX3kgKiByYXRlOwotCi0g
ICAgUGF0aFBvaW50IG1pZFBvaW50OwotICAgIG1pZFBvaW50Lm1feCA9IChzdGFydFBvaW50Lm1f
eCArIGVuZFBvaW50Lm1feCkgKiAwLjU7Ci0gICAgbWlkUG9pbnQubV95ID0gKHN0YXJ0UG9pbnQu
bV95ICsgZW5kUG9pbnQubV95KSAqIDAuNTsKLQotICAgIFBhdGhWZWN0b3Igdm0xID0gbWlkUG9p
bnQgLSBwMTsKLSAgICBkb3VibGUgZG0xID0gdm0xLmxlbmd0aCgpOwotICAgIGRvdWJsZSBkID0g
X2h5cG90KHJhZGl1cywgc3Bhbik7Ci0KLSAgICBQYXRoUG9pbnQgY2VudGVyUG9pbnQ7Ci0gICAg
cmF0ZSA9IGQgLyBkbTE7Ci0gICAgY2VudGVyUG9pbnQubV94ID0gcDEubV94ICsgdm0xLm1feCAq
IHJhdGU7Ci0gICAgY2VudGVyUG9pbnQubV95ID0gcDEubV95ICsgdm0xLm1feSAqIHJhdGU7Ci0K
LSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyBkYXRhID0gewotICAgICAgICBlbmRQb2lu
dCwKLSAgICAgICAgY2VudGVyUG9pbnQsCi0gICAgICAgIHsgcmFkaXVzLCByYWRpdXMgfSwKLSAg
ICAgICAgY3Jvc3MgPCAwCi0gICAgfTsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEp
OwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpjbG9zZVN1YnBhdGgo
KQotewotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGU7Ci0gICAgYXBwZW5kKHBlKTsKLX0KLQot
Ly8gYWRkIGEgY2lyY3VsYXIgYXJjIGNlbnRyZWQgYXQgcCB3aXRoIHJhZGl1cyByIGZyb20gc3Rh
cnQgYW5nbGUgc2FyIChyYWRpYW5zKSB0byBlbmQgYW5nbGUgZWFyCi12b2lkIFBsYXRmb3JtUGF0
aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCBhLCBmbG9hdCBiLCBmbG9h
dCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIGZsb2F0IHN0YXJ0
WCwgc3RhcnRZLCBlbmRYLCBlbmRZOwotCi0gICAgbm9ybWFsaXplQW5nbGUoc2FyKTsKLSAgICBu
b3JtYWxpemVBbmdsZShlYXIpOwotCi0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShzYXIsIGEs
IGIsIHN0YXJ0WCwgc3RhcnRZKTsKLSAgICBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGVhciwgYSwg
YiwgZW5kWCwgZW5kWSk7Ci0KLSAgICB0cmFuc2Zvcm1BcmNQb2ludChzdGFydFgsIHN0YXJ0WSwg
cCk7Ci0gICAgdHJhbnNmb3JtQXJjUG9pbnQoZW5kWCwgZW5kWSwgcCk7Ci0KLSAgICBGbG9hdFBv
aW50IHN0YXJ0KHN0YXJ0WCwgc3RhcnRZKTsKLSAgICBtb3ZlVG8oc3RhcnQpOwotCi0gICAgUGxh
dGZvcm1QYXRoRWxlbWVudDo6QXJjVG8gZGF0YSA9IHsgeyBlbmRYLCBlbmRZIH0sIHsgcC54KCks
IHAueSgpIH0sICB7IGEsIGIgfSwgIWFudGljbG9ja3dpc2UgfTsKLSAgICBQbGF0Zm9ybVBhdGhF
bGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLQotdm9pZCBQbGF0Zm9ybVBh
dGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG1vdmVUbyhyLmxvY2F0aW9u
KCkpOwotCi0gICAgZmxvYXQgcmlnaHQgPSByLm1heFgoKSAtIDE7Ci0gICAgZmxvYXQgYm90dG9t
ID0gci5tYXhZKCkgLSAxOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJpZ2h0LCByLnkoKSkp
OwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJpZ2h0LCBib3R0b20pKTsKLSAgICBhZGRMaW5l
VG8oRmxvYXRQb2ludChyLngoKSwgYm90dG9tKSk7Ci0gICAgYWRkTGluZVRvKHIubG9jYXRpb24o
KSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cikKLXsKLSAgICBGbG9hdFNpemUgcmFkaXVzKHIud2lkdGgoKSAqIDAuNSwgci5oZWlnaHQoKSAq
IDAuNSk7Ci0gICAgYWRkRWxsaXBzZShyLmxvY2F0aW9uKCkgKyByYWRpdXMsIHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCksIDAsIDAsIHRydWUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0
aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QK
LXsKLSAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKLSAgICBGbG9hdFBvaW50IHBvaW50c1szXTsK
LSAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7Ci0KLSAgICBmb3IgKFBsYXRmb3JtUGF0aEVs
ZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2Vs
ZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHBlbGVtZW50LnR5cGUgPSBpdC0+dHlwZSgp
OwotICAgICAgICBpbnQgbiA9IGl0LT5udW1Qb2ludHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICBwb2ludHNbaV0gPSBpdC0+cG9pbnRBdChpKTsK
LSAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYmNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhZTkyNDNmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODMg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybVBhdGhXaW5DRV9oCi0jZGVmaW5lIFBsYXRm
b3JtUGF0aFdpbkNFX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotCi0gICAgc3RydWN0IFBhdGhQb2ludCB7Ci0gICAgICAgIGZsb2F0IG1f
eDsKLSAgICAgICAgZmxvYXQgbV95OwotICAgICAgICBjb25zdCBmbG9hdCYgeCgpIGNvbnN0IHsg
cmV0dXJuIG1feDsgfQotICAgICAgICBjb25zdCBmbG9hdCYgeSgpIGNvbnN0IHsgcmV0dXJuIG1f
eTsgfQotICAgICAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX3ggPSB4OwotICAgICAgICAgICAgbV95ID0geTsKLSAgICAgICAgfTsKLSAgICAg
ICAgb3BlcmF0b3IgRmxvYXRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV94LCBt
X3kpOyB9Ci0gICAgICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV94ICs9IG9mZnNldC53aWR0aCgpOwotICAgICAgICAgICAgbV95
ICs9IG9mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICBQYXRoUG9pbnQmIG9wZXJh
dG9yPShjb25zdCBGbG9hdFBvaW50JiBwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ggPSBw
LngoKTsKLSAgICAgICAgICAgIG1feSA9IHAueSgpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgY2xlYXIoKSB7IG1feCA9IG1feSA9IDA7IH0KLSAg
ICB9OwotCi0gICAgc3RydWN0IFBhdGhQb2x5Z29uOiBwdWJsaWMgVmVjdG9yPFBhdGhQb2ludD4g
ewotICAgICAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOwotICAgICAgICB2
b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotICAgICAgICBib29sIGNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdDsKLSAgICB9OwotCi0gICAgY2xh
c3MgUGxhdGZvcm1QYXRoRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFBsYWZv
cm1QYXRoRWxlbWVudFR5cGUgewotICAgICAgICAgICAgUGF0aE1vdmVUbywKLSAgICAgICAgICAg
IFBhdGhMaW5lVG8sCi0gICAgICAgICAgICBQYXRoQXJjVG8sCi0gICAgICAgICAgICBQYXRoUXVh
ZEN1cnZlVG8sCi0gICAgICAgICAgICBQYXRoQmV6aWVyQ3VydmVUbywKLSAgICAgICAgICAgIFBh
dGhDbG9zZVN1YnBhdGgsCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0IE1vdmVUbyB7Ci0g
ICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0
IExpbmVUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgc3RydWN0IEFyY1RvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX2VuZDsKLSAgICAg
ICAgICAgIFBhdGhQb2ludCBtX2NlbnRlcjsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3JhZGl1
czsKLSAgICAgICAgICAgIGJvb2wgbV9jbG9ja3dpc2U7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
c3RydWN0IFF1YWRDdXJ2ZVRvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50MDsKLSAg
ICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50MTsKLSAgICAgICAgfTsKLQotICAgICAgICBzdHJ1
Y3QgQmV6aWVyQ3VydmVUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDA7Ci0gICAg
ICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDE7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2lu
dDI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudCgpOiBtX3R5cGUo
UGF0aENsb3NlU3VicGF0aCkgeyBtX2RhdGEubV9wb2ludHNbMF0uc2V0KDAsIDApOyAgICB9Ci0g
ICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgTW92ZVRvJiBkYXRhKTogbV90eXBlKFBh
dGhNb3ZlVG8pIHsgbV9kYXRhLm1fbW92ZVRvRGF0YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZv
cm1QYXRoRWxlbWVudChjb25zdCBMaW5lVG8mIGRhdGEpOiBtX3R5cGUoUGF0aExpbmVUbykgeyBt
X2RhdGEubV9saW5lVG9EYXRhID0gZGF0YTsgfQotICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50
KGNvbnN0IEFyY1RvJiBkYXRhKTogbV90eXBlKFBhdGhBcmNUbykgeyBtX2RhdGEubV9hcmNUb0Rh
dGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgUXVhZEN1cnZl
VG8mIGRhdGEpOiBtX3R5cGUoUGF0aFF1YWRDdXJ2ZVRvKSB7IG1fZGF0YS5tX3F1YWRDdXJ2ZVRv
RGF0YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBCZXppZXJD
dXJ2ZVRvJiBkYXRhKTogbV90eXBlKFBhdGhCZXppZXJDdXJ2ZVRvKSB7IG1fZGF0YS5tX2Jlemll
ckN1cnZlVG9EYXRhID0gZGF0YTsgfQotCi0gICAgICAgIGNvbnN0IE1vdmVUbyYgbW92ZVRvKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLm1fbW92ZVRvRGF0YTsgfQotICAgICAgICBjb25zdCBMaW5l
VG8mIGxpbmVUbygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2xpbmVUb0RhdGE7IH0KLSAgICAg
ICAgY29uc3QgQXJjVG8mIGFyY1RvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fYXJjVG9EYXRh
OyB9Ci0gICAgICAgIGNvbnN0IFF1YWRDdXJ2ZVRvJiBxdWFkQ3VydmVUbygpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5tX3F1YWRDdXJ2ZVRvRGF0YTsgfQotICAgICAgICBjb25zdCBCZXppZXJDdXJ2
ZVRvJiBiZXppZXJDdXJ2ZVRvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fYmV6aWVyQ3VydmVU
b0RhdGE7IH0KLSAgICAgICAgY29uc3QgUGF0aFBvaW50JiBsYXN0UG9pbnQoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgbiA9IG51bVBvaW50cygpOwotICAgICAgICAgICAgcmV0
dXJuIG4gPiAxID8gbV9kYXRhLm1fcG9pbnRzW24gLSAxXSA6IG1fZGF0YS5tX3BvaW50c1swXTsK
LSAgICAgICAgfQotICAgICAgICBjb25zdCBQYXRoUG9pbnQmIHBvaW50QXQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2RhdGEubV9wb2ludHNbaW5kZXhdOyB9Ci0gICAgICAgIGludCBudW1Q
b2ludHMoKSBjb25zdDsKLSAgICAgICAgaW50IG51bUNvbnRyb2xQb2ludHMoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKLSAgICAgICAgdm9pZCB0
cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgUGF0aEVsZW1lbnRU
eXBlIHR5cGUoKSBjb25zdDsKLSAgICAgICAgUGxhZm9ybVBhdGhFbGVtZW50VHlwZSBwbGF0Zm9y
bVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgdm9pZCBpbmZsYXRlUmVj
dFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBj
b25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgbV90
eXBlOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBNb3ZlVG8gbV9tb3ZlVG9EYXRhOwot
ICAgICAgICAgICAgTGluZVRvIG1fbGluZVRvRGF0YTsKLSAgICAgICAgICAgIEFyY1RvIG1fYXJj
VG9EYXRhOwotICAgICAgICAgICAgUXVhZEN1cnZlVG8gbV9xdWFkQ3VydmVUb0RhdGE7Ci0gICAg
ICAgICAgICBCZXppZXJDdXJ2ZVRvIG1fYmV6aWVyQ3VydmVUb0RhdGE7Ci0gICAgICAgICAgICBQ
YXRoUG9pbnQgbV9wb2ludHNbNF07Ci0gICAgICAgIH0gbV9kYXRhOwotICAgIH07Ci0KLSAgICB0
eXBlZGVmIFZlY3RvcjxQbGF0Zm9ybVBhdGhFbGVtZW50PiBQbGF0Zm9ybVBhdGhFbGVtZW50czsK
LQotICAgIGNsYXNzIFBsYXRmb3JtUGF0aCB7Ci0gICAgcHVibGljOgotICAgICAgICBQbGF0Zm9y
bVBhdGgoKTsKLSAgICAgICAgY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudHMmIGVsZW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBQ
bGF0Zm9ybVBhdGhFbGVtZW50JiBlKTsKLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgUGxhdGZv
cm1QYXRoJiBwKTsKLSAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmlzRW1wdHkoKTsgfQotCi0gICAgICAgIHZvaWQg
c3Ryb2tlUGF0aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0OwotICAgICAg
ICB2b2lkIGZpbGxQYXRoKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cikgY29uc3Q7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgbGFzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5p
c0VtcHR5KCkgPyBGbG9hdFBvaW50KDAsIDApIDogbV9lbGVtZW50cy5sYXN0KCkubGFzdFBvaW50
KCk7IH0KLQotICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRpbmdSZWN0OyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0OwotICAgICAgICB2b2lkIHRyYW5z
bGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpOwotICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotCi0gICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZEFyY1RvKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsKLSAgICAgICAg
dm9pZCBjbG9zZVN1YnBhdGgoKTsKLSAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0
UG9pbnQmIHAsIGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFu
dGljbG9ja3dpc2UpOwotICAgICAgICB2b2lkIGFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKTsK
LSAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcik7Ci0gICAgICAgIHZv
aWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3Q7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGVuc3VyZVN1YnBhdGgoKTsKLSAgICAgICAg
dm9pZCBhZGRUb1N1YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSk7Ci0KLSAgICAg
ICAgUGxhdGZvcm1QYXRoRWxlbWVudHMgbV9lbGVtZW50czsKLSAgICAgICAgRmxvYXRSZWN0IG1f
Ym91bmRpbmdSZWN0OwotICAgICAgICBWZWN0b3I8UGF0aFBvbHlnb24+IG1fc3VicGF0aHM7Ci0g
ICAgICAgIFBhdGhQb2ludCBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgYm9vbCBtX3BlbkxpZnRl
ZDsKLSAgICB9OwotCi19Ci0KLSNlbmRpZiAvLyBQbGF0Zm9ybVBhdGhXaW5DRV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFw
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5ODU4ZC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgot
Ci0jaW5jbHVkZSAiR0RJRXh0cmFzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCi0jaW5jbHVkZSAiV2luQ0VHcmFwaGljc0V4dHJhcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
TGVha0NvdW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOREVCVUcKLXN0
YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBzaGFyZWRCaXRtYXBMZWFrQ291bnRlcigi
U2hhcmVkQml0bWFwIik7Ci0jZW5kaWYKLQotCi1QYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gU2hh
cmVkQml0bWFwOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQml0bWFwSW5mbzo6Qml0Q291
bnQgYml0Q291bnQsIGJvb2wgaW5pdFBpeGVscykKLXsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFw
PiByZXN1bHRhbnRCaXRtYXAgPSBhZG9wdFJlZihuZXcgU2hhcmVkQml0bWFwKHNpemUsIGJpdENv
dW50LCBpbml0UGl4ZWxzKSk7Ci0gICAgaWYgKHJlc3VsdGFudEJpdG1hcCAmJiAhcmVzdWx0YW50
Qml0bWFwLT5ieXRlcygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcmVzdWx0YW50
Qml0bWFwLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IFNoYXJlZEJp
dG1hcDo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGRhdGEsIGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gcmVzdWx0
ID0gY3JlYXRlKHNpemUsIEJpdG1hcEluZm86OkJpdENvdW50MzIsIGZhbHNlKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbWVtY3B5KHJlc3VsdC0+Ynl0ZXMoKSwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAgcmVzdWx0
LT5zZXRIYXNBbHBoYShoYXNBbHBoYSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19
Ci0KLVNoYXJlZEJpdG1hcDo6U2hhcmVkQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEJpdG1h
cEluZm86OkJpdENvdW50IGJpdENvdW50LCBib29sIGluaXRQaXhlbHMpCi0gICAgOiBtX2JtcElu
Zm8oQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoc2l6ZSwgYml0Q291bnQpKQotICAgICwgbV9s
b2NrZWQoZmFsc2UpCi0gICAgLCBtX3VzZXNUcmFuc3BhcmVudENvbG9yKGZhbHNlKQotICAgICwg
bV90cmFuc3BhcmVudENvbG9yKFJHQigwLCAwLCAwKSkKLSAgICAsIG1fcGl4ZWxzKDApCi0gICAg
LCBtX2hhc0FscGhhKGZhbHNlKQotICAgICwgbV92YWxpZEhlaWdodChhYnMoc2l6ZS5oZWlnaHQo
KSkpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIHNoYXJlZEJpdG1hcExlYWtDb3VudGVyLmluY3Jl
bWVudCgpOwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gbV9ibXBJbmZvLm51
bVBpeGVscygpOwotICAgIGlmIChiaXRDb3VudCA9PSBCaXRtYXBJbmZvOjpCaXRDb3VudDE2KQot
ICAgICAgICBidWZmZXJTaXplIC89IDI7Ci0KLSAgICBtX3BpeGVsRGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8dW5zaWduZWRbXT4oYnVmZmVyU2l6ZSk7Ci0gICAgbV9waXhlbHMgPSBtX3BpeGVsRGF0
YS5nZXQoKTsKLQotICAgIGlmIChpbml0UGl4ZWxzKQotICAgICAgICByZXNldFBpeGVscygpOwot
fQotCi1TaGFyZWRCaXRtYXA6On5TaGFyZWRCaXRtYXAoKQotewotI2lmbmRlZiBOREVCVUcKLSAg
ICBzaGFyZWRCaXRtYXBMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKLSNlbmRpZgotfQotCi12b2lk
IFNoYXJlZEJpdG1hcDo6cmVzZXRQaXhlbHMoYm9vbCBibGFjaykKLXsKLSAgICBpZiAoIW1fcGl4
ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gbV9ibXBJ
bmZvLm51bVBpeGVscygpOwotICAgIGlmIChibGFjaykgewotICAgICAgICB1bnNpZ25lZCBidWZm
ZXJTaXplSW5CeXRlcyA9IGJ1ZmZlclNpemUgKiAoaXMxNmJpdCgpID8gMiA6IDQpOwotICAgICAg
ICBtZW1zZXQobV9waXhlbHMsIDAsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChpczE2Yml0KCkpIHsKLSAgICAgICAgLy8gRmlsbCBpdCB3aXRo
IHdoaXRlIGNvbG9yCi0gICAgICAgIHdtZW1zZXQoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KG1fcGl4
ZWxzKSwgMHhGRkZGLCBidWZmZXJTaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIE1ha2UgaXQgd2hpdGUgYnV0IHRyYW5zcGFyZW50Ci0gICAgdW5zaWduZWQqIHBpeGVsID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQqPihtX3BpeGVscyk7Ci0gICAgY29uc3QgdW5zaWduZWQqIGJ1
ZmZlckVuZCA9IHBpeGVsICsgYnVmZmVyU2l6ZTsKLSAgICB3aGlsZSAocGl4ZWwgPCBidWZmZXJF
bmQpCi0gICAgICAgICpwaXhlbCsrID0gMHgwMEZGRkZGRjsKLX0KLQotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBzaG9ydCBjb252ZXJ0MzJUbzE2KHVuc2lnbmVkIHBpeGVsKQotewotICAgIHVuc2ln
bmVkIHNob3J0IHIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKHBpeGVsICYgMHgwMEY4
MDAwMCkgPj4gOCk7Ci0gICAgdW5zaWduZWQgc2hvcnQgZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigocGl4ZWwgJiAweDAwMDBGQzAwKSA+PiA1KTsKLSAgICB1bnNpZ25lZCBzaG9ydCBi
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChwaXhlbCAmIDB4MDAwMDAwRjgpID4+IDMp
OwotICAgIHJldHVybiByIHwgZyB8IGI7Ci19Ci0KLWJvb2wgU2hhcmVkQml0bWFwOjp0bzE2Yml0
KCkKLXsKLSAgICBpZiAobV9sb2NrZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
aXMxNmJpdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEJpdG1hcEluZm8gbmV3Qm1w
SW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShtX2JtcEluZm8uc2l6ZSgpLCBCaXRtYXBJbmZvOjpC
aXRDb3VudDE2KTsKLQotICAgIGludCB3aWR0aCA9IG5ld0JtcEluZm8ud2lkdGgoKTsKLSAgICBp
bnQgcGFkZGVkV2lkdGggPSBuZXdCbXBJbmZvLnBhZGRlZFdpZHRoKCk7Ci0gICAgaW50IGJ1ZmZl
clNpemUgPSBwYWRkZWRXaWR0aCAqIG5ld0JtcEluZm8uaGVpZ2h0KCk7Ci0gICAgYXV0byBuZXdQ
aXhlbERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KGJ1ZmZlclNpemUgLyAyKTsK
LSAgICB2b2lkKiBuZXdQaXhlbHMgPSBuZXdQaXhlbERhdGEuZ2V0KCk7Ci0KLSAgICBpZiAoIW5l
d1BpeGVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc2hvcnQqIHAx
NiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obmV3UGl4ZWxzKTsKLSAgICBjb25zdCB1
bnNpZ25lZCogcDMyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihtX3BpeGVscyk7Ci0K
LSAgICBib29sIHNraXBzID0gcGFkZGVkV2lkdGggIT0gd2lkdGg7Ci0KLSAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCogcDE2ZW5kID0gcDE2ICsgYnVmZmVyU2l6ZTsKLSAgICB3aGlsZSAocDE2IDwg
cDE2ZW5kKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgc2hvcnQqIHAxNmxpbmVFbmQgPSBwMTYg
KyB3aWR0aDsgcDE2IDwgcDE2bGluZUVuZDsgKQotICAgICAgICAgICAgKnAxNisrID0gY29udmVy
dDMyVG8xNigqcDMyKyspOwotCi0gICAgICAgIGlmIChza2lwcykKLSAgICAgICAgICAgICpwMTYr
KyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1faGJpdG1hcCkKLSAgICAgICAgbV9oYml0bWFwID0g
bnVsbHB0cjsKLSAgICBlbHNlCi0gICAgICAgIG1fcGl4ZWxEYXRhID0gbmV3UGl4ZWxEYXRhLnJl
bGVhc2UoKTsKLQotICAgIG1fcGl4ZWxzID0gbmV3UGl4ZWxzOwotICAgIG1fYm1wSW5mbyA9IG5l
d0JtcEluZm87Ci0KLSAgICBzZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgU2hhcmVkQml0bWFwOjpmcmVlTWVtb3J5KCkKLXsKLSAgICBpZiAobV9sb2NrZWQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2hiaXRtYXApIHsKLSAgICAgICAg
bV9oYml0bWFwID0gbnVsbHB0cjsKLSAgICAgICAgbV9waXhlbHMgPSAwOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9waXhlbHMpIHsKLSAgICAgICAgbV9waXhlbERh
dGEgPSBudWxscHRyOwotICAgICAgICBtX3BpeGVscyA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+IFNo
YXJlZEJpdG1hcDo6Y3JlYXRlSGFuZGxlKHZvaWQqKiBwaXhlbHMsIEJpdG1hcEluZm8qIGJtcElu
Zm8sIGludCBoZWlnaHQsIGJvb2wgdXNlMTZiaXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BpeGVs
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaGVpZ2h0ID09IC0xKQotICAg
ICAgICBoZWlnaHQgPSB0aGlzLT5oZWlnaHQoKTsKLSAgICAqYm1wSW5mbyA9IEJpdG1hcEluZm86
OmNyZWF0ZUJvdHRvbVVwKEludFNpemUod2lkdGgoKSwgaGVpZ2h0KSwgKHVzZTE2Yml0IHx8IGlz
MTZiaXQoKSkgPyBCaXRtYXBJbmZvOjpCaXRDb3VudDE2IDogQml0bWFwSW5mbzo6Qml0Q291bnQz
Mik7Ci0KLSAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24o
MCwgYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsIHBpeGVscywgMCwgMCkpOwotCi0gICAgaWYgKCFo
Ym1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gYm1wREMgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgSEdESU9CSiBoT2xkQm1wID0g
U2VsZWN0T2JqZWN0KGJtcERDLmdldCgpLCBoYm1wLmdldCgpKTsKLQotICAgIFN0cmV0Y2hESUJp
dHMoYm1wREMuZ2V0KCksIDAsIDAsIHdpZHRoKCksIGhlaWdodCwgMCwgMCwgd2lkdGgoKSwgaGVp
Z2h0LCBtX3BpeGVscywgJm1fYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOwotCi0g
ICAgU2VsZWN0T2JqZWN0KGJtcERDLmdldCgpLCBoT2xkQm1wKTsKLQotICAgIHJldHVybiBoYm1w
OwotfQotCi1ib29sIFNoYXJlZEJpdG1hcDo6ZW5zdXJlSGFuZGxlKCkKLXsKLSAgICBpZiAobV9o
Yml0bWFwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9waXhlbHMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2xvY2tlZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQml0bWFwSW5mbyBibXBJbmZvOwotICAgIHZvaWQqIHBpeGVsczsKLSAgICBt
X2hiaXRtYXAgPSBjcmVhdGVIYW5kbGUoJnBpeGVscywgJmJtcEluZm8sIC0xLCAhaGFzQWxwaGEo
KSk7Ci0KLSAgICBpZiAoIW1faGJpdG1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9waXhlbERhdGEgPSBudWxscHRyOwotICAgIG1fcGl4ZWxzID0gcGl4ZWxzOwotICAgIG1fYm1w
SW5mbyA9IGJtcEluZm87Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFyZWRCaXRt
YXA6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYg
KCFtX3BpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGN0eHQtPmRyYXdCaXRtYXAodGhpcywg
ZHN0UmVjdCwgc3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2Rl
KTsKLX0KLQotdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXcoSERDIGhkYywgY29uc3QgSW50UmVjdCYg
ZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKCFtX3BpeGVscykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIQklUTUFQIGhiaXRtYXAgPSAwOwotICAgIEdE
SU9iamVjdDxIQklUTUFQPiBoVGVtcEJpdG1hcDsKLSAgICBib29sIHVzaW5nSGFuZGxlID0gY29t
cG9zaXRlT3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiAoaGFzQWxwaGEoKSAmJiBoYXNBbHBo
YUJsZW5kU3VwcG9ydCgpIHx8IHVzZXNUcmFuc3BhcmVudENvbG9yKCkpOwotCi0gICAgaWYgKHVz
aW5nSGFuZGxlKSB7Ci0gICAgICAgIGlmIChlbnN1cmVIYW5kbGUoKSkKLSAgICAgICAgICAgIGhi
aXRtYXAgPSBtX2hiaXRtYXAuZ2V0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdm9p
ZCogcGl4ZWxzOwotICAgICAgICAgICAgQml0bWFwSW5mbyBibXBJbmZvOwotICAgICAgICAgICAg
aFRlbXBCaXRtYXAgPSBjcmVhdGVIYW5kbGUoJnBpeGVscywgJmJtcEluZm8sIC0xLCB1c2VzVHJh
bnNwYXJlbnRDb2xvcigpKTsKLSAgICAgICAgICAgIGhiaXRtYXAgPSBoVGVtcEJpdG1hcC5nZXQo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWhiaXRtYXApIHsKLSAgICAgICAgLy8gRklY
TUU6IGhhbmRsZSBvdGhlciBjb21wb3NpdGUgb3BlcmF0aW9uIHR5cGVzPwotICAgICAgICBEV09S
RCByb3AgPSBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVDb3B5ID8gU1JDQ09QWQotICAgICAgICAg
ICAgOiBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVYT1IgPyBQQVRJTlZFUlQKLSAgICAgICAgICAg
IDogY29tcG9zaXRlT3AgPT0gQ29tcG9zaXRlQ2xlYXIgPyBXSElURU5FU1MKLSAgICAgICAgICAg
IDogU1JDQ09QWTsKLQotICAgICAgICBTdHJldGNoRElCaXRzKGhkYywgZHN0UmVjdC54KCksIGRz
dFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAg
ICBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWln
aHQoKSwgbV9waXhlbHMsICZtX2JtcEluZm8sIERJQl9SR0JfQ09MT1JTLCByb3ApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBobWVtZGMgPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZUNvbXBhdGlibGVEQyhoZGMpKTsKLSAgICBIR0RJT0JKIGhPbGRCbXAgPSBTZWxlY3RPYmpl
Y3QoaG1lbWRjLmdldCgpLCBoYml0bWFwKTsKLQotICAgIGlmICghdXNlc1RyYW5zcGFyZW50Q29s
b3IoKSAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBC
TEVOREZVTkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwgMCwgMjU1LCBBQ19TUkNfQUxQSEEg
fTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gYWxwaGFCbGVuZElmU3VwcG9ydGVkKGhkYywgZHN0
UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCks
IGhtZW1kYy5nZXQoKSwKLSAgICAgICAgICAgIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgc3Jj
UmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBibGVuZCk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVHJhbnNwYXJl
bnRCbHQoaGRjLCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0
UmVjdC5oZWlnaHQoKSwgaG1lbWRjLmdldCgpLAotICAgICAgICAgICAgc3JjUmVjdC54KCksIHNy
Y1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIHRyYW5zcGFyZW50
Q29sb3IoKSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgaE9sZEJt
cCk7Ci19Ci0KLUdESU9iamVjdDxIQklUTUFQPiBTaGFyZWRCaXRtYXA6OmNsaXBCaXRtYXAoY29u
c3QgSW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSwgQml0bWFwSW5mbyYgYm1wSW5mbywgdm9p
ZComIHBpeGVscykKLXsKLSAgICBpZiAoIWJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgb2xkSGVpZ2h0ID0gaGVp
Z2h0KCk7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluPGludD4ocmVjdC53aWR0aCgpLCBv
bGRXaWR0aCAtIHJlY3QueCgpKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluPGludD4o
cmVjdC5oZWlnaHQoKSwgb2xkSGVpZ2h0IC0gcmVjdC55KCkpOwotICAgIGlmICghY29weVdpZHRo
IHx8ICFjb3B5SGVpZ2h0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJtcEluZm8g
PSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRTaXplKGNvcHlXaWR0aCwgY29weUhlaWdo
dCksICh1c2VBbHBoYSAmJiBpczMyYml0KCkpID8gQml0bWFwSW5mbzo6Qml0Q291bnQzMiA6IEJp
dG1hcEluZm86OkJpdENvdW50MTYpOwotICAgIGF1dG8gbmV3Qm1wID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywg
MCwgMCkpOwotCi0gICAgaWYgKCFuZXdCbXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byBkY05ldyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsK
LSAgICBIR0RJT0JKIHRtcE5ldyA9IFNlbGVjdE9iamVjdChkY05ldy5nZXQoKSwgbmV3Qm1wLmdl
dCgpKTsKLQotICAgIFN0cmV0Y2hESUJpdHMoZGNOZXcuZ2V0KCksIDAsIDAsIGNvcHlXaWR0aCwg
Y29weUhlaWdodCwgcmVjdC54KCksIHJlY3QueSgpLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQsCi0g
ICAgICAgIGJ5dGVzKCksICZiaXRtYXBJbmZvKCksIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsK
LQotICAgIFNlbGVjdE9iamVjdChkY05ldy5nZXQoKSwgdG1wTmV3KTsKLSAgICByZXR1cm4gbmV3
Qm1wOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gU2hhcmVkQml0bWFwOjpjbGlwQml0
bWFwKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgdXNlQWxwaGEpCi17Ci0gICAgaW50IG9sZFdp
ZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7Ci0gICAgaW50IGNv
cHlXaWR0aCA9IHN0ZDo6bWluPGludD4ocmVjdC53aWR0aCgpLCBvbGRXaWR0aCAtIHJlY3QueCgp
KTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluPGludD4ocmVjdC5oZWlnaHQoKSwgb2xk
SGVpZ2h0IC0gcmVjdC55KCkpOwotICAgIGlmICghY29weVdpZHRoIHx8ICFjb3B5SGVpZ2h0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IG5ld0JtcCA9IGNy
ZWF0ZShJbnRTaXplKGNvcHlXaWR0aCwgY29weUhlaWdodCksIHVzZUFscGhhICYmIGlzMzJiaXQo
KSA/IEJpdG1hcEluZm86OkJpdENvdW50MzIgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDE2LCBmYWxz
ZSk7Ci0KLSAgICBpZiAoIW5ld0JtcCB8fCAhbmV3Qm1wLT5ieXRlcygpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIERDSG9sZGVyIGRjTmV3KG5ld0JtcC5nZXQoKSk7Ci0KLSAgICBTdHJldGNo
RElCaXRzKGRjTmV3LmdldCgpLCAwLCAwLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQsIHJlY3QueCgp
LCByZWN0LnkoKSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LAotICAgICAgICBieXRlcygpLCAmYml0
bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7Ci0KLSAgICByZXR1cm4gbmV3Qm1w
OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UGF0dGVyblNpbXBsZShIREMgaGRjLCBjb25zdCBSRUNU
JiBkZXN0UmVjdCwgSEJJVE1BUCBoYm1wLCBjb25zdCBQT0lOVCYgcGhhc2UpCi17Ci0gICAgYXV0
byBoQnJ1c2ggPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBhdHRlcm5CcnVzaChoYm1wKSk7Ci0g
ICAgaWYgKCFoQnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBPSU5UIG9sZE9yZzsKLSAg
ICBTZXRCcnVzaE9yZ0V4KGhkYywgZGVzdFJlY3QubGVmdCAtIHBoYXNlLngsIGRlc3RSZWN0LnRv
cCAtIHBoYXNlLnksICZvbGRPcmcpOwotICAgIEZpbGxSZWN0KGhkYywgJmRlc3RSZWN0LCBoQnJ1
c2guZ2V0KCkpOwotICAgIFNldEJydXNoT3JnRXgoaGRjLCBvbGRPcmcueCwgb2xkT3JnLnksIDAp
OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UGF0dGVyblNpbXBsZShIREMgaGRjLCBjb25zdCBSRUNU
JiBkZXN0UmVjdCwgY29uc3QgU2hhcmVkQml0bWFwKiBibXAsIGNvbnN0IFNJWkUmIGJtcFNpemUs
IGNvbnN0IFBPSU5UJiBwaGFzZSkKLXsKLSAgICBpbnQgZHN0WSA9IGRlc3RSZWN0LnRvcDsKLSAg
ICBmb3IgKGludCBzb3VyY2VZID0gcGhhc2UueTsgZHN0WSA8IGRlc3RSZWN0LmJvdHRvbTsgKSB7
Ci0gICAgICAgIGludCBzb3VyY2VIID0gc3RkOjptaW48aW50PihibXBTaXplLmN5IC0gc291cmNl
WSwgZGVzdFJlY3QuYm90dG9tIC0gZHN0WSk7Ci0gICAgICAgIGludCBkc3RYID0gZGVzdFJlY3Qu
bGVmdDsKLSAgICAgICAgZm9yIChpbnQgc291cmNlWCA9IHBoYXNlLng7IGRzdFggPCBkZXN0UmVj
dC5yaWdodDsgKSB7Ci0gICAgICAgICAgICBpbnQgc291cmNlVyA9IHN0ZDo6bWluPGludD4oYm1w
U2l6ZS5jeCAtIHNvdXJjZVgsIGRlc3RSZWN0LnJpZ2h0IC0gZHN0WCk7Ci0KLSAgICAgICAgICAg
IFN0cmV0Y2hESUJpdHMoaGRjLCBkc3RYLCBkc3RZLCBzb3VyY2VXLCBzb3VyY2VILCBzb3VyY2VY
LCBzb3VyY2VZLCBzb3VyY2VXLCBzb3VyY2VILAotICAgICAgICAgICAgICAgIGJtcC0+Ynl0ZXMo
KSwgJmJtcC0+Yml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7Ci0KLSAgICAg
ICAgICAgIGRzdFggKz0gc291cmNlVzsKLSAgICAgICAgICAgIHNvdXJjZVggPSAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZHN0WSArPSBzb3VyY2VIOwotICAgICAgICBzb3VyY2VZID0gMDsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBMT05HIG5vcm1hbGl6ZVBoYXNlKExPTkcgcGhhc2UsIGludCBsaW1p
dCkKLXsKLSAgICBpZiAoIXBoYXNlIHx8IGxpbWl0IDwgMikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAobGltaXQgPT0gMikKLSAgICAgICAgcmV0dXJuIHBoYXNlICYgMTsKLQotICAgIGlm
IChwaGFzZSA8IDApIHsKLSAgICAgICAgcGhhc2UgPSAtcGhhc2U7Ci0gICAgICAgIGlmIChwaGFz
ZSA+IGxpbWl0KQotICAgICAgICAgICAgcGhhc2UgPSBzdGF0aWNfY2FzdDxMT05HPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocGhhc2UpICUgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbWl0KSk7Ci0g
ICAgICAgIGlmIChwaGFzZSkKLSAgICAgICAgICAgIHBoYXNlID0gbGltaXQgLSBwaGFzZTsKLSAg
ICAgICAgcmV0dXJuIHBoYXNlOwotICAgIH0KLQotICAgIGlmIChwaGFzZSA8IGxpbWl0KQotICAg
ICAgICByZXR1cm4gcGhhc2U7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TE9ORz4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBoYXNlKSAlIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW1pdCkpOwot
fQotCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXpl
KQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLSAgICBjdHh0LT5kcmF3
Qml0bWFwUGF0dGVybih0aGlzLCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIG9yaWdTb3VyY2VTaXplKTsKLX0KLQotdm9p
ZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEhEQyBoZGMsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9y
aWdTb3VyY2VTaXplKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICh0aWxlUmVjdEluLndpZHRoKCkgPD0gMCB8fCB0aWxlUmVjdEluLmhlaWdodCgpIDw9
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgdXNlQWxwaGEgPSBvcCA9PSBDb21wb3Np
dGVTb3VyY2VPdmVyICYmIGhhc0FscGhhKCkgJiYgaXMzMmJpdCgpOwotCi0gICAgaW50IGJtcFdp
ZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgYm1wSGVpZ2h0ID0gaGVpZ2h0KCk7Ci0KLSAgICBGbG9h
dFJlY3QgdGlsZVJlY3QodGlsZVJlY3RJbik7Ci0gICAgaWYgKGJtcFdpZHRoICE9IG9yaWdTb3Vy
Y2VTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZG91YmxlIHJhdGUgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJtcFdpZHRoKSAvIG9yaWdTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgICAgIGRvdWJsZSB0
ZW1wID0gdGlsZVJlY3Qud2lkdGgoKSAqIHJhdGU7Ci0gICAgICAgIHRpbGVSZWN0LnNldFgodGls
ZVJlY3QueCgpICogcmF0ZSk7Ci0gICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKHRlbXApOwotICAg
ICAgICB0ZW1wID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiByYXRlOwotICAgICAgICB0aWxlUmVjdC5z
ZXRZKHRpbGVSZWN0LnkoKSAqIHJhdGUpOwotICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQodGVt
cCk7Ci0gICAgfQotCi0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGNsaXBwZWRCbXA7Ci0KLSAgICBp
ZiAodGlsZVJlY3QueCgpIHx8IHRpbGVSZWN0LnkoKSB8fCB0aWxlUmVjdC53aWR0aCgpICE9IGJt
cFdpZHRoIHx8IHRpbGVSZWN0LmhlaWdodCgpICE9IGJtcEhlaWdodCkgewotICAgICAgICBCaXRt
YXBJbmZvIHBhdHRlcm5CbXBJbmZvOwotICAgICAgICB2b2lkKiBwYXR0ZXJuUGl4ZWxzOwotICAg
ICAgICBjbGlwcGVkQm1wID0gY2xpcEJpdG1hcChJbnRSZWN0KHRpbGVSZWN0KSwgdXNlQWxwaGEs
IHBhdHRlcm5CbXBJbmZvLCBwYXR0ZXJuUGl4ZWxzKTsKLSAgICAgICAgaWYgKCFjbGlwcGVkQm1w
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGJtcFdpZHRoID0gdGlsZVJlY3Qud2lk
dGgoKTsKLSAgICAgICAgYm1wSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgfQotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHRmID0gcGF0dGVyblRyYW5zZm9ybSAqIHRyYW5zZm9ybTsKLQot
ICAgIEZsb2F0UmVjdCB0clJlY3QgPSB0Zi5tYXBSZWN0KGRlc3RSZWN0KTsKLQotICAgIFJFQ1Qg
Y2xpcEJveDsKLSAgICBpbnQgY2xpcFR5cGUgPSBHZXRDbGlwQm94KGhkYywgJmNsaXBCb3gpOwot
ICAgIGlmIChjbGlwVHlwZSA9PSBTSU1QTEVSRUdJT04pCi0gICAgICAgIHRyUmVjdC5pbnRlcnNl
Y3QoRmxvYXRSZWN0KGNsaXBCb3gubGVmdCwgY2xpcEJveC50b3AsIGNsaXBCb3gucmlnaHQgLSBj
bGlwQm94LmxlZnQsIGNsaXBCb3guYm90dG9tIC0gY2xpcEJveC50b3ApKTsKLSAgICBlbHNlIGlm
IChjbGlwVHlwZSA9PSBDT01QTEVYUkVHSU9OKSB7Ci0gICAgICAgIGF1dG8gY2xpcFJnbiA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIGlmIChH
ZXRDbGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSkgPiAwKSB7Ci0gICAgICAgICAgICBEV09SRCBy
ZWdpb25EYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEoY2xpcFJnbi5nZXQoKSwgc2l6ZW9mKFJHTkRB
VEEpLCAwKTsKLSAgICAgICAgICAgIGlmIChyZWdpb25EYXRhU2l6ZSkgewotICAgICAgICAgICAg
ICAgIFZlY3RvcjxSR05EQVRBPiByZWdpb25EYXRhKHJlZ2lvbkRhdGFTaXplKTsKLSAgICAgICAg
ICAgICAgICBHZXRSZWdpb25EYXRhKGNsaXBSZ24uZ2V0KCksIHJlZ2lvbkRhdGFTaXplLCByZWdp
b25EYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgUkVDVCogcmVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UkVDVCo+KHJlZ2lvbkRhdGFbMF0uQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KERXT1JEIGkgPSAwOyBpIDwgcmVnaW9uRGF0YVswXS5yZGgubkNvdW50OyArK2ksICsrcmVjdCkK
LSAgICAgICAgICAgICAgICAgICAgdHJSZWN0LmludGVyc2VjdChGbG9hdFJlY3QocmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJl
Y3QtPnRvcCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRy
UmVjdC53aWR0aCgpIDw9IDAgfHwgdHJSZWN0LmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHRyUmVjdC5pbmZsYXRlKDEpOwotICAgIEludFJlY3QgdmlzaWJsZURzdFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHRmLmludmVyc2UoKS5tYXBSZWN0KHRyUmVjdCkpOwotICAgIHZp
c2libGVEc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KGRlc3RSZWN0KSk7Ci0KLSAgICBpZiAodmlz
aWJsZURzdFJlY3Qud2lkdGgoKSA8PSAwIHx8IHZpc2libGVEc3RSZWN0LmhlaWdodCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHRyUmVjdCA9IHRmLm1hcFJlY3QodmlzaWJsZURzdFJl
Y3QpOwotICAgIFJFQ1QgZHN0UmVjdFdpbiA9IHsKLSAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0
LngoKSksCi0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC55KCkpLAotICAgICAgICBzdGFibGVS
b3VuZCh0clJlY3QubWF4WCgpKSwKLSAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0Lm1heFkoKSks
Ci0gICAgfTsKLSAgICBpZiAoZHN0UmVjdFdpbi5yaWdodCA8PSBkc3RSZWN0V2luLmxlZnQgfHwg
ZHN0UmVjdFdpbi5ib3R0b20gPD0gZHN0UmVjdFdpbi50b3ApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFNJWkUgYm1wU2l6ZSA9IHsgYm1wV2lkdGgsIGJtcEhlaWdodCB9OwotCi0gICAgLy8gUmVs
YXRpdmUgdG8gZGVzdGluYXRpb24sIGluIGJpdG1hcCBwaXhlbHMKLSAgICBQT0lOVCBwaGFzZVdp
biA9IHsgc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueCgpIC0gcGhhc2UueCgpKSwgc3RhYmxl
Um91bmQodmlzaWJsZURzdFJlY3QueSgpIC0gcGhhc2UueSgpKSB9OwotICAgIHBoYXNlV2luLngg
PSBub3JtYWxpemVQaGFzZShwaGFzZVdpbi54LCBibXBTaXplLmN4KTsKLSAgICBwaGFzZVdpbi55
ID0gbm9ybWFsaXplUGhhc2UocGhhc2VXaW4ueSwgYm1wU2l6ZS5jeSk7Ci0KLSAgICBSRUNUIHNy
Y1JlY3RXaW4gPSB7Ci0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIHN0YWJsZVJvdW5k
KHZpc2libGVEc3RSZWN0Lm1heFgoKSkgLSBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC54KCkp
LAotICAgICAgICBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC5tYXhZKCkpIC0gc3RhYmxlUm91
bmQodmlzaWJsZURzdFJlY3QueSgpKQotICAgIH07Ci0gICAgaWYgKHNyY1JlY3RXaW4ucmlnaHQg
PD0gMCB8fCBzcmNSZWN0V2luLmJvdHRvbSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBC
aXRtYXBJbmZvIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRTaXplKHNy
Y1JlY3RXaW4ucmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tKSwgdXNlQWxwaGEgPyBCaXRtYXBJbmZv
OjpCaXRDb3VudDMyIDogQml0bWFwSW5mbzo6Qml0Q291bnQxNik7Ci0gICAgdm9pZCogcGl4ZWxz
OwotICAgIGF1dG8gaGJtcFRlbXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24o
MCwgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7Ci0KLSAgICBpZiAo
IWhibXBUZW1wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGhtZW1kYyA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkYykpOwotICAgIEhHRElPQkogb2xkQm1wID0g
U2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgaGJtcFRlbXAuZ2V0KCkpOwotICAgIGlmIChjbGlw
cGVkQm1wKQotICAgICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RX
aW4sIGNsaXBwZWRCbXAuZ2V0KCksIHBoYXNlV2luKTsKLSAgICBlbHNlIGlmICgob3AgIT0gQ29t
cG9zaXRlU291cmNlT3ZlciB8fCBjYW5Vc2VESUJpdHMoKSkgJiYgc3JjUmVjdFdpbi5yaWdodCA8
PSBibXBTaXplLmN4ICogMiAmJiBzcmNSZWN0V2luLmJvdHRvbSA8PSBibXBTaXplLmN5ICogMikK
LSAgICAgICAgZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCB0aGlz
LCBibXBTaXplLCBwaGFzZVdpbik7Ci0gICAgZWxzZSBpZiAoZW5zdXJlSGFuZGxlKCkpCi0gICAg
ICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwgZ2V0SGFuZGxl
KCksIHBoYXNlV2luKTsKLSAgICBlbHNlIHsKLSAgICAgICAgdm9pZCogcGl4ZWxzOwotICAgICAg
ICBCaXRtYXBJbmZvIGJtcEluZm87Ci0gICAgICAgIGF1dG8gaGJtcCA9IGNyZWF0ZUhhbmRsZSgm
cGl4ZWxzLCAmYm1wSW5mbywgLTEsIGZhbHNlKTsKLSAgICAgICAgaWYgKGhibXApCi0gICAgICAg
ICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RXaW4sIGhibXAuZ2V0
KCksIHBoYXNlV2luKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTZWxlY3RPYmplY3Qo
aG1lbWRjLmdldCgpLCBvbGRCbXApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHVzZUFscGhhICYmIGhhc0FscGhhQmxlbmRTdXBwb3J0KCkpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IEJMRU5ERlVOQ1RJT04gYmxlbmQgPSB7IEFDX1NSQ19PVkVSLCAw
LCAyNTUsIEFDX1NSQ19BTFBIQSB9OwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBhbHBoYUJsZW5k
SWZTdXBwb3J0ZWQoaGRjLCBkc3RSZWN0V2luLmxlZnQsIGRzdFJlY3RXaW4udG9wLCBkc3RSZWN0
V2luLnJpZ2h0IC0gZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2luLmJvdHRvbSAtIGRzdFJlY3RX
aW4udG9wLAotICAgICAgICAgICAgaG1lbWRjLmdldCgpLCAwLCAwLCBzcmNSZWN0V2luLnJpZ2h0
LCBzcmNSZWN0V2luLmJvdHRvbSwgYmxlbmQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwotICAgIH0gZWxzZSBpZiAodXNlQWxwaGEgJiYgIWhhc0FscGhhQmxlbmRT
dXBwb3J0KCkgfHwgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiB1c2VzVHJhbnNwYXJlbnRD
b2xvcigpKSB7Ci0gICAgICAgIFRyYW5zcGFyZW50Qmx0KGhkYywgZHN0UmVjdFdpbi5sZWZ0LCBk
c3RSZWN0V2luLnRvcCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwKLSAgICAg
ICAgICAgIGRzdFJlY3RXaW4uYm90dG9tIC0gZHN0UmVjdFdpbi50b3AsIGhtZW1kYy5nZXQoKSwg
MCwgMCwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20sIHRyYW5zcGFyZW50Q29s
b3IoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRFdPUkQgYm1wT3AgPSBvcCA9PSBDb21wb3Np
dGVDb3B5ID8gU1JDQ09QWQotICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0ZVNv
dXJjZU92ZXIgPyBTUkNDT1BZCi0gICAgICAgICAgICAgICAgICAgIDogb3AgPT0gQ29tcG9zaXRl
WE9SID8gUEFUSU5WRVJUCi0gICAgICAgICAgICAgICAgICAgIDogb3AgPT0gQ29tcG9zaXRlQ2xl
YXIgPyBXSElURU5FU1MKLSAgICAgICAgICAgICAgICAgICAgOiBTUkNDT1BZOyAvLyBGSVhFTUU6
IG90aGVyIHR5cGVzPwotCi0gICAgICAgIFN0cmV0Y2hESUJpdHMoaGRjLCBkc3RSZWN0V2luLmxl
ZnQsIGRzdFJlY3RXaW4udG9wLCBkc3RSZWN0V2luLnJpZ2h0IC0gZHN0UmVjdFdpbi5sZWZ0LAot
ICAgICAgICAgICAgZHN0UmVjdFdpbi5ib3R0b20gLSBkc3RSZWN0V2luLnRvcCwgMCwgMCwgc3Jj
UmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20sCi0gICAgICAgICAgICBwaXhlbHMsICZi
bXBJbmZvLCBESUJfUkdCX0NPTE9SUywgYm1wT3ApOwotICAgIH0KLSAgICBTZWxlY3RPYmplY3Qo
aG1lbWRjLmdldCgpLCBvbGRCbXApOwotfQotCi1TaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXIqIFNo
YXJlZEJpdG1hcDo6c19kY1Byb3ZpZGVyID0gbmV3IFNoYXJlZEJpdG1hcDo6RENQcm92aWRlcjsK
LQotSERDIFNoYXJlZEJpdG1hcDo6RENQcm92aWRlcjo6Z2V0REMoU2hhcmVkQml0bWFwKiBibXAs
IHVuc2lnbmVkKiBrZXkpCi17Ci0gICAgaWYgKCFibXAgfHwgIWJtcC0+ZW5zdXJlSGFuZGxlKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgSERDIGhkYyA9IENyZWF0ZUNvbXBhdGlibGVEQygw
KTsKLSAgICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqa2V5ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4oU2VsZWN0T2JqZWN0KGhkYywgYm1wLT5nZXRIYW5kbGUoKSkp
OwotICAgIFJFQ1QgcmVjdCA9IHsgMCwgMCwgYm1wLT53aWR0aCgpLCBibXAtPmhlaWdodCgpIH07
Ci0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduSW5kaXJl
Y3QoJnJlY3QpKTsKLSAgICBTZWxlY3RDbGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gaGRjOwotfQotCi12b2lkIFNoYXJlZEJpdG1hcDo6RENQcm92aWRlcjo6cmVsZWFz
ZURDKFNoYXJlZEJpdG1hcCosIEhEQyBoZGMsIHVuc2lnbmVkIGtleTEpCi17Ci0gICAgaWYgKCFo
ZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNlbGVjdE9iamVjdChoZGMsIHJlaW50ZXJwcmV0
X2Nhc3Q8SEdESU9CSj4oa2V5MSkpOwotICAgIERlbGV0ZURDKGhkYyk7Ci19Ci0KLXZvaWQgU2hh
cmVkQml0bWFwOjpjbGVhclBpeGVscyhjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICgh
bV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgYm1wUmVjdCgwLCAwLCB3
aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgYm1wUmVjdC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgaWYg
KGlzMTZiaXQoKSkgewotICAgICAgICB1bnNpZ25lZCB3ID0gbV9ibXBJbmZvLnBhZGRlZFdpZHRo
KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0KiBkc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KG1fcGl4ZWxzKTsKLSAgICAgICAgZHN0ICs9IGJtcFJlY3QueSgpICogdyArIGJtcFJl
Y3QueCgpOwotICAgICAgICBpbnQgd29yZHNUb1NldCA9IGJtcFJlY3Qud2lkdGgoKTsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIGRzdEVuZCA9IGRzdCArIGJtcFJlY3QuaGVpZ2h0KCkg
KiB3OwotICAgICAgICB3aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgICAgICB3bWVtc2V0
KHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KGRzdCksIDAsIHdvcmRzVG9TZXQpOwotICAgICAg
ICAgICAgZHN0ICs9IHc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIHcgPSB3aWR0aCgpOwotICAgIHVuc2lnbmVkKiBkc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCo+KG1fcGl4ZWxzKTsKLSAgICBkc3QgKz0gYm1wUmVjdC55KCkgKiB3ICsgYm1wUmVj
dC54KCk7Ci0gICAgaW50IHdvcmRzVG9TZXQgPSBibXBSZWN0LndpZHRoKCkgKiAyOwotICAgIGNv
bnN0IHVuc2lnbmVkKiBkc3RFbmQgPSBkc3QgKyBibXBSZWN0LmhlaWdodCgpICogdzsKLSAgICB3
aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgIHdtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx3
Y2hhcl90Kj4oZHN0KSwgMCwgd29yZHNUb1NldCk7Ci0gICAgICAgIGRzdCArPSB3OwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjY4OTViMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU2hhcmVkQml0
bWFwX2gKLSNkZWZpbmUgU2hhcmVkQml0bWFwX2gKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBv
aW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW50
UmVjdDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLQotY2xh
c3MgU2hhcmVkQml0bWFwOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCaXRtYXA+IHsKLXB1Ymxp
YzoKLSAgICB+U2hhcmVkQml0bWFwKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQml0
bWFwPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEJpdG1hcEluZm86OkJpdENvdW50ID0gQml0bWFw
SW5mbzo6Qml0Q291bnQzMiwgYm9vbCBpbml0UGl4ZWxzID0gdHJ1ZSk7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U2hhcmVkQml0bWFwPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYsIGNv
bnN0IEludFNpemUmLCBib29sIGhhc0FscGhhID0gdHJ1ZSk7Ci0KLSAgICBjb25zdCBCaXRtYXBJ
bmZvJiBiaXRtYXBJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvOyB9Ci0gICAgdm9pZCog
Ynl0ZXMoKSB7IHJldHVybiBtX3BpeGVsczsgfQotICAgIGNvbnN0IHZvaWQqIGJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9waXhlbHM7IH0KLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm1wSW5mby53aWR0aCgpOyB9Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibXBJbmZvLmhlaWdodCgpOyB9Ci0gICAgdW5zaWduZWQgdmFsaWRIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbGlkSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRWYWxpZEhlaWdodCh1
bnNpZ25lZCB2YWxpZEhlaWdodCkgeyBtX3ZhbGlkSGVpZ2h0ID0gdmFsaWRIZWlnaHQ7IH0KLSAg
ICB2b2lkIHJlc2V0UGl4ZWxzKGJvb2wgYmxhY2sgPSBmYWxzZSk7Ci0gICAgdm9pZCBjbGVhclBp
eGVscyhjb25zdCBJbnRSZWN0JiByKTsKLSAgICBib29sIGxvY2tlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9ja2VkOyB9Ci0gICAgdm9pZCBsb2NrKCkgeyBtX2xvY2tlZCA9IHRydWU7IH0KLSAgICB2
b2lkIHVubG9jaygpIHsgbV9sb2NrZWQgPSBmYWxzZTsgfQotICAgIGJvb2wgZnJlZU1lbW9yeSgp
OwotICAgIGJvb2wgaXMxNmJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mby5pczE2Yml0KCk7
IH0KLSAgICBib29sIGlzMzJiaXQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8uaXMzMmJpdCgp
OyB9Ci0gICAgYm9vbCB0bzE2Yml0KCk7Ci0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWxwaGE7IH0KLSAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9o
YXNBbHBoYSA9IGFscGhhOyB9Ci0gICAgYm9vbCBlbnN1cmVIYW5kbGUoKTsKLSAgICBIQklUTUFQ
IGdldEhhbmRsZSgpIHsgcmV0dXJuIG1faGJpdG1hcC5nZXQoKTsgfQotICAgIEdESU9iamVjdDxI
QklUTUFQPiBjcmVhdGVIYW5kbGUodm9pZCoqIHBpeGVscywgQml0bWFwSW5mbyogYm1wSW5mbywg
aW50IGggPSAtMSwgYm9vbCB1c2UxNmJpdCA9IHRydWUpIGNvbnN0OwotICAgIGJvb2wgdXNlc1Ry
YW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNUcmFuc3BhcmVudENvbG9yOyB9
Ci0gICAgQ09MT1JSRUYgdHJhbnNwYXJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNw
YXJlbnRDb2xvcjsgfQotICAgIHZvaWQgc2V0VHJhbnNwYXJlbnRDb2xvcihDT0xPUlJFRiBjKQot
ICAgIHsKLSAgICAgICAgbV91c2VzVHJhbnNwYXJlbnRDb2xvciA9IHRydWU7Ci0gICAgICAgIG1f
dHJhbnNwYXJlbnRDb2xvciA9IGM7Ci0gICAgfQotICAgIGJvb2wgY2FuVXNlRElCaXRzKCkgY29u
c3QgeyByZXR1cm4gIWhhc0FscGhhKCkgJiYgIXVzZXNUcmFuc3BhcmVudENvbG9yKCk7IH0KLQot
ICAgIEdESU9iamVjdDxIQklUTUFQPiBjbGlwQml0bWFwKGNvbnN0IEludFJlY3QmLCBib29sIHVz
ZUFscGhhLCBCaXRtYXBJbmZvJiwgdm9pZComIHBpeGVscyk7Ci0KLSAgICBQYXNzUmVmUHRyPFNo
YXJlZEJpdG1hcD4gY2xpcEJpdG1hcChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIHVzZUFscGhh
KTsKLQotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEludFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSk7
Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7Ci0gICAgdm9pZCBkcmF3
KEhEQywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpOwotICAgIHZv
aWQgZHJhd1BhdHRlcm4oSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwotCi0gICAgY2xhc3MgRENQ
cm92aWRlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIEhEQyBnZXREQyhTaGFyZWRC
aXRtYXAqLCB1bnNpZ25lZCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURDKFNoYXJl
ZEJpdG1hcCosIEhEQywgdW5zaWduZWQpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgRENQcm92aWRl
ciogc19kY1Byb3ZpZGVyOwotCi0gICAgSERDIGdldERDKHVuc2lnbmVkKiBrZXkxKSB7IHJldHVy
biBzX2RjUHJvdmlkZXItPmdldERDKHRoaXMsIGtleTEpOyB9Ci0gICAgdm9pZCByZWxlYXNlREMo
SERDIGhkYywgdW5zaWduZWQga2V5MSkgeyBzX2RjUHJvdmlkZXItPnJlbGVhc2VEQyh0aGlzLCBo
ZGMsIGtleTEpOyB9Ci0KLSAgICBjbGFzcyBEQ0hvbGRlciB7Ci0gICAgcHVibGljOgotICAgICAg
ICBEQ0hvbGRlcihTaGFyZWRCaXRtYXAqIGJtcCA9IDApIHsgc2V0SW50ZXJuYWwoYm1wKTsgfQot
ICAgICAgICB+RENIb2xkZXIoKSB7IGNsZWFySW50ZXJuYWwoKTsgfQotICAgICAgICB2b2lkIHNl
dChTaGFyZWRCaXRtYXAqIGJtcCA9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFySW50
ZXJuYWwoKTsKLSAgICAgICAgICAgIHNldEludGVybmFsKGJtcCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgSERDIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faGRjOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgRENIb2xkZXImIG9wZXJhdG9yPShjb25zdCBEQ0hvbGRlciYpOwotICAgICAgICBEQ0hvbGRl
cihjb25zdCBEQ0hvbGRlciYpOwotICAgICAgICB2b2lkIGNsZWFySW50ZXJuYWwoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobV9oZGMpCi0gICAgICAgICAgICAgICAgbV9iaXRtYXAtPnJl
bGVhc2VEQyhtX2hkYywgbV9rZXkpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0SW50ZXJu
YWwoU2hhcmVkQml0bWFwKiBibXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYml0bWFwID0g
Ym1wOwotICAgICAgICAgICAgbV9oZGMgPSBibXAgPyBibXAtPmdldERDKCZtX2tleSkgOiAwOwot
ICAgICAgICB9Ci0gICAgICAgIFNoYXJlZEJpdG1hcCogbV9iaXRtYXA7Ci0gICAgICAgIEhEQyBt
X2hkYzsKLSAgICAgICAgdW5zaWduZWQgbV9rZXk7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBT
aGFyZWRCaXRtYXAoY29uc3QgSW50U2l6ZSYsIEJpdG1hcEluZm86OkJpdENvdW50LCBib29sIGlu
aXRQaXhlbHMpOwotICAgIEJpdG1hcEluZm8gbV9ibXBJbmZvOwotICAgIEdESU9iamVjdDxIQklU
TUFQPiBtX2hiaXRtYXA7Ci0gICAgdm9pZCogbV9waXhlbHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PHVuc2lnbmVkW10+IG1fcGl4ZWxEYXRhOwotICAgIENPTE9SUkVGIG1fdHJhbnNwYXJlbnRDb2xv
cjsKLSAgICBpbnQgbV92YWxpZEhlaWdodDsKLSAgICBib29sIG1fbG9ja2VkOwotICAgIGJvb2wg
bV91c2VzVHJhbnNwYXJlbnRDb2xvcjsKLSAgICBib29sIG1faGFzQWxwaGE7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTaGFyZWRCaXRtYXBfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFX
aW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVG
b250RGF0YVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiOGY4Yy4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1w
bGVGb250RGF0YVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1leHRlcm4gSERDIGdfc2NyZWVu
REM7Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgaWYgKCFt
X3BsYXRmb3JtRGF0YS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFRF
WFRNRVRSSUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOwotICAgIG1faXNTeXN0ZW1G
b250ID0gbV9wbGF0Zm9ybURhdGEuaXNTeXN0ZW1Gb250KCk7Ci0KLSAgICBmbG9hdCBhc2NlbnQg
PSAodG0udG1Bc2NlbnQgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3Mi4wZjsKLSAg
ICBmbG9hdCBkZXNjZW50ID0gKHRtLnRtRGVzY2VudCAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSAr
IDM2KSAvIDcyLjBmOwotICAgIGZsb2F0IGxpbmVHYXAgPSAodG0udG1FeHRlcm5hbExlYWRpbmcg
KiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3Mi4wZjsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsg
bHJvdW5kZihsaW5lR2FwKSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KGFzY2VudCAq
IDAuNTZmKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsK
LX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzYyhmb250RGVzY3JpcHRpb24pOwotICAgIGZvbnREZXNjLnNldENvbXB1dGVkU2l6ZShscm91
bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2MuY29tcHV0ZWRTaXplKCkpKTsKLSAgICBmb250RGVz
Yy5zZXRTcGVjaWZpZWRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVzYy5zcGVjaWZp
ZWRTaXplKCkpKTsKLSAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6ZShscm91bmRmKHNjYWxlRmFj
dG9yICogZm9udERlc2Mua2V5d29yZFNpemUoKSkpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJl
c3VsdCA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2MsIG1f
cGxhdGZvcm1EYXRhLmZhbWlseSgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7Ci19Ci0KLURX
T1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOwotCi1ib29s
IFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLmlzRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBGSVhNRTogTWljcm9zb2Z0IGRv
Y3VtZW50YXRpb24gc2VlbXMgdG8gaW1wbHkgdGhhdCBjaGFyYWN0ZXJzIGNhbiBiZSBvdXRwdXQg
dXNpbmcgYSBnaXZlbiBmb250IGFuZCBEQwotICAgIC8vIG1lcmVseSBieSB0ZXN0aW5nIGNvZGUg
cGFnZSBpbnRlcnNlY3Rpb24uICBUaGlzIHNlZW1zIHN1c3BlY3QgdGhvdWdoLiAgQ2FuJ3QgYSBm
b250IG9ubHkgcGFydGlhbGx5Ci0gICAgLy8gY292ZXIgYSBnaXZlbiBjb2RlIHBhZ2U/Ci0KLSAg
ICAvLyBGSVhNRTogaW4gdGhlIGNhc2UgdGhhdCB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBpbnRlcmZh
Y2UsIHN0aWxsIHVzZSB0aGUgZm9udC4KLSAgICBJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250
TGluayA9IGZvbnRDYWNoZSgpLmdldEZvbnRMaW5rSW50ZXJmYWNlKCk7Ci0gICAgaWYgKCFsYW5n
Rm9udExpbmspCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgRFdPUkQgZm9udENvZGVQYWdl
cyA9IG1fcGxhdGZvcm1EYXRhLmNvZGVQYWdlcygpOwotICAgIGlmICghZm9udENvZGVQYWdlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdPUkQgYWNwQ29kZVBhZ2VzID0gMDsKLSAg
ICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoQ1BfQUNQLCAmYWNwQ29kZVBhZ2Vz
KTsKLQotICAgIERXT1JEIGFjdHVhbENvZGVQYWdlczsKLSAgICBsb25nIG51bUNoYXJhY3RlcnNQ
cm9jZXNzZWQ7Ci0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICBsYW5nRm9udExpbmstPkdl
dFN0ckNvZGVQYWdlcyhjaGFyYWN0ZXJzLCBsZW5ndGgsIGFjcENvZGVQYWdlcywgJmFjdHVhbENv
ZGVQYWdlcywgJm51bUNoYXJhY3RlcnNQcm9jZXNzZWQpOwotICAgICAgICBpZiAoYWN0dWFsQ29k
ZVBhZ2VzICYmICEoYWN0dWFsQ29kZVBhZ2VzICYgZm9udENvZGVQYWdlcykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbGVuZ3RoIC09IG51bUNoYXJhY3RlcnNQcm9jZXNz
ZWQ7Ci0gICAgICAgIGNoYXJhY3RlcnMgKz0gbnVtQ2hhcmFjdGVyc1Byb2Nlc3NlZDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5l
UGl0Y2goKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRhLm1ldHJp
Y3MoKTsKLQotICAgIC8vIFllcywgdGhpcyBsb29rcyBiYWNrd2FyZHMsIGJ1dCB0aGUgZml4ZWQg
cGl0Y2ggYml0IGlzIGFjdHVhbGx5IHNldCBpZiB0aGUgZm9udAotICAgIC8vIGlzICpub3QqIGZp
eGVkIHBpdGNoLiAgVW5iZWxpZXZhYmxlIGJ1dCB0cnVlLgotICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKTsKLX0KLQotRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25z
dAotewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLSAgICAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fcGxhdGZvcm1EYXRhLmlzRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBI
R0RJT0JKIGhPbGRGb250ID0gU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG1fcGxhdGZvcm1EYXRh
Lmhmb250KCkpOwotCi0gICAgU0laRSBmb250U2l6ZTsKLSAgICB3Y2hhcl90IGMgPSBnbHlwaDsK
LSAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMihnX3NjcmVlbkRDLCAmYywgMSwgJmZvbnRTaXplKTsK
LQotICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBoT2xkRm9udCk7Ci0KLSAgICByZXR1cm4g
KGZsb2F0KWZvbnRTaXplLmN4ICogKGZsb2F0KW1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDcyLmY7
Ci19Ci0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsK
LSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY29uc3QgVEVYVE1FVFJJQyYgdG0gPSBtX3BsYXRmb3JtRGF0YS5tZXRyaWNzKCk7Ci0gICAg
bV9hdmdDaGFyV2lkdGggPSAodG0udG1BdmVDaGFyV2lkdGggKiBtX3BsYXRmb3JtRGF0YS5zaXpl
KCkgKyAzNikgLyA3MjsKLSAgICBtX21heENoYXJXaWR0aCA9ICh0bS50bU1heENoYXJXaWR0aCAq
IG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDM2KSAvIDcyOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9XaW5DRUdyYXBoaWNzRXh0cmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9XaW5DRUdyYXBoaWNzRXh0cmFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRjYWIyMWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBXaW5DRUdyYXBoaWNzRXh0cmFzX2gKLSNkZWZpbmUgV2luQ0VH
cmFwaGljc0V4dHJhc19oCi0KLS8vIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGNvbnRhaW4gc21hbGwg
dXRpbGl0aWVzIHVzZWQgYnkgV0lOQ0UgZ3JhcGhpY3MgY29kZS4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIC8vIEFsd2F5cyByb3VuZCB0byBzYW1lIGRpcmVjdGlvbi4gMC41IGlzIHJvdW5k
ZWQgdG8gMSwKLSAgICAvLyBhbmQgLTAuNSAoMC41IC0gMSkgaXMgcm91bmRlZCB0byAwICgxIC0g
MSksIHNvIHRoYXQgaXQKLSAgICAvLyBpcyBjb25zaXN0ZW50IHdoZW4gdHJhbnNmb3JtYXRpb24g
c2hpZnRzLgotICAgIHN0YXRpYyBpbmxpbmUgaW50IHN0YWJsZVJvdW5kKGRvdWJsZSBkKQotICAg
IHsKLSAgICAgICAgaWYgKGQgPiAwKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4oZCArIDAuNSk7Ci0KLSAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwotICAg
ICAgICByZXR1cm4gaSAtIGQgPiAwLjUgPyBpIC0gMSA6IGk7Ci0gICAgfQotfQotCi0jZW5kaWYg
V2luQ0VHcmFwaGljc0V4dHJhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IGE0
ZmE2ZDEuLjVmYzhjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCkBAIC0zMSwxNSAr
MzEsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIE5lZWRlZCBieSBqcGVnbGliLmggZm9yIEZJ
TEUuCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBSZW1vdmUg
d2FybmluZzogJ0ZBUicgbWFjcm8gcmVkZWZpbml0aW9uCi0jdW5kZWYgRkFSCi0KLS8vIGptb3Jl
Y2ZnLmggaW4gbGlianBlZyBjaGVja3MgZm9yIFhNRF9IIHdpdGggdGhlIGNvbW1lbnQ6ICJYMTEv
eG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIiCi0vLyBmaXggSU5UMzIgcmVkZWZpbml0aW9u
IGVycm9yIGJ5IHByZXRlbmRpbmcgd2UgYXJlIFgxMS94bWQuaAotI2RlZmluZSBYTURfSAotI2Vu
ZGlmCi0KIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlmaWVy
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0
ZU5vdGlmaWVyV2luLmNwcAppbmRleCBkZGVkYWJmLi4wYTUxZjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmllcldpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRl
Tm90aWZpZXJXaW4uY3BwCkBAIC0xMDcsMTQgKzEwNywxMSBAQCBOZXR3b3JrU3RhdGVOb3RpZmll
cjo6TmV0d29ya1N0YXRlTm90aWZpZXIoKQogCiAgICAgbWVtc2V0KCZtX292ZXJsYXBwZWQsIDAs
IHNpemVvZihtX292ZXJsYXBwZWQpKTsKIAotLy8gRklYTUU6IENoZWNrIG1fb3ZlcmxhcHBlZCBv
biBXaW5DRS4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgbV9vdmVybGFwcGVkLmhFdmVudCA9IDo6Q3Jl
YXRlRXZlbnQoMCwgZmFsc2UsIGZhbHNlLCAwKTsKIAogICAgIDo6UmVnaXN0ZXJXYWl0Rm9yU2lu
Z2xlT2JqZWN0KCZtX3dhaXRIYW5kbGUsIG1fb3ZlcmxhcHBlZC5oRXZlbnQsIGFkZHJDaGFuZ2VD
YWxsYmFjaywgdGhpcywgSU5GSU5JVEUsIDApOwogCiAgICAgcmVnaXN0ZXJGb3JBZGRyZXNzQ2hh
bmdlKCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0NPTVB0ci5oCmluZGV4IDc0MDQ4NTQuLmM2YjJlOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ09NUHRyLmgKQEAgLTM0LDEwICszNCw2IEBACiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogCi0jaWYgIU9TKFdJTkNF
KQotI2luY2x1ZGUgPGd1aWRkZWYuaD4KLSNlbmRpZgotCiB0eXBlZGVmIGxvbmcgSFJFU1VMVDsK
IAogLy8gRklYTUU6IFNob3VsZCB3ZSBwdXQgdGhpcyBpbnRvIHRoZSBXZWJDb3JlIG5hbWVzcGFj
ZSBhbmQgdXNlICJ1c2luZyIgb24gaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKaW5kZXggMmJjY2YxYS4uN2ZkYzZiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxp
dGllc1dpbi5jcHAKQEAgLTMxLDE0ICszMSwxMiBAQAogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPHNobG9iai5oPgorI2luY2x1ZGUgPHNo
bHdhcGkuaD4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+IC8vIGZvciBJTlRFUk5FVF9NQVhfVVJMX0xF
TkdUSAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgIU9T
KFdJTkNFKQotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNlbmRpZgogCiAjaWYgVVNFKENGKQogI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudUl0ZW1XaW4uY3BwCmluZGV4IDVmOTU1YmYu
LjdiNDFlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0
TWVudUl0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0
TWVudUl0ZW1XaW4uY3BwCkBAIC0yOCwxMCArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1l
bnUuaCIKIAotI2lmIE9TKFdJTkNFKQotI2lmbmRlZiBNRlNfRElTQUJMRUQKLSNkZWZpbmUgTUZT
X0RJU0FCTEVEIE1GX0dSQVlFRAotI2VuZGlmCiAjaWZuZGVmIE1JSU1fRlRZUEUKICNkZWZpbmUg
TUlJTV9GVFlQRSBNSUlNX1RZUEUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Db250ZXh0TWVudVdpbi5jcHAKaW5kZXggMzc1NWYyNC4uNDUwNDdlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCkBAIC01Miw5ICs1
Miw2IEBAIENvbnRleHRNZW51OjpDb250ZXh0TWVudShITUVOVSBtZW51KQogCiB2b2lkIENvbnRl
eHRNZW51OjpnZXRDb250ZXh0TWVudUl0ZW1zKEhNRU5VIG1lbnUsIFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0+JiBpdGVtcykKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
I2Vsc2UKICAgICBpbnQgY291bnQgPSA6OkdldE1lbnVJdGVtQ291bnQobWVudSk7CiAgICAgaWYg
KGNvdW50IDw9IDApCiAgICAgICAgIHJldHVybjsKQEAgLTgwLDcgKzc3LDYgQEAgdm9pZCBDb250
ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVtcyhITUVOVSBtZW51LCBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtPiYgaXRlbXMKICAgICAgICAgaWYgKDo6R2V0TWVudUl0ZW1JbmZvKG1lbnUsIGksIFRS
VUUsICZpbmZvKSkKICAgICAgICAgICAgaXRlbXMuYXBwZW5kKENvbnRleHRNZW51SXRlbShpbmZv
KSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIEhNRU5VIENvbnRleHRNZW51OjpjcmVhdGVQbGF0Zm9y
bUNvbnRleHRNZW51RnJvbUl0ZW1zKGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBpdGVt
cykKQEAgLTkyLDMxICs4OCw2IEBAIEhNRU5VIENvbnRleHRNZW51OjpjcmVhdGVQbGF0Zm9ybUNv
bnRleHRNZW51RnJvbUl0ZW1zKGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0CiAKICAgICAgICAg
TUVOVUlURU1JTkZPIG1lbnVJdGVtID0gaXRlbS5wbGF0Zm9ybUNvbnRleHRNZW51SXRlbSgpOwog
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIFVJTlQgZmxhZ3MgPSBNRl9CWVBPU0lUSU9OOwotICAg
ICAgICBVSU5UIG5ld0l0ZW0gPSAwOwotICAgICAgICBMUENXU1RSIHRpdGxlID0gMDsKLQotICAg
ICAgICBpZiAoaXRlbS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgICAgIGZsYWdz
IHw9IE1GX1NFUEFSQVRPUjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBN
Rl9TVFJJTkc7Ci0gICAgICAgICAgICBmbGFncyB8PSBpdGVtLmNoZWNrZWQoKSA/IE1GX0NIRUNL
RUQgOiBNRl9VTkNIRUNLRUQ7Ci0gICAgICAgICAgICBmbGFncyB8PSBpdGVtLmVuYWJsZWQoKSA/
IE1GX0VOQUJMRUQgOiBNRl9HUkFZRUQ7Ci0KLSAgICAgICAgICAgIHRpdGxlID0gbWVudUl0ZW0u
ZHdUeXBlRGF0YTsKLSAgICAgICAgICAgIG1lbnVJdGVtLmR3VHlwZURhdGEgPSAwOwotCi0gICAg
ICAgICAgICBpZiAobWVudUl0ZW0uaFN1Yk1lbnUpIHsKLSAgICAgICAgICAgICAgICBmbGFncyB8
PSBNRl9QT1BVUDsKLSAgICAgICAgICAgICAgICBuZXdJdGVtID0gcmVpbnRlcnByZXRfY2FzdDxV
SU5UPihtZW51SXRlbS5oU3ViTWVudSk7Ci0gICAgICAgICAgICAgICAgbWVudUl0ZW0uaFN1Yk1l
bnUgPSAwOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmV3SXRlbSA9IG1l
bnVJdGVtLndJRDsKLSAgICAgICAgfQotCi0gICAgICAgIDo6SW5zZXJ0TWVudVcobWVudSwgaSwg
ZmxhZ3MsIG5ld0l0ZW0sIHRpdGxlKTsKLSNlbHNlCiAgICAgICAgIC8vIENvbnRleHRNZW51SXRl
bTo6cGxhdGZvcm1Db250ZXh0TWVudUl0ZW0gZG9lc24ndCBzZXQgdGhlIHRpdGxlIG9mIHRoZSBN
RU5VSVRFTUlORk8gdG8gbWFrZSB0aGUKICAgICAgICAgLy8gbGlmZXRpbWUgaGFuZGxpbmcgZWFz
aWVyIGZvciBjYWxsZXJzLgogICAgICAgICBWZWN0b3I8VUNoYXI+IHdpZGVDaGFyVGl0bGU7IC8v
IFJldGFpbiBidWZmZXIgZm9yIGxvbmcgZW5vdWdoIHRvIG1ha2UgdGhlIEluc2VydE1lbnVJdGVt
IGNhbGwKQEAgLTEzMCw3ICsxMDEsNiBAQCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZv
cm1Db250ZXh0TWVudUZyb21JdGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogICAgICAg
ICB9CiAKICAgICAgICAgOjpJbnNlcnRNZW51SXRlbShtZW51LCBpLCBUUlVFLCAmbWVudUl0ZW0p
OwotI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIG1lbnU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCmluZGV4IDBkOGQ0NDEuLmI1YTgwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCkBAIC0xMDUsNyAr
MTA1LDYgQEAgY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEwOwogc3RhdGljIEZv
bnQgZHJhZ0xhYmVsRm9udChpbnQgc2l6ZSwgYm9vbCBib2xkLCBGb250UmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKQogewogICAgIEZvbnQgcmVzdWx0OwotI2lmICFPUyhXSU5DRSkKICAgICBO
T05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CiAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0
cmljcyk7CiAgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1Ms
IG1ldHJpY3MuY2JTaXplLCAmbWV0cmljcywgMCk7CkBAIC0xMTgsNyArMTE3LDYgQEAgc3RhdGlj
IEZvbnQgZHJhZ0xhYmVsRm9udChpbnQgc2l6ZSwgYm9vbCBib2xkLCBGb250UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKQogICAgIGRlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUocmVuZGVy
aW5nTW9kZSk7CiAgICAgcmVzdWx0ID0gRm9udChkZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgcmVz
dWx0LnVwZGF0ZSgwKTsKLSNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBjNjUyOTNkLi41
ZDQ5YjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwCkBAIC0xNTYsMTkgKzE1Niw2IEBAIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoKQogCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgYnVpbGRlci5hcHBlbmQocGF0aCk7Ci0K
LSAgICBVQ2hhciBsYXN0UGF0aENoYXJhY3RlciA9IHBhdGhbcGF0aC5sZW5ndGgoKSAtIDFdOwot
ICAgIGlmIChsYXN0UGF0aENoYXJhY3RlciAhPSBMJ1xcJyAmJiBsYXN0UGF0aENoYXJhY3RlciAh
PSBMJy8nICYmIGNvbXBvbmVudFswXSAhPSBMJ1xcJyAmJiBjb21wb25lbnRbMF0gIT0gTCcvJykK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoUGxhdGZvcm1GaWxlUGF0aFNlcGFyYXRvcik7Ci0KLSAg
ICBidWlsZGVyLmFwcGVuZChjb21wb25lbnQpOwotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKLSNlbHNlCiAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwogCiAgICAg
aWYgKHBhdGgubGVuZ3RoKCkgKyAxID4gYnVmZmVyLnNpemUoKSkKQEAgLTE4Myw3ICsxNzAsNiBA
QCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBjb21wb25lbnQpCiAgICAgYnVmZmVyLnNocmluayh3Y3NsZW4oYnVmZmVyLmRh
dGEoKSkpOwogCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKLSNlbmRpZgogfQog
CiAjaWYgIVVTRShDRikKQEAgLTIyNiwyNCArMjEyLDcgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQ
YXRoKCkKIAogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0j
aWYgT1MoV0lOQ0UpCi0gICAgc2l6ZV90IHBvc2l0aW9uU2xhc2ggPSBwYXRoLnJldmVyc2VGaW5k
KCcvJyk7Ci0gICAgc2l6ZV90IHBvc2l0aW9uQmFja3NsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgn
XFwnKTsKLQotICAgIHNpemVfdCBwb3NpdGlvbjsKLSAgICBpZiAocG9zaXRpb25TbGFzaCA9PSBu
b3RGb3VuZCkKLSAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkJhY2tzbGFzaDsKLSAgICBlbHNl
IGlmIChwb3NpdGlvbkJhY2tzbGFzaCA9PSBub3RGb3VuZCkKLSAgICAgICAgcG9zaXRpb24gPSAg
cG9zaXRpb25TbGFzaDsKLSAgICBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gc3RkOjptYXgocG9z
aXRpb25TbGFzaCwgcG9zaXRpb25CYWNrc2xhc2gpOwotCi0gICAgaWYgKHBvc2l0aW9uID09IG5v
dEZvdW5kKQotICAgICAgICByZXR1cm4gcGF0aDsKLSAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmco
cG9zaXRpb24gKyAxKTsKLSNlbHNlCiAgICAgcmV0dXJuIFN0cmluZyg6OlBhdGhGaW5kRmlsZU5h
bWUoU3RyaW5nKHBhdGgpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSk7
Ci0jZW5kaWYKIH0KIAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQpA
QCAtMjc4LDkgKzI0Nyw2IEBAIHN0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCiAKIHN0YXRpYyBT
dHJpbmcgc3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIHsKLSNpZiBPUyhX
SU5DRSkKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci0jZWxzZQogICAgIFZlY3RvcjxVQ2hhcj4gYnVm
ZmVyKE1BWF9QQVRIKTsKICAgICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVyUGF0aFcoMCwgcGF0aElk
ZW50aWZpZXIgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYnVmZmVyLmRhdGEoKSkpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yOTMsNyArMjU5LDYgQEAgc3RhdGljIFN0cmluZyBz
dG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKICAgICByZXR1cm4gZGlyZWN0b3J5OwotI2VuZGlmCiB9CiAKIHN0YXRpYyBTdHJp
bmcgY2FjaGVkU3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAppbmRleCAyZmFlNzc4Li5mMzZhMTQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCkBAIC0zOCw5
ICszOCw2IEBAIHN0YXRpYyBjaGFyICogY29uc3QgbG9nZ2luZ0Vudmlyb25tZW50VmFyaWFibGUg
PSAiV2ViQ29yZUxvZ2dpbmciOwogCiBTdHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQogewotI2lmIE9T
KFdJTkNFKQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotI2Vsc2UKICAgICBEV09SRCBsZW5n
dGggPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlQShsb2dnaW5nRW52aXJvbm1lbnRWYXJpYWJsZSwg
MCwgMCk7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpA
QCAtNTEsNyArNDgsNiBAQCBTdHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQogICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKIAogICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmdldCgpKTsKLSNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggY2U1YTdlMi4uYzJhMDc1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtNzksMTIgKzc5
LDEwIEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBhc3RlYm9hcmRPd25lclduZFByb2MoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
V01fREVTVFJPWToKICAgICAgICAgYnJlYWs7Ci0jaWYgIU9TKFdJTkNFKQogICAgIGNhc2UgV01f
RFJBV0NMSVBCT0FSRDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXTV9DSEFOR0VDQkNIQUlO
OgogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIGxyZXN1bHQg
PSBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKICAgICAgICAg
YnJlYWs7CkBAIC05NiwxMCArOTQsOCBAQCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9h
cmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpCiB7CiAgICAgT3duUHRyPFBhc3RlYm9hcmQ+IHBh
c3RlYm9hcmQgPSBhZG9wdFB0cihuZXcgUGFzdGVib2FyZCk7CiAgICAgQ09NUHRyPElEYXRhT2Jq
ZWN0PiBjbGlwYm9hcmREYXRhOwotI2lmICFPUyhXSU5DRSkKICAgICBpZiAoIVNVQ0NFRURFRChP
bGVHZXRDbGlwYm9hcmQoJmNsaXBib2FyZERhdGEpKSkKICAgICAgICAgY2xpcGJvYXJkRGF0YSA9
IDA7Ci0jZW5kaWYKICAgICBwYXN0ZWJvYXJkLT5zZXRFeHRlcm5hbERhdGFPYmplY3QoY2xpcGJv
YXJkRGF0YS5nZXQoKSk7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQucmVsZWFzZSgpOwogfQpAQCAt
NTI1LDcgKzUyMSw2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBsCiAgICAgd3JpdGVQbGFpblRl
eHRUb0RhdGFPYmplY3QodGV4dCwgc21hcnRSZXBsYWNlT3B0aW9uKTsKIH0KIAotI2lmICFPUyhX
SU5DRSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXRoUmVtb3ZlQmFkRlNDaGFyYWN0ZXJzKFBXU1RS
IHBzeiwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBzaXplX3Qgd3JpdGVUbyA9IDA7CkBAIC01Mzks
MTQgKzUzNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXRoUmVtb3ZlQmFkRlNDaGFyYWN0ZXJz
KFBXU1RSIHBzeiwgc2l6ZV90IGxlbmd0aCkKICAgICB9CiAgICAgcHN6W3dyaXRlVG9dID0gMDsK
IH0KLSNlbmRpZgogCiBzdGF0aWMgU3RyaW5nIGZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFVDaGFyKiBleHRl
bnNpb24sIGJvb2wgaXNMaW5rKQogewotI2lmIE9TKFdJTkNFKQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotI2Vsc2UKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGZzUGF0aE1heExlbmd0aEV4Y2x1ZGluZ051bGxUZXJtaW5hdG9yID0gTUFYX1BBVEggLSAxOwog
ICAgIGJvb2wgdXNlZFVSTCA9IGZhbHNlOwogICAgIFdDSEFSIGZzUGF0aEJ1ZmZlcltNQVhfUEFU
SF07CkBAIC01ODksNyArNTc5LDYgQEAgc3RhdGljIFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21V
cmxPclRpdGxlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGwKICAgICB9CiAK
ICAgICByZXR1cm4gbWFrZVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KGZzUGF0aEJ1
ZmZlciksIGV4dGVuc2lvbik7Ci0jZW5kaWYKIH0KIAogLy8gd3JpdGVGaWxlVG9EYXRhT2JqZWN0
IHRha2VzIG93bmVyc2hpcCBvZiBmaWxlRGVzY3JpcHRvciBhbmQgZmlsZUNvbnRlbnQKQEAgLTk2
NiwxMCArOTU1LDYgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KGNv
bnN0IFVSTCYgdXJsLCBTdHJpbmcmIGZpbGVOYW1lLCBTaGFyZWQKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQogICAgICAgICBXQ0hB
UiB0ZW1wUGF0aFtNQVhfUEFUSF07CiAgICAgICAgIFdDSEFSIGV4dGVuc2lvbltNQVhfUEFUSF07
CiAgICAgICAgIGlmICghOjpHZXRUZW1wUGF0aChXVEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSwg
dGVtcFBhdGgpKQpAQCAtMTAwMSw3ICs5ODYsNiBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9i
YWxIRHJvcENvbnRlbnQoY29uc3QgVVJMJiB1cmwsIFN0cmluZyYgZmlsZU5hbWUsIFNoYXJlZAog
ICAgICAgICBDbG9zZUhhbmRsZSh0ZW1wRmlsZUhhbmRsZSk7CiAgICAgICAgIGlmICghdGVtcFdy
aXRlU3VjY2VlZGVkKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKICAgICB9CiAKICAg
ICBTSVpFX1QgZHJvcEZpbGVzU2l6ZSA9IHNpemVvZihEUk9QRklMRVMpICsgKHNpemVvZihXQ0hB
UikgKiAod2NzbGVuKGZpbGVQYXRoKSArIDIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKaW5kZXggMTQzYmJhYS4uZjE5
NTMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91
c2VFdmVudFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3Jt
TW91c2VFdmVudFdpbi5jcHAKQEAgLTY2LDkgKzY2LDcgQEAgc3RhdGljIFBsYXRmb3JtRXZlbnQ6
OlR5cGUgbWVzc2FnZVRvRXZlbnRUeXBlKFVJTlQgbWVzc2FnZSkKICAgICAgICAgY2FzZSBXTV9N
QlVUVE9OVVA6CiAgICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNl
ZDsKIAotI2lmICFPUyhXSU5DRSkKICAgICAgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgotI2VuZGlm
CiAgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgogICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlTW92ZWQ7CiAKQEAgLTEwNCw5ICsxMDIsNyBAQCBQbGF0Zm9ybU1vdXNlRXZl
bnQ6OlBsYXRmb3JtTW91c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTAogICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0jaWYgIU9TKFdJTkNFKQogICAg
ICAgICBjYXNlIFdNX01PVVNFTEVBVkU6Ci0jZW5kaWYKICAgICAgICAgICAgIGlmICh3UGFyYW0g
JiBNS19MQlVUVE9OKQogICAgICAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHdQYXJhbSAmIE1LX01CVVRUT04pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcAppbmRleCBjYzlhMDIzLi5k
ZWE5NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1T
Y3JlZW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNj
cmVlbldpbi5jcHAKQEAgLTU1LDEzICs1NSw4IEBAIHN0YXRpYyBERVZNT0RFIGRldmljZUluZm9G
b3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiAgICAgREVWTU9ERSBkZXZpY2VJbmZvOwogICAgIGRl
dmljZUluZm8uZG1TaXplID0gc2l6ZW9mKERFVk1PREUpOwogICAgIGRldmljZUluZm8uZG1Ecml2
ZXJFeHRyYSA9IDA7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKCFFbnVtRGlzcGxheVNldHRpbmdz
KDAsIEVOVU1fQ1VSUkVOVF9TRVRUSU5HUywgJmRldmljZUluZm8pKQotICAgICAgICBkZXZpY2VJ
bmZvLmRtQml0c1BlclBlbCA9IDE2OwotI2Vsc2UKICAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJ
bmZvID0gbW9uaXRvckluZm9Gb3JXaWRnZXQod2lkZ2V0KTsKICAgICBFbnVtRGlzcGxheVNldHRp
bmdzKG1vbml0b3JJbmZvLnN6RGV2aWNlLCBFTlVNX0NVUlJFTlRfU0VUVElOR1MsICZkZXZpY2VJ
bmZvKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIGRldmljZUluZm87CiB9CkBAIC04NSwxMyArODAs
OCBAQCBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiAKIGJvb2wg
c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQogewotI2lmIE9TKFdJTkNFKQotICAg
IC8vIEVudW1EaXNwbGF5U2V0dGluZ3MgZG9lc24ndCBzZXQgZG1Db2xvciBpbiBERVZNT0RFLgot
ICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCiAgICAgREVWTU9ERSBkZXZpY2VJbmZvID0gZGV2aWNl
SW5mb0ZvcldpZGdldCh3aWRnZXQpOwogICAgIHJldHVybiBkZXZpY2VJbmZvLmRtQ29sb3IgPT0g
RE1DT0xPUl9NT05PQ0hST01FOwotI2VuZGlmCiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdp
ZGdldCogd2lkZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmNwcAppbmRleCA1ZjEyZTdlLi41NTQ2YmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmNwcApAQCAtNDksMTAgKzQ5LDYgQEAKIAogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgotI2lmIE9TKFdJTkNFKQotI2luY2x1ZGUg
PFJlc0RlZkNFLmg+Ci0jZGVmaW5lIE1BS0VQT0lOVFMobCkgKCooKFBPSU5UUyBGQVIgKikmKGwp
KSkKLSNlbmRpZgogCiAjZGVmaW5lIEhJR0hfQklUX01BU0tfU0hPUlQgMHg4MDAwCiAKQEAgLTE2
NCw3ICsxNjAsNiBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBG
cmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChp
bmRleCk7CiAgICAgfQogCi0jaWYgIU9TKFdJTkNFKQogICAgIDo6U3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVENPTUJPQk9YQU5JTUFUSU9OLCAwLCAmc2hvdWxkQW5pbWF0ZSwgMCk7CiAKICAg
ICBpZiAoc2hvdWxkQW5pbWF0ZSkgewpAQCAtMTczLDkgKzE2OCw3IEBAIHZvaWQgUG9wdXBNZW51
V2luOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQog
ICAgICAgICBpZiAoITo6SXNSZWN0RW1wdHkoJnZpZXdSZWN0KSkKICAgICAgICAgICAgIDo6QW5p
bWF0ZVdpbmRvdyhtX3BvcHVwLCBkZWZhdWx0QW5pbWF0aW9uRHVyYXRpb24sIEFXX0JMRU5EKTsK
ICAgICB9IGVsc2UKLSNlbmRpZgotCi0gICAgOjpTaG93V2luZG93KG1fcG9wdXAsIFNXX1NIT1dO
T0FDVElWQVRFKTsKKyAgICAgICAgOjpTaG93V2luZG93KG1fcG9wdXAsIFNXX1NIT1dOT0FDVElW
QVRFKTsKIAogICAgIG1fc2hvd1BvcHVwID0gdHJ1ZTsKIApAQCAtMTk5LDcgKzE5Miw2IEBAIHZv
aWQgUG9wdXBNZW51V2luOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdmlldywg
aW50IGluZGV4KQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvLyBTdGVh
bCBtb3VzZSBtZXNzYWdlcy4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgICAgICBjYXNlIFdNX05D
TU9VU0VNT1ZFOgogICAgICAgICAgICAgY2FzZSBXTV9OQ0xCVVRUT05ET1dOOgogICAgICAgICAg
ICAgY2FzZSBXTV9OQ0xCVVRUT05VUDoKQEAgLTIxMCw3ICsyMDIsNiBAQCB2b2lkIFBvcHVwTWVu
dVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkK
ICAgICAgICAgICAgIGNhc2UgV01fTkNNQlVUVE9ORE9XTjoKICAgICAgICAgICAgIGNhc2UgV01f
TkNNQlVUVE9OVVA6CiAgICAgICAgICAgICBjYXNlIFdNX05DTUJVVFRPTkRCTENMSzoKLSNlbmRp
ZgogICAgICAgICAgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgogICAgICAgICAgICAgICAgIG1zZy5o
d25kID0gbV9wb3B1cDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYwMSwxMSArNTkyLDcg
QEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhE
QyBoZGMpCiAgICAgICAgICAgICBtX2JtcC5jbGVhcigpOwogICAgIH0KICAgICBpZiAoIW1fYm1w
KSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1h
cEluZm86OmNyZWF0ZUJvdHRvbVVwKGNsaWVudFJlY3QoKS5zaXplKCksIEJpdG1hcEluZm86OkJp
dENvdW50MTYpOwotI2Vsc2UKICAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFw
SW5mbzo6Y3JlYXRlQm90dG9tVXAoY2xpZW50UmVjdCgpLnNpemUoKSk7Ci0jZW5kaWYKICAgICAg
ICAgdm9pZCogcGl4ZWxzID0gMDsKICAgICAgICAgbV9ibXAgPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZURJQlNlY3Rpb24obV9EQy5nZXQoKSwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAm
cGl4ZWxzLCAwLCAwKSk7CiAgICAgICAgIGlmICghbV9ibXApCkBAIC03NjcsMTQgKzc1NCwxMCBA
QCB2b2lkIFBvcHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcygpCiAgICAgaWYgKGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MpCiAgICAgICAgIHJldHVybjsKIAotI2lmIE9TKFdJTkNFKQotICAgIFdO
RENMQVNTIHdjZXg7Ci0jZWxzZQogICAgIFdORENMQVNTRVggd2NleDsKICAgICB3Y2V4LmNiU2l6
ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKICAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKICAg
ICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfRFJPUFNIQURPVzsKLSNlbmRpZgogCiAgICAgd2Nl
eC5scGZuV25kUHJvYyAgICA9IFBvcHVwTWVudVduZFByb2M7CiAgICAgd2NleC5jYkNsc0V4dHJh
ICAgICA9IDA7CkBAIC03ODgsMTEgKzc3MSw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpyZWdpc3Rl
ckNsYXNzKCkKIAogICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwogCi0jaWYg
T1MoV0lOQ0UpCi0gICAgUmVnaXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAgIFJlZ2lzdGVy
Q2xhc3NFeCgmd2NleCk7Ci0jZW5kaWYKIH0KIAogCkBAIC04MTksMTAgKzc5OCw4IEBAIExSRVNV
TFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhCiAgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKIAogICAgIHN3aXRj
aCAobWVzc2FnZSkgewotI2lmICFPUyhXSU5DRSkKICAgICAgICAgY2FzZSBXTV9NT1VTRUFDVElW
QVRFOgogICAgICAgICAgICAgcmV0dXJuIE1BX05PQUNUSVZBVEU7Ci0jZW5kaWYKICAgICAgICAg
Y2FzZSBXTV9TSVpFOiB7CiAgICAgICAgICAgICBpZiAoIXNjcm9sbGJhcigpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtOTY2LDkgKzk0Myw3IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3
bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEJPT0wgc2hvdWxkSG90VHJhY2sgPSBGQUxT
RTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgICAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRIT1RUUkFDS0lORywgMCwgJnNob3VsZEhvdFRyYWNrLCAwKTsKLSNlbmRpZgogCiAgICAg
ICAgICAgICBSRUNUIGJvdW5kczsKICAgICAgICAgICAgIEdldENsaWVudFJlY3QocG9wdXBIYW5k
bGUoKSwgJmJvdW5kcyk7CkBAIC0xMDcwLDExICsxMDQ1LDkgQEAgTFJFU1VMVCBQb3B1cE1lbnVX
aW46OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGEKICAgICAgICAgICAgIGxSZXN1bHQgPSAwOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIGNhc2UgV01fUFJJTlRDTElFTlQ6CiAgICAg
ICAgICAgICBwYWludChjbGllbnRSZWN0KCksIChIREMpd1BhcmFtKTsKICAgICAgICAgICAgIGJy
ZWFrOwotI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBsUmVzdWx0ID0gRGVm
V2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKaW5kZXgg
ZGRhNTllMS4uYzQ2Yzg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1Njcm9sbGJhclRoZW1lV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U2Nyb2xsYmFyVGhlbWVXaW4uY3BwCkBAIC0yOTQsOSArMjk0LDcgQEAgdm9pZCBTY3JvbGxiYXJU
aGVtZVdpbjo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJU
aGVtZUNsaWUKICAgICAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkpIHsKICAgICAgICAgICAgIHhwU3RhdGUgKz0gVFNfQUNUSVZFOwog
ICAgICAgICAgICAgY2xhc3NpY1N0YXRlIHw9IERGQ1NfUFVTSEVEOwotI2lmICFPUyhXSU5DRSkK
ICAgICAgICAgICAgIGNsYXNzaWNTdGF0ZSB8PSBERkNTX0ZMQVQ7Ci0jZW5kaWYKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICB4cFN0YXRlICs9IFRTX0hPVkVSOwogICAgIH0gZWxzZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3BwCmluZGV4
IDhhODM3ZDYuLmY1ZGQyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TaGFyZWRCdWZmZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
aGFyZWRCdWZmZXJXaW4uY3BwCkBAIC0zMSwxMSArMzEsNiBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotLy8gSU5WQUxJRF9GSUxF
X1NJWkUgaXMgbm90IGRlZmluZWQgb24gV2luQ0UuCi0jaWZuZGVmIElOVkFMSURfRklMRV9TSVpF
Ci0jZGVmaW5lIElOVkFMSURfRklMRV9TSVpFIDB4ZmZmZmZmZmYKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVyV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAKaW5kZXggY2Y5MjRiNC4u
MzI3YzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRp
bWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJX
aW4uY3BwCkBAIC02Myw3ICs2Myw2IEBAIHN0YXRpYyBIQU5ETEUgdGltZXI7CiBzdGF0aWMgSFdO
RCB0aW1lcldpbmRvd0hhbmRsZSA9IDA7CiBjb25zdCBMUENXU1RSIGtUaW1lcldpbmRvd0NsYXNz
TmFtZSA9IEwiVGltZXJXaW5kb3dDbGFzcyI7CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgVUlO
VCB0aW1lckZpcmVkTWVzc2FnZSA9IDA7CiBzdGF0aWMgSEFORExFIHRpbWVyUXVldWU7CiBzdGF0
aWMgYm9vbCBoaWdoUmVzVGltZXJBY3RpdmU7CkBAIC03Myw3ICs3Miw2IEBAIHN0YXRpYyBMT05H
IHBlbmRpbmdUaW1lcnM7CiBjb25zdCBpbnQgdGltZXJSZXNvbHV0aW9uID0gMTsgLy8gVG8gaW1w
cm92ZSB0aW1lciByZXNvbHV0aW9uLCB3ZSBjYWxsIHRpbWVCZWdpblBlcmlvZC90aW1lRW5kUGVy
aW9kIHdpdGggdGhpcyB2YWx1ZSB0byBpbmNyZWFzZSB0aW1lciByZXNvbHV0aW9uIHRvIDFtcy4K
IGNvbnN0IGludCBoaWdoUmVzb2x1dGlvblRocmVzaG9sZE1zZWMgPSAxNjsgLy8gT25seSBhY3Rp
dmF0ZSBoaWdoLXJlcyB0aW1lciBmb3Igc3ViLTE2bXMgdGltZXJzIChXaW5kb3dzIGNhbiBmaXJl
IHRpbWVycyBhdCAxNm1zIGludGVydmFscyB3aXRob3V0IGNoYW5naW5nIHRoZSBzeXN0ZW0gcmVz
b2x1dGlvbikuCiBjb25zdCBpbnQgc3RvcEhpZ2hSZXNUaW1lckluTXNlYyA9IDMwMDsgLy8gU3Rv
cCBoaWdoLXJlcyB0aW1lciBhZnRlciAwLjMgc2Vjb25kcyB0byBsZXNzZW4gcG93ZXIgY29uc3Vt
cHRpb24gKHdlIGRvbid0IHVzZSBhIHNtYWxsZXIgdGltZSBzaW5jZSBvc2NpbGxhdGluZyBiZXR3
ZWVuIGhpZ2ggYW5kIGxvdyByZXNvbHV0aW9uIGJyZWFrcyB0aW1lciBhY2N1cmFjeSBvbiBYUCku
Ci0jZW5kaWYKIAogZW51bSB7CiAgICAgc2hhcmVkVGltZXJJRCA9IDEwMDAsCkBAIC05OCw3ICs5
Niw2IEBAIExSRVNVTFQgQ0FMTEJBQ0sgVGltZXJXaW5kb3dXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSCiAgICAgICAgICAgICBLaWxsVGltZXIodGlt
ZXJXaW5kb3dIYW5kbGUsIHNoYXJlZFRpbWVySUQpOwogICAgICAgICAgICAgc2hhcmVkVGltZXJG
aXJlZEZ1bmN0aW9uKCk7CiAgICAgICAgIH0KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIGVsc2Ug
aWYgKHdQYXJhbSA9PSBlbmRIaWdoUmVzVGltZXJJRCkgewogICAgICAgICAgICAgS2lsbFRpbWVy
KHRpbWVyV2luZG93SGFuZGxlLCBlbmRIaWdoUmVzVGltZXJJRCk7CiAgICAgICAgICAgICBoaWdo
UmVzVGltZXJBY3RpdmUgPSBmYWxzZTsKQEAgLTEwOSw3ICsxMDYsNiBAQCBMUkVTVUxUIENBTExC
QUNLIFRpbWVyV2luZG93V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUgogICAgICAgICBwcm9jZXNzaW5nQ3VzdG9tVGltZXJNZXNzYWdlID0gdHJ1ZTsK
ICAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7CiAgICAgICAgIHByb2Nlc3NpbmdD
dXN0b21UaW1lck1lc3NhZ2UgPSBmYWxzZTsKLSNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICBy
ZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAKQEAg
LTEyMSwzMCArMTE3LDE5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPZmZTY3JlZW5UaW1lcldp
bmRvdygpCiAgICAgaWYgKHRpbWVyV2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm47CiAKLSNp
ZiBPUyhXSU5DRSkKLSAgICBXTkRDTEFTUyB3Y2V4OwotICAgIG1lbXNldCgmd2NleCwgMCwgc2l6
ZW9mKFdORENMQVNTKSk7Ci0jZWxzZQogICAgIFdORENMQVNTRVggd2NleDsKICAgICBtZW1zZXQo
JndjZXgsIDAsIHNpemVvZihXTkRDTEFTU0VYKSk7CiAgICAgd2NleC5jYlNpemUgPSBzaXplb2Yo
V05EQ0xBU1NFWCk7Ci0jZW5kaWYKIAogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBUaW1lcldp
bmRvd1duZFByb2M7CiAgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNl
SGFuZGxlKCk7CiAgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IGtUaW1lcldpbmRvd0NsYXNzTmFt
ZTsKLSNpZiBPUyhXSU5DRSkKLSAgICBSZWdpc3RlckNsYXNzKCZ3Y2V4KTsKLSNlbHNlCiAgICAg
UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLSNlbmRpZgogCiAgICAgdGltZXJXaW5kb3dIYW5kbGUg
PSBDcmVhdGVXaW5kb3coa1RpbWVyV2luZG93Q2xhc3NOYW1lLCAwLCAwLAogICAgICAgIENXX1VT
RURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIEhXTkRfTUVTU0FHRSwgMCwgV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKSwgMCk7CiAKLSNpZiAhT1MoV0lOQ0UpCiAgICAgdGltZXJGaXJlZE1l
c3NhZ2UgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoTCJjb20uYXBwbGUuV2ViS2l0LlRpbWVyRmly
ZWQiKTsKLSNlbmRpZgogfQogCiB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lk
ICgqZikoKSkKQEAgLTE1MiwxMyArMTM3LDExIEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKHZvaWQgKCpmKSgpKQogICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7CiB9
CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgdm9pZCBOVEFQSSBxdWV1ZVRpbWVyUHJvYyhQVk9J
RCwgQk9PTEVBTikKIHsKICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBlbmRpbmdUaW1l
cnMpID09IDEpCiAgICAgICAgIFBvc3RNZXNzYWdlKHRpbWVyV2luZG93SGFuZGxlLCB0aW1lckZp
cmVkTWVzc2FnZSwgMCwgMCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJ
bnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiB7CkBAIC0xNzQsNyArMTU3LDYgQEAgdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiAgICAgaW5pdGlhbGl6ZU9m
ZlNjcmVlblRpbWVyV2luZG93KCk7CiAgICAgYm9vbCB0aW1lclNldCA9IGZhbHNlOwogCi0jaWYg
IU9TKFdJTkNFKQogICAgIGlmIChTZXR0aW5nczo6c2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnMoKSkgewogICAgICAgICBpZiAoaW50ZXJ2YWwgPCBoaWdoUmVzb2x1dGlvblRocmVzaG9sZE1z
ZWMpIHsKICAgICAgICAgICAgIGlmICghaGlnaFJlc1RpbWVyQWN0aXZlKSB7CkBAIC0yMDYsNyAr
MTg4LDYgQEAgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwp
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYgLy8gIU9TKFdJTkNFKQog
CiAgICAgaWYgKHRpbWVyU2V0KSB7CiAgICAgICAgIGlmICh0aW1lcklEKSB7CkBAIC0yMjEsMTIg
KzIwMiwxMCBAQCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZh
bCkKIAogdm9pZCBzdG9wU2hhcmVkVGltZXIoKQogewotI2lmICFPUyhXSU5DRSkKICAgICBpZiAo
dGltZXJRdWV1ZSAmJiB0aW1lcikgewogICAgICAgICBEZWxldGVUaW1lclF1ZXVlVGltZXIodGlt
ZXJRdWV1ZSwgdGltZXIsIDApOwogICAgICAgICB0aW1lciA9IDA7CiAgICAgfQotI2VuZGlmCiAK
ICAgICBpZiAodGltZXJJRCkgewogICAgICAgICBLaWxsVGltZXIodGltZXJXaW5kb3dIYW5kbGUs
IHRpbWVySUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRM
aW5raW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU29mdExpbmtpbmcuaAppbmRl
eCAwNzlmMDVhLi5jZDBkNmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU29mdExpbmtpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU29mdExp
bmtpbmcuaApAQCAtMzksMTIgKzM5LDcgQEAKICAgICAgICAgcmV0dXJuIGxpYnJhcnk7IFwKICAg
ICB9CiAKLSNpZiBPUyhXSU5DRSkKLSNkZWZpbmUgU09GVF9MSU5LX0dFVFBST0NBRERSRVNTIEdl
dFByb2NBZGRyZXNzQQotI2Vsc2UKICNkZWZpbmUgU09GVF9MSU5LX0dFVFBST0NBRERSRVNTIEdl
dFByb2NBZGRyZXNzCi0jZW5kaWYKLQogI2RlZmluZSBTT0ZUX0xJTktfTElCUkFSWShsaWIpIFNP
RlRfTElOS19MSUJSQVJZX0hFTFBFUihsaWIsIEwiLmRsbCIpCiAjZGVmaW5lIFNPRlRfTElOS19E
RUJVR19MSUJSQVJZKGxpYikgU09GVF9MSU5LX0xJQlJBUllfSEVMUEVSKGxpYiwgTCJfZGVidWcu
ZGxsIikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUlu
Zm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwCmluZGV4
IGM5ZWRjYTAuLjQ0Mzk4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TeXN0ZW1JbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVt
SW5mby5jcHAKQEAgLTM5LDIzICszOSwxMyBAQCBXaW5kb3dzVmVyc2lvbiB3aW5kb3dzVmVyc2lv
bihpbnQqIG1ham9yLCBpbnQqIG1pbm9yKQogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAg
ICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIE9TVkVSU0lP
TklORk8gdmVyc2lvbkluZm87Ci0jZWxzZQogICAgICAgICBPU1ZFUlNJT05JTkZPRVggdmVyc2lv
bkluZm87Ci0jZW5kaWYKICAgICAgICAgWmVyb01lbW9yeSgmdmVyc2lvbkluZm8sIHNpemVvZih2
ZXJzaW9uSW5mbykpOwogICAgICAgICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0g
c2l6ZW9mKHZlcnNpb25JbmZvKTsKICAgICAgICAgR2V0VmVyc2lvbkV4KHJlaW50ZXJwcmV0X2Nh
c3Q8T1NWRVJTSU9OSU5GTyo+KCZ2ZXJzaW9uSW5mbykpOwogICAgICAgICBtYWpvclZlcnNpb24g
PSB2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbjsKICAgICAgICAgbWlub3JWZXJzaW9uID0gdmVy
c2lvbkluZm8uZHdNaW5vclZlcnNpb247CiAKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgaWYgKG1h
am9yVmVyc2lvbiA+PSAxICYmIG1ham9yVmVyc2lvbiA8PSA3KQotICAgICAgICAgICAgdmVyc2lv
biA9IHN0YXRpY19jYXN0PFdpbmRvd3NWZXJzaW9uPihXaW5kb3dzQ0UxICsgKG1ham9yVmVyc2lv
biAtIDEpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNp
b24gPCAxKSA/IFdpbmRvd3NDRTEgOiBXaW5kb3dzQ0U3OwotI2Vsc2UKICAgICAgICAgaWYgKHZl
cnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJzKQogICAgICAgICAg
ICAgdmVyc2lvbiA9IFdpbmRvd3MzXzE7CiAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3
UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykgewpAQCAtNzcsNyArNjcs
NiBAQCBXaW5kb3dzVmVyc2lvbiB3aW5kb3dzVmVyc2lvbihpbnQqIG1ham9yLCBpbnQqIG1pbm9y
KQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZl
cnNpb24gPT0gNCkgPyBXaW5kb3dzTlQ0IDogV2luZG93c05UMzsKICAgICAgICAgfQotI2VuZGlm
CiAgICAgfQogCiAgICAgaWYgKG1ham9yKQpAQCAtMTE0LDcgKzEwMyw2IEBAIHN0YXRpYyBTdHJp
bmcgb3NWZXJzaW9uRm9yVUFTdHJpbmcoKQogICAgIHJldHVybiBmYW1pbHlOYW1lICsgU3RyaW5n
OjpudW1iZXIobWFqb3IpICsgJy4nICsgU3RyaW5nOjpudW1iZXIobWlub3IpOwogfQogCi0jaWYg
IU9TKFdJTkNFKQogc3RhdGljIGJvb2wgaXNXT1c2NCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKQEAgLTE1OCwxOCArMTQ2LDE1IEBAIHN0YXRpYyBXT1JEIHByb2Nl
c3NvckFyY2hpdGVjdHVyZSgpCiAKICAgICByZXR1cm4gYXJjaGl0ZWN0dXJlOwogfQotI2VuZGlm
CiAKIHN0YXRpYyBTdHJpbmcgYXJjaGl0ZWN0dXJlVG9rZW5Gb3JVQVN0cmluZygpCiB7Ci0jaWYg
IU9TKFdJTkNFKQogICAgIGlmIChpc1dPVzY0KCkpCiAgICAgICAgIHJldHVybiAiOyBXT1c2NCI7
CiAgICAgaWYgKHByb2Nlc3NvckFyY2hpdGVjdHVyZSgpID09IFBST0NFU1NPUl9BUkNISVRFQ1RV
UkVfQU1ENjQpCiAgICAgICAgIHJldHVybiAiOyBXaW42NDsgeDY0IjsKICAgICBpZiAocHJvY2Vz
c29yQXJjaGl0ZWN0dXJlKCkgPT0gUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRV9JQTY0KQogICAgICAg
ICByZXR1cm4gIjsgV2luNjQ7IElBNjQiOwotI2VuZGlmCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCmluZGV4
IGM3OTM3YjguLjk0NjkzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9XQ0RhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0Rh
dGFPYmplY3QuY3BwCkBAIC0yNzksNyArMjc5LDYgQEAgdm9pZCBXQ0RhdGFPYmplY3Q6OkNvcHlN
ZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMK
IHsKICAgICBzd2l0Y2gocE1lZFNyYy0+dHltZWQpCiAgICAgewotI2lmICFPUyhXSU5DRSkKICAg
ICBjYXNlIFRZTUVEX0hHTE9CQUw6CiAgICAgICAgIHBNZWREZXN0LT5oR2xvYmFsID0gKEhHTE9C
QUwpT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oR2xvYmFsLHBGbXRTcmMtPmNmRm9ybWF0LCAw
KTsKICAgICAgICAgYnJlYWs7CkBAIC0yOTUsNyArMjk0LDYgQEAgdm9pZCBXQ0RhdGFPYmplY3Q6
OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JN
QVRFVEMKICAgICBjYXNlIFRZTUVEX0ZJTEU6CiAgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFt
ZSA9IChMUE9MRVNUUilPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSxwRm10
U3JjLT5jZkZvcm1hdCwgMCk7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBUWU1F
RF9JU1RSRUFNOgogICAgICAgICBwTWVkRGVzdC0+cHN0bSA9IHBNZWRTcmMtPnBzdG07CiAgICAg
ICAgIHBNZWRTcmMtPnBzdG0tPkFkZFJlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcAppbmRleCA5OGQwYTk3Li5mYmEyY2VlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMzc1LDcgKzM3NSw3IEBAIGJvb2wgUGx1Z2lu
RGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQog
ICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5pc05ld0VudHJ5
OwogfQogCi0jaWYgKCFPUyhXSU5DRSkpICYmICghT1MoV0lORE9XUykgfHwgIUVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKSkKKyNpZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkpCiAvLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhv
ZHMgYXJlIGltcGxlbWVudGVkCiAvLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3
ZSBjYW4gdXNlIFdlYkNvcmUgY29uc3RydWN0cwogLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQg
cGVyaGFwcyBtb3ZlIGl0IGhlcmUgdW5kZXIgWFBfV0lOPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKaW5kZXggYTg4YWRmOS4uZTFjYzJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuY3BwCkBAIC0zNDAsMTcgKzM0MCwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OnN0
b3AoKQogI2lmIGRlZmluZWQoWFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIC8vIFVuc3Vi
Y2xhc3MgdGhlIHdpbmRvdwogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSNpZiBPUyhXSU5DRSkK
LSAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmco
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MpOwotCi0gICAgICAgIGlmIChjdXJy
ZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgIFNldFdpbmRvd0xv
bmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKW1fcGx1Z2luV25k
UHJvYyk7Ci0jZWxzZQogICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0Mp
R2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwog
CiAgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykKICAgICAg
ICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQ
Uk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKLSNlbmRpZgogICAgIH0KICNlbmRpZiAv
LyAhZGVmaW5lZChYUF9XSU4pIHx8IFBMQVRGT1JNKEdUSykKICNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlld05vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5j
cHAKaW5kZXggZGY3OWRjOS4uYTk3MmE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3Tm9uZS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUZvY3VzT3V0RXZlbnQoKQogLy8gcG9ydHMgdXNpbmcgUGx1Z2luVmlldywgYnV0IHVudGlsIHRo
ZW4sIGlmIG5ldyBmdW5jdGlvbnMgbGlrZSB0aGlzIGFyZSAKIC8vIGFkZGVkLCBwbGVhc2UgbWFr
ZSBzdXJlIHRoZXkgaGF2ZSB0aGUgcHJvcGVyIHBsYXRmb3JtICNpZnMgc28gdGhhdCBjaGFuZ2Vz
CiAvLyBkbyBub3QgYnJlYWsgcG9ydHMgd2hvIGNvbXBpbGUgYm90aCB0aGlzIGZpbGUgYW5kIFBs
dWdpblZpZXcuY3BwLiAgIAotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKEdUSykgfHwgT1MoV0lOQ0UpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQogdm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoTlBQKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCmluZGV4IGUyNTBlMTMuLmQxYzdk
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5jcHAKQEAgLTMzLDEyICszMyw2IEBACiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9XaW5kb3dzRXh0cmFzLmg+CiAKLSNpZiBPUyhXSU5DRSkKLS8vIFdJTkNFIGRv
ZXNuJ3Qgc3VwcG9ydCBSZWdpc3RyeSBLZXkgQWNjZXNzIFJpZ2h0cy4gVGhlIHBhcmFtZXRlciBz
aG91bGQgYWx3YXlzIGJlIDAKLSNpZm5kZWYgS0VZX0VOVU1FUkFURV9TVUJfS0VZUwotI2RlZmlu
ZSBLRVlfRU5VTUVSQVRFX1NVQl9LRVlTIDAKLSNlbmRpZgotCiBCT09MIFBhdGhSZW1vdmVGaWxl
U3BlYyhMUFdTVFIgbW9kdWxlRmlsZU5hbWVTdHIpCiB7CiAgICAgaWYgKCEqbW9kdWxlRmlsZU5h
bWVTdHIpCkBAIC0yMzgsMTQgKzIzMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxs
YVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIAogc3RhdGlj
IGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8
U3RyaW5nPiYgZGlyZWN0b3JpZXMpCiB7Ci0jaWYgIU9TKFdJTkNFKQogICAgIC8vIFRoZSBuZXcg
V01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQg
Y2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwogICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEggKyAxXTsKICAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpF
eHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1
Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0
b3J5U3RyKSk7CiAKICAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGly
ZWN0b3J5U2l6ZSA8PSBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpCiAgICAg
ICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5U3RyLCBwbHVnaW5E
aXJlY3RvcnlTaXplIC0gMSkpOwotI2VuZGlmCiAKICAgICBEV09SRCB0eXBlOwogICAgIFdDSEFS
IGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwpAQCAtMzc3LDcgKzM2OSw2IEBA
IGV4aXQ6CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3Jp
ZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogewotI2lmICFPUyhXSU5DRSkKICAgICBX
Q0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwogCiAgICAgaWYgKCFHZXRTeXN0ZW1E
aXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHN5c3RlbURpcmVj
dG9yeVN0cikpKQpAQCAtMzkwLDcgKzM4MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNy
b21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogCiAg
ICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3Ry
LCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwogICAgIGRpcmVjdG9yaWVzLmFwcGVu
ZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLSNlbmRpZgogfQogCiBWZWN0b3I8U3RyaW5nPiBQ
bHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKaW5kZXggNjdjYzc2NC4uYTg1
MjU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2Fn
ZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdp
bi5jcHAKQEAgLTIzNyw5ICsyMzcsNiBAQCBib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAg
ICAgICBtX2xvYWRDb3VudCsrOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2Ugewot
I2lmIE9TKFdJTkNFKQotICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlXKG1fcGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7Ci0jZWxzZQogICAgICAgICBX
Q0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07CiAKICAgICAgICAgaWYgKCE6OkdldEN1cnJlbnRE
aXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50UGF0aCkpCkBAIC0yNTgsNyArMjU1LDYgQEAgYm9v
bCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKICAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1f
bW9kdWxlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotI2VuZGlmCiAg
ICAgfQogCiAgICAgaWYgKCFtX21vZHVsZSkKQEAgLTI3MCwxNSArMjY2LDkgQEAgYm9vbCBQbHVn
aW5QYWNrYWdlOjpsb2FkKCkKICAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXpl
ID0gMDsKICAgICBOUEVycm9yIG5wRXJyOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgTlBfSW5pdGlh
bGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgTCJO
UF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2lu
dHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCBMIk5QX0dldEVudHJ5UG9pbnRzIik7
Ci0gICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilHZXRQcm9jQWRkcmVz
cyhtX21vZHVsZSwgTCJOUF9TaHV0ZG93biIpOwotI2Vsc2UKICAgICBOUF9Jbml0aWFsaXplID0g
KE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfSW5pdGlh
bGl6ZSIpOwogICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0
cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVudHJ5UG9pbnRzIik7CiAgICAgbV9O
UFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVs
ZSwgIk5QX1NodXRkb3duIik7Ci0jZW5kaWYKIAogICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAh
TlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRkb3duKQogICAgICAgICBnb3RvIGFib3J0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAppbmRleCA2
YjI5ZDNiLi40OTUzMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcApAQCAtNzMsMTMgKzczLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCi0jaWYgT1MoV0lOQ0UpCi0j
dW5kZWYgTE9HX05QRVJST1IKLSNkZWZpbmUgTE9HX05QRVJST1IoeCkKLSN1bmRlZiBMT0dfUExV
R0lOX05FVF9FUlJPUgotI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpCi0jZW5kaWYKLQog
I2lmIFVTRShDQUlSTykKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgPGNhaXJvLXdpbjMyLmg+CkBAIC0xMTgsNyArMTExLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIGNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWUgPSBMIldl
YlBsdWdpblZpZXciOwogY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld1Byb3BlcnR5ID0gTCJX
ZWJQbHVnaW5WaWV3UHJvcGVydHkiOwogCi0jaWYgIU9TKFdJTkNFKQogLy8gVGhlIGNvZGUgdXNl
ZCB0byBob29rIEJlZ2luUGFpbnQvRW5kUGFpbnQgb3JpZ2luYWxseSBjYW1lIGZyb20KIC8vIDxo
dHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJpbnQuaHRtbD4uCiAvLyBDb3B5cmln
aHQgKEMpIDIwMDAgYnkgRmVuZyBZdWFuICh3d3cuZmVuZ3l1YW4uY29tKS4KQEAgLTI3MCw3ICsy
NjIsNiBAQCBzdGF0aWMgdm9pZCBzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9va3MoSERDIChXSU5B
UEkqaG9va2VkQmVnaW5QYWludCkoSFdORCwgUEFJTgogICAgIGhvb2soInVzZXIzMi5kbGwiLCAi
RW5kUGFpbnQiLCBlbmRQYWludFN5c0NhbGwsIGVuZFBhaW50LCByZWludGVycHJldF9jYXN0PGNv
bnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEVuZFBhaW50KSkp
OwogCiB9Ci0jZW5kaWYKIAogc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKIHsKQEAg
LTI4NiwxOCArMjc3LDEwIEBAIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiAKICAg
ICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7CiAKLSNpZiBPUyhXSU5DRSkKLSAg
ICBXTkRDTEFTUyB3Y2V4ID0geyAwIH07Ci0jZWxzZQogICAgIFdORENMQVNTRVggd2NleDsKICAg
ICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKICAgICB3Y2V4LmhJY29uU20gICAg
ICAgID0gMDsKLSNlbmRpZgotCiAgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgd2NleC5zdHlsZSAgICAgICAgICB8PSBDU19QQVJFTlREQzsK
LSNlbmRpZgogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5kb3dQcm9jOwogICAgIHdj
ZXguY2JDbHNFeHRyYSAgICAgPSAwOwogICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwpAQCAt
MzA4LDExICsyOTEsNyBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQogICAgIHdj
ZXgubHBzek1lbnVOYW1lICAgPSAwOwogICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBrV2ViUGx1
Z2luVmlld2Rvd0NsYXNzTmFtZTsKIAotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiAhIVJlZ2lz
dGVyQ2xhc3MoJndjZXgpOwotI2Vsc2UKICAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndj
ZXgpOwotI2VuZGlmCiB9CiAKIExSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlldzo6UGx1Z2luVmll
d1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCkBAIC0zOTQsNyArMzczLDYgQEAgUGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgbV9w
b3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKICAgICB9CiAKLSNpZiAhT1MoV0lO
Q0UpCiAgICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElFTlQpIHsKICAgICAgICAgLy8gTW9z
dCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5U
LCBzbyB3ZQogICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJl
bHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgpAQCAtNDAyLDcgKzM4MCw2IEBAIFBsdWdpblZp
ZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0pCiAgICAgICAgIG1lc3NhZ2UgPSBXTV9QQUlOVDsKICAgICAgICAgbV93bVByaW50
SERDID0gcmVpbnRlcnByZXRfY2FzdDxIREM+KHdQYXJhbSk7CiAgICAgfQotI2VuZGlmCiAKICAg
ICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCiAgICAgTFJFU1VMVCByZXN1bHQg
PSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOwpAQCAtNDI1LDExICs0MDIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCgpCiAgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owog
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwogCi0jaWYgT1MoV0lOQ0UpCi0g
ICAgbV93aW5kb3dSZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgp
KTsKLSNlbHNlCiAgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRz
VG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0j
ZW5kaWYKICAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKICAgICBtX2NsaXBSZWN0
Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKIApAQCAtNTI5LDkg
KzUwMiw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZl
bnQpCiB2b2lkIFBsdWdpblZpZXc6OnBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMgaGRj
KQogewogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIFNl
bmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWludGVy
cHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBSRl9P
V05FRCk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjQxLDcgKzYxMiw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQogICAgIC8vIG9mIHRoZSB3aW5kb3cgYW5kIHRoZSBwbHVnaW4gZXhw
ZWN0cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdpbmRvdyBjb29yZGluYXRlcy4KICAgICAv
LyBJbiB0aGUgR1RLIGFuZCBRdCBwb3J0cyB3ZSBhbHdheXMgZHJhdyBpbiBhbiBvZmZzY3JlZW4g
YnVmZmVyIGFuZCB0aGVyZWZvcmUgbmVlZAogICAgIC8vIHRvIHByZXNlcnZlIHRoZSB0cmFuc2xh
dGlvbiBzZXQgaW4gZ2V0V2luZG93c0NvbnRleHQuCi0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIU9T
KFdJTkNFKQorI2lmICFQTEFURk9STShHVEspCiAgICAgaWYgKCFjb250ZXh0LT5pc0luVHJhbnNw
YXJlbmN5TGF5ZXIoKSkgewogICAgICAgICBYRk9STSB0cmFuc2Zvcm07CiAgICAgICAgIEdldFdv
cmxkVHJhbnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3JtKTsKQEAgLTY3OSw5
ICs2NTAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCi0j
aWYgIU9TKFdJTkNFKQogZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLSNlbmRpZgog
CiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7
CkBAIC03NDksNyArNzE4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqIGV2ZW50KQogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogCi0jaWYgIVBMQVRGT1JNKEdUSykgJiYg
IU9TKFdJTkNFKQorI2lmICFQTEFURk9STShHVEspCiAgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6
OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRI
YW5kbGVyLmNwcAogICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGln
bm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgICBpZ25v
cmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKQEAgLTc2MiwxNSArNzMxLDYgQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0UGFy
ZW50KHBhcmVudCk7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICAg
IGluaXQoKTsKLSAgICAgICAgaWYgKHBhcmVudC0+aXNWaXNpYmxlKCkpCi0gICAgICAgICAgICBz
aG93KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhpZGUoKTsKLSAgICB9Ci0jZWxzZQog
ICAgIGlmIChwYXJlbnQpCiAgICAgICAgIGluaXQoKTsKICAgICBlbHNlIHsKQEAgLTc4NCw3ICs3
NDQsNiBAQCB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiAg
ICAgICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwgOjpJ
c0NoaWxkKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5kb3cpKQogICAgICAgICAg
ICAgOjpTZXRGb2N1cygwKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTgwNywxOCArNzY2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAo
IW1faXNTdGFydGVkKQogICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBJbnRS
ZWN0IHIgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7Ci0g
ICAgbV9ucFdpbmRvdy54ID0gci54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gci55KCk7Ci0KLSAg
ICBtX25wV2luZG93LndpZHRoID0gci53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0g
ci5oZWlnaHQoKTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByLndpZHRoKCk7
Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByLmhlaWdodCgpOwotI2Vsc2UKLSAg
ICAvLyBJbiB0aGUgR1RLIGFuZCBRdCBwb3J0cyB3ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZm
ZXIgYW5kIGRvbid0IHdhbnQgdG8gdXNlIHRoZSB3aW5kb3cKKyAgICAvLyBJbiB0aGUgR1RLIHBv
cnQgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0
aGUgd2luZG93CiAgICAgLy8gY29vcmRpbmF0ZXMuCiAjIGlmIFBMQVRGT1JNKEdUSykKICAgICBJ
bnRQb2ludCBwID0gcmVjdC5sb2NhdGlvbigpOwpAQCAtODMzLDcgKzc4MSw2IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKICAgICBtX25w
V2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOwogICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKLSNlbmRpZgogICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QubGVmdCA9IDA7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogCkBAIC04
NTAsMTcgKzc5Nyw5IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAKICAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwog
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIGlmICghbV9wbHVnaW5XbmRQcm9jKSB7Ci0gICAgICAg
ICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZyhwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQyk7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICAgICAgbV9wbHVnaW5X
bmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBH
V0xfV05EUFJPQywgKExPTkcpUGx1Z2luVmlld1duZFByb2MpOwotICAgICAgICB9Ci0jZWxzZQog
ICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0
cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwogICAgICAgICBpZiAoY3Vy
cmVudFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBtX3BsdWdpbldu
ZFByb2MgPSAoV05EUFJPQylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKVBsdWdpblZpZXdXbmRQcm9jKTsKLSNlbmRpZgogICAg
IH0KIH0KIApAQCAtOTg4LDkgKzkyNyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFy
dCgpCiAKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7CiAgICAgICAgIHJlZ2lzdGVyUGx1Z2luVmll
dygpOwotI2lmICFPUyhXSU5DRSkKICAgICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tz
KGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50KTsKLSNlbmRpZgogCiAgICAgICAgIERX
T1JEIGZsYWdzID0gV1NfQ0hJTEQ7CiAgICAgICAgIGlmIChpc1NlbGZWaXNpYmxlKCkpCkBAIC0x
MDEwLDExICs5NDcsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAg
ICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4uCiAjaWYgT1MoV0lORE9XUykgJiYg
Q1BVKFg4Nl82NCkKICAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7Ci0jZWxpZiBP
UyhXSU5DRSkKLSAgICAgICAgOjpTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jKTsKLSNlbHNlCiAgICAgICAgIDo6U2V0
V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05H
KURlZldpbmRvd1Byb2NBKTsKLSNlbmRpZgogICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHksIHRoaXMpOwogCiAgICAgICAgIG1fbnBX
aW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzI1MTk4Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTIgKzAsMCBAQAotLyoKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhl
bWVXaW5DRS5oIgotCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnRNZXRy
aWNzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaWYgRU5BQkxFKFZJREVPKQot
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0KLS8qIAotICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5l
IGhvdyBhIHdpZGdldCBpcyBkcmF3biB1c2luZwotICogV2luZG93cycgVGhlbWUgQVBJLiBGb3Ig
bW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVtZSBwYXJ0cyBhbmQgc3RhdGVzIHNlZQotICogaHR0cDov
L21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11
cy9zaGVsbGNjL3BsYXRmb3JtL2NvbW1jdGxzL3VzZXJleC90b3BpY3MvcGFydHNhbmRzdGF0ZXMu
YXNwCi0gKi8KLSNkZWZpbmUgVEhFTUVfQ09MT1IgMjA0Ci0jZGVmaW5lIFRIRU1FX0ZPTlQgIDIx
MAotCi0vLyBHZW5lcmljIHN0YXRlIGNvbnN0YW50cwotI2RlZmluZSBUU19OT1JNQUwgICAgMQot
I2RlZmluZSBUU19IT1ZFUiAgICAgMgotI2RlZmluZSBUU19BQ1RJVkUgICAgMwotI2RlZmluZSBU
U19ESVNBQkxFRCAgNAotI2RlZmluZSBUU19GT0NVU0VEICAgNQotCi0vLyBCdXR0b24gY29uc3Rh
bnRzCi0jZGVmaW5lIEJQX0JVVFRPTiAgICAxCi0jZGVmaW5lIEJQX1JBRElPICAgICAyCi0jZGVm
aW5lIEJQX0NIRUNLQk9YICAzCi0KLS8vIFRleHRmaWVsZCBjb25zdGFudHMKLSNkZWZpbmUgVEZQ
X1RFWFRGSUVMRCAxCi0jZGVmaW5lIFRGU19SRUFET05MWSAgNgotCi10eXBlZGVmIEhBTkRMRSAo
V0lOQVBJKm9wZW5UaGVtZURhdGFQdHIpKEhXTkQgaHduZCwgTFBDV1NUUiBwc3pDbGFzc0xpc3Qp
OwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqY2xvc2VUaGVtZURhdGFQdHIpKEhBTkRMRSBoVGhl
bWUpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZHJhd1RoZW1lQmFja2dyb3VuZFB0cikoSEFO
RExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGNvbnN0IFJFQ1QgKnBSZWN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVCogcENsaXBS
ZWN0KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmRyYXdUaGVtZUVkZ2VQdHIpKEhBTkRMRSBo
VGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUICpwUmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVFZGdlLCB1bnNpZ25l
ZCB1RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSRUNUKiBwQ2xpcFJlY3QpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZ2V0VGhlbWVDb250
ZW50UmVjdFB0cikoSEFORExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGNvbnN0IFJF
Q1QqIHBSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVD
VCogcENvbnRlbnRSZWN0KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lUGFydFNp
emVQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBSRUNUKiBwcmMsIGludCB0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUqIHBzeik7Ci10
eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZVN5c0ZvbnRQdHIpKEhBTkRMRSBoVGhlbWUs
IGludCBpRm9udElkLCBPVVQgTE9HRk9OVCogcEZvbnQpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5B
UEkqZ2V0VGhlbWVDb2xvclB0cikoSEFORExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgaW50IGlQ
cm9wSWQsIE9VVCBDT0xPUlJFRiogcEZvbnQpOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgZHJvcERvd25CdXR0b25XaWR0aCA9IDE3Owotc3RhdGljIGNvbnN0IGlu
dCB0cmFja1dpZHRoID0gNDsKLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVX
aW5DRTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lV2lu
Q0UpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQ
YWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiB3aW5jZVRoZW1lID0g
UmVuZGVyVGhlbWVXaW5DRTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiB3aW5jZVRo
ZW1lOwotfQotCi1SZW5kZXJUaGVtZVdpbkNFOjpSZW5kZXJUaGVtZVdpbkNFKCkKLXsKLX0KLQot
UmVuZGVyVGhlbWVXaW5DRTo6flJlbmRlclRoZW1lV2luQ0UoKQotewotfQotCi1Db2xvciBSZW5k
ZXJUaGVtZVdpbkNFOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQp
OwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBH
ZXRCVmFsdWUoY29sb3IpLCAyNTUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVdpbkNFOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBDT0xP
UlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhUKTsKLSAgICByZXR1cm4gQ29s
b3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwg
MjU1KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lz
Q29sb3IoQ09MT1JfSElHSExJR0hUVEVYVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShj
b2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDI1NSk7Ci19Ci0KLUNv
bG9yIFJlbmRlclRoZW1lV2luQ0U6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6d2hpdGU7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVXaW5DRTo6c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKSBjb25z
dAotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6
Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNl
IFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSAqc3R5
bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2Uo
KSk7Ci19Ci0KLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luQ0U6OmRldGVybWluZUNsYXNzaWNTdGF0
ZShSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBpZiAo
IWlzRW5hYmxlZChvKSB8fCBpc1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgcmVzdWx0ID0g
REZDU19JTkFDVElWRTsKLSAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpIC8vIEFjdGl2ZSBzdXBl
cnNlZGVzIGhvdmVyCi0gICAgICAgIHJlc3VsdCA9IERGQ1NfUFVTSEVEOwotCi0gICAgaWYgKGlz
Q2hlY2tlZChvKSkKLSAgICAgICAgcmVzdWx0IHw9IERGQ1NfQ0hFQ0tFRDsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1UaGVtZURhdGEgUmVuZGVyVGhlbWVXaW5DRTo6Z2V0VGhlbWVEYXRhKFJl
bmRlck9iamVjdCogbykKLXsKLSAgICBUaGVtZURhdGEgcmVzdWx0OwotICAgIHN3aXRjaCAoby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNh
c2UgQnV0dG9uUGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0JVVFRPTjsKLSAgICAg
ICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19CVVRUT05QVVNIOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NI
RUNLQk9YOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JVVFRPTkNIRUNL
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmVzdWx0Lm1f
cGFydCA9IEJQX1JBRElPOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JV
VFRPTlJBRElPOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpc3Rib3hQYXJ0OgotICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRB
cmVhUGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IFRGUF9URVhURklFTEQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSB8PSBkZXRlcm1pbmVD
bGFzc2ljU3RhdGUobyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRh
IGZvciBhIGJ1dHRvbgotICAgIFRoZW1lRGF0YSB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7
Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhlIGJ1dHRvbi4KLSAgICBpLmNvbnRleHQtPmRyYXdGcmFt
ZUNvbnRyb2wociwgREZDX0JVVFRPTiwgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlKTsKLSAgICBp
ZiAoaXNGb2N1c2VkKG8pKSB7Ci0gICAgICAgIGlmICh0aGVtZURhdGEubV9wYXJ0ID09IEJQX0JV
VFRPTikgewotICAgICAgICAgICAgSW50UmVjdCBmb2N1c1JlY3Qocik7Ci0gICAgICAgICAgICBm
b2N1c1JlY3QuaW5mbGF0ZSgtMik7Ci0gICAgICAgICAgICBpLmNvbnRleHQtPmRyYXdGb2N1c1Jl
Y3QoZm9jdXNSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpLmNvbnRleHQtPmRy
YXdGb2N1c1JlY3Qocik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJl
bmRlclRoZW1lV2luQ0U6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAg
VGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3gu
Ci0gICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWluZyB0
aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IKLSAgICAv
LyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBz
ZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MKLSAgICAv
LyBtZXRyaWNzLgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEzLCBGaXhlZCkpOwotICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEz
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHRmaWVsZAotICAgIFRo
ZW1lRGF0YSB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7Ci0KLSAgICAvLyBOb3cgcGFpbnQg
dGhlIHRleHQgZmllbGQuCi0gICAgaS5jb250ZXh0LT5wYWludFRleHRGaWVsZChyLCB0aGVtZURh
dGEubV9jbGFzc2ljU3RhdGUpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOwotICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUZXh0RmllbGQocmVuZGVyZXIsIHBhaW50
SW5mbywgcmVjdCk7Ci0gICAgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVy
LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldp
ZHRoIC0gMSwgcmVjdC55KCksIGRyb3BEb3duQnV0dG9uV2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoLTEpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
RnJhbWVDb250cm9sKGJ1dHRvblJlY3QsIERGQ19TQ1JPTEwsIERGQ1NfU0NST0xMQ09NQk9CT1gg
fCBkZXRlcm1pbmVDbGFzc2ljU3RhdGUocmVuZGVyZXIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6dGhlbWVDaGFuZ2VkKCkKLXsKLX0KLQotU3Ry
aW5nIFJlbmRlclRoZW1lV2luQ0U6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgUmVuZGVy
VGhlbWVXaW5DRTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpz
dXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vIE1hcCBhIENTU1ZhbHVlKiBzeXN0ZW0gY29sb3IgdG8gYW4gaW5kZXggdW5k
ZXJzdG9vZCBieSBHZXRTeXNDb2xvcgotc3RhdGljIGludCBjc3NWYWx1ZUlkVG9TeXNDb2xvcklu
ZGV4KENTU1ZhbHVlSUQgY3NzVmFsdWVJZCkKLXsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsK
LSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlYm9yZGVyOiByZXR1cm4gQ09MT1JfQUNUSVZFQk9SREVS
OwotICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0aW9uOiByZXR1cm4gQ09MT1JfQUNUSVZFQ0FQ
VElPTjsKLSAgICBjYXNlIENTU1ZhbHVlQXBwd29ya3NwYWNlOiByZXR1cm4gQ09MT1JfQVBQV09S
S1NQQUNFOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNrZ3JvdW5kOiByZXR1cm4gQ09MT1JfQkFDS0dS
T1VORDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uZmFjZTogcmV0dXJuIENPTE9SX0JUTkZBQ0U7
Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hsaWdodDogcmV0dXJuIENPTE9SX0JUTkhJR0hM
SUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uc2hhZG93OiByZXR1cm4gQ09MT1JfQlROU0hB
RE9XOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OiByZXR1cm4gQ09MT1JfQlROVEVYVDsK
LSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6IHJldHVybiBDT0xPUl9DQVBUSU9OVEVYVDsK
LSAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6IHJldHVybiBDT0xPUl9HUkFZVEVYVDsKLSAgICBj
YXNlIENTU1ZhbHVlSGlnaGxpZ2h0OiByZXR1cm4gQ09MT1JfSElHSExJR0hUOwotICAgIGNhc2Ug
Q1NTVmFsdWVIaWdobGlnaHR0ZXh0OiByZXR1cm4gQ09MT1JfSElHSExJR0hUVEVYVDsKLSAgICBj
YXNlIENTU1ZhbHVlSW5hY3RpdmVib3JkZXI6IHJldHVybiBDT0xPUl9JTkFDVElWRUJPUkRFUjsK
LSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9uOiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVD
QVBUSU9OOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb250ZXh0OiByZXR1cm4gQ09M
T1JfSU5BQ1RJVkVDQVBUSU9OVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlSW5mb2JhY2tncm91bmQ6
IHJldHVybiBDT0xPUl9JTkZPQks7Ci0gICAgY2FzZSBDU1NWYWx1ZUluZm90ZXh0OiByZXR1cm4g
Q09MT1JfSU5GT1RFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZU1lbnU6IHJldHVybiBDT0xPUl9NRU5V
OwotICAgIGNhc2UgQ1NTVmFsdWVNZW51dGV4dDogcmV0dXJuIENPTE9SX01FTlVURVhUOwotICAg
IGNhc2UgQ1NTVmFsdWVTY3JvbGxiYXI6IHJldHVybiBDT0xPUl9TQ1JPTExCQVI7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVRocmVlZGRhcmtzaGFkb3c6IHJldHVybiBDT0xPUl8zRERLU0hBRE9XOwotICAg
IGNhc2UgQ1NTVmFsdWVUaHJlZWRmYWNlOiByZXR1cm4gQ09MT1JfM0RGQUNFOwotICAgIGNhc2Ug
Q1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ6IHJldHVybiBDT0xPUl8zREhJR0hMSUdIVDsKLSAgICBj
YXNlIENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6IHJldHVybiBDT0xPUl8zRExJR0hUOwotICAg
IGNhc2UgQ1NTVmFsdWVUaHJlZWRzaGFkb3c6IHJldHVybiBDT0xPUl8zRFNIQURPVzsKLSAgICBj
YXNlIENTU1ZhbHVlV2luZG93OiByZXR1cm4gQ09MT1JfV0lORE9XOwotICAgIGNhc2UgQ1NTVmFs
dWVXaW5kb3dmcmFtZTogcmV0dXJuIENPTE9SX1dJTkRPV0ZSQU1FOwotICAgIGNhc2UgQ1NTVmFs
dWVXaW5kb3d0ZXh0OiByZXR1cm4gQ09MT1JfV0lORE9XVEVYVDsKLSAgICBkZWZhdWx0OiByZXR1
cm4gLTE7IC8vIFVuc3VwcG9ydGVkIENTU1ZhbHVlCi0gICAgfQotfQotCi1Db2xvciBSZW5kZXJU
aGVtZVdpbkNFOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0g
ICAgaW50IHN5c0NvbG9ySW5kZXggPSBjc3NWYWx1ZUlkVG9TeXNDb2xvckluZGV4KGNzc1ZhbHVl
SWQpOwotICAgIGlmIChzeXNDb2xvckluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotCi0gICAgQ09MT1JSRUYgY29sb3IgPSBH
ZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNv
bG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7Ci19Ci0KLWNvbnN0IGlu
dCBzbGlkZXJUaHVtYldpZHRoID0gNzsKLWNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1
OwotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsK
LSAgICB9Ci19Ci0KLSNpZiAwCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdEJ1dHRvbklu
bmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIFRoaXMgaW5uZXIg
cGFkZGluZyBtYXRjaGVzIEZpcmVmb3guCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KDEsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoMywgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDMsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8g
T3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgot
ICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi1ib29sIFJl
bmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBDb2xvciBidXR0b25Db2xvciA9IChvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkgJiYgdG9FbGVtZW50KG8tPm5vZGUoKSktPmFjdGl2ZSgpKSA/IENvbG9yKDEzOCwgMTM4
LCAxMzgpIDogQ29sb3IoMTg2LCAxODYsIDE4Nik7Ci0KLSAgICBJbnRTaXplIGNhbmNlbFNpemUo
MTAsIDEwKTsKLSAgICBJbnRTaXplIGNhbmNlbFJhZGl1cyhjYW5jZWxTaXplLndpZHRoKCkgLyAy
LCBjYW5jZWxTaXplLmhlaWdodCgpIC8gMik7Ci0gICAgaW50IHggPSByLngoKSArIChyLndpZHRo
KCkgLSBjYW5jZWxTaXplLndpZHRoKCkpIC8gMjsKLSAgICBpbnQgeSA9IHIueSgpICsgKHIuaGVp
Z2h0KCkgLSBjYW5jZWxTaXplLmhlaWdodCgpKSAvIDIgKyAxOwotICAgIEludFJlY3QgY2FuY2Vs
Qm91bmRzKEludFBvaW50KHgsIHkpLCBjYW5jZWxTaXplKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3QoUm91bmRl
ZFJlY3QoY2FuY2VsQm91bmRzLCBjYW5jZWxSYWRpdXMsIGNhbmNlbFJhZGl1cywgY2FuY2VsUmFk
aXVzLCBjYW5jZWxSYWRpdXMpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoY2Fu
Y2VsQm91bmRzLCBidXR0b25Db2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICAvLyBE
cmF3IHRoZSAneCcKLSAgICBJbnRTaXplIHhTaXplKDMsIDMpOwotICAgIEludFJlY3QgeEJvdW5k
cyhjYW5jZWxCb3VuZHMubG9jYXRpb24oKSArIEludFNpemUoMywgMyksIHhTaXplKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoeEJvdW5kcy5sb2Nh
dGlvbigpLCAgeEJvdW5kcy5sb2NhdGlvbigpICsgeEJvdW5kcy5zaXplKCkpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh4Qm91bmRzLm1heFgoKSwgeEJvdW5kcy55
KCkpLCAgSW50UG9pbnQoeEJvdW5kcy54KCksIHhCb3VuZHMubWF4WSgpKSk7Ci0KLSAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIElu
dFNpemUgY2FuY2VsU2l6ZSgxMywgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2Fu
Y2VsU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNh
bmNlbFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgZW1wdHlTaXpl
KDEsIDExKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEp
OwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUuaGVpZ2h0KCks
IEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KG8sIHBhaW50SW5mbywgcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gVGhlc2UgYXJlIHRo
ZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2Vs
ZWN0PiBib3gKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKLSAg
ICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRpcmVjdGlvbigp
ID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKLSAgICBjb25zdCBpbnQgZHJv
cERvd25Cb3hQYWRkaW5nQm90dG9tID0gMjsKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRk
aW5nTGVmdCAgID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IDQgOiA0ICsgZHJvcERvd25C
dXR0b25XaWR0aDsKLSAgICAvLyBUaGUgPHNlbGVjdD4gYm94IG11c3QgYmUgYXQgbGVhc3QgMTJw
eCBoaWdoIGZvciB0aGUgYnV0dG9uIHRvIHJlbmRlciBuaWNlbHkgb24gV2luZG93cwotICAgIGNv
bnN0IGludCBkcm9wRG93bkJveE1pbkhlaWdodCA9IDEyOwotCi0gICAgLy8gUG9zaXRpb24gdGhl
IHRleHQgY29ycmVjdGx5IHdpdGhpbiB0aGUgc2VsZWN0IGJveCBhbmQgbWFrZSB0aGUgYm94IHdp
ZGUgZW5vdWdoIHRvIGZpdCB0aGUgZHJvcGRvd24gYnV0dG9uCi0gICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdSaWdodCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nQm90
dG9tLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoZHJvcERvd25C
b3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKLQotICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0
bwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLQotICAgIC8vIENhbGN1bGF0
ZSBvdXIgbWluLWhlaWdodAotICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKLSAgICBtaW5IZWlnaHQgPSBzdGQ6Om1heChtaW5IZWlnaHQsIGRyb3BEb3du
Qm94TWluSGVpZ2h0KTsKLQotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdo
dCwgRml4ZWQpKTsKLQotICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICBz
dHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotCi0gICAgRFdPUkQgY29sb3JNZW51ID0gR2V0U3lz
Q29sb3IoQ09MT1JfTUVOVSk7Ci0gICAgRFdPUkQgY29sb3JNZW51VGV4dCA9IEdldFN5c0NvbG9y
KENPTE9SX01FTlVURVhUKTsKLSAgICBDb2xvciBiZ0NvbG9yKEdldFJWYWx1ZShjb2xvck1lbnUp
LCBHZXRHVmFsdWUoY29sb3JNZW51KSwgR2V0QlZhbHVlKGNvbG9yTWVudSksIDI1NSk7Ci0gICAg
Q29sb3IgdGV4dENvbG9yKEdldFJWYWx1ZShjb2xvck1lbnVUZXh0KSwgR2V0R1ZhbHVlKGNvbG9y
TWVudVRleHQpLCBHZXRCVmFsdWUoY29sb3JNZW51VGV4dCksIDI1NSk7Ci0gICAgaWYgKGJnQ29s
b3IgPT0gdGV4dENvbG9yKQotICAgICAgICB0ZXh0Q29sb3Iuc2V0UkdCKCh+YmdDb2xvci5yZ2Io
KSkgfCAweEZGMDAwMDAwKTsKLSAgICBzdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0g
ICAgc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKS0+c2V0Q2xpcChDb250ZW50RmlsbEJv
eCk7Ci0gICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihiZ0NvbG9yKTsKLSAgICBzdHlsZS0+
c2V0Q29sb3IodGV4dENvbG9yKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQg
dG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIDAgaWYg
b25lIGNhbm5vdCBiZSBmb3VuZC4KLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnRQYXJlbnQoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIW1l
ZGlhTm9kZSkKLSAgICAgICAgbWVkaWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8
fCAhbWVkaWFOb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIXRvRWxlbWVudChtZWRpYU5vZGUpLT5p
c01lZGlhRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB0b0hUTUxN
ZWRpYUVsZW1lbnQobWVkaWFOb2RlKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lV2lu
Q0U6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9IFJlbmRlclRoZW1lOjpwYWludFNs
aWRlclRyYWNrKG8sIGksIHIpOwotICAgIEludFBvaW50IGxlZnQgPSBJbnRQb2ludChyLngoKSAr
IDIsIChyLnkoKSArIHIubWF4WSgpKSAvIDIpOwotICAgIGkuY29udGV4dC0+c2F2ZSgpOwotICAg
IGkuY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmdyYXksIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwotICAgIGkuY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICBpLmNvbnRleHQtPmZpbGxSZWN0KHIpOwotI2lmIEVOQUJMRShWSURF
TykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJl
bnQoby0+bm9kZSgpKTsKLSAgICBpZiAobWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGkuY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMHhmZiwgMCkpOwotICAgICAgICBJbnRQb2ludCBy
aWdodCA9IEludFBvaW50KGxlZnQueCgpICsgbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkg
KiAoci5tYXhYKCkgLSByLngoKSAtIDQpLCAoci55KCkgKyByLm1heFkoKSkgLyAyKTsKLSAgICAg
ICAgaS5jb250ZXh0LT5kcmF3TGluZShsZWZ0LCByaWdodCk7Ci0gICAgICAgIGxlZnQgPSByaWdo
dDsKLSAgICB9Ci0jZW5kaWYKLSAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpi
bGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgaS5jb250ZXh0LT5kcmF3TGluZShsZWZ0
LCBJbnRQb2ludChyLm1heFgoKSAtIDIsIGxlZnQueSgpKSk7Ci0gICAgaS5jb250ZXh0LT5yZXN0
b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9IFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRo
dW1iKG8sIGksIHIpOwotICAgIGkuY29udGV4dC0+c2F2ZSgpOwotICAgIGkuY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBpLmNv
bnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgIGkuY29udGV4dC0+ZmlsbFJlY3Qocik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkp
OwotICAgIGlmIChtZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgZmxvYXQgcHQgPSBtZWRpYUVsZW1l
bnQtPmN1cnJlbnRUaW1lKCkgLyBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0gICAgICAgIEZs
b2F0UmVjdCBpbnRSZWN0ID0gcjsKLSAgICAgICAgaW50UmVjdC5zZXRYKGludFJlY3QueCgpICsg
aW50UmVjdC53aWR0aCgpICogcHQgLSAyKTsKLSAgICAgICAgaW50UmVjdC5zZXRXaWR0aCg1KTsK
LSAgICAgICAgaS5jb250ZXh0LT5maWxsUmVjdChpbnRSZWN0KTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBpLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgcGFkZGlu
ZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci19Ci0KLSNpZiBF
TkFCTEUoVklERU8pCi0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZv
LCByKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMik7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpncmF5KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3Qo
aW1SZWN0KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBy
YzsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2Rl
KCkpOwotICAgIGJvb2wgbXV0ZWQgPSAhbWVkaWFFbGVtZW50IHx8IG1lZGlhRWxlbWVudC0+bXV0
ZWQoKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMik7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgRmxvYXRQb2ludCBwdHNbNl0gPSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0
KCkgLyAzLjApLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0Lndp
ZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAotICAgICAg
ICBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3QueSgpKSwKLSAgICAgICAgRmxv
YXRQb2ludChpbVJlY3QubWF4WCgpIC0gMSwgaW1SZWN0Lm1heFkoKSksCi0gICAgICAgIEZsb2F0
UG9pbnQoaW1SZWN0LngoKSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSAr
IDIuMCAqIGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0
LngoKSArIDEsIGltUmVjdC55KCkgKyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCi0gICAg
fTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oNiwgcHRzKTsKLSAg
ICBpZiAobXV0ZWQpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2lu
dChpbVJlY3QubWF4WCgpLCBpbVJlY3QueSgpKSwgSW50UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0
Lm1heFkoKSkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJu
IHJjOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAg
RmxvYXRSZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwotICAgIGJvb2wgcGF1c2VkID0gIW1lZGlhRWxlbWVu
dCB8fCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpOwotICAgIGlmIChwYXVzZWQpIHsKLSAgICAgICAg
ZmxvYXQgd2lkdGggPSBpbVJlY3Qud2lkdGgoKTsKLSAgICAgICAgaW1SZWN0LnNldFdpZHRoKHdp
ZHRoIC8gMy4wKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7
Ci0gICAgICAgIGltUmVjdC5tb3ZlKDIuMCAqIHdpZHRoIC8gMy4wLCAwKTsKLSAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSks
IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAv
IDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0cyk7Ci0gICAgfQotICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1ib29s
IFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBp
bVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0zKTsKLSAgICBGbG9hdFBvaW50IHB0c1sz
XSA9IHsgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJl
Y3QueSgpKSwgRmxvYXRQb2ludChpbVJlY3QueCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZ
KCkpIC8gMi4wKSwgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4w
LCBpbVJlY3QubWF4WSgpKSB9OwotICAgIEZsb2F0UG9pbnQgcHRzMlszXSA9IHsgRmxvYXRQb2lu
dChpbVJlY3QubWF4WCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGlt
UmVjdC5tYXhYKCkpIC8gMi4wLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwg
RmxvYXRQb2ludChpbVJlY3QubWF4WCgpLCBpbVJlY3QubWF4WSgpKSB9OwotICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBw
dHMpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBwdHMyKTsK
LSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBGbG9h
dFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2lu
dCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSksIEZsb2F0UG9p
bnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJl
Y3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkg
fTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBp
bVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgo
KSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoKGltUmVj
dC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgcHRzKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRz
Mik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgcmV0dXJuIHBhaW50U2xpZGVyVHJhY2sobywgcGFpbnRJbmZvLCByKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBy
ZXR1cm4gcGFpbnRTbGlkZXJUaHVtYihvLCBwYWludEluZm8sIHIpOwotfQotI2VuZGlmCi0KLXZv
aWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgaW50IHdp
ZHRoID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7Ci0gICAgaWYgKHdpZHRoIDw9
IDApCi0gICAgICAgIHdpZHRoID0gMTc7IC8vIFZpc3RhJ3MgZGVmYXVsdC4KLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRJ
bm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBXZSBzcGxpdCB0aGUgc3BlY2lmaWVkIHJl
Y3RhbmdsZSBpbnRvIHR3byB2ZXJ0aWNhbGx5LiBXZSBjYW4ndCBkcmF3IGEKLSAgICAvLyBzcGlu
IGJ1dHRvbiBvZiB3aGljaCBoZWlnaHQgaXMgbGVzcyB0aGFuIDJweC4KLSAgICBpZiAoci5oZWln
aHQoKSA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbnRSZWN0IHVwUmVjdChyKTsK
LSAgICB1cFJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLyAyKTsKLSAgICBJbnRSZWN0IGRvd25S
ZWN0KHIpOwotICAgIGRvd25SZWN0LnNldFkodXBSZWN0Lm1heFkoKSk7Ci0gICAgZG93blJlY3Qu
c2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLSB1cFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgdW5zaWduZWQg
c3RhdGVVcCA9IERGQ1NfU0NST0xMVVA7Ci0gICAgdW5zaWduZWQgc3RhdGVEb3duID0gREZDU19T
Q1JPTExET1dOOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykgfHwgaXNSZWFkT25seUNvbnRyb2wo
bykpIHsKLSAgICAgICAgc3RhdGVVcCB8PSBERkNTX0lOQUNUSVZFOwotICAgICAgICBzdGF0ZURv
d24gfD0gREZDU19JTkFDVElWRTsKLSAgICB9IGVsc2UgaWYgKGlzUHJlc3NlZChvKSkgewotICAg
ICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKLSAgICAgICAgICAgIHN0YXRl
VXAgfD0gREZDU19QVVNIRUQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlRG93biB8
PSBERkNTX1BVU0hFRDsKLSAgICB9Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ZyYW1l
Q29udHJvbCh1cFJlY3QsIERGQ19TQ1JPTEwsIHN0YXRlVXApOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3RnJhbWVDb250cm9sKGRvd25SZWN0LCBERkNfU0NST0xMLCBzdGF0ZURvd24pOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDBkNjFkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUmVuZGVyVGhlbWVXaW5DRV9oCi0jZGVmaW5l
IFJlbmRlclRoZW1lV2luQ0VfaAotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLQotdHlwZWRl
ZiB2b2lkKiBIQU5ETEU7Ci10eXBlZGVmIHN0cnVjdCBISU5TVEFOQ0VfXyogSElOU1RBTkNFOwot
dHlwZWRlZiBISU5TVEFOQ0UgSE1PRFVMRTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
c3RydWN0IFRoZW1lRGF0YSB7Ci0gICAgICAgIFRoZW1lRGF0YSgpIDptX3BhcnQoMCksIG1fc3Rh
dGUoMCksIG1fY2xhc3NpY1N0YXRlKDApIHt9Ci0gICAgICAgIFRoZW1lRGF0YShpbnQgcGFydCwg
aW50IHN0YXRlKQotICAgICAgICAgICAgOiBtX3BhcnQocGFydCkKLSAgICAgICAgICAgICwgbV9z
dGF0ZShzdGF0ZSkKLSAgICAgICAgICAgICwgbV9jbGFzc2ljU3RhdGUoMCkKLSAgICAgICAgeyB9
Ci0KLSAgICAgICAgdW5zaWduZWQgbV9wYXJ0OwotICAgICAgICB1bnNpZ25lZCBtX3N0YXRlOwot
ICAgICAgICB1bnNpZ25lZCBtX2NsYXNzaWNTdGF0ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgUmVu
ZGVyVGhlbWVXaW5DRSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7Ci0gICAgICAgIH5SZW5k
ZXJUaGVtZVdpbkNFKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQo
KTsKLQotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMg
YWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAg
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0K
LSAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9u
dChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBD
b2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKLSAgICAgICAgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotICAgICAgICB7IHJldHVybiBwYWlu
dEJ1dHRvbihvLCBpLCByKTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gc2V0Q2hlY2tib3hTaXpl
KHN0eWxlKTsgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLSAgICAg
ICAgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFy
dChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0IHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QgeyB9Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRXZWJLaXRJc0JlaW5nVW5sb2FkZWQoKTsKLQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdDsKLQotICAgICNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3
YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVuZGVyVGhlbWVXaW5DRSgpOwotCi0gICAgICAgIHVuc2lnbmVkIGRldGVybWluZUNsYXNzaWNT
dGF0ZShSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0KSBjb25zdDsKLQotICAgICAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVj
dCopOwotICAgIH07Ci0KLX07Ci0KLSNlbmRpZiAvLyBSZW5kZXJUaGVtZVdpbkNFX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODExNDVkLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkK
LTogbV90aW1lcih0aGlzLCAmRGF0YWJhc2VUaHJlYWQ6OnRpbWVyRmlyZWQpCi17Ci19Ci0KLURh
dGFiYXNlVGhyZWFkOjp+RGF0YWJhc2VUaHJlYWQoKQotewotfQotCi12b2lkIERhdGFiYXNlVGhy
ZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oKQotewotICAgIG1fcXVldWUuY2xlYXIoKTsKLX0KLQot
Ym9vbCBEYXRhYmFzZVRocmVhZDo6dGVybWluYXRpb25SZXF1ZXN0ZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6dGlt
ZXJGaXJlZChUaW1lcjxEYXRhYmFzZVRocmVhZD4qKQotewotICAgIGlmICghbV9xdWV1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzayA9IG1fcXVldWUuZmly
c3QoKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLSAgICAgICAgbV9xdWV1ZS5yZW1v
dmVGaXJzdCgpOwotICAgICAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotfQotCi12b2lkIERhdGFiYXNlVGhyZWFk
OjpzY2hlZHVsZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAgbV9x
dWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hl
ZHVsZUltbWVkaWF0ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAg
dGFzay0+cGVyZm9ybVRhc2soKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6dW5zY2hlZHVs
ZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIERlcXVlPFJlZlB0cjxE
YXRhYmFzZVRhc2s+ID4gcmVzZXJ2ZWRUYXNrczsKLSAgICBmb3IgKERlcXVlPFJlZlB0cjxEYXRh
YmFzZVRhc2s+ID46OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3F1ZXVlLmJlZ2luKCk7IGkgIT0gbV9x
dWV1ZS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmICgoKmkpLT5kYXRhYmFzZSgpICE9IGRhdGFi
YXNlKQotICAgICAgICAgICAgcmVzZXJ2ZWRUYXNrcy5hcHBlbmQoKmkpOwotICAgIH0KLQotICAg
IG1fcXVldWUuc3dhcChyZXNlcnZlZFRhc2tzKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6
cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChE
YXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5j
ZS9EYXRhYmFzZVRocmVhZFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0Rh
dGFiYXNlVGhyZWFkV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyMWNj
MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhy
ZWFkV2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGkgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgRGF0YWJhc2VUaHJlYWRXaW5DRV9o
Ci0jZGVmaW5lIERhdGFiYXNlVGhyZWFkV2luQ0VfaAotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0g
ICAgY2xhc3MgRGF0YWJhc2U7Ci0gICAgY2xhc3MgRGF0YWJhc2VUYXNrOwotCi0gICAgY2xhc3Mg
RGF0YWJhc2VUaHJlYWQ6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRocmVhZCk7IH0KLSAgICAg
ICAgfkRhdGFiYXNlVGhyZWFkKCk7Ci0KLSAgICAgICAgYm9vbCBzdGFydCgpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgdm9pZCByZXF1ZXN0VGVybWluYXRpb24oKTsKLSAgICAgICAgYm9vbCB0
ZXJtaW5hdGlvblJlcXVlc3RlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2NoZWR1bGVUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlh
dGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7Ci0gICAgICAgIHZvaWQgdW5zY2hlZHVs
ZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRhYmFzZU9w
ZW4oRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFz
ZSopOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKTsgfQotI2VuZGlmCi0KLSAgICBwcml2
YXRlOgotICAgICAgICBEYXRhYmFzZVRocmVhZCgpOwotCi0gICAgICAgIHZvaWQgdGltZXJGaXJl
ZChUaW1lcjxEYXRhYmFzZVRocmVhZD4qKTsKLQotICAgICAgICBEZXF1ZTxSZWZQdHI8RGF0YWJh
c2VUYXNrPiA+IG1fcXVldWU7Ci0gICAgICAgIFRpbWVyPERhdGFiYXNlVGhyZWFkPiBtX3RpbWVy
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFiYXNl
VGhyZWFkV2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9T
dG9yYWdlVGhyZWFkV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9TdG9y
YWdlVGhyZWFkV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWU4OTZm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVh
ZFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGkgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdG9yYWdlVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJTdG9yYWdlVGFzay5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhU3luYy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0b3JhZ2VUaHJl
YWQ6OlN0b3JhZ2VUaHJlYWQoKQotOiBtX3RpbWVyKHRoaXMsICZTdG9yYWdlVGhyZWFkOjp0aW1l
ckZpcmVkKQotewotfQotCi1TdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCgpCi17Ci19Ci0K
LWJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFN0b3JhZ2VUaHJlYWQ6OnRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZVRocmVhZD4qKQotewot
ICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VUYXNr
PiB0YXNrID0gbV9xdWV1ZS5maXJzdCgpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwot
ICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIGlmICghbV9xdWV1ZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YVN5bmM+IGFyZWEpCi17Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU3RvcmFnZVRhc2s6OmNyZWF0ZUlt
cG9ydChhcmVhKSk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGlt
ZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3lu
YyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gYXJlYSkKLXsKLSAgICBtX3F1ZXVlLmFwcGVu
ZChTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhhcmVhKSk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFN0b3Jh
Z2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCi17Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotICAgIG1fdGlt
ZXIuc3RvcCgpOwotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQot
ewotICAgIG1fcXVldWUuY2xlYXIoKTsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5j
ZS9TdG9yYWdlVGhyZWFkV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3Rv
cmFnZVRocmVhZFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTczYWUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFk
V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBTdG9yYWdlVGhyZWFkV2luQ0VfaAot
I2RlZmluZSBTdG9yYWdlVGhyZWFkV2luQ0VfaAotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgU3RvcmFnZUFyZWFTeW5jOwotICAgIGNsYXNzIFN0b3JhZ2VUYXNrOwotCi0gICAgY2xh
c3MgU3RvcmFnZVRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VUaHJlYWQ+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VUaHJlYWQ+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlVGhyZWFkKTsgfQotCi0gICAgICAgIH5T
dG9yYWdlVGhyZWFkKCk7Ci0gICAgICAgIGJvb2wgc3RhcnQoKTsKLSAgICAgICAgdm9pZCBzY2hl
ZHVsZUltcG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwotICAgICAgICB2b2lkIHNj
aGVkdWxlU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwotICAgICAgICB2b2lkIHRl
cm1pbmF0ZSgpOwotICAgICAgICB2b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFN0b3JhZ2VUaHJlYWQoKTsKLQotICAgICAgICB2b2lkIHRpbWVyRmlyZWQo
VGltZXI8U3RvcmFnZVRocmVhZD4qKTsKLQotICAgICAgICBEZXF1ZTxSZWZQdHI8U3RvcmFnZVRh
c2s+ID4gbV9xdWV1ZTsKLSAgICAgICAgVGltZXI8U3RvcmFnZVRocmVhZD4gbV90aW1lcjsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVGhyZWFk
V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBmMTQ0NjNmLi40OTg1MTkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMwIEBACisyMDE0LTA5LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNFLmNtYWtlOiBS
ZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRl
eHRNZW51Q2xpZW50V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5j
ZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHdpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9y
dC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdp
bmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdp
bmNlL1dlYlZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYlZpZXcuaDogUmVt
b3ZlZC4KKwogMjAxNC0wOS0xNSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNv
bT4KIAogICAgICAgICBbV2luQ2Fpcm9dIE1ha2UgaXQgZWFzaWVyIHRvIGVuYWJsZS9kaXNhYmxl
IEdTdHJlYW1lci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW5DRS5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW5DRS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjk0YzAxYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luQ0UuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1saXN0KEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmls
aXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvd2lu
IgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS93aW4iCi0KLSAgICB3aW5jZQotICAgIHdp
bmNlL1dlYkNvcmVTdXBwb3J0Ci0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAg
d2luY2UvV2ViVmlldy5jcHAKLSAgICB3aW5jZS9XZWJWaWV3LmgKLQotICAgIHdpbmNlL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFdpbkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0Uu
Y3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNF
LmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcAot
ICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAotKQot
Ci1zZXQoV2ViS2l0X0xJQlJBUllfVFlQRSBTVEFUSUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2NmL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2YvQ2hhbmdlTG9nCmluZGV4IGJkOGM2
NzcuLjMwOWJlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2YvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2YvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMTkg
IENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
V2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudENGLmNwcDoK
KwogMjAxNC0wMi0xNyAgU2VyZ2lvIENvcnJlaWEgIDxzZXJnaW8uY29ycmVpYUBvcGVuYm9zc2Eu
b3JnPgogCiAgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBQYXNzT3duUHRyL093blB0ciB3aXRoIHN0
ZDo6dW5pcXVlX3B0ciBpbiBXZWJDb3JlL2luc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2NmL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudENGLmNwcAppbmRleCA2
MjMzM2Q5Li4wNGZlNzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2NmL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudENGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2NmL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudENGLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5D
RSkKKyNpZiBQTEFURk9STShXSU4pCiAjaWZuZGVmIFdURl9VU0VfQ0cKICNkZWZpbmUgV1RGX1VT
RV9DRyAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDBlZDhlMWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VM
b2cKKysrIC9kZXYvbnVsbApAQCAtMSwyMjgzICswLDAgQEAKLTIwMTQtMDMtMTIgIFNlcmdpbyBW
aWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+Ci0KLSAgICAgICAgUmVuYW1lIERFRklO
RV9TVEFUSUNfTE9DQUwgdG8gREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk2MTIKLQotICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBGb3IgbmV3IGNvZGUgdXNlIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxUPiBpbnN0ZWFkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OnVzZXJBZ2VudCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmluaXRpYWxpemUpOgotCi0yMDE0LTAzLTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogRXhwb3NlIHRoZSBjb25zb2xl
IG9iamVjdCBpbiBKU0NvbnRleHRzIHRvIGludGVyYWN0IHdpdGggV2ViIEluc3BlY3RvcgotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTQ0Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICBVcGRhdGUgbmFtZXNwYWNlcy4KLQot
MjAxNC0wMi0yNCAgUmVuYXRhIEhvZG92YW4gIDxyaG9kb3Zhbi51LXN6ZWdlZEBwYXJ0bmVyLnNh
bXN1bmcuY29tPgotCi0gICAgICAgIEdldCByaWQgb2YgdGhlIHVudXNlZCAnaW1tZWRpYXRlJyBw
YXJhbWV0ZXJzIGZyb20gcmVwYWludCByZWxhdGVkIGZ1bmN0aW9ucwotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTExCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgotCi0gICAgICAgIFJlbW92aW5nIHRoZSAnaW1tZWRpYXRlJyBw
YXJhbWV0ZXJzIGZyb20gcmVwYWludCByZWxhdGVkIGZ1bmN0aW9ucyAtIGFjY29yaW5nCi0gICAg
ICAgIHRvIHRoZSBGSVhNRSBpbiBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZSgpIC0g
c2luY2UgdGhleSBoYXZlIG5vIGVmZmVjdC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6
OmludmFsaWRhdGVSb290Vmlldyk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9t
ZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKToKLSAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjcm9sbCk6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMi0wOCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgQ2hhbmdlIFRleHRJdGVyYXRvciB0byB1c2UgU3Ry
aW5nVmlldywgcHJlcGFyaW5nIHRvIHdlYW4gaXQgZnJvbSBkZXByZWNhdGVkQ2hhcmFjdGVycwot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MjMzCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnRXaW5DRTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKTogVXNlIFN0cmluZ1ZpZXcuCi0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6IERp
dHRvLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6IERpdHRv
LgotCi0yMDE0LTAyLTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0K
LSAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIENvbnNvbGUgc3VwcG9ydCB0byBKU0NvbnRleHQg
SW5zcGVjdGlvbgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI3OTQxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTMwICBB
bmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgotCi0gICAgICAgIFJlbW92ZSB0aGUgQUND
RUxFUkFURURfQ09NUE9TSVRJTkcgZmxhZwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODMzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCi0KLSAgICAgICAgUmVtb3ZlIHRoZSBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
IGNvbmRpdGlvbmFscyBmcm9tIHRoZSBjb2RlIGJhc2UgYW5kIG1ha2UgQUMKLSAgICAgICAgbWFu
ZGF0b3J5LgotCi0gICAgICAgIEFub3RoZXIgcGF0Y2ggd2lsbCBiZSByZXF1aXJlZCB0byByZW1v
dmUgdGhlIGZsYWcgc3VwcG9ydCBmcm9tIHRoZSBXaW5DRSBidWlsZCBzeXN0ZW0uCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0y
NSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92
ZSBhbiB1bnVzZWQgRnJhbWVMb2FkZXJDbGllbnQgZnVuY3Rpb24KLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyOAotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMTcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgYW5vdGhlciB1bnVzZWQgRnJhbWVMb2FkZXJDbGll
bnQgY2FsbGJhY2sKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzE5MgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMTcg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUg
ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbiBmcm9tIGFsbCBGcmFtZUxvYWRlckNsaWVudCBzdWJj
bGFzc2VzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjcxOTAKLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTE2ICBQZXRl
ciBNb2xuYXIgIDxwbW9sbmFyLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLSAgICAg
ICAgUmVtb3ZlIHdvcmthcm91bmQgZm9yIGNvbXBpbGVycyBub3Qgc3VwcG9ydGluZyBleHBsaWNp
dCBvdmVycmlkZSBjb250cm9sCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcxMTEKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
Ci0KLSAgICAgICAgTm93IGFsbCBjb21waWxlcnMgc3VwcG9ydCBleHBsaWNpdCBvdmVycmlkZSBj
b250cm9sLCB0aGlzIHdvcmthcm91bmQgY2FuIGJlIHJlbW92ZWQuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5D
RS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaDoK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTMtMTIt
MDMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KLQotICAgICAgICBXZWIg
SW5zcGVjdG9yOiBQdXNoIFJlbW90ZSBJbnNwZWN0b3IgZGVidWdnaW5nIGNvbm5lY3Rpb24gbWFu
YWdlbWVudCBpbnRvIEphdmFTY3JpcHRDb3JlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ2MTMKLQotICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5D
RS5oOgotCi0yMDEzLTExLTA0ICBaaHVhbmcgWmhpZ2FuZyAgPHpodWFuZ3pnQGNuLmZ1aml0c3Uu
Y29tPgotCi0gICAgICAgIENoYW5nZSBzdHJ1Y3R1cmUgb2YgZnJhbWUgdHJlZSBpbiBXSU5DRSBw
b3J0LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIx
MDc5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlRnJhbWUpOgotICAgICAgICAqIFdlYlZpZXcu
Y3BwOgotICAgICAgICAoV2ViVmlldzo6Y3JlYXRlRnJhbWUpOgotICAgICAgICAqIFdlYlZpZXcu
aDoKLQotMjAxMy0xMS0wMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBbV0lOQ0VdIFJlcGxhY2UgT3duUHRyIHdpdGggR0RJT2JqZWN0Ci0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzAKLQotICAgICAg
ICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoK
LSAgICAgICAgKFdlYlZpZXc6OnBhaW50KToKLSAgICAgICAgKFdlYlZpZXc6OmhhbmRsZVBhaW50
KToKLSAgICAgICAgKiBXZWJWaWV3Lmg6Ci0KLTIwMTMtMTEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgQWRkIE9WRVJSSURFIGtleXdvcmQgdG8g
V2ViQ29yZVN1cHBvcnQgY2xhc3NlcwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNjcyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
Ci0KLSAgICAgICAgQWxzbyBhbGlnbiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyB3aXRoIHRoZSBi
YXNlIGNsYXNzZXMKLSAgICAgICAgYW5kIHJlbW92ZSB1c2VsZXNzIGZ1bmN0aW9ucy4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50V2luQ0U6OndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVu
dFdpbkNFOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpE
cmFnQ2xpZW50V2luQ0U6OmFjdGlvbk1hc2tGb3JEcmFnKToKLSAgICAgICAgKFdlYktpdDo6RHJh
Z0NsaWVudFdpbkNFOjpzdGFydERyYWcpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNF
Lmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yUmVzcG9uc2UpOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdv
cmtpbmdDb250ZXh0V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5oOgotCi0yMDEzLTExLTAyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFZhcmlvdXMgc21hbGwgV2luQ0UgYnVpbGQgZml4ZXMKLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQ
YWdlKToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLQotMjAxMy0xMC0wMyAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJlbW92ZSBzaG91bGRSdWJiZXJCYW5kSW5EaXJl
Y3Rpb24gZnJvbSB0aGUgV0tCdW5kbGVQYWdlVUlDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjMwOQotCi0gICAgICAgIFJldmlld2VkIGJ5
IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5oOgotCi0yMDEzLTEwLTAxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgQ1RURTogRE9NV3JhcHBlcldvcmxkcyBzaG91bGQgYmUgcGFzc2VkIGFyb3VuZCBieSBy
ZWZlcmVuY2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMjIwNgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVj
dEluV29ybGQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMy0wOS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTUzOTI3Lgot
Ci0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpXZWJWaWV3KToKLQot
MjAxMy0wOS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAg
ICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTU1Mjg5LgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVz
cG9uc2UpOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bik6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2ls
bFN1Ym1pdEZvcm0pOgotCi0yMDEzLTA5LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIx
NTQxNzguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OnduZFBy
b2MpOgotCi0yMDEzLTA5LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KLQotICAg
ICAgICByZW5hbWUgS1VSTCB0byBVUkwKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MjE0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGlu
Zy4KLQotICAgICAgICAqIG1hbnkgZmlsZXM6IFJlbmFtZWQsIHVzaW5nIHNjcmlwdC4KLQotMjAx
My0wOS0xNiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFJl
bW92ZSB1bnVzZWQgZnVuY3Rpb24gZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJkIGZy
b20gRWRpdG9yQ2xpZW50LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIxNDY0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0wOC0yNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgRnJhbWU6OnRyZWUgc2hvdWxkIHJl
dHVybiBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlcgotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMjU5Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2Vi
Vmlldzo6Y3JlYXRlRnJhbWUpOgotICAgICAgICBVc2UgdHJlZSgpLiBpbnN0ZWFkIG9mIHRyZWUo
KS0+LgotCi0yMDEzLTA4LTE5ICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFwcGxlLmNvbT4K
LQotICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5OTE4PiBGcmFtZTo6c2VsZWN0aW9u
KCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZQotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgotCi0gICAgICAgIG1fc2VsZWN0aW9uIGlzIG5ldmVyIE5VTEwgc28gcmV0dXJuIGEg
cmVmZXJlbmNlIGZyb20gRnJhbWU6OnNlbGVjdGlvbigpLiBBbHNvIHJlbW92ZWQgc29tZQotICAg
ICAgICB1bm5lY2Vzc2FyeSBudWxsIGNoZWNrcyBhbmQgYXNzZXJ0IGRpZmYgdHMgZXhwb3NlZCBh
cyBhIHJlc3VsdC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNF
LmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KToKLQotMjAxMy0wOC0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgotCi0gICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMTk4NTk+IEZyYW1l
Ojpsb2FkZXIoKSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlCi0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnJlZmVycmVyKToKLSAgICAgICAgKiBX
ZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKFdl
YlZpZXc6OmxvYWQpOgotICAgICAgICAoV2ViVmlldzo6cmVsb2FkKToKLSAgICAgICAgKFdlYlZp
ZXc6OnN0b3ApOgotCi0yMDEzLTA3LTI1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KLQotICAgICAgICBDaHJvbWVDbGllbnQ6OmZvY3VzZWROb2RlQ2hhbmdlZCgpIHNob3VsZCBi
ZSBmb2N1c2VkRWxlbWVudENoYW5nZWQoKS4KLSAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTE5MTEwPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50V2luQ0U6OmZvY3VzZWRFbGVtZW50Q2hhbmdlZCk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0wNi0yNiAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdp
bkNFIGJ1aWxkIGZpeCBhZnRlciByMTUyMDY1LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6QVhTdGFydEZyYW1lTG9hZCk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
OjpBWEZpbmlzaEZyYW1lTG9hZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMy0wNS0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgotCi0gICAgICAgIFJlbW92ZSBDaHJvbWVDbGllbnQ6OndlYlZpZXcoKQotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MDU0Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgVGhpcyBibGF0YW50bHkgaG9y
cmlibGUgbGF5ZXIgdmlvbGF0aW9uIHdhcyBvbmx5IHVzZWQgdG8ga25vdyBpZiBhIENocm9tZUNs
aWVudCBpcyBhbiBlbXB0eQotICAgICAgICBjbGllbnQgb3Igbm90LiBXZSBhbHJlYWR5IGhhdmUg
YSAoc2xpZ2h0bHkgbGVzcyBob3JyaWJsZSkgd2F5IHRvIGRvIHRoYXQuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50
V2luQ0UpOgotCi0yMDEzLTA1LTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+Ci0KLSAgICAgICAgRnJhbWU6OmVkaXRvcigpIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjAzNwot
Ci0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgotCi0yMDEzLTA0LTI5ICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQg
YnVpbGQgZml4LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6IEFkZGVkIG1pc3NpbmcgaGVhZGVyLgotICAgICAgICAqIFdlYlZpZXcuaDogRGl0
dG8uCi0KLTIwMTMtMDQtMjUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
LQotICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb25zb2xlTWVzc2FnZSBzaG91bGQgaW5jbHVkZSBs
aW5lIGFuZCBjb2x1bW4gbnVtYmVyIHdoZXJlIHBvc3NpYmxlCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ5MjkKLQotICAgICAgICBSZXZpZXdlZCBi
eSBUaW1vdGh5IEhhdGNoZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjphZGRNZXNz
YWdlVG9Db25zb2xlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5oOgotCi0yMDEzLTA0LTE4ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNDg1NDUuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
ICogV2ViVmlldy5jcHA6Ci0KLTIwMTMtMDQtMTUgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIg
cjE0ODM3My4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNw
cDoKLQotMjAxMy0wNC0wNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTQ1ODQ5LgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotCi0yMDEzLTAz
LTE1ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgSGlkZSBN
YWluUmVzb3VyY2VMb2FkZXIgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZAotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OTcxCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UpOgotCi0yMDEzLTAzLTE1ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1
bS5vcmc+Ci0KLSAgICAgICAgUmVwbGFjZSBzdGF0aWNfY2FzdHMgd2l0aCB0byogaGVscGVyIGZ1
bmN0aW9ucy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMjQwMQotCi0gICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoZW4gQ2hlbm5leS4KLQotICAgICAg
ICB0byogaGVscGVyIGZ1bmN0aW9ucyBhcmUgcHJlZmVycmVkIG92ZXIgc3RhdGljX2Nhc3QgY2Fs
bHMgc2luY2UgdGhleQotICAgICAgICBoZWxwIHRvIGNhdGNoIGJhZCBjYXN0cyBlYXNpbHkgb24g
dGhlIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgotCi0yMDEzLTAzLTE0ICBNYW51ZWwg
UmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgotCi0gICAgICAgIEFkZCBzZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIHNldHRpbmcgdG8gV2ViQ29yZTo6UGFnZQotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NDA0Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KLQotICAgICAgICBVc2UgbmV3IHNldHRpbmdzIGZv
ciBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQgYW5kCi0gICAgICAgIHNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aXNT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKToKLQotMjAxMy0wMi0xMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBEaXNhYmxlIGRlbGV0ZSBidXR0b24g
Y29udHJvbGxlciBvbiBub24tTWFjIHBvcnRzIGFuZCBkZWxldGUgRWRpdG9yQ2xpZW50OjpzaG91
bGRTaG93RGVsZXRlSW50ZXJmYWNlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDk1MzQKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNz
b24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTMtMDItMDMgIEt3YW5n
WW9uZyBDaG9pICA8a3kwLmNob2lAc2Ftc3VuZy5jb20+Ci0KLSAgICAgICAgRml4IGJ1aWxkIHdh
cm5pbmcgYWZ0ZXIgcjE0MTQ3MwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4NzgyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFybyBIYXJhLgot
Ci0gICAgICAgIEZpeCAtV3VudXNlZC1wYXJhbWV0ZXIgYnVpbGQgd2FybmluZy4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50V2luQ0U6OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpOgot
Ci0yMDEzLTAxLTMxICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+Ci0KLSAgICAg
ICAgV2ViS2l0MjogcHJvdmlkZSBuZXcgYnVuZGxlIEFQSXMgdG8gYWxsb3cgYnVuZGxlIGNsaWVu
dHMgdG8gYmUgbm90aWZpZWQgb2YgcGFzdGVib2FyZCBhY2Nlc3MuCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgzOTYuCi0gICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8xMjkyMDQ2MT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgotCi0gICAgICAgIEFkZHMgc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViS2l0IG9mIHRo
ZSBuZXcgRWRpdG9yQ2xpZW50IG1ldGhvZHMuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRXaW5DRTo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZSk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0wMS0yNCAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2Vk
IFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTM5MDc4LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQot
MjAxMy0wMS0yMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAg
ICAgIFVzZSBhIHBsYXRmb3JvbSBzdHJhdGVneSBmb3IgbG9jYWwgc3RvcmFnZQotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjAwCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICBVcGRhdGUgZm9yIG5ldyBzdG9y
YWdlIHN0cmF0ZWd5LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVN0
b3JhZ2VTdHJhdGVneSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKToKLQotMjAxMy0w
MS0xOCAgU2Vva2p1IEt3b24gIDxzZW9ranUua3dvbkBnbWFpbC5jb20+Ci0KLSAgICAgICAgQWRk
IGV4cGxpY2l0IGtleXdvcmQgdG8gY29uc3RydWN0b3JzIGluIHBsYXRmb3JtLXNwZWNpZmljIElu
c3BlY3RvckNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA3MjU1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFybyBIYXJhLgotCi0gICAg
ICAgIEFkZCBleHBsaWNpdCBrZXl3b3JkIHRvIGNvbnN0cnVjdG9ycyB0aGF0IHRha2Ugb25lIGFy
Z3VtZW50Ci0gICAgICAgIGluIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIElu
c3BlY3RvckNsaWVudC4KLSAgICAgICAgQW5kIGZpeCBzb21lIGNvZGluZyBzdHlsZS4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChJ
bnNwZWN0b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTMtMDEtMDggIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHRoZSBQcm9wb3NlZERh
dGFiYXNlIG1lY2hhbmlzbS4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjI5Mi4KLQotICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21l
Q2xpZW50V2luQ0UpOgotCi0yMDEyLTEyLTIzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgotCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjgwODM3Nz4gTmV0d29yayBwcm9j
ZXNzIHNob3VsZCByZXNwZWN0IGNvb2tpZSBhY2NlcHQgcG9saWN5Ci0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2ODQKLQotICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmg6Ci0gICAgICAgIENvb2tpZXNTdHJhdGVneSBubyBsb25nZXIgaGFzIG5vdGlm
eUNvb2tpZXNDaGFuZ2VkKCkuIFRoaXMgcG9ydCBkaWRuJ3QgdXNlIGl0IGFueXdheS4KLQotMjAx
Mi0xMi0yMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBB
ZGQgYSBzZXBhcmF0ZSBjbGFzcyBmb3IgbmV0d29ya2luZyByZWxhdGVkIHN0b3JhZ2UKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTY3NgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6Y29va2llc0ZvckRPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
c2V0Q29va2llc0Zyb21ET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNv
b2tpZXNFbmFibGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6Z2V0UmF3Q29va2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVs
ZXRlQ29va2llKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRS5oOgotICAgICAgICBDb29raWUgZnVuY3Rpb25zIG5vdyB0YWtlIGEgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLCBub3QgYSBOZXR3b3JraW5nQ29udGV4dC4KLQotMjAxMi0xMi0xOCAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdW5uZWNlc3Nh
cnkgZnVuY3Rpb25zIGZyb20gQ29va2llc1N0cmF0ZWd5Ci0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUzNjkKLQotICAgICAgICBSZXZpZXdlZCBieSBC
cmFkeSBFaWRzb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuaDoKLQotMjAxMi0xMi0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgotCi0gICAgICAgIFJlbmFtZSBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQgdG8gY29u
dmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUxMjIKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRy
ZWFzIEtsaW5nLgotCi0gICAgICAgIFVwZGF0ZSBmb3IgV2ViQ29yZSBjaGFuZ2VzLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMTItMTUg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgotCi0gICAgICAgIFJlLWxhbmRpbmcgcGF0
Y2ggZm9yICJJbnRyb2R1Y2luZyB0aGUgRGF0YWJhc2VTdHJhdGVneSBhbmQgZGF0YWJhc2Ugc2Vy
dmVycyIuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDQ5MzQuCi0KLSAgICAgICAgTm90IHJldmlld2VkLgotCi0gICAgICAgIE1lcmdlZCBmcm9tIHIx
Mzc3NjcuIFByZXZpb3VzbHkgcmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UpOgotCi0yMDEyLTEyLTE0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MTM3NzY3LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMzc3NjcK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTA2Mgot
Ci0gICAgICAgIEJyb2tlIE1hYyBidWlsZHMuIChSZXF1ZXN0ZWQgYnkgbWxhbSBvbiAjd2Via2l0
KS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNw
cDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgot
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UpOgotCi0yMDEyLTEyLTE0ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KLQotICAgICAgICBJbnRyb2R1Y2luZyB0aGUgRGF0YWJh
c2VTdHJhdGVneSBhbmQgZGF0YWJhc2Ugc2VydmVycy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDkzNC4KLQotICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgotCi0gICAgICAgIFRoZSBkYXRhYmFzZSBzZXJ2ZXIgaXMgY3VycmVudGx5IGEg
cGxhY2Vob2xkZXIgdGhhdCBkb2VzIG5vdGhpbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6Y3JlYXRlRGF0YWJhc2VTdHJhdGVneSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFKToKLQotMjAxMi0xMi0xMSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgot
Ci0gICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnNvbGVUeXBlcyBzaG91bGQgbm90IGV4cG9zZSBN
ZXNzYWdlVHlwZSAtIGl0IHNob3VsZCBiZSBwcml2YXRlIHRvIGluc3BlY3Rvci4KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzcxCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KLQotICAgICAgICBEcm9wcyBXZWJDb3JlOjpNZXNz
YWdlVHlwZSBmcm9tIHRoZSBhZGRNZXNzYWdlVG9Db25zb2xlIG1ldGhvZC4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50V2luQ0U6OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5D
RSk6Ci0KLTIwMTItMTEtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0K
LSAgICAgICAgW1dLMl0gRm9yd2FyZCBjb29raWUgamFyIGNhbGxzIHRvIE5ldHdvcmtQcm9jZXNz
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0NTcK
LQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFOjpjb29raWVzRm9yRE9NKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpzZXRDb29raWVzRnJvbURPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6Y29va2llc0VuYWJsZWQpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpnZXRSYXdDb29raWVzKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjpkZWxldGVDb29raWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmRlbGV0ZUFsbENvb2tpZXMpOgotCi0yMDEyLTExLTI3ICBKYW1lcyBTaW1vbnNlbiAg
PHNpbW9uamFtQGNocm9taXVtLm9yZz4KLQotICAgICAgICBDb25zb2xpZGF0ZSBGcmFtZUxvYWRl
cjo6bG9hZCgpIGludG8gb25lIGZ1bmN0aW9uIHRha2luZyBhIEZyYW1lTG9hZFJlcXVlc3QKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1MQotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoK
LSAgICAgICAgKFdlYlZpZXc6OmxvYWQpOgotCi0yMDEyLTExLTI3ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTM1Nzg2LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8x
MzU3ODYKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MzM3OQotCi0gICAgICAgIEl0IG1hZGUgMyBwbHVnaW4gdGVzdHMgdGltZW91dCBvbiBzZXZlcmFs
IHBsYXRmb3JtcyAoUmVxdWVzdGVkCi0gICAgICAgIGJ5IE9zc3kgb24gI3dlYmtpdCkuCi0KLSAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmxvYWQpOgotCi0yMDEyLTEx
LTI2ICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4KLQotICAgICAgICBD
b25zb2xpZGF0ZSBGcmFtZUxvYWRlcjo6bG9hZCgpIGludG8gb25lIGZ1bmN0aW9uIHRha2luZyBh
IEZyYW1lTG9hZFJlcXVlc3QKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMjE1MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmxvYWQpOgotCi0yMDEyLTEx
LTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM1Mjk1LgotICAgICAgICBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xMzUyOTUKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMjgzNAotCi0gICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGFz
c2VydGlvbiB0byBzb21lIGxheW91dCB0ZXN0cyBvbiBjaHJvbWl1bQotICAgICAgICAoUmVxdWVz
dGVkIGJ5IGppYW5saSBvbiAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAg
ICAgICAoV2ViVmlldzo6bG9hZCk6Ci0KLTIwMTItMTEtMjAgIEphbWVzIFNpbW9uc2VuICA8c2lt
b25qYW1AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIENvbnNvbGlkYXRlIEZyYW1lTG9hZGVyOjps
b2FkKCkgaW50byBvbmUgZnVuY3Rpb24gdGFraW5nIGEgRnJhbWVMb2FkUmVxdWVzdAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTUxCi0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAg
ICAgICAoV2ViVmlldzo6bG9hZCk6Ci0KLTIwMTItMTAtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgotCi0gICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBsb2FkZXIgY3VzdG9t
aXphdGlvbi4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDI3OAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTItMTAtMjMgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgQWRkIGEgc3RyYXRlZ3kgZm9yIHNoYXJl
ZCB3b3JrZXJzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDAxNjUKLQotICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KToKLSAgICAg
ICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVTaGFyZWRXb3JrZXJTdHJhdGVneSk6
Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlVmlzaXRlZExpbmtTdHJh
dGVneSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0Uu
aDoKLQotMjAxMi0xMC0xMCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0KLSAgICAgICAg
W1dLMl0gQWN0aXZhdGUgcGx1Z2lucyB3aGVuIHVzZXIgY2xpY2tzIG9uIHNuYXBzaG90Ci0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODMyOAotICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI0MjY2ODE+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkg
RWlkc29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5oOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWNyZWF0ZVBs
dWdpbik6IFN0dWIgaW1wbGVtZW50YXRpb24gb2YgcmVjcmVhdGVQbHVnaW4oKS4KLQotMjAxMi0x
MC0wNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVu
Ym9zc2Eub3JnPgotCi0gICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGlu
IEhhc2hNYXAgaXRlcmF0b3JzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Mjc4NAotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEyLTEw
LTA0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgotCi0gICAgICAgIFN0
YW5kYXJkaXplIG9uICJmbHVzaCIgdGVybWlub2xvZ3kgZm9yIGNvbXBvc2l0aW5nIGxheWVyIGZs
dXNoaW5nL3N5bmNpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk4MzIxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgotCi0gICAg
ICAgIFJlbmFtZSBjb21wb3NpdGluZy1yZWxhdGVkIG1ldGhvZHMgdGhhdCByZWZlciB0byAic3lu
Y2luZyIgdG8gaW5zdGVhZAotICAgICAgICByZWZlciB0byAiZmx1c2hpbmciLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnRXaW5DRTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJv
bWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDktMjggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hh
aWwucG96ZG55YWtvdkBpbnRlbC5jb20+Ci0KLSAgICAgICAgQ29kZSBpbnNpZGUgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNhblNob3dNSU1FVHlwZSgpIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgc2hhcmVk
IGFtb25nIGRpZmZlcmVudCBXSyBwb3J0cwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTc1NDcKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
LgotCi0gICAgICAgIE5ld2x5IGFkZGVkIFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNhblNo
b3dNSU1FVHlwZSgpIGZ1bmN0aW9uIGlzIHVzZWQKLSAgICAgICAgaW5zaWRlIFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlKCkuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlKToKLQotMjAxMi0wOS0yNSAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1Mzk3Ci0gICAgICAgIE5lZWQgdG8gbWVyZ2UgZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0IGFuZCAKLSAgICAgICAgZGlkTmV3Rmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Ci0gICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KLSAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzEwNzkxNjgwPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCi0KLSAgICAgICAgUmVtb3ZlIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQsIAotICAgICAgICBk
aXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCwgYW5kIAotICAgICAgICBkaXNw
YXRjaERpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dC4gVGhlaXIgZnVuY3Rpb25hbGl0
eSAKLSAgICAgICAgaXMgbm93IHJlcGxhY2VkIGJ5IGRpc3BhdGNoRGlkTGF5b3V0KExheW91dE1p
bGVzdG9uZXMpCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGlkTGF5b3V0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChGcmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAxMi0wOC0yOCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNjkxNC4KLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvMTI2OTE0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NTIzOQotCi0gICAgICAgIGl0IGJyZWFrcyBldmVyeXRoaW5nIGFuZCBm
aXhlcyBub3RoaW5nIChSZXF1ZXN0ZWQgYnkgcGl6bG8gb24KLSAgICAgICAgI3dlYmtpdCkuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0g
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTIt
MDgtMjggIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KLQotICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAxMi0w
OC0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNjgzNi4KLSAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTI2ODM2Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTE2MwotCi0gICAgICAgIEJyb2tlIGFsbCBBcHBsZSBwb3J0
cywgRUZMLCBhbmQgUXQuIChSZXF1ZXN0ZWQgYnkgdGtlbnQgb24KLSAgICAgICAgI3dlYmtpdCku
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6
Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIw
MTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFA
b3BlbmJvc3NhLm9yZz4KLQotICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1
ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoK
LSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAx
Mi0wOC0xMyAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KLQotICAgICAgICBbY2hy
b21pdW1dIHJlbGVhc2UgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjptX3BsdWdpbldpZGdldCByZWZw
dHIgdXBvbiBQbHVnaW4gRG9jdW1lbnQgZGV0YWNoLgotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyODMKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KLQotICAgICAgICBDaGFuZ2UgdGhlIGNsaWVudCByZWRpcmVjdERhdGFUb1BsdWdp
biBtZXRob2QocykgdG8gZXhwZWN0IHRoZSBwb3NzaWJpbGl0eSBvZgotICAgICAgICBhIE5VTEwg
YXJndW1lbnQsIGtlZXBpbmcgZXhpc3RpbmcgYmVoYXZpb3VyIG90aGVyd2lzZS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWRpcmVjdERhdGFUb1BsdWdpbik6Ci0K
LTIwMTItMDctMjMgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+Ci0KLSAg
ICAgICAgVW5pZnkgbnVtVG91Y2hFdmVudEhhbmRsZXJzQ2hhbmdlZCBhbmQgbmVlZFRvdWNoRXZl
bnRzIGluIHRoZSBjaHJvbWUgY2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTAwNgotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3
YS4KLQotICAgICAgICBSZW1vdmUgbnVtVG91Y2hFdmVudEhhbmRsZXJzQ2hhbmdlZCBzdHViLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMi0w
Ny0xNyAgVml2ZWsgR2FsYXRhZ2UgIDx2aXZla2dhbGF0YWdlQGdtYWlsLmNvbT4KLQotICAgICAg
ICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJv
bnRlbmQoKSB0byBhY2NlcHQgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLgotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTExOTYKLQotICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgotCi0gICAgICAgIFJlZmFjdG9yaW5nIEluc3BlY3RvckNs
aWVudHMuIEluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kCi0gICAgICAgIG5v
dyByZXR1cm5pbmcgdGhlIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yQ2xpZW50V2luQ0U6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEluc3BlY3Rv
ckNsaWVudFdpbkNFKToKLQotMjAxMi0wNS0zMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNo
cm9taXVtLm9yZz4KLQotICAgICAgICBSRUdSRVNTSU9OKHIxMTc1NzIpOiBlZGl0aW5nL3NwZWxs
aW5nL3NwZWxsY2hlY2stYXN5bmMtcmVtb3ZlLWZyYW1lLmh0bWwgY3Jhc2hlcyBvbiBNYWMKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2ODU5Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2lu
Q0U6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMi0wNS0zMCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1
aWxkIGZpeCBhZnRlciByMTE1OTI2LgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0KLTIwMTIt
MDUtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAg
VW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjExNzQ3MC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRX
aW5DRSk6Ci0KLTIwMTItMDUtMTggIE1PUklUQSBIYWppbWUgPG1vcnJpdGFAZ29vZ2xlLmNvbT4K
LQotICAgICAgICBBbm90aGVyIHVucmV2aWV3ZWQgYXR0ZW1wdCB0byBmaXggYnVpbGQgYnJlYWth
Z2Ugb24gcjExNzU3Mi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpmcmFtZVdpbGxEZXRh
Y2hQYWdlKToKLQotMjAxMi0wNS0xOCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU1
MTUKLSAgICAgICAgU3RhbGUgZnJhbWUgaW4gV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVj
a1N1Y2NlZWRlZAotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudFdpbkNFOjpmcmFtZVdpbGxEZXRhY2hQYWdlKToKLQotMjAxMi0wNS0xNyAg
SGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KLQotICAgICAgICBbUmVmYWN0b3Jp
bmddIE1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBpbiBFZGl0b3I6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24gdG8gdGhlIFdlYktpdCBsYXllcgotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY1OTEKLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9z
dWtlIE5pd2EuCi0KLSAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBhIFRleHRDaGVja2VyQ2xpZW50
OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbgotICAgICAgICBmdW5jdGlv
biB0byByZW1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBmcm9tIEVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbgotICAgICAgICBmdW5jdGlvbi4KLQotICAgICAgICBObyBuZXcgdGVz
dHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6
OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKToKLSAgICAgICAgKFdlYktp
dCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAg
ICAgKEVkaXRvckNsaWVudFdpbkNFKToKLQotMjAxMi0wNS0wNCAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIERvbid0IHJlcXVpcmUgRnJhbWVMb2FkZXJDbGll
bnQgdG8gbWFudWZhY3R1cmUgYSBjb21taXREYXRhKCkgY2FsbCBmb3IgZW1wdHkgZG9jdW1lbnRz
LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU1MzMK
LQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyk6Ci0KLTIwMTItMDQt
MTggIEpvbiBIb25leWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KLQotICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFN1Ym1pdEV2ZW50KCkgc2hvdWxkIGJlIGdp
dmVuIG1vcmUKLSAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm0gYmVpbmcgc3VibWl0
dGVkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI5
NwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudCk6Ci0gICAgICAg
IFVwZGF0ZWQgbWV0aG9kIGRlY2xhcmF0aW9uLgotCi0yMDEyLTAzLTMwICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFtXaW5DRV0gQ29ycmVjdCA8d3Rm
LyouaD4gaW5jbHVkZSBwYXRocy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzEzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0K
LSAgICAgICAgTW9kaWZ5IHRoZSAjaW5jbHVkZSBkZWNsYXJhdGlvbnMgZm9yIHNldmVyYWwgV2lu
Q0UtcmVsYXRlZCBmaWxlcwotICAgICAgICBzbyB0aGF0IHRoZSB3dGYgdHlwZXMgYXJlIGluY2x1
ZGVkIHVzaW5nIHRoZSBmdWxsIHBhdGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAg
ICAgKiBXZWJWaWV3Lmg6Ci0KLTIwMTItMDMtMjggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9t
aXVtLm9yZz4KLQotICAgICAgICBSZW1vdmUgZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlIGNh
bGxiYWNrLCBzaW5jZSBubwotICAgICAgICBwb3J0IGltcGxlbWVudHMgaXQuCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjUzOQotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdCk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAoRnJh
bWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDMtMTkgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KLQotICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgIm1hZ2ljIiBpZnJhbWUK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTkwCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgUmVtb3ZlIEZyYW1l
TG9hZGVyQ2xpZW50IG1ldGhvZHMgdGhhdCBubyBsb25nZXIgZXhpc3QuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgot
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDMtMTMgIEpvbiBMZWUg
IDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFNlcGFyYXRlIE5PVElGSUNBVElPTlMgYW5k
IExFR0FDWV9OT1RJRklDQVRJT05TCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MDkyMgotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTEwMzUwODI+Ci0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgSmlhbiBMaS4KLQotICAgICAgICBZb3UgY2FuIGluY2x1ZGUg
ZWl0aGVyIE5PVElGSUNBVElPTlMgb3IgTEVHQUNZX05PVElGSUNBVElPTlMgYW5kIGhhdmUgYSBj
b21wbGV0ZSBBUEkuCi0gICAgICAgIExFR0FDWV9OT1RJRklDQVRJT05TIHNob3VsZCBjb3ZlciBh
bGwgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uYWxpdHksIGFuZCBOT1RJRklDQVRJT05TIHdpbGwg
Y292ZXIgdGhlCi0gICAgICAgIG5ldyBBUEkuIFRoZXJlZm9yZSwgQVBJcyB0aGF0IGFyZSBjb21t
b24gYmV0d2VlbiB0aGUgdHdvIHdpbGwgaGF2ZToKLSAgICAgICAgI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0KLSAgICAgICAgVGhpcyBw
YXRjaCBpbml0aWFsbHkgc2V0cyBib3RoIHRvIGJlIGV4YWN0bHkgdGhlIHNhbWUuIEFzIG90aGVy
IGJ1Z3Mgd2l0aCBwYXRjaGVzIGJlZ2luIHRvIG1pZ3JhdGUgdG8KLSAgICAgICAgdGhlIG5ldyBB
UEksIHRoZSBkZWZpbmVzIHdpbGwgYmVnaW4gdG8gc3BsaXQuIFRoaXMgYWxsb3dzIHBvcnRzIHRv
IGRlY2lkZSB3aGljaCBzZXQgb2YgQVBJcyB0byBpbmNsdWRlLgotCi0gICAgICAgIFVwZGF0ZSBl
dmVyeXRoaW5nIHRvIGJlICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FD
WV9OT1RJRklDQVRJT05TKQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDMtMTMgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4gJiYgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWlu
QGFwcGxlLmNvbT4KLQotICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShDTElFTlRfQkFTRURf
R0VPTE9DQVRJT04pCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODg1MwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNF
KToKLQotMjAxMi0wMy0wOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0KLSAgICAgICAg
UmVuYW1lIE5vdGlmaWNhdGlvblByZXNlbnRlciB0byBOb3RpZmljYXRpb25DbGllbnQKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDg4Ci0gICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xMDk2NTU1OD4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50YXJv
IEhhcmEuCi0KLSAgICAgICAgUmVmYWN0b3IgdG8gdXNlIHJlbmFtZWQgV2ViQ29yZTo6Tm90aWZp
Y2F0aW9uQ2xpZW50LgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
Lmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDItMjYgIEhhamltZSBN
b3JyaXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgTW92ZSBDaHJvbWVDbGll
bnQ6OnNob3dDb250ZXh0TWVudSgpIHRvIENvbnRleHRNZW51Q2xpZW50Ci0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQyNwotCi0gICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAyLTI0ICBT
aGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KLQotICAgICAgICBTcGVsbENo
ZWNrUmVxdWVzdCBuZWVkcyB0byBrbm93IHRoZSBjb250ZXh0IHdoZXJlIHRoZSBzcGVsbGNoZWNr
IGhhcHBlbmVkLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzkzMjAKLQotICAgICAgICBSZXZpZXdlZCBieSBIYWppbWUgTW9yaXRhLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50V2luQ0U6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMi0wMi0y
MyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJl
dmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTA4NDYyLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEVkaXRvckNsaWVudFdpbkNF
KToKLQotMjAxMi0wMi0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAg
ICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyB1c2VzIG9mIENTU1N0eWxlRGVjbGFyYXRpb24gaW4g
RWRpdG9yCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODkzOQotCi0gICAgICAgIFJldmlld2VkIGJ5IEVucmljYSBDYXN1Y2NpLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkQXBwbHlTdHlsZSk6Ci0KLTIwMTItMDItMjIgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIHRoZSByZW1haW5p
bmcgdXNlcyBvZiBDU1NTdHlsZURlY2xhcmF0aW9uIGluIEVkaXRvcgotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5MzkKLQotICAgICAgICBSZXZpZXdl
ZCBieSBFbnJpY2EgQ2FzdWNjaS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnNob3Vs
ZEFwcGx5U3R5bGUpOgotCi0yMDEyLTAyLTIwICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KLQotICAgICAgICBHZXQgcmlkIG9mIHRoZSBMb2NhbGl6YXRpb25TdHJhdGVn
eQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgzMjQK
LQotICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgIFJlbW92ZSBhIHVz
ZWxlc3MgI2luY2x1ZGUgb2YgTG9jYWxpemF0aW9uU3RyYXRlZ3kuaC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTItMDItMTUgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjEwNzYwNi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRSk6Ci0KLTIwMTItMDItMTUgIFNhZHJ1bCBIYWJpYiBDaG93ZGh1cnkgIDxzYWRy
dWxAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIE5vdGlmeSBDaHJvbWVDbGllbnQgd2hlbiB0b3Vj
aC1ldmVudCBoYW5kbGVycyBhcmUgaW5zdGFsbGVkL3JlbW92ZWQuCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQ0MAotCi0gICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlciBhbmQgUnlvc3VrZSBOaXdhLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
V2luQ0U6Om51bVRvdWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQpOgotCi0yMDExLTEyLTE5ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgTW9yZSBQbGF0Zm9ybUV2ZW50IGNs
ZWFudXAKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0
ODMxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAgICAgICAqIFdl
YlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudCk6Ci0gICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IG5hbWVzLCBhY2Nlc3Mgc3R5bGUuCi0KLTIwMTEtMTItMTYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIHJlZ2lzdGVy
Q29tbWFuZEZvcihVbmRvfFJlZG8pIHRvIHJlZ2lzdGVyKFVuZG98UmVkbylTdGVwCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OAotCi0gICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6
cmVnaXN0ZXJVbmRvU3RlcCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpy
ZWdpc3RlclJlZG9TdGVwKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5oOgotCi0yMDExLTEyLTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAg
ICAgICAgR2l2ZSBQbGF0Zm9ybUV2ZW50cyBhIGJhc2UgY2xhc3MKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0Njg1Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgIEFkZCBhIGJhc2UgY2xhc3MgZm9yIFBsYXRm
b3JtTW91c2VFdmVudCwgUGxhdGZvcm1LZXlib2FyZEV2ZW50LCBQbGF0Zm9ybVdoZWVsRXZlbnQK
LSAgICAgICAgYW5kIFBsYXRmb3JtR2VzdHVyZUV2ZW50IGFuZCBtb3ZlIFR5cGUgZW51bWVyYXRp
b24gYW5kIG1vZGlmaWVycyBkb3duIHRvIGl0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5D
RTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgotICAgICAgICAqIFdlYlZpZXcuY3BwOgot
ICAgICAgICAoV2ViVmlldzo6aGFuZGxlS2V5RG93bik6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5k
bGVLZXlQcmVzcyk6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVLZXlVcCk6Ci0KLTIwMTEtMTIt
MTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgT25seSBFZGl0
Q29tbWFuZENvbXBvc2l0aW9uIHNob3VsZCBpbXBsZW1lbnQgdW5hcHBseSBhbmQgcmVhcHBseQot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0OTAKLQot
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
V2luQ0U6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnRXaW5DRTo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyk6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMi0xNCAgSmluZyBaaGFvICA8amlu
Z3poYW9AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIE9wZW5pbmcgdHdvIHBvcHVwIG1lbnVzIGJ5
IGRpc3BhdGNoRXZlbnQoKSBtYWtlcyBwcm9ibGVtcy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMzA0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0Uu
Y3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aGFzT3BlbmVkUG9wdXAp
OiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDogT3ZlcnJpZGVzIGhhc09wZW5lZFBvcHVwKCkuCi0KLTIwMTEtMTEtMzAgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIGFuIHVubmVl
ZGVkIGFyZ3VtZW50IGZyb20gRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ4NgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZG93bmxvYWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgVXBkYXRlZCBmb3IgdGhlIGNoYW5nZS4KLQotMjAxMS0x
MS0yNiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMTE5My4KLSAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTAxMTkzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MzE1OAotCi0gICAgICAgIEJyZWFrcyBXaW5kb3dzIGFuZCBR
dCBtaW5pbWFsLiAoUmVxdWVzdGVkIGJ5IHBmZWxkbWFuIG9uCi0gICAgICAgICN3ZWJraXQpLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEt
MjIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgotCi0gICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHJlbW92ZSBJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCBmcm9tIHRoZSBwcm90b2Nv
bC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTM3
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yQ2xpZW50V2luQ0U6OmJyaW5nRnJvbnRlbmRUb0Zyb250KToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTIxICBBbmRy
ZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNF
IGJ1aWxkIGZpeCBhZnRlciByMTAwODc0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKLQotICAgICAgICAgICAgQWRkIFdlYkNvcmU6OkZyYW1lKiBwYXJh
bWV0ZXIgdG8gcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpLgotCi0yMDExLTExLTE1ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgSG9zdFdpbmRvdyBz
Y3JlZW5Ub1dpbmRvdy93aW5kb3dUb1NjcmVlbiBzaG91bGQgYmUgc2NyZWVuVG9Sb290Vmlldy9y
b290Vmlld1RvU2NyZWVuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MjM5NwotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpyb290Vmlld1RvU2NyZWVuKToKLSAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjcmVlblRvUm9vdFZpZXcpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEtMTQgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBIb3N0V2luZG93IGludmFs
aWRhdGlvbiBmdW5jdGlvbnMgc2hvdWxkIHVzZSByb290IHZpZXcgY29vcmRpbmF0ZXMKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzM4Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OmludmFsaWRhdGVSb290Vmlldyk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyk6Ci0gICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKToKLSAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjcm9sbCk6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0wNCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBbV0lOQ0VdIFVzZSBkZWZhdWx0
IExvY2FsaXphdGlvblN0cmF0ZWd5Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTQ5NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0K
LSAgICAgICAgVXNlIExvY2FsaXphdGlvblN0cmF0ZWd5IGZyb20gV2ViQ29yZSBpbnN0ZWFkIG9m
IHVzaW5nIGEgY29weSBvZiB0aGUgc3RyaW5ncyBpbiBXZWJLaXQuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMS0xMS0wMiAgVG9tIFNl
cGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KLQotICAgICAgICBYU1NBdWRpdG9yIGlzIHNpbGVu
dAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5NzMK
LQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpZERldGVjdFhTUyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTAyICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KLQotICAgICAgICA8aW5wdXQ9ZmlsZSBtdWx0aXBsZT4gZGVmYXVsdCB0
ZXh0IHVzZXMgc2luZ3VsYXIgaW5zdGVhZCBvZiBwbHVyYWwKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzE5Ci0gICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8xMDM3OTAyMT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAg
KFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpmaWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwp
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0K
LTIwMTEtMTAtMjggIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+Ci0KLSAg
ICAgICAgUmVuYW1lIGEgbnVtYmVyIG9mIG1ldGhvZHMgbWVudGlvbmluZyBKYXZhU2NyaXB0IHRv
IGp1c3QgU2NyaXB0IGluc3RlYWQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMTA1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQot
ICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6V2ViVmlldyk6Ci0KLTIw
MTEtMTAtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjk1NjA0LgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmlzTGlua1Zpc2l0ZWQpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmFkZFZpc2l0ZWRMaW5rKToKLQotMjAxMS0wOS0yNCAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgotCi0gICAgICAgIEFsd2F5cyBlbmFibGUgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY4NzY3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0y
MDExLTA5LTIxICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgotCi0gICAg
ICAgIFtRdF0gUmVtb3ZlIFF0IHNwZWNpZmljIGNvZGUgZnJvbSBjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3
MDIKLQotICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6YWRkVmlzaXRlZExpbmspOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMDktMTcgIE1paGFp
IFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgRnJhbWVMb2FkZXJD
bGllbnQgQmFja0ZvcndhcmRMaXN0LXJlbGF0ZWQgbWV0aG9kcyBhcmUgdW5zdWVkCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODI5MwotCi0gICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJlbW92ZSBGcmFtZUxvYWRlckNs
aWVudCBtZXRob2RzIHRoYXQgd2VyZSBhZGRlZCBieSByNTE2MjksIHNpbmNlIG9ubHkgICAgICAg
IAotICAgICAgICB0aGUgb2xkIChzaW5jZS1kZWxldGVkKSBBbmRyb2lkIHBvcnQgbmVlZGVkIHRo
ZW0uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0K
LTIwMTEtMDktMTUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZW5hbWUgRU5BQkxFKERBVEFCQVNFKSB0byBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyMDUKLQotICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5oOgotCi0yMDExLTA4LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgot
Ci0gICAgICAgIFdpbkNFIGJ1aWxkIGZpeCBhdHRlbXB0IGFmdGVyIHI5NDA4MC4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjcm9sbFJlY3RJbnRvVmlldyk6Ci0KLTIwMTEtMDgtMzAg
IEthdXN0dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+Ci0KLSAgICAgICAg
VGhlIHVudXNlZCBTY3JvbGxWaWV3KiBhcmd1bWVudCBjYW4gYW5kIHNob3VsZCBiZSByZW1vdmVk
IGZyb20KLSAgICAgICAgc2Nyb2xsUmVjdEludG9WaWV3LgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcxMTcKLQotICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
Lmg6Ci0KLTIwMTEtMDgtMTcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgotCi0gICAg
ICAgIE1ha2UgV2ViQ29yZSBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRldmljZSBzY2FsZSBm
YWN0b3IKLQotICAgICAgICBGaXhlcyA8aHR0cDovL3dlYmtpdC5vcmcvYi82NjQxMz4gV2ViQ29y
ZSByZXF1aXJlcyBldmVyeSBXZWJLaXQgcG9ydCB0byBrZWVwIHRyYWNrIG9mIHRoZQotICAgICAg
ICBkZXZpY2Ugc2NhbGUgZmFjdG9yCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgUmVtb3Zl
ZCBkZXZpY2VTY2FsZUZhY3Rvci4KLQotMjAxMS0wOC0xNSAgRG1pdHJ5IFRpdG92ICA8ZGltaWNo
QGNocm9taXVtLm9yZz4KLQotICAgICAgICBGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNmZXJMb2Fk
aW5nUmVzb3VyY2VGcm9tUGFnZSBkb2VzIG5vdCBoYXZlIGVub3VnaCBwYXJhbWV0ZXJzCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE2NQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjp0cmFuc2ZlckxvYWRpbmdSZXNvdXJjZUZyb21QYWdlKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDgtMTAg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgotCi0gICAgICAgIENsZWFyIHVwIHNjYWxl
IGZhY3RvciB0ZXJtaW5vbG9neQotCi0gICAgICAgIFdlYktpdCBieSBhbmQgbGFyZ2UgZGVhbHMg
d2l0aCB0d28gc2NhbGUgZmFjdG9yczogb25lIGludHJpbnNpYyB0byB0aGUgZGV2aWNlIG9uIHdo
aWNoIHRoZQotICAgICAgICBzb2Z0d2FyZSBpcyBydW5uaW5nLCBhbmQgb25lIHRoYXQgaXMgcGVy
LVBhZ2UgYW5kIGNhbiBiZSBjb250cm9sbGVkIHZpYSBBUEkgY2FsbHMuIFRoaXMKLSAgICAgICAg
cGF0Y2ggbmFtZXMgdGhlIGZvcm1lciAiZGV2aWNlU2NhbGVGYWN0b3IiIGFuZCB0aGUgbGF0dGVy
ICJwYWdlU2NhbGVGYWN0b3IiLCBhbmQgbWFrZXMgdGhlCi0gICAgICAgIGNvZGUgdXNlIHRob3Nl
IG5hbWVzLiBJdCBzaG91bGQgaW50cm9kdWNlIG5vIGJlaGF2aW9yIGNoYW5nZXMuCi0KLSAgICAg
ICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTU3ODc+IFdlYktpdCB1c2VzIG11bHRpcGxl
IGNvbmZsaWN0aW5nIG5hbWVzIHRvIHJlZmVyIHRvIHRoZQotICAgICAgICBkZXZpY2Ugc2NhbGUg
ZmFjdG9yCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDgtMDMgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3Zl
IE5vZGUgcGFyYW1ldGVyIGZyb20gdGhlIEluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0Ci0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU0OQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckNsaWVudFdpbkNFOjpoaWdobGlnaHQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDctMjYgIFNhZHJ1bCBIYWJpYiBDaG93ZGh1cnkg
IDxzYWRydWxAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEFkZCBzdXBwb3J0IGZvciBkb3dubG9h
ZD0nZmlsZW5hbWUnIGF0dHJpYnV0ZSBpbiBhbmNob3JzLgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1ODAKLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnN0YXJ0
RG93bmxvYWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMS0wNy0xNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgotCi0g
ICAgICAgIFJFR1JFU1NJT046IE1vdXNlIGN1cnNvciBkb2VzbuKAmXQgaGlkZSB3aGVuIGZ1bGwg
c2NyZWVuIHZpZGVvIEhVRCBoaWRlcwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ2MTUKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNz
b24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMpOiBBZGRlZCB0aGlzIHN0dWIuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVj
a0B3ZWJraXQub3JnPgotCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRlIHNob3VsZCBu
b3QgaW1tZWRpYXRlbHkgZmFpbCB3aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVvdGEKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTc3Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50V2luQ0U6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDYtMzAgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AZ29vZ2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50
IFRhbXVyYS4KLQotICAgICAgICBDaGFuZ2UgdGhlIGxhYmVsIG9mIGFuIEhUTUw1IGZpbGUgY2hv
b3NlciBidXR0b24gdG8gIkNob29zZSBGaWxlcyIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjQ1Ci0KLSAgICAgICAgV2Ugc2hvdWxkIG5vdGlmeSBj
YXBhYmlsaXR5IG9mIG11bHRpcGxlIGZpbGVzIHRvIHVzZXJzLgotCi0gICAgICAgIFRlc3Q6IGZh
c3QvZm9ybXMvaW5wdXQtZmlsZS1sYWJlbC5odG1sCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCk6IFVwZGF0ZWQgdGhlIGRlc2NyaXB0
aW9uIGZvciAiQ2hvb3NlIEZpbGUiLgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZUZpbGVzTGFiZWwpOiBSZXR1cm5zIGEgIkNob29zZSBG
aWxlcyIgbGFiZWwuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuaDoKLQotMjAxMS0wNi0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjg5MjkzLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgotCi0yMDExLTA2LTE4
ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgU2VwYXJhdGUgY29uY2VybnMgb2YgbG9h
ZGluZyBmaWxlIGljb25zIGFuZCBjaG9vc2luZyBmaWxlcy4KLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTMxCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dFdpbkNFOjpsb2FkSWNvbkZvckZpbGVzKTogUmVuYW1lZC4KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA2LTEyICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtv
di4KLQotICAgICAgICBSZW5hbWUgRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdEZvclBvbGlj
eUNoYW5nZUVycm9yIHRvIHVzZSB0aGUgcGFzdCB0ZW5zZQotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1MTYKLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjppbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDUt
MTMgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KLQotICAgICAgICBDYW4ndCBob3Jpem9udGFsbHkgc2Nyb2xsIGlmcmFtZXMg
YW5kIG92ZXJmbG93IGJlY2F1c2Ugd2hlZWwgZXZlbnRzIGFyZSBhbHdheXMgYWNjZXB0ZWQKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzc5Ci0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKTogRGVm
YXVsdCBpbXBsIG9mIG5ldyBDaHJvbWVDbGllbnQgbWV0aG9kCi0gICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudFdpbkNFOjpudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKTogRGVmYXVsdCBp
bXBsIG9mIG5ldyBDaHJvbWVDbGllbnQgbWV0aG9kCi0KLTIwMTEtMDUtMDUgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
Ci0KLSAgICAgICAgUmVuYW1lIFNlbGVjdGlvbkNvbnRyb2xsZXIgdG8gRnJhbWVTZWxlY3Rpb24K
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjM0Ci0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6
Ci0KLTIwMTEtMDUtMDQgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9yZz4KLQotICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIEV4cG9zZSBXZWJWaWV3IGRpcmVj
dGx5IHRocm91Z2ggQ2hyb21lQ2xpZW50LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDk5MDIKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjp3ZWJW
aWV3KToKLQotMjAxMS0wNS0wNCAgVGFvIEJhaSAgPG1pY2hhZWxiYWlAY2hyb21pdW0ub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KLQotICAgICAgICBQb3B1bGF0ZSB0
b3VjaC1pY29uIHVybCB0byBGcmFtZUxvYWRlckNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkxNDMKLQotICAgICAgICBSZXNwZWN0IHRoZSBp
bnRlcmZhY2UgY2hhbmdlIGluIEZyYW1lTG9hZGVyQ2xpZW50LgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNS0wMSAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBbV0lOXSBV
bnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHI4NTQzNC4KLQotICAgICAgICAqIFdlYlZpZXcuY3Bw
OgotICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgotCi0yMDExLTA0LTIxICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByODQ1
NzQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpjYW5Db3B5Q3V0KToKLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhblBhc3RlKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTA0LTE5ICBWc2V2b2xvZCBWbGFz
b3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZl
bGRtYW4uCi0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogUmVuYW1lIGxlbmd0aFJlY2VpdmVkIHRv
IGVuY29kZWREYXRhTGVuZ3RoL2RhdGFMZW5ndGgKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODgzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDQtMDQgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgot
Ci0gICAgICAgIFtSZWZhY3RvcmluZ10gU3BlbGxDaGVja2luZ1Jlc3VsdCBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCBUZXh0Q2hlY2tpbmdSZXN1bHQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MDg1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgotCi0yMDExLTA0LTA0ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4u
Ci0KLSAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0Mik6IENhcHMtTG9jayBpbmRpY2F0b3Igc29t
ZXRpbWVzIGRvZXNuJ3QgYXBwZWFyIGluIFdlYktpdDIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjMwCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84
NzgwOTg5PgotCi0gICAgICAgICogV2ViVmlldy5jcHA6IChXZWJWaWV3OjpoYW5kbGVLZXlEb3du
KTogTW92ZWQgQ2FwcyBMb2NrIGhhbmRsaW5nIGZyb20gV2ViS2l0cyB0byBXZWJDb3JlLAotICAg
ICAgICBiZWNhdXNlIFdlYktpdCBzaG91bGRuJ3QgYmUgc21hcnQuCi0KLTIwMTEtMDMtMzEgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCBXaW5DRSBidWlsZCBmaXggZm9yIHI4MjU4MC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDogU3RyaW5nV2l0aERpcmVjdGlvbiBpcyBpbiBXZWJD
b3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmQgbm90IGluIFdURiBuYW1lc3BhY2UuCi0KLTIwMTEtMDMtMzEgIEV2YW4gTWFydGluICA8ZXZh
bkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAg
ICAgICAgPHRpdGxlPiBzaG91bGQgc3VwcG9ydCBkaXIgYXR0cmlidXRlCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDk2MQotCi0gICAgICAgIFVwZGF0
ZSB0byBuZXcgRnJhbWVMb2FkZXJDbGllbnQgaW50ZXJmYWNlLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKToKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0VGl0bGUpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0yNyAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgIFtXSU5DRV0gVXNlIGEgYXBwcm9wcmlhdGUgdXNl
ciBhZ2VudCBzdHJpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTc1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dXNl
ckFnZW50KToKLQotMjAxMS0wMy0yNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeC4KLQotICAgICAgICAq
IENNYWtlTGlzdHNXaW5DRS50eHQ6IEFkZGVkIG1pc3NpbmcgaW5jbHVkZSBkaXJlY3RvcnkuCi0K
LTIwMTEtMDMtMjUgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgotCi0gICAgICAgIFJFR1JFU1NJT04gKHI3MDc0OCk6
IGxhdGVzdCBuaWdodGx5IGJ1aWxkcyBraWxscyBBQ19RdWlja1RpbWUuanMKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MDE2Ci0KLSAgICAgICAgVXBk
YXRlIG9iamVjdENvbnRlbnRUeXBlKCkgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIHRoZQotICAg
ICAgICBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzIGZsYWcuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b2JqZWN0Q29udGVudFR5cGUpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0yNCAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjgxOTE2IGFuZCByODE5MTcuCi0gICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzgxOTE2Ci0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzgxOTE3Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA3MQotCi0gICAgICAgIGJyb2tlIGEgdGVzdCBvbiBwbGF0Zm9ybXMgdGhh
dCBkbyBub3QgaGF2ZSBRdWlja1RpbWUgaW5zdGFsbGVkCi0gICAgICAgIChSZXF1ZXN0ZWQgYnkg
ZXN0ZXMgb24gI3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6b2JqZWN0Q29udGVudFR5cGUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0yNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBs
ZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgUkVH
UkVTU0lPTiAocjcwNzQ4KTogbGF0ZXN0IG5pZ2h0bHkgYnVpbGRzIGtpbGxzIEFDX1F1aWNrVGlt
ZS5qcwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkw
MTYKLQotICAgICAgICBVcGRhdGUgb2JqZWN0Q29udGVudFR5cGUoKSBpbXBsZW1lbnRhdGlvbiB0
byBoYW5kbGUgdGhlCi0gICAgICAgIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMgZmxhZy4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvYmplY3RDb250ZW50VHlw
ZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgot
Ci0yMDExLTAzLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgIFJlcGxhY2UgV2ViS2l0MidzIGRl
Y2lkZVBvbGljeUZvck1JTUVUeXBlIHdpdGggZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODI3Ci0KLSAgICAg
ICAgUmVuYW1lZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1F
VHlwZSB0byBkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlCi0gICAgICAgIGFuZCBwYXNz
IHRoZSBlbnRpcmUgcmVzcG9uc2UsIGluc3RlYWQgb2YganVzdCB0aGUgTUlNRVR5cGUuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JSZXNwb25zZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotCi0yMDExLTAzLTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgotCi0gICAgICAgIFJlbW92aW5nIGFuIGluY2x1ZGUgb2YgV2ViQ29yZUtleWJvYXJkVUlNb2Rl
LmggdGhhdCBJdmUganVzdCBhZGRlZC4gSXQncyBhbHJlYWR5IGluY2x1ZGVkCi0gICAgICAgIHZp
YSBDaHJvbWVDbGllbnQuaAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0wMy0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBSRUdSRVNT
SU9OIChXZWJLaXQyKTogVGFiIGtleXMgbm8gbG9uZ2VyIG9ic2VydmUgRnVsbCBLZXlib2FyZCBB
Y2Nlc3MKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjMzCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTYzMDIzPgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOiAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6a2V5Ym9hcmRVSU1vZGUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgIEltcGxlbWVudCBrZXlib2FyZFVJTW9kZSgpIGluc3RlYWQgb2Yg
dGFic1RvTGlua3MoKS4gTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNpbmNlCi0gICAgICAg
IHRoaXMgcGxhdGZvcm0gZG9lc24ndCBvYnNlcnZlIG9yIGhhdmUgZnVsbCBrZXlib2FyZCBhY2Nl
c3Mgc3RhdGUuCi0KLTIwMTEtMDMtMDIgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBw
bGUuY29tPgotCi0gICAgICAgIFdpbkNFIGJ1aWxkIGZpeC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6IEFkZCBhIG5lZWRlZCBpbmNsdWRlLgot
Ci0yMDExLTAzLTAyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KLQot
ICAgICAgICBXaW5DRSBidWlsZCBmaXguIEhhdmUgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UgaW5o
ZXJpdCBmcm9tIENvb2tpZXNTdHJhdGVneSwKLSAgICAgICAgYW5kIGltcGxlbWVudCB0aGUgbmVl
ZGVkIG1ldGhvZHMuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlQ29v
a2llc1N0cmF0ZWd5KToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpub3RpZnlD
b29raWVzQ2hhbmdlZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuaDoKLQotMjAxMS0wMi0yOCAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBSZW1vdmUgdGhl
IHN1cHBvcnQgb2YgRnJhbWU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBpdHMgZGVwZW5kZW5jaWVz
LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTIK
LQotICAgICAgICBSZW1vdmUgdGhlIFdlYktpdCBzaWRlIGltcGxlbWVudGF0aW9uLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDItMTkgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQ
YXJwYXJpdGEuCi0KLSAgICAgICAgRW5zdXJlIGxvYWRpbmcgaGFzIHN0b3BwZWQgaW4gSGlzdG9y
eUNvbnRyb2xsZXI6OmdvVG9JdGVtCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDUxNwotCi0gICAgICAgIEFkZCBhIEZyYW1lTG9hZGVyQ2xpZW50IGNh
bGxiYWNrIGZvciB3aGV0aGVyIHRvIHN0b3AgbG9hZGluZyBiZWZvcmUgZ29Ub0l0ZW0uCi0KLSAg
ICAgICAgVGVzdDogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ZvcndhcmQtdG8tZnJhZ21lbnQtZmly
ZXMtb25sb2FkLmh0bWwKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpz
aG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKTogQWRkZWQuCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTEwICBMdWl6IEFn
b3N0aW5pICA8bHVpei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAgSFRNTDUgPGRldGFpbHM+IGFuZCA8c3VtbWFyeT46
IGxvY2FsaXplZCB0ZXh0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDI2MAotCi0gICAgICAgIFRoZSBtZXRob2QgZGVmYXVsdERldGFpbHNTdW1tYXJ5
VGV4dCB3YXMgYWRkZWQgdG8gTG9jYWxpemF0aW9uU3RyYXRlZ3kgY2xhc3MuIEl0IGlzIHVzZWQg
dG8KLSAgICAgICAgcHJvdmlkZSB0aGUgZGVmYXVsdCBsYWJlbCB0byBiZSB1c2VkIGJ5IGEgPGRl
dGFpbHM+IHRhZyB0aGF0IGhhcyBubyA8c3VtbWFyeT4gY2hpbGQuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6ZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMS0wMS0yNiAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVmYWN0b3Jpbmc6IEV4dHJhY3QgVGV4dENoZWNr
ZXJDbGllbnQgZnJvbSBFZGl0b3JDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUzMjEzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6dGV4
dENoZWNrZXIpOgotCi0yMDExLTAyLTA3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgQWRkIEVkaXRv
ckNsaWVudCBjYWxsYmFja3MgdG8gb3ZlcnJpZGUgaXNET01QYXN0ZUFsbG93ZWQgYW5kIGphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUyNDE3Ci0KLSAgICAgICAgQWRkZWQgdHdvIGNhbGxiYWNrIGZ1bmN0
aW9ucywgY2FuQ29weUN1dCBhbmQgY2FuUGFzdGUgdG8gRWRpdG9yQ2xpZW50LiBUaGV5IGFyZSBj
dXJyZW50bHkKLSAgICAgICAgbm90IGltcGxlbWVudGVkLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRXaW5DRTo6Y2FuQ29weUN1dCk6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRXaW5DRTo6Y2FuUGFzdGUpOiBBZGRlZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICBV
cGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyk6Ci0KLTIwMTEtMDItMDggIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
LQotICAgICAgICBSZW1vdmUgb3JwaGFuIGNvZGUgZnJvbSBvbGQgcGFyc2VyCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzk4NAotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDItMDcgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBBZGFtIFJvYmVuIGFuZCBE
YXJpbiBBZGxlci4KLQotICAgICAgICBXZWJLaXQyOiBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgb24g
V2luZG93cy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyNzc1Ci0KLSAgICAgICAgUmVtb3ZlZCBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rIGZyb20gRHJh
Z0NsaWVudC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDIt
MDYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgotCi0gICAgICAgIFtXSU5DRV0gRnJhbWVMb2FkZXJD
bGllbnQgY2FsbHMgbG9hZFVSTEluQ2hpbGRGcmFtZSBvbiB0aGUgY2hpbGQncyBmcmFtZSBsb2Fk
ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk2
Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmNyZWF0ZUZyYW1l
KTogVXNlIGNvcmVGcmFtZSBpbnN0ZWFkIG9mIGNoaWxkRnJhbWUuCi0KLTIwMTEtMDItMDMgIEFk
YW0gTGFuZ2xleSAgPGFnbEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KLQotICAgICAgICBQbHVtYiBtaXhlZCBzY3JpcHQgVVJMIHRvIEZyYW1lTG9hZGVy
Q2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjM4NAotCi0gICAgICAgIFJlZ3Jlc3Npb25zIGNvdmVyZWQgYnkgaHR0cC90ZXN0cy9zZWN1cml0
eS9taXhlZENvbnRlbnQvKgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpZFJ1bkluc2VjdXJlQ29udGVudCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTAyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGZv
ciByNzczOTguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OnBh
aW50KToKLQotMjAxMS0wMS0yOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgPHNlbGVjdD4gY2FuJ3Qg
ZGlzcGxheSByaWdodC10by1sZWZ0IChydGwpIGxhbmd1YWdlcwotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3ODUKLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50V2luQ0U6OnNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24p
OiBBZGRlZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgot
Ci0yMDExLTAxLTI1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAgW1dJTkNFXSBFbnN1cmUg
bGF5b3V0ZWQgZnJhbWUgd2hlbiBwYWludGluZwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxMDgKLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAg
ICAgICAoV2ViVmlldzo6cGFpbnQpOgotCi0yMDExLTAxLTA0ICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKTog
QWRkZWQgbWlzc2luZyBzZW1pY29sb24uCi0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDEwLTEyLTI5ICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4IGZvciBXaW5DRSBhZnRlciByNzM4MDIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
b250ZXh0TWVudUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVD
bGllbnRXaW5DRTo6Y3VzdG9taXplTWVudSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29u
dGV4dE1lbnVDbGllbnRXaW5DRS5oOgotCi0yMDEwLTEyLTIyICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAg
V2ViS2l0MiBuZWVkcyB0byBtaXJyb3IgdGhlIGZyYW1lIHRyZWUgaW4gdGhlIFVJUHJvY2Vzcwot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1NDYKLQot
ICAgICAgICAtIEFkZCBjbGllbnQgZnVuY3Rpb25zIHRvIG5vdGlmeSB0aGF0IGEgZnJhbWUgaGFz
IGJlZW4gYWRkZWQgb3IKLSAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIHBhZ2UgY2FjaGUuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkU2F2ZVRvUGFnZUNhY2hl
KToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkUmVzdG9yZUZy
b21QYWdlQ2FjaGUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLQotMjAxMC0xMi0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICBFZGl0b3IuaCBk
b2Vzbid0IG5lZWQgdG8gaW5jbHVkZSBTZWxlY3Rpb25Db250cm9sbGVyLmgKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDQxCi0KLSAgICAgICAgUmVu
YW1lZCBTZWxlY3Rpb25Db250cm9sbGVyOjpFRGlyZWN0aW9uIHRvIFNlbGVjdGlvbkRpcmVjdGlv
bi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2
ZW50KToKLQotMjAxMC0xMC0yOCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4K
LQotICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgotCi0gICAgICAgIHNwZWxsY2hlY2sg
ZG9lcyBub3QgY2hlY2sgcGFzdGVkIHRleHQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQwMDkyCi0KLSAgICAgICAgQWRkZWQgYSBzdHViIGltcGxlbWVt
bnRhdGlvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgotCi0yMDEwLTEyLTA3ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
LQotICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzMzOTIuCi0gICAgICAgIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzczMzkyCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQotCi0gICAgICAgIFRoaXMgY29tbWl0IGNh
dXNlZCBjcmFzaGVzIG9uIHRoZSBHVEsrIGJvdHMKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEwLTEyLTA2ICBOYXRlIENoYXBp
biAgPGphcGhldEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KLQotICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyk6Ci0KLTIwMTAtMTIt
MDYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICBbV0lOQ0VdIEFkZCBidWlsZCBzeXN0
ZW0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTIy
Ci0KLSAgICAgICAgKiBDTWFrZUxpc3RzV2luQ0UudHh0OiBBZGRlZC4KLQotMjAxMC0xMi0wMSAg
SmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KLQotICAgICAgICBTdXBwb3J0IG11bHRpcGxlIGNvcnJlY3Rpb24gY2FuZGlkYXRlcyBwYW5l
bCBmb3IgbWlzc3BlbGxlZCB3b3JkIG9uIE1hYyBPUyBYLgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAxMzcKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzg1NjgwNTk+Ci0KLSAgICAgICAgQWRvcHRlZCBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlIGRlZmlu
ZWQgaW4gYmFzZSBjbGFzcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmdldEd1ZXNz
ZXNGb3JXb3JkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5o
OgotCi0yMDEwLTExLTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAgW1dJTkNFXSBBZGQg
V2ViVmlldwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTAyMTYKLQotICAgICAgICAqIFdlYlZpZXcuY3BwOiBBZGRlZC4KLSAgICAgICAgKiBXZWJWaWV3
Lmg6IEFkZGVkLgotCi0yMDEwLTExLTEzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJr
aXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBhZnRlciByNzE1NDEuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDEwLTEx
LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODY4NQotICAgICAgICBOb3RpZnkgVUkgcHJvY2VzcyBhYm91dCBmb2N1
c2VkIGZyYW1lCi0KLSAgICAgICAgQWRkZWQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhl
IG5ldyBDaHJvbWVDbGllbnQgbWV0aG9kLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6
Zm9jdXNlZEZyYW1lQ2hhbmdlZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMC0xMS0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjcxMDQxLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNob3dDb250ZXh0TWVudSk6Ci0KLTIwMTAtMTAt
MzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5y
ZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHI3MDU3NC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjp0cmFuc2ZlckxvYWRpbmdSZXNvdXJjZUZyb21QYWdlKToKLQotMjAx
MC0xMC0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDg1NzYKLSAgICAgICAgTGV0IFdlYktpdDIgY2xpZW50IGtub3cg
d2hlbiBhIGZyYW1lIGlzIGEgZnJhbWVzZXQKLQotICAgICAgICBBZGRlZCBhIGJsYW5rIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBuZXcgRnJhbWVMb2FkZXJDbGllbnQgbWV0aG9kLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KToKLQot
MjAxMC0xMC0yNiAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KLQotICAg
ICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCi0KLSAgICAgICAgUmVzb3VyY2UgdHJhY2tp
bmcgZmFpbHVyZSB3aGVuIHRyeWluZyB0byBtb3ZlIGEgZnJhbWUgYmV0d2VlbiBkb2N1bWVudHMK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzEzCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJhbnNmZXJMb2FkaW5nUmVz
b3VyY2VGcm9tUGFnZSk6Ci0gICAgICAgIEVtcHR5IG1ldGhvZC4KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTAtMjUgIFBhdHJpY2sg
R2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgS2lsemVyLgotCi0gICAgICAgIFJlcGxhY2UgX2NvdW50b2Ygd2l0aCBXVEZfQVJSQVlfTEVO
R1RICi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODIy
OQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aW50ZXJwcmV0S2V5RXZlbnQpOgotCi0y
MDEwLTEwLTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgIFdlYktpdDIgbmVlZHMgdG8gcGFzcyB0
aGUgY3VycmVudCBldmVudCBtb2RpZmllciBmbGFncyB3aGVuIHJlcXVlc3RpbmcgYSBuZXcgd2lu
ZG93Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODE0
MAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6Y3JlYXRlV2luZG93KToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgQWRkIE5hdmlnYXRp
b25BY3Rpb24gcGFyYW1ldGVyLgotCi0yMDEwLTEwLTIyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAg
ICAgICAgW1dJTkNFXSBJbXBsZW1lbnQgRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODExOAot
Ci0gICAgICAgIENvcHkgdGhlIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIEVGTCBwb3J0LgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aW50ZXJwcmV0S2V5RXZlbnQpOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgot
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0x
MC0xNSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KLQotICAgICAg
ICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCi0KLSAgICAgICAgUmVwbGFjZSBzb21lIFN0cmlu
Zzo6Zm9ybWF0KCkgdXNhZ2VzIGJ5IFN0cmluZ0NvbmNhdGVuYXRlIGluIFdlYktpdAotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc3MTQKLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAg
KFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbWFnZVRpdGxlKToKLSAgICAgICAgKFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjptdWx0aXBsZUZpbGVVcGxvYWRUZXh0KToKLQotMjAxMC0wOS0yOCAg
SmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBEbWl0cnkgVGl0b3YuCi0KLSAgICAgICAgQWRkZWQgb2xkUGFnZSBwYXJhbSB0byBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlkVHJhbnNmZXJDaGlsZEZyYW1lVG9OZXdEb2N1bWVudC4KLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NjYzCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkVHJhbnNmZXJDaGlsZEZyYW1lVG9O
ZXdEb2N1bWVudCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotCi0yMDEwLTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAgQWRkIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NjM3MQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuY3BwOiBDb3BpZWQgZnJvbSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuaDogQ29waWVkIGZyb20gV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaC4KLQotMjAxMC0wOS0yMyAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJv
YmVuLgotCi0gICAgICAgIEFkZCBDaHJvbWVDbGllbnRXaW5DRQotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYyOTQKLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDktMjMgIFBhdHJpY2sg
R2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZC4KLQot
ICAgICAgICBCdWlsZCBmaXggZm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlQXNIVE1MKTogQWRk
IG1pc3NpbmcgbWV0aG9kLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMC0wOS0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEFk
ZCAiV2luQ0UiIHRvIGNsYXNzbmFtZSBmb3IgYWxsIFdlYkNvcmVTdXBwb3J0IGNsYXNzZXMgdG8g
bWF0Y2ggZmlsZW5hbWUuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NjE3NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGll
bnRXaW5DRS5jcHA6IFJlbmFtZSBDb250ZXh0TWVudUNsaWVudCB0byBDb250ZXh0TWVudUNsaWVu
dFdpbkNFLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0Uu
aDogRGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcDog
UmVuYW1lIERyYWdDbGllbnQgdG8gRHJhZ0NsaWVudFdpbkNFLgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOiBEaXR0by4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6IFJlbmFtZSBFZGl0b3JDbGllbnQgdG8gRWRpdG9yQ2xp
ZW50V2luQ0UuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDog
RGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3Bw
OiBSZW5hbWUgSW5zcGVjdG9yQ2xpZW50IHRvIEluc3BlY3RvckNsaWVudFdpbkNFLgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6IERpdHRvLgotCi0yMDEw
LTA5LTIwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAgQWRkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjgyCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNw
cDogQWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5oOiBBZGRlZC4KLQotMjAxMC0wOS0xNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtX
SU5DRV0gQWRkIG1pc3NpbmcgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpibG9ja2VkRXJy
b3IKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1Njgw
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0Uu
Y3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmJsb2Nr
ZWRFcnJvcik6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4
dFdpbkNFLmg6Ci0KLTIwMTAtMDktMTMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9n
YS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
Ci0KLSAgICAgICAgQWRkIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRQotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NzQKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHA6IEFkZGVkLgotICAg
ICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OkZyYW1lTmV0d29ya2lu
Z0NvbnRleHRXaW5DRSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRX
aW5DRTo6dXNlckFnZW50KToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4
dFdpbkNFOjpyZWZlcnJlcik6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFLmg6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtp
bmdDb250ZXh0V2luQ0U6OmNyZWF0ZSk6Ci0KLTIwMTAtMDgtMzEgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCi0KLSAgICAgICAgQWRkIEVkaXRvckNsaWVudFdpbkNFCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDgyMgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50OjpFZGl0b3JDbGllbnQpOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6On5FZGl0b3JDbGllbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OnNldElucHV0TWV0aG9kU3RhdGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OnNob3VsZERlbGV0ZVJhbmdlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91
bGRTaG93RGVsZXRlSW50ZXJmYWNlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojpp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnRUZXh0KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojpz
aG91bGRBcHBseVN0eWxlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlk
QmVnaW5FZGl0aW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRpZEVu
ZEVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRTZXRT
ZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OmlzRWRpdGFibGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlZ2lzdGVy
Q29tbWFuZEZvclVuZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlZ2lzdGVy
Q29tbWFuZEZvclJlZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmNsZWFyVW5k
b1JlZG9PcGVyYXRpb25zKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjYW5VbmRv
KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjYW5SZWRvKToKLSAgICAgICAgKFdl
YktpdDo6RWRpdG9yQ2xpZW50Ojp1bmRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
OjpyZWRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2Rl
KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpwYWdlRGVzdHJveWVkKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dG9nZ2xlQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRvZ2dsZUdyYW1t
YXJDaGVja2luZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9h
cmRFdmVudCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRo
b2RLZXlkb3duKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRC
ZWdpbkVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFu
Z2VJblRleHRGaWVsZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZG9UZXh0Rmll
bGRDb21tYW5kRnJvbUV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0
V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6bGVhcm5Xb3JkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKLSAgICAgICAgKFdl
YktpdDo6RWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG93U3BlbGxpbmdVSSk6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luZyk6Ci0gICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgotICAgICAgICAoV2ViS2l0
OjpFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBBZGRlZC4KLQotMjAxMC0wOC0zMSAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KLQotICAgICAgICBBZGQgRHJhZ0NsaWVudFdp
bkNFCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDgy
MQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcDogQWRkZWQu
Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291
cmNlQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRy
YWcpOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0Zv
clBvaW50KToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6c3RhcnREcmFnKToKLSAgICAg
ICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6Ci0gICAgICAg
IChXZWJLaXQ6OkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDgtMzEg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCi0KLSAgICAgICAgQWRkIENvbnRleHRN
ZW51Q2xpZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0ODIwCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50OjpD
b250ZXh0TWVudUNsaWVudCk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50Ojpj
b250ZXh0TWVudURlc3Ryb3llZCk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50
OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRl
eHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6Ci0gICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50Ojpkb3dubG9hZFVSTCk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRl
eHRNZW51Q2xpZW50Ojpjb3B5SW1hZ2VUb0NsaXBib2FyZCk6Ci0gICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vZ2xlKToKLSAgICAgICAgKFdlYktpdDo6Q29u
dGV4dE1lbnVDbGllbnQ6Omxvb2tVcEluRGljdGlvbmFyeSk6Ci0gICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q2xpZW50OjpzcGVhayk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xp
ZW50OjpzdG9wU3BlYWtpbmcpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
aXNTcGVha2luZyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRX
aW5DRS5oOiBBZGRlZC4KLQotMjAxMC0wOC0yOCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FA
cGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAg
IEFkZCBJbnNwZWN0b3JDbGllbnRXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MTkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNs
aWVudDo6SW5zcGVjdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50
Ojp+SW5zcGVjdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0b3JEZXN0cm95ZWQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6
cmVsZWFzZUZyb250ZW5kUGFnZSk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6
aGlnaGxpZ2h0KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcp
OgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyk6Ci0gICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOiBBZGRlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MWIxZjcuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudFdpbkNFLmgiCi0KLSNpbmNsdWRlICJGaWxl
Q2hvb3Nlci5oIgotI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiSWNvbi5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlv
bi5oIgotI2luY2x1ZGUgIlBvcHVwTWVudVdpbi5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVu
dVdpbi5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Q2hyb21lQ2xpZW50V2luQ0U6OkNocm9tZUNsaWVudFdpbkNFKFdlYlZpZXcqIHdlYlZpZXcpCi0g
ICAgOiBtX3dlYlZpZXcod2ViVmlldykKLXsKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6Y2hyb21lRGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGUg
dGhpczsKLX0KLQotRmxvYXRSZWN0IENocm9tZUNsaWVudFdpbkNFOjp3aW5kb3dSZWN0KCkKLXsK
LSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAg
UkVDVCByZWN0OwotICAgIG1fd2ViVmlldy0+ZnJhbWVSZWN0KCZyZWN0KTsKLSAgICByZXR1cm4g
cmVjdDsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0V2luZG93UmVjdChjb25zdCBG
bG9hdFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBDaHJv
bWVDbGllbnRXaW5DRTo6cGFnZVJlY3QoKQotewotICAgIHJldHVybiB3aW5kb3dSZWN0KCk7Ci19
Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmZvY3VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjp1bmZvY3VzKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1QYWdlKiBDaHJvbWVDbGllbnRXaW5DRTo6Y3JlYXRlV2luZG93
KEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiwg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2hvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6Y2FuUnVuTW9kYWwo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IENocm9tZUNsaWVudFdpbkNFOjpydW5Nb2RhbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6dG9v
bGJhcnNWaXNpYmxlKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xp
ZW50V2luQ0U6OnNldFN0YXR1c2JhclZpc2libGUoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpzdGF0dXNiYXJWaXNpYmxlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6c2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpzY3JvbGxiYXJzVmlzaWJs
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6bWVudWJhclZpc2li
bGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRSZXNpemFibGUoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpjbG9zZVdpbmRvd1Nvb24o
KQotewotICAgIFBvc3RNZXNzYWdlVyhtX3dlYlZpZXctPndpbmRvd0hhbmRsZSgpLCBXTV9DTE9T
RSwgMCwgMCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OmNhblRha2VGb2N1cyhGb2N1
c0RpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRX
aW5DRTo6dGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQotewotICAgIHVuZm9jdXMoKTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmZv
Y3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKQotewotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNF
OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKQotewotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIHJ1bkph
dmFTY3JpcHRDb25maXJtKGZyYW1lLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRX
aW5DRTo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpydW5KYXZhU2Ny
aXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV93ZWJWaWV3
LT5ydW5KYXZhU2NyaXB0QWxlcnQobWVzc2FnZSk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2lu
Q0U6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIHJldHVybiBtX3dlYlZpZXctPnJ1bkphdmFTY3JpcHRDb25maXJtKG1lc3NhZ2UpOwot
fQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5n
JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+cnVuSmF2YVNjcmlwdFByb21wdCht
ZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2lu
Q0U6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpzaG91bGRJbnRlcnJ1cHRKYXZhU2Ny
aXB0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
S2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50V2luQ0U6OmtleWJvYXJkVUlNb2RlKCkKLXsKLSAg
ICByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rczsKLX0KLQotSW50UmVjdCBDaHJvbWVD
bGllbnRXaW5DRTo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5D
RTo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmludmFsaWRhdGVDb250ZW50c0Fu
ZFJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCi17Ci0gICAgUkVDVCByZWN0ID0g
dXBkYXRlUmVjdDsKLSAgICBJbnZhbGlkYXRlUmVjdChtX3dlYlZpZXctPndpbmRvd0hhbmRsZSgp
LCAmcmVjdCwgRkFMU0UpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRl
Q29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCi17Ci0gICAg
aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcodXBkYXRlUmVjdCk7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgcmVj
dFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRS
b290VmlldyhyZWN0VG9TY3JvbGwpOwotfQotCi1JbnRSZWN0IENocm9tZUNsaWVudFdpbkNFOjpy
b290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgQ2hyb21lQ2xpZW50
V2luQ0U6OnNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1QbGF0Zm9ybVBh
Z2VDbGllbnQgQ2hyb21lQ2xpZW50V2luQ0U6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDaHJvbWVD
bGllbnRXaW5DRTo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2lu
Q0U6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcm
LCBUZXh0RGlyZWN0aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnByaW50KEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYsIERhdGFiYXNlRGV0YWls
cykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLXZvaWQgQ2hyb21lQ2xp
ZW50V2luQ0U6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVkQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgQ2hyb21l
Q2xpZW50V2luQ0U6Om5lZWRUb3VjaEV2ZW50cyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6YXR0YWNoUm9vdEdyYXBo
aWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXROZWVkc09uZVNob3REcmF3aW5nU3lu
Y2hyb25pemF0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9t
ZUNsaWVudFdpbkNFOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuT3BlblBhbmVs
KEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6bG9hZEljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBGaWxlSWNvbkxvYWRlciog
bG9hZGVyKQotewotICAgIGxvYWRlci0+bm90aWZ5RmluaXNoZWQoSWNvbjo6Y3JlYXRlSWNvbkZv
ckZpbGVzKGZpbGVuYW1lcykpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudFdpbkNFOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRM
YXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpBWFN0YXJ0RnJhbWVMb2FkKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpBWEZpbmlzaEZy
YW1lTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGll
bnRXaW5DRTo6c2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKQotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6c2VsZWN0SXRlbUFsaWdu
bWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpoYXNPcGVuZWRQb3B1cCgpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVBhc3NSZWZQdHI8
UG9wdXBNZW51PiBDaHJvbWVDbGllbnRXaW5DRTo6Y3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCogY2xpZW50KSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9wdXBNZW51
V2luKGNsaWVudCkpOwotfQotCi1QYXNzUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gQ2hyb21lQ2xp
ZW50V2luQ0U6OmNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudVdpbihjbGll
bnQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmggYi9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZjNTY4YTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVy
ZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hyb21lQ2xpZW50V2luQ0VfaAotI2RlZmluZSBD
aHJvbWVDbGllbnRXaW5DRV9oCi0KLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLQotY2xhc3Mg
V2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENocm9tZUNsaWVudFdpbkNF
IDogcHVibGljIFdlYkNvcmU6OkNocm9tZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgQ2hyb21lQ2xp
ZW50V2luQ0UoV2ViVmlldyogd2ViVmlldyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVz
dHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCB3aW5kb3dSZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCBwYWdlUmVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGZvY3VzKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSBvdmVycmlkZTsKLQotICAgIHZp
cnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoV2ViQ29yZTo6Rm9jdXNEaXJlY3Rpb24pIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoV2ViQ29yZTo6Rm9jdXNEaXJlY3Rpb24pIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGZvY3VzZWRFbGVtZW50Q2hhbmdlZChXZWJDb3Jl
OjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzZWRGcmFtZUNoYW5n
ZWQoV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKLQotICAgIC8vIFRoZSBGcmFtZSBwb2ludGVy
IHByb3ZpZGVzIHRoZSBDaHJvbWVDbGllbnQgd2l0aCBjb250ZXh0IGFib3V0IHdoaWNoCi0gICAg
Ly8gRnJhbWUgd2FudHMgdG8gY3JlYXRlIHRoZSBuZXcgUGFnZS4gIEFsc28sIHRoZSBuZXdseSBj
cmVhdGVkIHdpbmRvdwotICAgIC8vIHNob3VsZCBub3QgYmUgc2hvd24gdG8gdGhlIHVzZXIgdW50
aWwgdGhlIENocm9tZUNsaWVudCBvZiB0aGUgbmV3bHkKLSAgICAvLyBjcmVhdGVkIFBhZ2UgaGFz
IGl0cyBzaG93IG1ldGhvZCBjYWxsZWQuCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdlKiBjcmVh
dGVXaW5kb3coV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0
JiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0
aW9uQWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNob3coKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBydW5Nb2RhbCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJz
VmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgdG9vbGJhcnNWaXNpYmxl
KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJsZShib29s
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldE1lbnViYXJWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBtZW51YmFyVmlzaWJsZSgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dFJlc2l6YWJsZShib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlKEpTQzo6TWVzc2FnZVNvdXJjZSwgSlNDOjpNZXNzYWdlTGV2ZWwsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VJRCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBXVEY6OlN0cmlu
ZyYgbWVzc2FnZSwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvd1Nvb24oKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBydW5KYXZh
U2NyaXB0QWxlcnQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXZWJDb3JlOjpGcmFtZSos
IGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFT
Y3JpcHRQcm9tcHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV1RGOjpTdHJpbmcmIHJlc3VsdCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgV1RGOjpTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5Ym9h
cmRVSU1vZGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5k
b3dSZXNpemVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gTWV0aG9kcyB1c2VkIGJ5
IEhvc3RXaW5kb3cuCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSb290Vmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVD
b250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVl
blRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGll
bnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRzU2l6ZUNoYW5nZWQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlk
Q2hhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBXZWJDb3JlOjpDdXJzb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwotICAgIC8vIEVuZCBtZXRob2Rz
IHVzZWQgYnkgSG9zdFdpbmRvdy4KLQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVy
RWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJG
bGFncykgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6
OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29y
ZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYgZGF0YWJhc2VOYW1lLCBXZWJDb3JlOjpEYXRh
YmFzZURldGFpbHMpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICAvLyBDYWxsYmFjayBpbnZva2Vk
IHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGZhaWxzIHRvIHNhdmUgYSBjYWNoZSBvYmplY3QK
LSAgICAvLyBiZWNhdXNlIHN0b3JpbmcgaXQgd291bGQgZ3JvdyB0aGUgZGF0YWJhc2UgZmlsZSBw
YXN0IGl0cyBkZWZpbmVkIG1heGltdW0KLSAgICAvLyBzaXplIG9yIHBhc3QgdGhlIGFtb3VudCBv
ZiBmcmVlIHNwYWNlIG9uIHRoZSBkZXZpY2UuCi0gICAgLy8gVGhlIGNocm9tZSBjbGllbnQgd291
bGQgbmVlZCB0byB0YWtlIHNvbWUgYWN0aW9uIHN1Y2ggYXMgZXZpY3Rpbmcgc29tZQotICAgIC8v
IG9sZCBjYWNoZXMuCi0gICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50
NjRfdCBzcGFjZU5lZWRlZCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdo
ZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG9yaWdpbiBxdW90YSBpcyByZWFjaGVkLiBUaGlzCi0g
ICAgLy8gbWVhbnMgdGhhdCB0aGUgcmVzb3VyY2VzIGF0dGVtcHRpbmcgdG8gYmUgY2FjaGVkIHZp
YSB0aGUgbWFuaWZlc3QgYXJlCi0gICAgLy8gbW9yZSB0aGFuIGFsbG93ZWQgb24gdGhpcyBvcmln
aW4uIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRoZSBjaHJvbWUgY2xpZW50Ci0gICAgLy8gdG8gdGFr
ZSBhY3Rpb24sIHN1Y2ggYXMgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIGFzayB0byBpbmNyZWFzZSB0
aGUgcXVvdGEKLSAgICAvLyBmb3IgdGhpcyBvcmlnaW4uCi0gICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qLCBp
bnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJ1
bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29z
ZXI+KSBvdmVycmlkZTsKLSAgICAvLyBBc3luY2hyb25vdXMgcmVxdWVzdCB0byBsb2FkIGFuIGlj
b24gZm9yIHNwZWNpZmllZCBmaWxlbmFtZXMuCi0gICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVy
Kikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0
YXRjaCB0aGUgcm9vdCBsYXllci4KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7
Ci0gICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSBuZXh0IHRpbWUgY29udGVu
dCBpcyBkcmF3biB0byB0aGUgd2luZG93LAotICAgIC8vIHRoZSBjaGFuZ2VzIGFwcGVhciBvbiB0
aGUgc2NyZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8gR3JhcGhpY3NMYXllcnMuCi0g
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBv
dmVycmlkZTsKLSAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIHZpZXcgbmVl
ZHMgdG8gYmUgdXBkYXRlZCwgc28gd2UgbmVlZAotICAgIC8vIHRvIGRvIGFuIGVhZ2VyIGxheW91
dCBiZWZvcmUgdGhlIGRyYXdpbmcuCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFNldEN1
cnNvclRvQ3VycmVudEN1cnNvcigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBBWFN0YXJ0
RnJhbWVMb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIEFYRmluaXNoRnJhbWVMb2Fk
KCkgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHZpcnR1YWwgdm9p
ZCBuZWVkVG91Y2hFdmVudHMoYm9vbCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwg
Ym9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0
aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGhhc09wZW5lZFBvcHVwKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBvcHVwTWVudT4gY3Jl
YXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU+IGNyZWF0ZVNl
YXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgdm9pZCBudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVk
KSBvdmVycmlkZSB7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIENocm9tZUNsaWVudFdpbkNFX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1l
bnVDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nv
bnRleHRNZW51Q2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
ZmNlN2YzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRXaW5D
RS5oIgotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LUNvbnRleHRNZW51Q2xpZW50V2luQ0U6OkNvbnRleHRNZW51Q2xpZW50V2luQ0UoV2ViVmlldyAq
d2ViVmlldykKLSAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotewotfQotCi12b2lkIENvbnRleHRN
ZW51Q2xpZW50V2luQ0U6OmNvbnRleHRNZW51RGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGUgdGhp
czsKLX0KLQotUGFzc093blB0cjxDb250ZXh0TWVudT4gQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6
Y3VzdG9taXplTWVudShQYXNzT3duUHRyPENvbnRleHRNZW51PiBtZW51KQotewotICAgIHJldHVy
biBtZW51OwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50V2luQ0U6OmNvbnRleHRNZW51SXRl
bVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRNZW51KikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50V2luQ0U6OmRvd25s
b2FkVVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6c2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdp
bkNFOjpsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6c3BlYWsoY29uc3QgU3RyaW5nJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50V2lu
Q0U6OnN0b3BTcGVha2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBD
b250ZXh0TWVudUNsaWVudFdpbkNFOjppc1NwZWFraW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xp
ZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1l
bnVDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDU1NWU2Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1l
bnVDbGllbnRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBDb250ZXh0TWVudUNsaWVudFdpbkNFX2gKLSNkZWZpbmUgQ29udGV4dE1lbnVDbGllbnRXaW5D
RV9oCi0KLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotCi1jbGFzcyBXZWJWaWV3Owot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29udGV4dE1lbnVDbGllbnRXaW5DRSA6IHB1
YmxpYyBXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgQ29udGV4dE1l
bnVDbGllbnRXaW5DRShXZWJWaWV3Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVE
ZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpD
b250ZXh0TWVudT4gY3VzdG9taXplTWVudShQYXNzT3duUHRyPFdlYkNvcmU6OkNvbnRleHRNZW51
Pikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKFdl
YkNvcmU6OkNvbnRleHRNZW51SXRlbSosIGNvbnN0IFdlYkNvcmU6OkNvbnRleHRNZW51Kikgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWRVUkwoY29uc3QgV2ViQ29yZTo6VVJM
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNlYXJjaFdpdGhHb29nbGUoY29uc3QgV2Vi
Q29yZTo6RnJhbWUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9va1VwSW5EaWN0aW9u
YXJ5KFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNwZWFrKGNv
bnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BTcGVha2lu
ZygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc1NwZWFraW5nKCkgb3ZlcnJpZGU7Ci0K
LXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBDb250ZXh0TWVudUNsaWVudFdpbkNFX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcCBi
L1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI0MzkxOC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJp
Y2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRHJhZ0NsaWVudFdpbkNFLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRHJh
Z0NsaWVudFdpbkNFOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIERyYWdEYXRhJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIERyYWdDbGllbnRXaW5DRTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3Vy
Y2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1EcmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0NsaWVudFdpbkNFOjphY3Rp
b25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OwotfQotCi1EcmFnU291cmNlQWN0aW9uIERy
YWdDbGllbnRXaW5DRTo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlv
bkFueTsKLX0KLQotdm9pZCBEcmFnQ2xpZW50V2luQ0U6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJv
b2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEcmFnQ2xpZW50V2luQ0U6
OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGJhMWM0My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBEcmFnQ2xpZW50V2luQ0VfaAotI2RlZmluZSBEcmFnQ2xpZW50V2luQ0VfaAotCi0jaW5j
bHVkZSAiRHJhZ0NsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRHJhZ0Ns
aWVudFdpbkNFIDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgewotcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNl
QWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpG
cmFtZSYsIGJvb2wgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0Nv
bnRyb2xsZXJEZXN0cm95ZWQoKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRHJhZ0NsaWVudFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwIGIvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYmM4MmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1MTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJFZGl0b3JDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgot
I2luY2x1ZGUgIlVuZG9TdGVwLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUVkaXRvckNsaWVudFdpbkNF
OjpFZGl0b3JDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KHdl
YlZpZXcpCi17Ci19Ci0KLUVkaXRvckNsaWVudFdpbkNFOjp+RWRpdG9yQ2xpZW50V2luQ0UoKQot
ewotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
YWN0aXZlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50
V2luQ0U6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWludCBFZGl0b3JDbGllbnRXaW5DRTo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgRWRp
dG9yQ2xpZW50V2luQ0U6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JD
bGllbnRXaW5DRTo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRX
aW5DRTo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2Vy
dEFjdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdl
KiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkQXBwbHlT
dHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0KiwgV2ViQ29yZTo6UmFuZ2UqKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xp
ZW50V2luQ0U6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdlKiwgV2Vi
Q29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmRpZEJlZ2luRWRpdGluZygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVk
aXRvckNsaWVudFdpbkNFOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1l
KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNF
OjpkaWRFbmRFZGl0aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVk
aXRvckNsaWVudFdpbkNFOjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6d2lsbFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpnZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gPiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVnaXN0ZXJVbmRvU3RlcChXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lzdGVyUmVkb1N0ZXAoV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OlVuZG9TdGVwPikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEVkaXRvckNsaWVudFdpbkNFOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6Y2FuQ29weUN1dChX
ZWJDb3JlOjpGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBk
ZWZhdWx0VmFsdWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhblBhc3RlKFdlYkNv
cmU6OkZyYW1lKiwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRlZmF1
bHRWYWx1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6Y2FuVW5kbygpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRWRp
dG9yQ2xpZW50V2luQ0U6OmNhblJlZG8oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp1bmRvKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpy
ZWRvKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdp
bkNFOjpzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVk
aXRvckNsaWVudFdpbkNFOjpwYWdlRGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGUgdGhpczsKLX0K
LQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKLXsK
LSAgICBQYWdlKiBwYWdlID0gbV93ZWJWaWV3LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhZ2UtPnNldHRpbmdzKCkuc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmlzU2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fd2ViVmll
dy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBwYWdlLT5zZXR0aW5ncygpLnNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tp
bmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2lu
Q0U6OnRvZ2dsZUdyYW1tYXJDaGVja2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8IDA7Ci1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNoaWZ0S2V5
ID0gMSA8PCAyOwotCi1zdHJ1Y3QgS2V5RG93bkVudHJ5IHsKLSAgICB1bnNpZ25lZCB2aXJ0dWFs
S2V5OwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsK
LQotc3RydWN0IEtleVByZXNzRW50cnkgewotICAgIHVuc2lnbmVkIGNoYXJDb2RlOwotICAgIHVu
c2lnbmVkIG1vZGlmaWVyczsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQotc3RhdGljIGNv
bnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0gewotICAgIHsgVktfTEVGVCwgICAw
LCAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfTEVGVCwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlTGVm
dEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTEVGVCwg
ICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZExlZnQiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgVktfTEVGVCwgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3Zl
V29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklH
SFQsICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICBTaGlmdEtleSwgICAgICAgICAgICJN
b3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
UklHSFQsICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZFJpZ2h0IiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICBDdHJsS2V5IHwgU2hpZnRLZXks
ICJNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LAotICAgIHsg
VktfVVAsICAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVXAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVVAsICAgICBTaGlmdEtleSwgICAgICAg
ICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfUFJJT1IsICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwgICAwLCAgICAgICAgICAg
ICAgICAgICJNb3ZlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfRE9XTiwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTkVYVCwgICBTaGlmdEtleSwg
ICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICB9
LAotICAgIHsgVktfUFJJT1IsICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZVVwIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTkVYVCwgICAwLCAgICAg
ICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAotICAgIHsgVktfSE9NRSwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5p
bmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSE9NRSwgICBTaGlm
dEtleSwgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICB9LAotICAgIHsgVktfSE9NRSwgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlVG9CZWdp
bm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSE9NRSwgICBD
dHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2Vs
ZWN0aW9uIiB9LAotCi0gICAgeyBWS19FTkQsICAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVU
b0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19FTkQs
ICAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlv
biIgICAgICAgICAgIH0sCi0gICAgeyBWS19FTkQsICAgIEN0cmxLZXksICAgICAgICAgICAgIk1v
dmVUb0VuZE9mRG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19F
TkQsICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgIH0sCi0KLSAgICB7IFZLX0JBQ0ssICAgMCwgICAgICAgICAgICAgICAg
ICAiRGVsZXRlQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0JBQ0ssICAgU2hpZnRLZXksICAgICAgICAgICAiRGVsZXRlQmFja3dhcmQiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RFTEVURSwgMCwgICAgICAgICAgICAg
ICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX0JBQ0ssICAgQ3RybEtleSwgICAgICAgICAgICAiRGVsZXRlV29yZEJhY2t3YXJkIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RFTEVURSwgQ3RybEtleSwgICAg
ICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LQotICAgIHsgJ0InLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ0knLCAgICAgICBDdHJsS2V5
LCAgICAgICAgICAgICJUb2dnbGVJdGFsaWMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAotCi0gICAgeyBWS19FU0NBUEUsIDAsICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19UQUIsICAgIDAs
ICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJh
Y2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4s
IDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sIEN0cmxLZXksICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRV
Uk4sIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sIEFsdEtleSB8IFNoaWZ0S2V5LCAgIklu
c2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAvLyBJ
dCdzIG5vdCBxdWl0ZSBjbGVhciB3aGV0aGVyIGNsaXBib2FyZCBzaG9ydGN1dHMgYW5kIFVuZG8v
UmVkbyBzaG91bGQgYmUgaGFuZGxlZAotICAgIC8vIGluIHRoZSBhcHBsaWNhdGlvbiBvciBpbiBX
ZWJLaXQuIFdlIGNob3NlIFdlYktpdCBmb3Igbm93LgotICAgIHsgJ0MnLCAgICAgICBDdHJsS2V5
LCAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAotICAgIHsgJ1YnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1gnLCAgICAgICBDdHJs
S2V5LCAgICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgIHsgJ0EnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJTZWxlY3RBbGwi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSU5TRVJULCBD
dHJsS2V5LCAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCBTaGlmdEtleSwgICAgICAgICAgICJDdXQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSU5TRVJU
LCBTaGlmdEtleSwgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgJ1onLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJVbmRv
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1onLCAg
ICAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJSZWRvIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci19OwotCi1zdGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVz
c0VudHJpZXNbXSA9IHsKLSAgICB7ICdcdCcsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0
VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdcdCcsICAg
U2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7ICdccicsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3
bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgQ3Ry
bEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7ICdccicsICAgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGlu
ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgQWx0S2V5
IHwgU2hpZnRLZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotfTsKLQotY29uc3QgY2hhciogRWRpdG9yQ2xpZW50V2luQ0U6OmludGVycHJldEtleUV2
ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCk7Ci0KLSAgICBzdGF0aWMgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPioga2V5RG93bkNvbW1hbmRzTWFwID0gMDsKLSAgICBzdGF0aWMgSGFzaE1hcDxpbnQs
IGNvbnN0IGNoYXIqPioga2V5UHJlc3NDb21tYW5kc01hcCA9IDA7Ci0KLSAgICBpZiAoIWtleURv
d25Db21tYW5kc01hcCkgewotICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1h
cDxpbnQsIGNvbnN0IGNoYXIqPjsKLSAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCA9IG5ldyBI
YXNoTWFwPGludCwgY29uc3QgY2hhcio+OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSChrZXlEb3duRW50cmllcyk7ICsraSkKLSAgICAgICAgICAgIGtl
eURvd25Db21tYW5kc01hcC0+c2V0KGtleURvd25FbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8
IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXksIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOwot
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChrZXlQcmVz
c0VudHJpZXMpOyArK2kpCi0gICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLT5zZXQoa2V5
UHJlc3NFbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleVByZXNzRW50cmllc1tpXS5jaGFy
Q29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1v
ZGlmaWVycyA9IDA7Ci0gICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBtb2RpZmll
cnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IEN0cmxLZXk7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBl
dmVudC0+a2V5Q29kZSgpOwotICAgICAgICByZXR1cm4gbWFwS2V5ID8ga2V5RG93bkNvbW1hbmRz
TWFwLT5nZXQobWFwS2V5KSA6IDA7Ci0gICAgfQotCi0gICAgaW50IG1hcEtleSA9IG1vZGlmaWVy
cyA8PCAxNiB8IGV2ZW50LT5jaGFyQ29kZSgpOwotICAgIHJldHVybiBtYXBLZXkgPyBrZXlQcmVz
c0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2lu
Q0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewot
ICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwotICAgIEFTU0VSVChu
b2RlKTsKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAg
QVNTRVJUKGZyYW1lKTsKLQotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZl
bnQgPSBldmVudC0+a2V5RXZlbnQoKTsKLSAgICBpZiAoIWtleUV2ZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBmcmFtZS0+c2V0dGluZ3MoKS5j
YXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmIChjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAg
IHN3aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgICAgIGNh
c2UgVktfTEVGVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZl
bnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9u
TGVmdCwKLSAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFu
dWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICBVc2Vy
VHJpZ2dlcmVkKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFZLX1JJ
R0hUOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShrZXlFdmVudC0+c2hp
ZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rp
b246OkFsdGVyYXRpb25Nb3ZlLAotICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25SaWdodCwK
LSAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0
eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICBVc2VyVHJpZ2dl
cmVkKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFZLX1VQOgotICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/
IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25Nb3ZlLAotICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25CYWNrd2FyZCwKLSAgICAg
ICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5
IDogTGluZUdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICBVc2VyVHJpZ2dlcmVkKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbkZvcndhcmQsCi0gICAgICAgICAg
ICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExp
bmVHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEVkaXRvcjo6Q29t
bWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLmNvbW1hbmQoaW50ZXJwcmV0S2V5RXZlbnQo
ZXZlbnQpKTsKLQotICAgIGlmIChrZXlFdmVudC0+dHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlJh
d0tleURvd24pIHsKLSAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3Jt
YXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQg
dGV4dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAotICAgICAgICAv
LyBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUgdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVk
aWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2
ZW50IGJlIGdlbmVyYXRlZAotICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFi
IGNoYXJhY3Rlciwgb3IgRW50ZXIpLgotICAgICAgICByZXR1cm4gIWNvbW1hbmQuaXNUZXh0SW5z
ZXJ0aW9uKCkgJiYgY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoY29t
bWFuZC5leGVjdXRlKGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBEb24n
dCBpbnNlcnQgbnVsbCBvciBjb250cm9sIGNoYXJhY3RlcnMgYXMgdGhleSBjYW4gcmVzdWx0IGlu
IHVuZXhwZWN0ZWQgYmVoYXZpb3VyCi0gICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYg
YSBtb2RpZmllciBpcyBwcmVzc2VkCi0gICAgaWYgKGtleUV2ZW50LT5jdHJsS2V5KCkgfHwga2V5
RXZlbnQtPmFsdEtleSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZnJh
bWUtPmVkaXRvcigpLmluc2VydFRleHQoZXZlbnQtPmtleUV2ZW50KCktPnRleHQoKSwgZXZlbnQp
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChl
dmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIEVk
aXRvckNsaWVudFdpbkNFOjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRX
aW5DRTo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKQotewotfQotCi12b2lkIEVk
aXRvckNsaWVudFdpbkNFOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKQotewotfQot
Ci12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVu
dCopCi17Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmRvVGV4dEZpZWxkQ29tbWFuZEZy
b21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KEVsZW1lbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xp
ZW50V2luQ0U6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEVyYXNlTWFy
a2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHRl
eHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5D
RTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1TdHJpbmcgRWRpdG9yQ2xpZW50V2luQ0U6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgaW5wdXRXb3JkKQotewotICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9y
IHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIuCi0gICAgLy8gQ3VycmVudGx5LCBpdCBjb21wdXRlcyBh
biBlbXB0eSBzdHJpbmcuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEVkaXRvckNs
aWVudFdpbkNFOjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWSWV3LCBWZWN0b3I8R3JhbW1h
ckRldGFpbD4mLCBpbnQqLCBpbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRWRpdG9yQ2xpZW50V2luQ0U6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhj
b25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvd1NwZWxsaW5nVUkoYm9vbCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzcGVsbGluZ1VJ
SXNTaG93aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRX
aW5DRTo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlZDE4NGQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEx
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEVkaXRvckNsaWVudFdpbkNFX2gKLSNkZWZpbmUgRWRpdG9y
Q2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnQuaCIKLQotY2xhc3MgV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIEVkaXRvckNsaWVudFdpbkNFIDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVu
dCwgcHVibGljIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBFZGl0
b3JDbGllbnRXaW5DRShXZWJWaWV3Kik7Ci0gICAgfkVkaXRvckNsaWVudFdpbkNFKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBi
b29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2Rl
KiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6U3RyaW5nJiwg
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldCosIFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6UmFuZ2UqKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6
UmFuZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJk
VHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiA+JiBwYXN0ZWJvYXJk
RGF0YSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJVbmRvU3RlcChXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJSZWRvU3RlcChXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5Db3B5Q3V0KFdlYkNvcmU6OkZyYW1lKiwgYm9v
bCBkZWZhdWx0VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYXN0
ZShXZWJDb3JlOjpGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FuVW5kbygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBjYW5SZWRvKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdW5kbygpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWRvKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50Kikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlk
QmVnaW5FZGl0aW5nKFdlYkNvcmU6OkVsZW1lbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyhXZWJDb3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChXZWJDb3JlOjpFbGVtZW50
Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVu
dChXZWJDb3JlOjpFbGVtZW50KiwgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKFdlYkNvcmU6OkVs
ZW1lbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxl
YXJuV29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBj
aGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiwgaW50Kikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiYsIGludCosIGludCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBX
ZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmIHdvcmQsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4pIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gdGhpczsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2
ZW50KGNvbnN0IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZUVkaXRp
bmdLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKLQotICAgIFdlYlZpZXcq
IG1fd2ViVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRWRp
dG9yQ2xpZW50V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRjNjFkYmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fu
c3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2lu
Q0UuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiU3lzdGVtSW5mby5oIgotI2luY2x1ZGUgIldl
YktpdFZlcnNpb24uaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1GcmFtZUxvYWRlckNsaWVudFdpbkNFOjpGcmFtZUxvYWRlckNsaWVu
dFdpbkNFKFdlYlZpZXcqIHZpZXcpCi0gICAgOiBtX3dlYlZpZXcodmlldykKLSAgICAsIG1fcGx1
Z2luVmlldygwKQotewotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotfQotCi1GcmFtZUxvYWRlckNs
aWVudFdpbkNFOjp+RnJhbWVMb2FkZXJDbGllbnRXaW5DRSgpCi17Ci19Ci0KLVN0cmluZyBGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjp1c2VyQWdlbnQoY29uc3QgVVJMJikKLXsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1c2VyQWdlbnRTdHJpbmcsICgpKTsKLQot
ICAgIGlmICh1c2VyQWdlbnRTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgU3RyaW5nIHdlYktp
dFZlcnNpb24gPSBTdHJpbmc6OmZvcm1hdCgiJWQuJWQiLCBXRUJLSVRfTUFKT1JfVkVSU0lPTiwg
V0VCS0lUX01JTk9SX1ZFUlNJT04pOwotICAgICAgICB1c2VyQWdlbnRTdHJpbmcgPSBtYWtlU3Ry
aW5nKCJNb3ppbGxhLzUuMCAoIiwgd2luZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpLCAiKSBBcHBs
ZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uLCAiIChLSFRNTCwgbGlrZSBHZWNrbykgTW9iaWxlIFNh
ZmFyaS8iLCB3ZWJLaXRWZXJzaW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXNlckFnZW50U3Ry
aW5nOwotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKLXsKLSAgICBy
ZXR1cm4gRG9jdW1lbnRMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExv
YWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICht
X3BsdWdpblZpZXcpIHsKLSAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKSB7
Ci0gICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJl
c3BvbnNlKCkpOwotICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBs
ZW5ndGgpOwotICAgIH0gZWxzZQotICAgICAgICBsb2FkZXItPmNvbW1pdERhdGEoZGF0YSwgbGVu
Z3RoKTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIERv
Y3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnBvc3RQ
cm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cG9zdFByb2dyZXNzRXN0aW1hdGVDaGFu
Z2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKLXsKLSAgICBtX3dlYlZpZXcgPSAwOwotICAgIG1f
ZnJhbWUgPSAwOwotICAgIGRlbGV0ZSB0aGlzOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9yZXNw
b25zZSA9IHJlc3BvbnNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIEZyYW1lUG9saWN5
RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24pCi17Ci0gICAgaWYgKGNhblNob3dNSU1FVHlwZShyZXNw
b25zZS5taW1lVHlwZSgpKSkKLSAgICAgICAgcG9saWN5RnVuY3Rpb24oUG9saWN5VXNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeURvd25sb2FkKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmLCBGcmFtZVBvbGlj
eUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uKQotewotICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVz
ZSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIEZyYW1lUG9saWN5
RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24pCi17Ci0gICAgcG9saWN5RnVuY3Rpb24oUG9saWN5VXNl
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJtaXRG
b3JtKFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5j
dGlvbikKLXsKLSAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lVc2UpOwotfQotCi1QYXNzUmVmUHRy
PFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNp
emUmLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQotewotICAgIHJl
dHVybiAwOwotfQotCi1QYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpj
cmVhdGVGcmFtZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Nj
cm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQotewotICAgIHJldHVy
biBtX3dlYlZpZXctPmNyZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCByZWZlcnJl
ciwgYWxsb3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0LCBtX2ZyYW1lKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWRpcmVjdERhdGFUb1BsdWdpbihX
aWRnZXQqIHBsdWdpbldpZGdldCkKLXsKLSAgICBtX3BsdWdpblZpZXcgPSB0b1BsdWdpblZpZXco
cGx1Z2luV2lkZ2V0KTsKLSAgICBpZiAocGx1Z2luV2lkZ2V0KQotICAgICAgICBtX2hhc1NlbnRS
ZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7Ci19Ci0KLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBI
VE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLU9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om9iamVj
dENvbnRlbnRUeXBlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpCi17Ci0gICAgcmV0dXJuIEZyYW1lTG9hZGVy
OjpkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUodXJsLCBtaW1lVHlwZSwgc2hvdWxkUHJlZmVyUGx1
Z0luc0ZvckltYWdlcyk7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvdmVy
cmlkZU1lZGlhVHlwZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hE
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlZ2lzdGVy
Rm9ySWNvbk5vdGlmaWNhdGlvbihib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShi
b29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6aGFzV2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZy
YW1lTG9hZENvbXBsZXRlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OnJlc3RvcmVWaWV3U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJv
b2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKSBjb25zdAotewotICAgIHJldHVybiBpdGVtOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkUnVuSW5z
ZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZERldGVjdFhT
Uyhjb25zdCBVUkwmLCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVy
KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmZvcmNlTGF5b3V0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRD
b3BpZXNPblNjcm9sbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRldGFjaGVkRnJv
bVBhcmVudDMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0
Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0
Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50
UmVkaXJlY3QoY29uc3QgVVJMJiwgZG91YmxlLCBkb3VibGUpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZENoYW5n
ZUxvY2F0aW9uV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhpblBhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlk
UG9wU3RhdGVXaXRoaW5QYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbENsb3NlKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGlkUmVjZWl2ZUljb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMoV2ViQ29yZTo6SWNvblR5cGUpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERp
ZENvbW1pdExvYWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlz
cGF0Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoU2hvdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpj
YW5jZWxQb2xpY3lDaGVjaygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRM
b2FkZXIqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZENoYW5n
ZVRpdGxlKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLXsKLSAgICBzZXRUaXRsZShk
b2N1bWVudExvYWRlci0+dGl0bGUoKSwgZG9jdW1lbnRMb2FkZXItPnVybCgpKTsKLX0KLQotYm9v
bCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5TaG93TUlN
RVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAotewotICAgIHJldHVybiAoTUlNRVR5cGVS
ZWdpc3RyeTo6Y2FuU2hvd01JTUVUeXBlKHR5cGUpCi0gICAgICAgICAgICB8fCBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZCh0eXBlKSk7Ci19
Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlQXNIVE1MKGNv
bnN0IFN0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVwcmVzZW50YXRpb25F
eGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVy
KikKLXsKLSAgICBpZiAoIW1fcGx1Z2luVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
bHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgbV9wbHVnaW5WaWV3ID0gMDsKLSAg
ICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRGaW5pc2hMb2Fk
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0VGl0bGUoY29u
c3QgU3RyaW5nV2l0aERpcmVjdGlvbiYsIGNvbnN0IFVSTCYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFJlY2Vp
dmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
LCBjb25zdCBSZXNvdXJjZUVycm9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1l
bW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGludCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCi17Ci0gICAgZGlzcGF0Y2hEaWRGYWlsTG9hZChlcnJvcik7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJj
ZUVycm9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChXZWJDb3JlOjpE
b2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuY2VsbGVkRXJyb3IoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cigpOwotfQotCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmJsb2NrZWRF
cnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0g
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjppbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0K
LQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5ub3RTaG93TUlNRVR5
cGVFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsK
LX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzaG91bGRGYWxsQmFjayhjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICByZXR1cm4gIShlcnJvci5pc0NhbmNlbGxhdGlv
bigpKTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5DYWNoZVBhZ2UoKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1GcmFtZSogRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJj
ZUVycm9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKCFtX3BsdWdpblZpZXcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7Ci0gICAgbV9wbHVn
aW5WaWV3ID0gMDsKLSAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIC8qIHN1Z2dlc3RlZE5hbWUgKi8pCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExp
bmtzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp0
cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9m
cmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLQotICAgIGJvb2wgaXNNYWluRnJhbWUg
PSBtX2ZyYW1lID09IHBhZ2UtPm1haW5GcmFtZSgpOwotCi0gICAgbV9mcmFtZS0+c2V0Vmlldygw
KTsKLQotICAgIFJlZlB0cjxGcmFtZVZpZXc+IGZyYW1lVmlldzsKLSAgICBpZiAoaXNNYWluRnJh
bWUpIHsKLSAgICAgICAgUkVDVCByZWN0OwotICAgICAgICBtX3dlYlZpZXctPmZyYW1lUmVjdCgm
cmVjdCk7Ci0gICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKCptX2ZyYW1lLCBJ
bnRSZWN0KHJlY3QpLnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZyYW1lVmlldyA9IEZy
YW1lVmlldzo6Y3JlYXRlKCptX2ZyYW1lKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXcoZnJhbWVW
aWV3KTsKLQotICAgIGlmIChtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCkpCi0gICAgICAgIG1fZnJh
bWUtPm93bmVyUmVuZGVyZXIoKS0+c2V0V2lkZ2V0KGZyYW1lVmlldyk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKLXsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpCi17Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChi
b29sKQotewotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkKLXsKLSAg
ICByZXR1cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpjcmVhdGUobV9mcmFtZSwgdXNl
ckFnZW50KFVSTCgpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNF
LmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhMTczNC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFtZUxv
YWRlckNsaWVudFdpbkNFX2gKLSNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRXaW5DRV9oCi0KLSNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0KLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBGcmFtZUxvYWRlckNsaWVudFdpbkNFIDogcHVibGljIFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBGcmFtZUxvYWRlckNsaWVudFdp
bkNFKFdlYlZpZXcqKTsKLSAgICB2aXJ0dWFsIH5GcmFtZUxvYWRlckNsaWVudFdpbkNFKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZGVyRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICBX
ZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lk
IG1ha2VSZXByZXNlbnRhdGlvbihXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb3BpZXNPblNjcm9sbCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaGVk
RnJvbVBhcmVudDIoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFy
ZW50MygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0lu
aXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRM
ZW5ndGgoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGludCBkYXRhTGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRG
aW5pc2hMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRl
bnRpZmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRp
bmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2Fk
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3QoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsUGVyZm9ybUNs
aWVudFJlZGlyZWN0KGNvbnN0IFdlYkNvcmU6OlVSTCYsIGRvdWJsZSwgZG91YmxlKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2Uo
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5Q
YWdlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVwbGFjZVN0YXRl
V2l0aGluUGFnZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFBvcFN0
YXRlV2l0aGluUGFnZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxD
bG9zZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29u
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25h
bExvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0
bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUljb25zKFdlYkNvcmU6Okljb25UeXBlKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkRmFpbExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMYXlvdXQoV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25l
cykgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZyYW1lKiBkaXNwYXRjaENyZWF0
ZVBhZ2UoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFNob3coKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpGcmFtZVBv
bGljeUZ1bmN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpGb3JtU3RhdGU+LCBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lLCBXZWJDb3JlOjpGcmFt
ZVBvbGljeUZ1bmN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rp
b24mLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6Rm9ybVN0YXRlPiwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hX
aWxsU2VuZFN1Ym1pdEV2ZW50KFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+KSBv
dmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPiwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5j
dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0
YXRlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldE1haW5Eb2N1bWVudEVycm9yKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHBvc3RQ
cm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNyZWF0ZUZyYW1lKGNv
bnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBXVEY6OlN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxs
b3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGNyZWF0ZVBsdWdpbihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25z
dCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mLCBjb25zdCBX
VEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mLCBjb25zdCBXVEY6OlN0cmluZyYsIGJvb2wpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNyZWF0ZVBsdWdpbihXZWJDb3JlOjpXaWRnZXQqKSBv
dmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2ViQ29y
ZTo6V2lkZ2V0KiBwbHVnaW5XaWRnZXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6VVJM
JiBiYXNlVVJMLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgV1RGOjpTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoV2Vi
Q29yZTo6RE9NV3JhcHBlcldvcmxkJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBXZWJDb3Jl
OjpVUkwmLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgc2hvdWxkUHJlZmVyUGx1
Z0luc0ZvckltYWdlcykgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbkZyYW1l
RG9jdW1lbnRSZWFkeShib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERv
d25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkTmFtZSA9IFN0cmluZygpKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCB3aWxs
Q2hhbmdlVGl0bGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyKiwgY29uc3QgY2hhciosIGludCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlz
aGVkTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkR29Ub0hpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVu
dCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRGV0ZWN0WFNTKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGJvb2wgZGlk
QmxvY2tFbnRpcmVQYWdlKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBmaWxl
RG9lc05vdEV4aXN0RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxl
TG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGYWxsQmFjayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBXVEY6OlN0cmlu
ZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0
c0ZvclVSTFNjaGVtZShjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgV1RGOjpTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgV1RG
OjpTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRD
b21wbGV0ZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRl
bShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlVmlld1N0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZCgpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50
KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1
bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVjdGlvbiYs
IGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXVEY6OlN0cmlu
ZyB1c2VyQWdlbnQoY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNh
Y2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBvdmVycmlkZTsKLQotICAgIHZp
cnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0RnJhbWUoV2ViQ29yZTo6RnJhbWUgKmZyYW1lKSB7IG1fZnJhbWUg
PSBmcmFtZTsgfQotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSgpIHsgcmV0dXJuIG1fZnJhbWU7
IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgV2ViQ29yZTo6RnJh
bWUqIG1fZnJhbWU7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwot
Ci0gICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bwotICAgIFdlYkNvcmU6OlBs
dWdpblZpZXcqIG1fcGx1Z2luVmlldzsKLSAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVn
aW47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3Vw
cG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmI2Y2FiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaCIKLQotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUZyYW1lTmV0d29ya2luZ0NvbnRl
eHRXaW5DRTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpCi0gICAgOiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lKQot
ICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50KQotewotfQotCi1TdHJpbmcgRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFOjp1c2VyQWdlbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXJB
Z2VudDsKLX0KLQotU3RyaW5nIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6cmVmZXJyZXIo
KSBjb25zdAotewotICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS5yZWZlcnJlcigpOwotfQot
Ci1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6Ymxv
Y2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmggYi9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTc3NTViLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdp
bkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYW1lTmV0
d29ya2luZ0NvbnRleHRXaW5DRV9oCi0jZGVmaW5lIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5D
RV9oCi0KLSNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UgOiBwdWJsaWMgV2Vi
Q29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFPiBjcmVhdGUoV2ViQ29yZTo6RnJhbWUq
IGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UoZnJhbWUsIHVzZXJB
Z2VudCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgdXNlckFnZW50KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyByZWZlcnJlcigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3Io
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFKFdlYkNvcmU6OkZyYW1lKiBmcmFt
ZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCk7Ci0KLSAgICBXVEY6OlN0cmluZyBtX3Vz
ZXJBZ2VudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRnJhbWVO
ZXR3b3JraW5nQ29udGV4dFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNhNzBiOTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fu
c3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotSW5zcGVjdG9y
Q2xpZW50V2luQ0U6Okluc3BlY3RvckNsaWVudFdpbkNFKFdlYlZpZXcqIHdlYlZpZXcpCi0gICAg
OiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLXsKLX0KLQotSW5zcGVjdG9yQ2xpZW50V2lu
Q0U6On5JbnNwZWN0b3JDbGllbnRXaW5DRSgpCi17Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50
V2luQ0U6Omluc3BlY3RvckRlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLUlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogSW5zcGVjdG9yQ2xpZW50V2luQ0U6Om9wZW5JbnNwZWN0
b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V2lu
Q0U6OmNsb3NlSW5zcGVjdG9yRnJvbnRlbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V2luQ0U6OmJyaW5nRnJvbnRlbmRUb0Zyb250KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpo
aWdobGlnaHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q2xpZW50V2luQ0U6OmhpZGVIaWdobGlnaHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50V2luQ0U6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oIGIvU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODY0NmQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmlj
ayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yQ2xpZW50V2luQ0Vf
aAotI2RlZmluZSBJbnNwZWN0b3JDbGllbnRXaW5DRV9oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGb3J3YXJkaW5nLmgiCi0KLWNsYXNzIFdlYlZp
ZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBJbnNwZWN0b3JDbGllbnRXaW5DRSA6
IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgewotcHVibGljOgotICAgIGV4cGxpY2l0IEluc3BlY3RvckNsaWVu
dFdpbkNFKFdlYlZpZXcqKTsKLSAgICB+SW5zcGVjdG9yQ2xpZW50V2luQ0UoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBvcGVuSW5zcGVjdG9yRnJvbnRlbmQo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZUluc3BlY3RvckZyb250ZW5kKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGJy
aW5nRnJvbnRlbmRUb0Zyb250KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxp
Z2h0KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgV1RGOjpT
dHJpbmcmKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdl
YlZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEluc3BlY3Rv
ckNsaWVudFdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM2NTE5MzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oIgotCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvb2tp
ZUphci5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi12b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0aWFsaXplKCkKLXsK
LSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UsIHBsYXRmb3JtU3RyYXRlZ2llcywgKCkpOwotfQotCi1QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UoKQotewotICAgIHNldFBsYXRmb3JtU3RyYXRlZ2ll
cyh0aGlzKTsKLX0KLQotQ29va2llc1N0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Y3JlYXRlQ29va2llc1N0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotRGF0YWJh
c2VTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZURhdGFiYXNlU3RyYXRl
Z3koKQotewotICAgIHJldHVybiB0aGlzOwotfQotCi1Mb2FkZXJTdHJhdGVneSogUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhp
czsKLX0KLQotUGFzdGVib2FyZFN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3Jl
YXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotUGx1Z2luU3Ry
YXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVQbHVnaW5TdHJhdGVneSgpCi17
Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVNoYXJlZFdvcmtlclN0cmF0ZWd5KiBQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlU2hhcmVkV29ya2VyU3RyYXRlZ3koKQotewotICAgIHJldHVy
biB0aGlzOwotfQotCi1TdG9yYWdlU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpj
cmVhdGVTdG9yYWdlU3RyYXRlZ3koKQotewotICAgIHJldHVybiB0aGlzOwotfQotCi1WaXNpdGVk
TGlua1N0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlVmlzaXRlZExpbmtT
dHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNl
c3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKLX0K
LQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6c2V0Q29va2llc0Zyb21ET00oY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKLXsKLSAgICBXZWJDb3Jl
OjpzZXRDb29raWVzRnJvbURPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmlu
Zyk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNFbmFibGVkKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQo
c2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwp
Ci17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNl
c3Npb24sIGZpcnN0UGFydHksIHVybCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBj
b25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhzZXNzaW9uLCBm
aXJzdFBhcnR5LCB1cmwsIHJhd0Nvb2tpZXMpOwotfQotCi12b2lkIFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNv
cmU6OmRlbGV0ZUNvb2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZU5hbWUpOwotfQotCi12b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpyZWZyZXNoUGx1Z2lucygpCi17Ci0gICAgUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwotfQotCi12b2lkIFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0b3I8UGx1Z2lu
SW5mbz4mIG91dFBsdWdpbnMpCi17Ci0gICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYg
cGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKTsK
LQotICAgIG91dFBsdWdpbnMucmVzaXplKHBsdWdpbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgewotICAgICAgICBQbHVnaW5QYWNr
YWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKLQotICAgICAgICBQbHVnaW5JbmZvIGluZm87Ci0g
ICAgICAgIGluZm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKLSAgICAgICAgaW5mby5maWxlID0g
cGFja2FnZS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3Jp
cHRpb24oKTsKLQotICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rl
c2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOwotCi0gICAgICAgIGlu
Zm8ubWltZXMucmVzZXJ2ZUNhcGFjaXR5KG1pbWVUb0Rlc2NyaXB0aW9ucy5zaXplKCkpOwotCi0g
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRv
RGVzY3JpcHRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0KLSAgICAgICAgICAg
IG1pbWUudHlwZSA9IGl0LT5rZXk7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7
Ci0gICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZ2V0KG1pbWUudHlwZSk7Ci0KLSAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0UGx1Z2luc1tpXSA9IGluZm87Ci0gICAgfQotfQot
Ci1ib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppc0xpbmtWaXNpdGVkKFBhZ2UqIHBhZ2Us
IExpbmtIYXNoIGhhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21pY1N0cmluZyYpCi17Ci0gICAg
cmV0dXJuIHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChoYXNoKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6YWRkVmlzaXRlZExpbmsoUGFnZSogcGFnZSwgTGlua0hhc2gg
aGFzaCkKLXsKLSAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rSGFzaChoYXNoKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3
OWU5Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dh
LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFX2gKLSNkZWZpbmUgUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0VfaAotCi0jaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2VTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3RyYXRlZ3kuaCIKLSNp
bmNsdWRlICJTaGFyZWRXb3JrZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTdHJhdGVn
eS5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCIKLQotY2xhc3MgUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2
YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpEYXRhYmFzZVN0
cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6
OlBsdWdpblN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlNoYXJlZFdvcmtlclN0cmF0ZWd5LCBw
cml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpWaXNpdGVk
TGlua1N0cmF0ZWd5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7Ci0K
LXByaXZhdGU6Ci0gICAgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UoKTsKLQotICAgIC8vIFdlYkNv
cmU6OlBsYXRmb3JtU3RyYXRlZ2llcwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llc1N0cmF0
ZWd5KiBjcmVhdGVDb29raWVzU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkRhdGFiYXNlU3RyYXRlZ3kqIGNyZWF0ZURhdGFiYXNlU3RyYXRlZ3koKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVn
eSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5KiBj
cmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OlBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2hhcmVkV29ya2VyU3RyYXRlZ3kqIGNyZWF0ZVNoYXJlZFdvcmtlclN0
cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdG9yYWdlU3RyYXRlZ3kq
IGNyZWF0ZVN0b3JhZ2VTdHJhdGVneSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
VmlzaXRlZExpbmtTdHJhdGVneSogY3JlYXRlVmlzaXRlZExpbmtTdHJhdGVneSgpIG92ZXJyaWRl
OwotCi0gICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5Ci0gICAgdmlydHVhbCBTdHJpbmcg
Y29va2llc0ZvckRPTShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25z
dCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBXZWJDb3JlOjpEYXRh
YmFzZVN0cmF0ZWd5Ci0gICAgLy8gLSBVc2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotCi0g
ICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKLSAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBs
dWdpbnMoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBX
ZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+Jikgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5Ci0gICAgdmlydHVhbCBib29sIGlz
TGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoLCBjb25zdCBXZWJD
b3JlOjpVUkwmLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBhZGRWaXNpdGVkTGluayhXZWJDb3JlOjpQYWdlKiwgV2ViQ29yZTo6TGlua0hhc2gp
IG92ZXJyaWRlOwotfTsKLQotI2VuZGlmIC8vIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYlZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2ZlMDM4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotI2luY2x1ZGUgIkNocm9tZUNs
aWVudFdpbkNFLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRXaW5DRS5oIgotI2luY2x1
ZGUgIkRyYWdDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudFdpbkNFLmgiCi0j
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFdpbkNFLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5o
IgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFdpbkNFLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlICJXZWJDb3JlSW5zdGFuY2VIYW5kbGUuaCIKLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3QgTFBD
V1NUUiBrV2ViVmlld1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViVmlld1dpbmRvd0NsYXNzIjsKLQot
Ci1MUkVTVUxUIENBTExCQUNLIFdlYlZpZXc6OndlYlZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIGlmIChXZWJW
aWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4oR2V0V2luZG93TG9uZyho
V25kLCAwKSkpCi0gICAgICAgIHJldHVybiB3ZWJWaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGxvYWRS
ZXNvdXJjZUludG9CdWZmZXIoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi0KLVdlYlZpZXc6OldlYlZpZXcoSFdORCBod25kLCB1
bnNpZ25lZCBmZWF0dXJlcykKLSAgICA6IG1fZnJhbWUoMCkKLSAgICAsIG1fcGFnZSgwKQotICAg
ICwgbV9wYXJlbnRXaW5kb3dIYW5kbGUoaHduZCkKLSAgICAsIG1fZW5hYmxlRG91YmxlQnVmZmVy
KGZlYXR1cmVzICYgRW5hYmxlRG91YmxlQnVmZmVyaW5nKQotewotICAgIFJFQ1QgcmNDbGllbnQ7
Ci0gICAgR2V0Q2xpZW50UmVjdChod25kLCAmcmNDbGllbnQpOwotCi0gICAgbV93aW5kb3dIYW5k
bGUgPSBDcmVhdGVXaW5kb3coa1dlYlZpZXdXaW5kb3dDbGFzc05hbWUsIDAsIFdTX0NISUxELAot
ICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBod25kLCAwLCBXZWJD
b3JlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKLQotICAgIFNldFdpbmRvd0xvbmcobV93aW5kb3dI
YW5kbGUsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9ORz4odGhpcykpOwotCi0gICAgTW92ZVdpbmRv
dyhtX3dpbmRvd0hhbmRsZSwgMCwgMCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSwg
VFJVRSk7Ci0gICAgU2hvd1dpbmRvdyhtX3dpbmRvd0hhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBQ
YWdlOjpQYWdlQ2xpZW50cyBwYWdlQ2xpZW50czsKLSAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGll
bnQgPSBuZXcgV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRSh0aGlzKTsKLSAgICBwYWdlQ2xpZW50
cy5jb250ZXh0TWVudUNsaWVudCA9IG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50V2luQ0Uo
dGhpcyk7Ci0gICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gbmV3IFdlYktpdDo6RWRpdG9y
Q2xpZW50V2luQ0UodGhpcyk7Ci0gICAgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCA9IG5ldyBXZWJL
aXQ6OkRyYWdDbGllbnRXaW5DRSgpOwotICAgIHBhZ2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9
IG5ldyBXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdpbkNFKHRoaXMpOwotICAgIG1fcGFnZSA9IG5l
dyBQYWdlKHBhZ2VDbGllbnRzKTsKLQotICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFnZS0+
c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxNCk7Ci0g
ICAgc2V0dGluZ3Muc2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0aW5ncy5zZXRNaW5p
bXVtRm9udFNpemUoOCk7Ci0gICAgc2V0dGluZ3Muc2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg4
KTsKLSAgICBzZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkKHRydWUpOwotICAgIHNldHRpbmdzLnNl
dExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKLQotICAgIFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRSogbG9hZGVyQ2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnRXaW5DRSh0aGlzKTsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6OmNyZWF0ZSht
X3BhZ2UsIDAsIGxvYWRlckNsaWVudCk7Ci0gICAgbV9mcmFtZSA9IGZyYW1lLmdldCgpOwotICAg
IGxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9mcmFtZSk7Ci0KLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLmluaXQoKTsKLQotICAgIGlmICh2aWV3KCkpIHsKLSAgICAgICAgUkVDVCB3aW5kb3dSZWN0
OwotICAgICAgICBmcmFtZVJlY3QoJndpbmRvd1JlY3QpOwotICAgICAgICB2aWV3KCktPnJlc2l6
ZShJbnRSZWN0KHdpbmRvd1JlY3QpLnNpemUoKSk7Ci0gICAgfQotfQotCi1XZWJWaWV3Ojp+V2Vi
VmlldygpCi17Ci0gICAgZGVsZXRlIG1fcGFnZTsKLSAgICBEZXN0cm95V2luZG93KG1fd2luZG93
SGFuZGxlKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKEhJTlNUQU5DRSBpbnN0YW5j
ZUhhbmRsZSkKLXsKLSAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBXVEY6Omlu
aXRpYWxpemVNYWluVGhyZWFkKCk7Ci0gICAgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmluaXRp
YWxpemUoKTsKLQotICAgIFdlYkNvcmU6OnNldEluc3RhbmNlSGFuZGxlKGluc3RhbmNlSGFuZGxl
KTsKLQotICAgIFdORENMQVNTIHdjOwotICAgIHdjLnN0eWxlICAgICAgICAgID0gQ1NfREJMQ0xL
UzsKLSAgICB3Yy5scGZuV25kUHJvYyAgICA9IFdlYlZpZXc6OndlYlZpZXdXbmRQcm9jOwotICAg
IHdjLmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Yy5jYlduZEV4dHJhICAgICA9IHNpemVvZih2
b2lkICopOwotICAgIHdjLmhJbnN0YW5jZSAgICAgID0gaW5zdGFuY2VIYW5kbGU7Ci0gICAgd2Mu
aEljb24gICAgICAgICAgPSAwOwotICAgIHdjLmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigw
LCBJRENfQVJST1cpOwotICAgIHdjLmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Yy5scHN6TWVu
dU5hbWUgICA9IDA7Ci0gICAgd2MubHBzekNsYXNzTmFtZSAgPSBrV2ViVmlld1dpbmRvd0NsYXNz
TmFtZTsKLQotICAgIFJlZ2lzdGVyQ2xhc3MoJndjKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpjbGVh
bnVwKCkKLXsKLSAgICBVbnJlZ2lzdGVyQ2xhc3Moa1dlYlZpZXdXaW5kb3dDbGFzc05hbWUsIFdl
YkNvcmU6Omluc3RhbmNlSGFuZGxlKCkpOwotfQotCi1QYXNzUmVmUHRyPEZyYW1lPiBXZWJWaWV3
OjpjcmVhdGVGcmFtZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwKLSAg
ICBib29sIC8qYWxsb3dzU2Nyb2xsaW5nKi8sIGludCAvKm1hcmdpbldpZHRoKi8sIGludCAvKm1h
cmdpbkhlaWdodCovLCBGcmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFICpsb2FkZXJDbGllbnQgPSBuZXcgV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFKHRoaXMpOwotICAgIFJlZlB0cjxGcmFtZT4gY2hpbGRGcmFtZSA9IEZyYW1lOjpj
cmVhdGUobV9wYWdlLCBvd25lckVsZW1lbnQsIGxvYWRlckNsaWVudCk7Ci0gICAgbG9hZGVyQ2xp
ZW50LT5zZXRGcmFtZShjaGlsZEZyYW1lLmdldCgpKTsKLQotICAgIHBhcmVudEZyYW1lLT50cmVl
KCkuYXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7Ci0gICAgY2hpbGRGcmFtZS0+dHJlZSgpLnNldE5h
bWUobmFtZSk7Ci0gICAgY2hpbGRGcmFtZS0+aW5pdCgpOwotCi0gICAgLy8gVGhlIGNyZWF0aW9u
IG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdGhhdCByZW1v
dmVkIGl0IGZyb20gdGhlIHBhZ2UgYWxyZWFkeS4KLSAgICBpZiAoIWNoaWxkRnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCkubG9hZFVS
TEludG9DaGlsZEZyYW1lKHVybCwgcmVmZXJyZXIsIGNoaWxkRnJhbWUuZ2V0KCkpOwotCi0gICAg
Ly8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRo
ZSBkb2N1bWVudC4KLSAgICBpZiAoIWNoaWxkRnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2hpbGRGcmFtZS5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYlZpZXc6OnJ1bkphdmFTY3JpcHRD
b25maXJtKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJWaWV3OjpydW5KYXZhU2NyaXB0UHJvbXB0
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmlu
ZyYgcmVzdWx0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYlZpZXc6OmZyYW1lUmVjdChSRUNUKiByZWN0KSBjb25zdAotewotICAgIEdl
dFdpbmRvd1JlY3QobV93aW5kb3dIYW5kbGUsIHJlY3QpOwotfQotCi1GcmFtZVZpZXcqIFdlYlZp
ZXc6OnZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+dmlldygp
IDogMDsKLX0KLQotdm9pZCBXZWJWaWV3Ojpsb2FkKExQQ1dTVFIgdXJsKQotewotICAgIGxvYWQo
U3RyaW5nKHVybCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmxvYWQoY29uc3QgU3RyaW5nICZ1cmwp
Ci17Ci0gICAgbG9hZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QodXJsKSk7Ci19Ci0KLXZvaWQg
V2ViVmlldzo6bG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgJnJlcXVlc3QpCi17
Ci0gICAgZnJhbWUoKS0+bG9hZGVyKCkubG9hZChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lKCksIHJl
cXVlc3QpKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpyZWxvYWQoKQotewotICAgIGZyYW1lKCktPmxv
YWRlcigpLnJlbG9hZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnN0b3AoKQotewotICAgIGZyYW1l
KCktPmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cGFpbnQo
SERDIGhEQywgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSB2aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihjbGlwUmVj
dC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3QubWF4WCgpLCBjbGlwUmVjdC5tYXhZKCkpKTsK
LSAgICBTZWxlY3RDbGlwUmduKGhEQywgY2xpcFJnbi5nZXQoKSk7Ci0KLSAgICBmcmFtZVZpZXct
PnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhoREMpOwotICAgIGZyYW1lVmlldy0+cGFpbnQoJmdjLCBjbGlwUmVjdCk7Ci19
Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlUGFpbnQoSFdORCBoV25kKQotewotICAgIFJFQ1QgdXBk
YXRlUmVjdDsKLSAgICBpZiAoIUdldFVwZGF0ZVJlY3QoaFduZCwgJnVwZGF0ZVJlY3QsIGZhbHNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUEFJTlRTVFJVQ1QgcHM7Ci0gICAgSERD
IGhEQyA9IEJlZ2luUGFpbnQobV93aW5kb3dIYW5kbGUsICZwcyk7Ci0KLSAgICBJbnRSZWN0IGNs
aXBSZWN0KHVwZGF0ZVJlY3QpOwotCi0gICAgaWYgKG1fZW5hYmxlRG91YmxlQnVmZmVyKSB7Ci0g
ICAgICAgIGlmICghbV9kb3VibGVCdWZmZXJEQykgewotICAgICAgICAgICAgUkVDVCByY0NsaWVu
dDsKLSAgICAgICAgICAgIEdldENsaWVudFJlY3QobV93aW5kb3dIYW5kbGUsICZyY0NsaWVudCk7
Ci0KLSAgICAgICAgICAgIG1fZG91YmxlQnVmZmVyREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQyhoREMpKTsKLSAgICAgICAgICAgIG1fZG91YmxlQnVmZmVyQml0bWFwID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlQml0bWFwKGhEQywgcmNDbGllbnQucmln
aHQsIHJjQ2xpZW50LmJvdHRvbSkpOwotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KG1fZG91Ymxl
QnVmZmVyREMuZ2V0KCksIG1fZG91YmxlQnVmZmVyQml0bWFwLmdldCgpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHBhaW50KG1fZG91YmxlQnVmZmVyREMuZ2V0KCksIGNsaXBSZWN0KTsKLQotICAg
ICAgICBCaXRCbHQoaERDLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lk
dGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCksIG1fZG91YmxlQnVmZmVyREMuZ2V0KCksIGNsaXBSZWN0
LngoKSwgY2xpcFJlY3QueSgpLCBTUkNDT1BZKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFpbnQo
aERDLCBjbGlwUmVjdCk7Ci0KLSAgICBFbmRQYWludChtX3dpbmRvd0hhbmRsZSwgJnBzKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVNb3VzZUV2ZW50KEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAg
IHN0YXRpYyBMT05HIGdsb2JhbENsaWNrQ291bnQ7Ci0gICAgc3RhdGljIEludFBvaW50IGdsb2Jh
bFByZXZQb2ludDsKLSAgICBzdGF0aWMgTW91c2VCdXR0b24gZ2xvYmFsUHJldkJ1dHRvbjsKLSAg
ICBzdGF0aWMgTE9ORyBnbG9iYWxQcmV2TW91c2VEb3duVGltZTsKLQotICAgIC8vIENyZWF0ZSBv
dXIgZXZlbnQuCi0gICAgLy8gT24gV01fTU9VU0VMRUFWRSB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG1v
dXNlb3V0IGV2ZW50LCBzbyB3ZSBmb3JjZSB0aGUgcG9zaXRpb24KLSAgICAvLyBvZiB0aGUgZXZl
bnQgdG8gYmUgYXQgKE1JTlNIT1JULCBNSU5TSE9SVCkuCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IG1vdXNlRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotCi0gICAgYm9vbCBp
bnNpZGVUaHJlc2hvbGQgPSBhYnMoZ2xvYmFsUHJldlBvaW50LngoKSAtIG1vdXNlRXZlbnQucG9z
aXRpb24oKS54KCkpIDwgOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYRE9VQkxFQ0xLKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgYWJzKGdsb2JhbFByZXZQb2ludC55KCkgLSBtb3VzZUV2
ZW50LnBvc2l0aW9uKCkueSgpKSA8IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWURPVUJMRUNMSyk7
Ci0gICAgTE9ORyBtZXNzYWdlVGltZSA9IDA7Ci0KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsK
LSAgICBpZiAobWVzc2FnZSA9PSBXTV9MQlVUVE9ORE9XTiB8fCBtZXNzYWdlID09IFdNX01CVVRU
T05ET1dOIHx8IG1lc3NhZ2UgPT0gV01fUkJVVFRPTkRPV04pIHsKLSAgICAgICAgLy8gRklYTUU6
IEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSAicmlnaHQiIHdheSB0byBkbyB0aGlzCi0gICAg
ICAgIC8vIGJ1dCB3aXRob3V0IHRoaXMgY2FsbCwgd2UgbmV2ZXIgYmVjb21lIGZvY3VzZWQgc2lu
Y2Ugd2UgZG9uJ3QgYWxsb3cKLSAgICAgICAgLy8gdGhlIGRlZmF1bHQgaGFuZGxpbmcgb2YgbW91
c2UgZXZlbnRzLgotICAgICAgICBTZXRGb2N1cyhtX3dpbmRvd0hhbmRsZSk7Ci0KLSAgICAgICAg
UGxhdGZvcm1Nb3VzZUV2ZW50IG1vdmVFdmVudChoV25kLCBXTV9NT1VTRU1PVkUsIDAsIGxQYXJh
bSwgZmFsc2UpOwotICAgICAgICBtb3ZlRXZlbnQuc2V0Q2xpY2tDb3VudCgwKTsKLSAgICAgICAg
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZU1vdmVFdmVudCht
b3ZlRXZlbnQpOwotCi0gICAgICAgIC8vIEFsd2F5cyBzdGFydCBjYXB0dXJpbmcgZXZlbnRzIHdo
ZW4gdGhlIG1vdXNlIGdvZXMgZG93biBpbiBvdXIgSFdORC4KLSAgICAgICAgU2V0Q2FwdHVyZSht
X3dpbmRvd0hhbmRsZSk7Ci0KLSAgICAgICAgaWYgKGluc2lkZVRocmVzaG9sZCAmJiBtb3VzZUV2
ZW50LmJ1dHRvbigpID09IGdsb2JhbFByZXZCdXR0b24pCi0gICAgICAgICAgICBnbG9iYWxDbGlj
a0NvdW50Kys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBjbGljayBj
b3VudC4KLSAgICAgICAgICAgIGdsb2JhbENsaWNrQ291bnQgPSAxOwotICAgICAgICBnbG9iYWxQ
cmV2TW91c2VEb3duVGltZSA9IG1lc3NhZ2VUaW1lOwotICAgICAgICBnbG9iYWxQcmV2QnV0dG9u
ID0gbW91c2VFdmVudC5idXR0b24oKTsKLSAgICAgICAgZ2xvYmFsUHJldlBvaW50ID0gbW91c2VF
dmVudC5wb3NpdGlvbigpOwotCi0gICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9i
YWxDbGlja0NvdW50KTsKLSAgICAgICAgaGFuZGxlZCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZl
bnRIYW5kbGVyKCkuaGFuZGxlTW91c2VQcmVzc0V2ZW50KG1vdXNlRXZlbnQpOwotICAgIH0gZWxz
ZSBpZiAobWVzc2FnZSA9PSBXTV9MQlVUVE9OREJMQ0xLIHx8IG1lc3NhZ2UgPT0gV01fTUJVVFRP
TkRCTENMSyB8fCBtZXNzYWdlID09IFdNX1JCVVRUT05EQkxDTEspIHsKLSAgICAgICAgZ2xvYmFs
Q2xpY2tDb3VudCsrOwotICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xvYmFsQ2xp
Y2tDb3VudCk7Ci0gICAgICAgIGhhbmRsZWQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmhhbmRsZU1vdXNlUHJlc3NFdmVudChtb3VzZUV2ZW50KTsKLSAgICB9IGVsc2UgaWYg
KG1lc3NhZ2UgPT0gV01fTEJVVFRPTlVQIHx8IG1lc3NhZ2UgPT0gV01fTUJVVFRPTlVQIHx8IG1l
c3NhZ2UgPT0gV01fUkJVVFRPTlVQKSB7Ci0gICAgICAgIC8vIFJlY29yZCB0aGUgZ2xvYmFsIHBv
c2l0aW9uIGFuZCB0aGUgYnV0dG9uIG9mIHRoZSB1cC4KLSAgICAgICAgZ2xvYmFsUHJldkJ1dHRv
biA9IG1vdXNlRXZlbnQuYnV0dG9uKCk7Ci0gICAgICAgIGdsb2JhbFByZXZQb2ludCA9IG1vdXNl
RXZlbnQucG9zaXRpb24oKTsKLSAgICAgICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGdsb2Jh
bENsaWNrQ291bnQpOwotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigp
LmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KG1vdXNlRXZlbnQpOwotICAgICAgICBSZWxlYXNlQ2Fw
dHVyZSgpOwotICAgIH0gZWxzZSBpZiAobWVzc2FnZSA9PSBXTV9NT1VTRU1PVkUpIHsKLSAgICAg
ICAgaWYgKCFpbnNpZGVUaHJlc2hvbGQpCi0gICAgICAgICAgICBnbG9iYWxDbGlja0NvdW50ID0g
MDsKLSAgICAgICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGdsb2JhbENsaWNrQ291bnQpOwot
ICAgICAgICBoYW5kbGVkID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5tb3Vz
ZU1vdmVkKG1vdXNlRXZlbnQpOwotICAgIH0KLQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1i
b29sIFdlYlZpZXc6OmhhbmRsZU1vdXNlV2hlZWwoSFdORCBoV25kLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtLCBib29sIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQgd2hlZWxFdmVudChoV25kLCB3UGFyYW0sIGxQYXJhbSwgaXNIb3Jpem9udGFsKTsKLSAgICBy
ZXR1cm4gZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50
KTsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5Q29k
ZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bikKLXsKLSAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotCi0g
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KG1fd2luZG93SGFuZGxlLCB2aXJ0dWFs
S2V5Q29kZSwga2V5RGF0YSwgUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93biwgc3lzdGVtS2V5RG93
bik7Ci0gICAgYm9vbCBoYW5kbGVkID0gZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoa2V5
RXZlbnQpOwotCi0gICAgLy8gVGhlc2UgZXZlbnRzIGNhbm5vdCBiZSBjYW5jZWxlZCwgYW5kIHdl
IGhhdmUgbm8gZGVmYXVsdCBoYW5kbGluZyBmb3IgdGhlbS4KLSAgICAvLyBGSVhNRTogbWF0Y2gg
SUUgbGlzdCBtb3JlIGNsb3NlbHksIHNlZSA8aHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS9tczUzNjkzOC5hc3B4Pi4KLSAgICBpZiAoc3lzdGVtS2V5RG93biAmJiB2aXJ0
dWFsS2V5Q29kZSAhPSBWS19SRVRVUk4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChoYW5kbGVkKSB7Ci0gICAgICAgIE1TRyBtc2c7Ci0gICAgICAgIGlmICghc3lzdGVtS2V5RG93
bikKLSAgICAgICAgICAgIDo6UGVla01lc3NhZ2UoJm1zZywgbV93aW5kb3dIYW5kbGUsIFdNX0NI
QVIsIFdNX0NIQVIsIFBNX1JFTU9WRSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1ib29sIFdlYlZpZXc6OmhhbmRsZUtleVByZXNzKFdQ
QVJBTSBjaGFyQ29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bikKLXsKLSAg
ICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotCi0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KG1fd2luZG93SGFu
ZGxlLCBjaGFyQ29kZSwga2V5RGF0YSwgUGxhdGZvcm1FdmVudDo6Q2hhciwgc3lzdGVtS2V5RG93
bik7Ci0gICAgLy8gSUUgZG9lcyBub3QgZGlzcGF0Y2gga2V5cHJlc3MgZXZlbnQgZm9yIFdNX1NZ
U0NIQVIuCi0gICAgaWYgKHN5c3RlbUtleURvd24pCi0gICAgICAgIHJldHVybiBmcmFtZS5ldmVu
dEhhbmRsZXIoKS5oYW5kbGVBY2Nlc3NLZXkoa2V5RXZlbnQpOwotICAgIGlmIChmcmFtZS5ldmVu
dEhhbmRsZXIoKS5rZXlFdmVudChrZXlFdmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZXc6OmhhbmRsZUtleVVwKFdQQVJBTSB2
aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bikKLXsKLSAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQobV93aW5kb3dIYW5kbGUsIHZpcnR1YWxL
ZXlDb2RlLCBrZXlEYXRhLCBQbGF0Zm9ybUV2ZW50OjpLZXlVcCwgc3lzdGVtS2V5RG93bik7Ci0K
LSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIHJldHVybiBmcmFtZS5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChrZXlF
dmVudCk7Ci19Ci0KLUxSRVNVTFQgV2ViVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBib29sIGhhbmRsZWQg
PSBmYWxzZTsKLQotICAgIGlmICh2aWV3KCkpIHsKLSAgICAgICAgc3dpdGNoIChtZXNzYWdlKSB7
Ci0gICAgICAgIGNhc2UgV01fUEFJTlQ6Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlUGFp
bnQoaFduZCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX01PVVNFTU9W
RToKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9O
RE9XTjoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9MQlVU
VE9OREJMQ0xLOgotICAgICAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2Ug
V01fUkJVVFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNh
c2UgV01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgICAg
IGlmICh2aWV3KCktPmRpZEZpcnN0TGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9
IGhhbmRsZU1vdXNlRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgotICAgICAgICAgICAg
aWYgKHZpZXcoKS0+ZGlkRmlyc3RMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0g
aGFuZGxlTW91c2VXaGVlbChoV25kLCB3UGFyYW0sIGxQYXJhbSwgd1BhcmFtICYgTUtfU0hJRlQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9TWVNLRVlET1dOOgotICAg
ICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUtleURvd24od1BhcmFtLCBsUGFyYW0sIHRydWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9LRVlET1dOOgotICAgICAgICAg
ICAgaGFuZGxlZCA9IGhhbmRsZUtleURvd24od1BhcmFtLCBsUGFyYW0sIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fU1lTS0VZVVA6Ci0gICAgICAgICAgICBo
YW5kbGVkID0gaGFuZGxlS2V5VXAod1BhcmFtLCBsUGFyYW0sIHRydWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9LRVlVUDoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBo
YW5kbGVLZXlVcCh3UGFyYW0sIGxQYXJhbSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBXTV9TWVNDSEFSOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUtl
eVByZXNzKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgV01fQ0hBUjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVLZXlQcmVzcyh3
UGFyYW0sIGxQYXJhbSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBXTV9DTE9TRToKLSAgICAgICAgICAgIFBvc3RNZXNzYWdlKG1fcGFyZW50V2luZG93SGFuZGxl
LCBXTV9DTE9TRSwgd1BhcmFtLCBsUGFyYW0pOwotICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGFuZGxlZCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1YWQ2OTY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVmlld19oCi0jZGVm
aW5lIFdlYlZpZXdfaAotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1j
bGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7Ci19Ci0KLWNsYXNzIFdlYlZpZXcgewotcHVibGljOgotICAgIGVudW0gRmVhdHVyZXMg
ewotICAgICAgICBOb0ZlYXR1cmUgPSAwLAotICAgICAgICBFbmFibGVEb3VibGVCdWZmZXJpbmcg
PSAxIDw8IDAKLSAgICB9OwotCi0gICAgV2ViVmlldyhIV05EIGh3bmQsIHVuc2lnbmVkIGZlYXR1
cmVzID0gRW5hYmxlRG91YmxlQnVmZmVyaW5nKTsKLSAgICB+V2ViVmlldygpOwotCi0gICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZShISU5TVEFOQ0UgaW5zdGFuY2VIYW5kbGUpOwotICAgIHN0YXRp
YyB2b2lkIGNsZWFudXAoKTsKLQotICAgIEhXTkQgd2luZG93SGFuZGxlKCkgY29uc3QgeyByZXR1
cm4gbV93aW5kb3dIYW5kbGU7IH0KLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lOyB9Ci0gICAgV2ViQ29yZTo6UGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZTsgfQotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldygpIGNvbnN0OwotCi0g
ICAgdm9pZCBsb2FkKExQQ1dTVFIgdXJsKTsKLSAgICB2b2lkIGxvYWQoY29uc3QgV1RGOjpTdHJp
bmcgJnVybCk7Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCAm
cmVxdWVzdCk7Ci0gICAgdm9pZCByZWxvYWQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLQotICAgIHZv
aWQgZnJhbWVSZWN0KFJFQ1QqIHJlY3QpIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCosIAotICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dTY3JvbGxpbmcsIGludCBtYXJnaW5X
aWR0aCwgaW50IG1hcmdpbkhlaWdodCwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZyYW1lKTsKLQot
ICAgIC8vIEphdmFTY3JpcHQgRGlhbG9nCi0gICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29u
c3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0o
Y29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgcnVuSmF2YVNjcmlwdFByb21w
dChjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRlZmF1bHRW
YWx1ZSwgV1RGOjpTdHJpbmcmIHJlc3VsdCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIExSRVNV
TFQgQ0FMTEJBQ0sgd2ViVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgIExSRVNVTFQgd25kUHJvYyhIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAgICBib29sIGhhbmRsZVBhaW50KEhXTkQgaFduZCk7Ci0g
ICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLSAgICBib29sIGhhbmRsZU1vdXNlV2hlZWwoSFdORCBo
V25kLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sIGlzSG9yaXpvbnRhbCk7Ci0g
ICAgYm9vbCBoYW5kbGVLZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURh
dGEsIGJvb2wgc3lzdGVtS2V5RG93bik7Ci0gICAgYm9vbCBoYW5kbGVLZXlQcmVzcyhXUEFSQU0g
Y2hhckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pOwotICAgIGJvb2wg
aGFuZGxlS2V5VXAoV1BBUkFNIHZpcnR1YWxLZXlDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBz
eXN0ZW1LZXlEb3duKTsKLQotICAgIHZvaWQgcGFpbnQoSERDIGhEQywgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QpOwotCi0gICAgV2ViQ29yZTo6RnJhbWUqIG1fZnJhbWU7Ci0gICAg
V2ViQ29yZTo6UGFnZSogbV9wYWdlOwotICAgIEhXTkQgbV9wYXJlbnRXaW5kb3dIYW5kbGU7Ci0g
ICAgSFdORCBtX3dpbmRvd0hhbmRsZTsKLSAgICBib29sIG1fZW5hYmxlRG91YmxlQnVmZmVyOwot
ICAgIEdESU9iamVjdDxIREM+IG1fZG91YmxlQnVmZmVyREM7Ci0gICAgR0RJT2JqZWN0PEhCSVRN
QVA+IG1fZG91YmxlQnVmZmVyQml0bWFwOwotfTsKLQotI2VuZGlmIC8vIFdlYlZpZXdfaApkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zV2luQ0UuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMzdhNDgu
LjAwMDAwMDAKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DRS5jbWFrZQorKysgL2Rldi9u
dWxsCkBAIC0xLDMwICswLDAgQEAKLWluY2x1ZGUoT3B0aW9uc1dpbmRvd3MpCi0KLXNldChQT1JU
X0ZBTExCQUNLIFdpbikKLQotYWRkX2RlZmluaXRpb25zKC1EX0NFX0NSVF9BTExPV19XSU5fTUlO
TUFYKQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9FWFBPUlRfTUFDUk9TPTApCi1hZGRfZGVm
aW5pdGlvbnMoLURXVEZfVVNFX1dJTkdEST0xKQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9X
SU5JTkVUPTEpCi1hZGRfZGVmaW5pdGlvbnMoLURXSU5DRUJBU0lDKQotYWRkX2RlZmluaXRpb25z
KC1ESlNfTk9fRVhQT1JUKQotYWRkX2RlZmluaXRpb25zKC1ESEFWRV9BQ0NFU1NJQklMSVRZPTAp
Ci1hZGRfZGVmaW5pdGlvbnMoLURKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTj0w
eDIwMDAwMCkKLQotaWYgKE5PVCAzUkRQQVJUWV9ESVIpCi0gICAgaWYgKEVYSVNUUyAkRU5We1dF
QktJVFRISVJEUEFSVFlESVJ9KQotICAgICAgICBzZXQoM1JEUEFSVFlfRElSICRFTlZ7V0VCS0lU
VEhJUkRQQVJUWURJUn0pCi0gICAgZWxzZSAoKQotICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9S
ICJZb3UgbXVzdCBwcm92aWRlIGEgdGhpcmQgcGFydHkgZGlyZWN0b3J5IGZvciBXaW5DRSBwb3J0
LiIpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KLWluY2x1ZGVfZGlyZWN0b3JpZXMoJHszUkRQ
QVJUWV9ESVJ9L2NlLWNvbXBhdCkKLWFkZF9zdWJkaXJlY3RvcnkoJHszUkRQQVJUWV9ESVJ9ICIk
e0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vM3JkcGFydHkiKQotCi1XRUJLSVRfT1BUSU9OX0JF
R0lOKCkKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EUkFHX1NVUFBP
UlQgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZUUERJUiBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5TUEVDVE9SIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFMTE9DIE9O
KQotV0VCS0lUX09QVElPTl9FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdFBh
Y2thZ2luZy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UKaW5kZXgg
NWY5YjMxOC4uOTY5ZGMyZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2lu
Zy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0UGFja2FnaW5nLmNtYWtlCkBAIC0xMTks
NyArMTE5LDYgQEAgaWYgKE5PVCBERUZJTkVEIENQQUNLX1NPVVJDRV9JR05PUkVfRklMRVMpCiAg
ICAgICAgICAgICAiL3F0LyIgIi9RdC8iICJxdFxcXFwuIiAiUXRcXFxcLiIKICAgICAgICAgICAg
ICIvcXQ0LyIgIi9RdDQvIiAicXQ0XFxcXC4iICJRdDRcXFxcLiIKICAgICAgICAgICAgICIvd2lu
LyIgIi9XaW4vIiAid2luXFxcXC4iICJXaW5cXFxcLiIKLSAgICAgICAgICAgICIvd2luY2UvIiAi
L1dpbmNlLyIgIndpbmNlXFxcXC4iICJXaW5jZVxcXFwuIgogICAgICAgICAgICAgIi93eGNvZGUv
IiAiL1d4Y29kZS8iICJ3eGNvZGVcXFxcLiIgIld4Y29kZVxcXFwuIgogICAgICAgICAgICAgIi9X
ZWJLaXRMaWJyYXJpZXMvIgogICAgICAgICAgICAgIi9FbmdsaXNoXFxcXC5scHJvai8iCmRpZmYg
LS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93
a2J1aWxkLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvd2tidWlsZC5weQppbmRleCA0NDFmYTE5Li5kM2NhOTFiIDEwMDY0NAotLS0gYS9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkLnB5CisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQu
cHkKQEAgLTUxLDcgKzUxLDYgQEAgZGVmIF9zaG91bGRfZmlsZV90cmlnZ2VyX2J1aWxkKHRhcmdl
dF9wbGF0Zm9ybSwgZmlsZSk6CiAgICAgICAgICgib3BlbmdsIiwgW10pLAogICAgICAgICAoIm9w
ZW50eXBlIiwgW10pLAogICAgICAgICAoIm9wZW52ZyIsIFtdKSwKLSAgICAgICAgKCJ3aW5jZSIs
IFtdKSwKICAgICAgICAgKCJ3eCIsIFtdKSwKIAogICAgICAgICAjIERpcmVjdG9yaWVzIHRoYXQg
c2hvdWxkIHRyaWdnZXIgYnVpbGRzIG9uIG9ubHkgc29tZSBib3RzLgpAQCAtODQsNyArODMsNiBA
QCBkZWYgX3Nob3VsZF9maWxlX3RyaWdnZXJfYnVpbGQodGFyZ2V0X3BsYXRmb3JtLCBmaWxlKToK
ICAgICAgICAgKHIiL0xJQ0VOU0VbXi9dKyQiLCBbXSksCiAgICAgICAgIChyIkFSTSg/OnY3KT9c
Lig/OmNwcHxoKSQiLCBbXSksCiAgICAgICAgIChyIk1JUFNcLig/OmNwcHxoKSQiLCBbXSksCi0g
ICAgICAgIChyIldpbkNFXC4oPzpjcHB8aHxtbSkkIiwgW10pLAogICAgICAgICAociJcLig/OmJr
bHxtaykkIiwgW10pLAogCiAgICAgICAgICMgUGF0dGVybnMgdGhhdCBzaG91bGQgdHJpZ2dlciBi
dWlsZHMgb24gb25seSBzb21lIGJvdHMuCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVz
dC5weQppbmRleCA1MjYzZDNjLi45OTg3N2M3IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0ZXN0LnB5CisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRf
dW5pdHRlc3QucHkKQEAgLTQ5LDcgKzQ5LDYgQEAgY2xhc3MgU2hvdWxkQnVpbGRUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgKFsiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2ZvbyJdLCBbIm1hYy1sZW9wYXJkIiwgIm1hYy1saW9uIiwgICJtYWMtbW91bnRhaW5s
aW9uIiwgIm1hYy1zbm93bGVvcGFyZCJdKSwKICAgICAgICAgKFsiU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvd3hjb2RlL3dpbi9mb28iXSwgW10pLAogICAgICAgICAoWyJTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0iLCAiU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLmgiXSwgWyJtYWMtbGVvcGFyZCIsICJtYWMtbGlvbiIsICAibWFjLW1v
dW50YWlubGlvbiIsICJtYWMtc25vd2xlb3BhcmQiXSksCi0gICAgICAgIChbIlNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmgiXSwgW10pLAogICAgICAgICAoWyJUb29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9M
ZWFrc1ZpZXdlci9MZWFrc1ZpZXdlci5qcyJdLCBbXSksCiAgICAgXQogCmRpZmYgLS1naXQgYS9U
b29scy9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDczZmIwOTYu
LjRkNGQ1OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0NN
YWtlTGlzdHMudHh0CkBAIC0xNiw4ICsxNiw2IEBAIGVsc2VpZiAoIiR7UE9SVH0iIFNUUkVRVUFM
ICJHVEsiKQogICAgIGlmIChFTkFCTEVfWDExX1RBUkdFVCkKICAgICAgICAgYWRkX3N1YmRpcmVj
dG9yeShEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4pCiAgICAgZW5kaWYgKCkKLWVs
c2VpZiAoIiR7UE9SVH0iIFNUUkVRVUFMICJXaW5DRSIpCi0gICAgYWRkX3N1YmRpcmVjdG9yeShX
aW5DRUxhdW5jaGVyKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9XRUJLSVQyIEFORCBFTkFCTEVf
QVBJX1RFU1RTKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDE4ZGU1ZDkuLjg3Y2NjN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNC0wOS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0
IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5w
eToKKyAgICAgICAgKF9zaG91bGRfZmlsZV90cmlnZ2VyX2J1aWxkKToKKyAgICAgICAgKiBCdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0ZXN0LnB5
OgorICAgICAgICAoU2hvdWxkQnVpbGRUZXN0KToKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHA6CisgICAgICAg
IChEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdl
YmtpdDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3Rvcnk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOgorICAgICAgICAoYXJndW1lbnRzRm9yQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChidWlsdER5bGliUGF0aEZvck5hbWUpOgorICAgICAgICAoaXNBcHBs
ZVdpbldlYktpdCk6CisgICAgICAgIChsYXVuY2hlclBhdGgpOgorICAgICAgICAobGF1bmNoZXJO
YW1lKToKKyAgICAgICAgKHNob3VsZFJlbW92ZUNNYWtlQ2FjaGUpOgorICAgICAgICAoY21ha2VC
YXNlZFBvcnRBcmd1bWVudHMpOgorICAgICAgICAoY21ha2VCYXNlZFBvcnROYW1lKToKKyAgICAg
ICAgKGlzQ01ha2VCdWlsZCk6CisgICAgICAgIChpc1dpbkNFKTogRGVsZXRlZC4KKyAgICAgICAg
KGRldGVybWluZUlzV2luQ0UpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVy
bC9GZWF0dXJlTGlzdC5wbToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90
ZXN0Y2FzZS5weToKKyAgICAgICAgKHRlc3RfYXBhY2hlX2NvbmZpZ19maWxlX25hbWVfZm9yX3Bs
YXRmb3JtKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvbmZpZy5oOgorICAgICAgICAqIFdp
bkNFTGF1bmNoZXIvQ01ha2VMaXN0cy50eHQ6IFJlbW92ZWQuCisgICAgICAgICogV2luQ0VMYXVu
Y2hlci9tYWluLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBndGsvbWFuaWZlc3QudHh0OgorCiAy
MDE0LTA5LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBnZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IHNo
b3VsZCByZWNlaXZlIHRoZSBsaXN0IG9mIGZpbGVzIGZyb20gdGhlIG1ha2VmaWxlCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAKaW5kZXggYTMzMDM2Yi4uMjM1ZDQ4
OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcApAQCAtMjY5
LDcgKzI2OSw2IEBAIFNURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpTZXREYXRhKEZPUk1BVEVU
QyogcGZvcm1hdGV0YywgU1RHTUVESVVNKiBwbWVkaXVtLCBCCiB2b2lkIERSVERhdGFPYmplY3Q6
OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JN
QVRFVEMqIHBGbXRTcmMpCiB7CiAgICAgc3dpdGNoIChwTWVkU3JjLT50eW1lZCkgewotI2lmICFP
UyhXSU5DRSkKICAgICBjYXNlIFRZTUVEX0hHTE9CQUw6CiAgICAgICAgIHBNZWREZXN0LT5oR2xv
YmFsID0gc3RhdGljX2Nhc3Q8SEdMT0JBTD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oR2xv
YmFsLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOwogICAgICAgICBicmVhazsKQEAgLTI4NSw3ICsy
ODQsNiBAQCB2b2lkIERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVz
dCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVAogICAgIGNhc2UgVFlNRURfRklMRToKICAg
ICAgICAgcE1lZFNyYy0+bHBzekZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8TFBPTEVTVFI+KE9sZUR1
cGxpY2F0ZURhdGEocE1lZFNyYy0+bHBzekZpbGVOYW1lLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkp
OwogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgVFlNRURfSVNUUkVBTToKICAgICAg
ICAgcE1lZERlc3QtPnBzdG0gPSBwTWVkU3JjLT5wc3RtOwogICAgICAgICBwTWVkU3JjLT5wc3Rt
LT5BZGRSZWYoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9v
bHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggZDk2ZDk4Ny4uYWJlYTYxNiAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQKQEAgLTk2LDcgKzk2LDYgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29w
dGlvbnMgdG8gcGFzcyB0byBidWlsZCBzeXN0ZW1dCiAgIC0tZWZsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCdWlsZCB0aGUgRUZMIHBvcnQKICAgLS1ndGsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJ1aWxkIHRoZSBHVEsrIHBvcnQKICAgLS13aW5jYWlybyAgICAgICAgICAgICAg
ICAgICAgICAgIEJ1aWxkIHVzaW5nIENhaXJvIChyYXRoZXIgdGhhbiBDb3JlR3JhcGhpY3MpIG9u
IFdpbmRvd3MKLSAgLS13aW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBX
aW5DRSBwb3J0CiAKICAgLS1pbnNwZWN0b3ItZnJvbnRlbmQgICAgICAgICAgICAgIENvcHkgV2Vi
IEluc3BlY3RvciB1c2VyIGludGVyZmFjZSByZXNvdXJjZXMgdG8gdGhlIGJ1aWxkIGRpcmVjdG9y
eQogCkBAIC0yNDIsMTEgKzI0MSw5IEBAIGlmIChpc0luc3BlY3RvckZyb250ZW5kKCkpIHsKIGlm
IChpc0NNYWtlQnVpbGQoKSkgewogCiAgICAgIyBCeSBkZWZhdWx0IHdlIGJ1aWxkIHVzaW5nIGFs
bCBvZiB0aGUgYXZhaWxhYmxlIENQVXMuCi0gICAgaWYgKCFpc1dpbkNFKCkpIHsKLSAgICAgICAg
JG1ha2VBcmdzIC49ICgkbWFrZUFyZ3MgPyAiICIgOiAiIikgLiAiLWoiIC4gbnVtYmVyT2ZDUFVz
KCkgaWYgJG1ha2VBcmdzICF+IC8talxzKlxkKy87Ci0gICAgICAgIG15ICRtYXhDUFVMb2FkID0g
bWF4Q1BVTG9hZCgpIGlmICRtYWtlQXJncyAhfiAvLWxccypcZCtcLj9cZCovOwotICAgICAgICAk
bWFrZUFyZ3MgLj0gIiAtbCIgLiBtYXhDUFVMb2FkKCkgaWYgZGVmaW5lZCAkbWF4Q1BVTG9hZDsK
LSAgICB9CisgICAgJG1ha2VBcmdzIC49ICgkbWFrZUFyZ3MgPyAiICIgOiAiIikgLiAiLWoiIC4g
bnVtYmVyT2ZDUFVzKCkgaWYgJG1ha2VBcmdzICF+IC8talxzKlxkKy87CisgICAgbXkgJG1heENQ
VUxvYWQgPSBtYXhDUFVMb2FkKCkgaWYgJG1ha2VBcmdzICF+IC8tbFxzKlxkK1wuP1xkKi87Cisg
ICAgJG1ha2VBcmdzIC49ICIgLWwiIC4gbWF4Q1BVTG9hZCgpIGlmIGRlZmluZWQgJG1heENQVUxv
YWQ7CiAKICAgICAjIFdlIHJlbW92ZSBDTWFrZUNhY2hlIHRvIGF2b2lkIHRoZSBib3RzIHRvIHJl
dXNlIGNhY2hlZCBmbGFncyB3aGVuCiAgICAgIyB3ZSBlbmFibGUgbmV3IGZlYXR1cmVzLiBUaGlz
IGZvcmNlcyBhIHJlY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0LWJ1aWxkLWRpcmVjdG9yeSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVjdG9y
eQppbmRleCAwYTIwN2ZjLi43NWEwMGZmZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXQtYnVpbGQtZGlyZWN0b3J5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVj
dG9yeQpAQCAtNTAsNyArNTAsNiBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXQogICAt
LWVmbCAgICAgICAgICAgICAgICAgRmluZCB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciB0aGUgRUZM
IHBvcnQKICAgLS1ndGsgICAgICAgICAgICAgICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBm
b3IgdGhlIEdUSysgcG9ydAogICAtLXdpbmNhaXJvICAgICAgICAgICAgRmluZCB0aGUgYnVpbGQg
ZGlyZWN0b3J5IGZvciB1c2luZyBDYWlybyAocmF0aGVyIHRoYW4gQ29yZUdyYXBoaWNzKSBvbiBX
aW5kb3dzCi0gIC0td2luY2UgICAgICAgICAgICAgICBGaW5kIHRoZSBidWlsZCBkaXJlY3Rvcnkg
Zm9yIHRoZSBXaW5DRSBwb3J0CiAKIEVpdGhlciAtLWNvbmZpZ3VyYXRpb24gb3IgLS10b3AtbGV2
ZWwgaXMgcmVxdWlyZWQuCiBFT0YKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGly
cy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCA4OTgwZTNiLi4yOGI0ZDYy
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCkBAIC0xMDYsNyArMTA2LDYgQEAgbXkgJG5tUGF0aDsKIG15ICRv
c1hWZXJzaW9uOwogbXkgJGdlbmVyYXRlRHN5bTsKIG15ICRpc0d0azsKLW15ICRpc1dpbkNFOwog
bXkgJGlzV2luQ2Fpcm87CiBteSAkaXNXaW42NDsKIG15ICRpc0VmbDsKQEAgLTM5Nyw3ICszOTYs
NiBAQCBzdWIgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpCiAgICAgcHVzaChAYXJncywgJy0t
Z3RrJykgaWYgaXNHdGsoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1lZmwnKSBpZiBpc0VmbCgpOwog
ICAgIHB1c2goQGFyZ3MsICctLXdpbmNhaXJvJykgaWYgaXNXaW5DYWlybygpOwotICAgIHB1c2go
QGFyZ3MsICctLXdpbmNlJykgaWYgaXNXaW5DRSgpOwogICAgIHB1c2goQGFyZ3MsICctLWluc3Bl
Y3Rvci1mcm9udGVuZCcpIGlmIGlzSW5zcGVjdG9yRnJvbnRlbmQoKTsKICAgICByZXR1cm4gQGFy
Z3M7CiB9CkBAIC04MTEsOSArODA5LDYgQEAgc3ViIGJ1aWx0RHlsaWJQYXRoRm9yTmFtZQogICAg
IGlmIChpc0VmbCgpKSB7CiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGly
L2xpYi9saWJld2Via2l0Mi5zbyI7CiAgICAgfQotICAgIGlmIChpc1dpbkNFKCkpIHsKLSAgICAg
ICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1Y3REaXIvJGxpYnJhcnlOYW1lIjsKLSAgICB9
CiAgICAgaWYgKGlzSU9TV2ViS2l0KCkpIHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJhdGlv
blByb2R1Y3REaXIvJGxpYnJhcnlOYW1lLmZyYW1ld29yay8kbGlicmFyeU5hbWUiOwogICAgIH0K
QEAgLTk2MiwxOCArOTU3LDYgQEAgc3ViIGlzR3RrKCkKICAgICByZXR1cm4gJGlzR3RrOwogfQog
Ci1zdWIgaXNXaW5DRSgpCi17Ci0gICAgZGV0ZXJtaW5lSXNXaW5DRSgpOwotICAgIHJldHVybiAk
aXNXaW5DRTsKLX0KLQotc3ViIGRldGVybWluZUlzV2luQ0UoKQotewotICAgIHJldHVybiBpZiBk
ZWZpbmVkKCRpc1dpbkNFKTsKLSAgICAkaXNXaW5DRSA9IGNoZWNrRm9yQXJndW1lbnRBbmRSZW1v
dmVGcm9tQVJHVigiLS13aW5jZSIpOwotfQotCiAjIERldGVybWluZSBpZiB0aGlzIGlzIGRlYmlh
biwgdWJ1bnR1LCBsaW5zcGlyZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCiBzdWIgaXNEZWJpYW5C
YXNlZCgpCiB7CkBAIC0xMTEwLDcgKzEwOTMsNyBAQCBzdWIgaXNBcHBsZU1hY1dlYktpdCgpCiAK
IHN1YiBpc0FwcGxlV2luV2ViS2l0KCkKIHsKLSAgICByZXR1cm4gKGlzQ3lnd2luKCkgfHwgaXNX
aW5kb3dzKCkpICYmICFpc1dpbkNhaXJvKCkgJiYgIWlzR3RrKCkgJiYgIWlzV2luQ0UoKTsKKyAg
ICByZXR1cm4gKGlzQ3lnd2luKCkgfHwgaXNXaW5kb3dzKCkpICYmICFpc1dpbkNhaXJvKCkgJiYg
IWlzR3RrKCk7CiB9CiAKIHN1YiBpT1NTaW11bGF0b3JEZXZpY2VzUGF0aApAQCAtMTM0Myw3ICsx
MzI2LDcgQEAgc3ViIHJlbGF0aXZlU2NyaXB0c0RpcigpCiBzdWIgbGF1bmNoZXJQYXRoKCkKIHsK
ICAgICBteSAkcmVsYXRpdmVTY3JpcHRzUGF0aCA9IHJlbGF0aXZlU2NyaXB0c0RpcigpOwotICAg
IGlmIChpc0d0aygpIHx8IGlzRWZsKCkgfHwgaXNXaW5DRSgpKSB7CisgICAgaWYgKGlzR3RrKCkg
fHwgaXNFZmwoKSkgewogICAgICAgICByZXR1cm4gIiRyZWxhdGl2ZVNjcmlwdHNQYXRoL3J1bi1s
YXVuY2hlciI7CiAgICAgfSBlbHNpZiAoaXNBcHBsZVdlYktpdCgpKSB7CiAgICAgICAgIHJldHVy
biAiJHJlbGF0aXZlU2NyaXB0c1BhdGgvcnVuLXNhZmFyaSI7CkBAIC0xMzU4LDggKzEzNDEsNiBA
QCBzdWIgbGF1bmNoZXJOYW1lKCkKICAgICAgICAgcmV0dXJuICJTYWZhcmkiOwogICAgIH0gZWxz
aWYgKGlzQXBwbGVXaW5XZWJLaXQoKSkgewogICAgICAgICByZXR1cm4gIldpbkxhdW5jaGVyIjsK
LSAgICB9IGVsc2lmIChpc1dpbkNFKCkpIHsKLSAgICAgICAgcmV0dXJuICJXaW5DRUxhdW5jaGVy
IjsKICAgICB9CiB9CiAKQEAgLTE3MDAsOSArMTY4MSw2IEBAIHN1YiBjbWFrZUNhY2hlUGF0aCgp
CiBzdWIgc2hvdWxkUmVtb3ZlQ01ha2VDYWNoZShAKQogewogICAgIG15ICgkY2FjaGVGaWxlUGF0
aCwgQGJ1aWxkQXJncykgPSBAXzsKLSAgICBpZiAoaXNXaW5DRSgpKSB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KIAogICAgIGlmICghaXNHdGsoKSkgewogICAgICAgICByZXR1cm4gMTsKQEAg
LTE4OTQsMjEgKzE4NzIsMTkgQEAgc3ViIGJ1aWxkQ01ha2VQcm9qZWN0T3JFeGl0KCQkJCRAKQog
CiBzdWIgY21ha2VCYXNlZFBvcnRBcmd1bWVudHMoKQogewotICAgIHJldHVybiAoJy1HICJWaXN1
YWwgU3R1ZGlvIDggMjAwNSBTVEFOREFSRFNES181MDAgKEFSTVY0SSkiJykgaWYgaXNXaW5DRSgp
OwogICAgIHJldHVybiAoKTsKIH0KIAogc3ViIGNtYWtlQmFzZWRQb3J0TmFtZSgpCiB7CiAgICAg
cmV0dXJuICJFZmwiIGlmIGlzRWZsKCk7Ci0gICAgcmV0dXJuICJXaW5DRSIgaWYgaXNXaW5DRSgp
OwogICAgIHJldHVybiAiR1RLIiBpZiBpc0d0aygpOwogICAgIHJldHVybiAiIjsKIH0KIAogc3Vi
IGlzQ01ha2VCdWlsZCgpCiB7Ci0gICAgcmV0dXJuIGlzRWZsKCkgfHwgaXNXaW5DRSgpIHx8IGlz
R3RrKCk7CisgICAgcmV0dXJuIGlzRWZsKCkgfHwgaXNHdGsoKTsKIH0KIAogc3ViIHByb21wdFVz
ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCAzN2EyYTRlLi5h
MTRlNjgxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC0yMzEs
NyArMjMxLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRk9O
VF9MT0FEX0VWRU5UUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRmb250TG9hZEV2ZW50c1N1
cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJmdHBkaXIiLCBkZXNjID0+ICJUb2dnbGUgRlRQ
IERpcmVjdG9yeSBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZUUERJUiIsIGRl
ZmF1bHQgPT4gIWlzV2luQ0UoKSwgdmFsdWUgPT4gXCRmdHBEaXJTdXBwb3J0IH0sCisgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV9GVFBESVIiLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkZnRwRGly
U3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImZ1bGxzY3JlZW4tYXBpIiwgZGVzYyA9PiAi
VG9nZ2xlIEZ1bGxzY3JlZW4gQVBJIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
RlVMTFNDUkVFTl9BUEkiLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNFZmwo
KSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCRmdWxsc2NyZWVuQVBJU3VwcG9ydCB9LApAQCAtMjc2
LDcgKzI3Niw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRpbnB1dFR5cGVXZWVrU3Vw
cG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImluc3BlY3RvciIsIGRlc2MgPT4gIlRvZ2dsZSBJ
bnNwZWN0b3Igc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9JTlNQRUNUT1IiLCBk
ZWZhdWx0ID0+ICFpc1dpbkNFKCksIHZhbHVlID0+IFwkaW5zcGVjdG9yU3VwcG9ydCB9LAorICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfSU5TUEVDVE9SIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBc
JGluc3BlY3RvclN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJsZWdhY3ktbm90aWZpY2F0
aW9ucyIsIGRlc2MgPT4gIlRvZ2dsZSBMZWdhY3kgTm90aWZpY2F0aW9ucyBzdXBwb3J0IiwKICAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TIiwgZGVmYXVsdCA9PiAw
LCB2YWx1ZSA9PiBcJGxlZ2FjeU5vdGlmaWNhdGlvbnNTdXBwb3J0IH0sCkBAIC0zNzgsNyArMzc4
LDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHX0ZPTlRT
IiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJHN2Z0ZvbnRzU3VwcG9ydCB9LAogCiAgICAgeyBv
cHRpb24gPT4gInN5c3RlbS1tYWxsb2MiLCBkZXNjID0+ICJUb2dnbGUgc3lzdGVtIGFsbG9jYXRv
ciBpbnN0ZWFkIG9mIFRDbWFsbG9jIiwKLSAgICAgIGRlZmluZSA9PiAiVVNFX1NZU1RFTV9NQUxM
T0MiLCBkZWZhdWx0ID0+IGlzV2luQ0UoKSwgdmFsdWUgPT4gXCRzeXN0ZW1NYWxsb2NTdXBwb3J0
IH0sCisgICAgICBkZWZpbmUgPT4gIlVTRV9TWVNURU1fTUFMTE9DIiwgZGVmYXVsdCA9PiAwLCB2
YWx1ZSA9PiBcJHN5c3RlbU1hbGxvY1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJ0ZW1w
bGF0ZS1lbGVtZW50IiwgZGVzYyA9PiAiVG9nZ2xlIEhUTUxUZW1wbGF0ZUVsZW1lbnQgc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9URU1QTEFURV9FTEVNRU5UIiwgZGVmYXVsdCA9
PiAxLCB2YWx1ZSA9PiBcJHRlbXBsYXRlRWxlbWVudFN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5kZXggNjRjYzdmMi4uZWUwMjVlYiAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTU3
MCw3ICs1NzAsNyBAQCBNT0NLIG91dHB1dCBvZiBjaGlsZCBwcm9jZXNzCiAgICAgICAgIHNlbGYu
X2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocG9ydCwgJ2xpbnV4MicsICdkZWJpYW4t
aHR0cGQtMi4yLmNvbmYnKQogCiAgICAgICAgIHNlbGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3Jf
cGxhdGZvcm0ocG9ydCwgJ21hYycsICdhcGFjaGUyLjItaHR0cGQuY29uZicpCi0gICAgICAgIHNl
bGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocG9ydCwgJ3dpbjMyJywgJ2FwYWNo
ZTIuMi1odHRwZC5jb25mJykgICMgd2luMzIgaXNuJ3QgYSBzdXBwb3J0ZWQgc3lzLnBsYXRmb3Jt
LiAgQXBwbGVXaW4vV2luQ2Fpcm8vV2luQ0UgcG9ydHMgYWxsIHVzZSBjeWd3aW4uCisgICAgICAg
IHNlbGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocG9ydCwgJ3dpbjMyJywgJ2Fw
YWNoZTIuMi1odHRwZC5jb25mJykgICMgd2luMzIgaXNuJ3QgYSBzdXBwb3J0ZWQgc3lzLnBsYXRm
b3JtLiAgQXBwbGVXaW4vV2luQ2Fpcm8gcG9ydHMgYWxsIHVzZSBjeWd3aW4uCiAgICAgICAgIHNl
bGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocG9ydCwgJ2JhcmYnLCAnYXBhY2hl
Mi4yLWh0dHBkLmNvbmYnKQogCiAgICAgZGVmIHRlc3RfcGF0aF90b19hcGFjaGVfY29uZmlnX2Zp
bGUoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb25maWcuaAppbmRleCBlNWYxOWVmLi41NzkwOWFiIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29uZmlnLmgKQEAgLTUzLDcgKzUzLDcgQEAKICNpZm5kZWYgX1dJTlNPQ0tBUElfCiAjZGVm
aW5lIF9XSU5TT0NLQVBJXyAvLyBQcmV2ZW50IGluY2x1c2lvbiBvZiB3aW5zb2NrLmggaW4gd2lu
ZG93cy5oCiAjZW5kaWYKLSNlbGlmICFPUyhXSU5DRSkKKyNlbHNlCiAjZGVmaW5lIFdURl9VU0Vf
Q0cgMQogI3VuZGVmIFdURl9VU0VfQ0FJUk8KICN1bmRlZiBXVEZfVVNFX0NVUkwKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dpbkNFTGF1bmNoZXIvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9XaW5DRUxhdW5j
aGVyL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTlmYzYx
Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL1dpbkNFTGF1bmNoZXIvQ01ha2VMaXN0cy50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1zZXQoV2luQ0VMYXVuY2hlcl9JTkNMVURFX0RJUkVD
VE9SSUVTCi0gICAgIiR7V0VCS0lUX0RJUn0vd2luY2UiCi0gICAgIiR7V0VCQ09SRV9ESVJ9Igot
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsiCi0gICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQiCi0gICAgIiR7SkFWQVNDUklQVENPUkVfRElS
fSIKLSAgICAiJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfSIKLSAgICAiJHtX
VEZfRElSfSIKLSAgICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKLSAgICAiJHtDTUFLRV9CSU5B
UllfRElSfSIKLSkKLQotc2V0KFdpbkNFTGF1bmNoZXJfU09VUkNFUwotICAgICR7VE9PTFNfRElS
fS9XaW5DRUxhdW5jaGVyL21haW4uY3BwCi0pCi0KLXNldChXaW5DRUxhdW5jaGVyX0xJQlJBUklF
UwotICAgIFdlYktpdAotKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7V2luQ0VMYXVuY2hlcl9J
TkNMVURFX0RJUkVDVE9SSUVTfSkKLWFkZF9leGVjdXRhYmxlKFdpbkNFTGF1bmNoZXIgV0lOMzIg
JHtXaW5DRUxhdW5jaGVyX1NPVVJDRVN9KQotYWRkX2RlcGVuZGVuY2llcyhXaW5DRUxhdW5jaGVy
IFdlYktpdCkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhXaW5DRUxhdW5jaGVyICR7V2luQ0VMYXVu
Y2hlcl9MSUJSQVJJRVN9KQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdpbkNFTGF1bmNoZXIgUFJP
UEVSVElFUyBGT0xERVIgIlRvb2xzIikKLXNldF90YXJnZXRfcHJvcGVydGllcyhXaW5DRUxhdW5j
aGVyIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9E
SVJ9IikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dpbkNFTGF1bmNoZXIvbWFpbi5jcHAgYi9Ub29scy9X
aW5DRUxhdW5jaGVyL21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGYy
YTUxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL1dpbkNFTGF1bmNoZXIvbWFpbi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNr
IEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KLQotc3RhdGljIGNvbnN0IExQQ1dTVFIga01haW5XaW5kb3dUaXRsZSA9IEwiV2ViS2l0
IGZvciBXaW5DRSI7Ci1zdGF0aWMgY29uc3QgTFBDV1NUUiBrTWFpbldpbmRvd0NsYXNzTmFtZSA9
IEwiTWFpbldpbmRvd0NsYXNzIjsKLQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9j
KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQot
ewotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01fREVTVFJPWToKLSAgICAgICAg
UG9zdFF1aXRNZXNzYWdlKDApOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IEFQSUVOVFJZIF90V2luTWFpbihISU5T
VEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBUU1RSIGxwQ21kTGlu
ZSwgaW50IG5DbWRTaG93KQotewotICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByZXZJbnN0
YW5jZSk7Ci0KLSAgICBDb0luaXRpYWxpemVFeCgwLCBDT0lOSVRfTVVMVElUSFJFQURFRCk7Ci0g
ICAgV2ViVmlldzo6aW5pdGlhbGl6ZShoSW5zdGFuY2UpOwotCi0gICAgTFBDV1NUUiBob21lVXJs
ID0gbHBDbWRMaW5lOwotICAgIGJvb2wgZW5hYmxlRG91YmxlQnVmZmVyID0gdHJ1ZTsKLSAgICBi
b29sIGZ1bGxzY3JlZW4gPSBmYWxzZTsKLQotICAgIGlmIChob21lVXJsWzBdID09ICctJykgewot
ICAgICAgICBmb3IgKDsgKmhvbWVVcmwgJiYgKmhvbWVVcmwgIT0gJyAnOyArK2hvbWVVcmwpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAoKmhvbWVVcmwpIHsKLSAgICAgICAgICAgIGNhc2UgJ2QnOgot
ICAgICAgICAgICAgICAgIGVuYWJsZURvdWJsZUJ1ZmZlciA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgZnVsbHNj
cmVlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGlmICgqaG9tZVVybCkKLSAgICAgICAgICAgICsraG9tZVVybDsKLSAgICB9Ci0KLSAgICBE
V09SRCBzdHlsZXMgPSBXU19WSVNJQkxFOwotCi0gICAgaWYgKCFmdWxsc2NyZWVuKSB7Ci0gICAg
ICAgIHN0eWxlcyB8PSBXU19DQVBUSU9OCi0gICAgICAgICAgICB8IFdTX01BWElNSVpFQk9YCi0g
ICAgICAgICAgICB8IFdTX01JTklNSVpFQk9YCi0gICAgICAgICAgICB8IFdTX09WRVJMQVBQRUQK
LSAgICAgICAgICAgIHwgV1NfU1lTTUVOVQotICAgICAgICAgICAgfCBXU19USElDS0ZSQU1FOwot
ICAgIH0KLQotICAgIFdORENMQVNTVyB3YzsKLSAgICB3Yy5zdHlsZSAgICAgICAgICA9IENTX0hS
RURSQVcgfCBDU19WUkVEUkFXOwotICAgIHdjLmxwZm5XbmRQcm9jICAgID0gV25kUHJvYzsKLSAg
ICB3Yy5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2MuY2JXbmRFeHRyYSAgICAgPSAwOwotICAg
IHdjLmhJbnN0YW5jZSAgICAgID0gaEluc3RhbmNlOwotICAgIHdjLmhJY29uICAgICAgICAgID0g
MDsKLSAgICB3Yy5oQ3Vyc29yICAgICAgICA9IDA7Ci0gICAgd2MuaGJyQmFja2dyb3VuZCAgPSBz
dGF0aWNfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2JqZWN0KFdISVRFX0JSVVNIKSk7Ci0gICAgd2Mu
bHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdjLmxwc3pDbGFzc05hbWUgID0ga01haW5XaW5kb3dD
bGFzc05hbWU7Ci0gICAgUmVnaXN0ZXJDbGFzcygmd2MpOwotCi0gICAgSFdORCBoTWFpbldpbmRv
dyA9IENyZWF0ZVdpbmRvd1coa01haW5XaW5kb3dDbGFzc05hbWUsIGtNYWluV2luZG93VGl0bGUs
IHN0eWxlcywKLSAgICAgICAgQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwg
MCwgaEluc3RhbmNlLCAwKTsKLQotICAgIGlmIChmdWxsc2NyZWVuKSB7Ci0gICAgICAgIFNldFdp
bmRvd1BvcyhoTWFpbldpbmRvdywgSFdORF9UT1BNT1NULCAwLCAwLCBHZXRTeXN0ZW1NZXRyaWNz
KFNNX0NYU0NSRUVOKSwKLSAgICAgICAgICAgIEdldFN5c3RlbU1ldHJpY3MoU01fQ1lTQ1JFRU4p
LCBTV1BfU0hPV1dJTkRPVyk7Ci0gICAgfQotCi0gICAgU2hvd1dpbmRvdyhoTWFpbldpbmRvdywg
bkNtZFNob3cpOwotICAgIFVwZGF0ZVdpbmRvdyhoTWFpbldpbmRvdyk7Ci0KLSAgICBXVEY6Ok93
blB0cjxXZWJWaWV3PiB3ZWJWaWV3ID0gV1RGOjphZG9wdFB0cihuZXcgV2ViVmlldyhoTWFpbldp
bmRvdywgZW5hYmxlRG91YmxlQnVmZmVyID8gV2ViVmlldzo6RW5hYmxlRG91YmxlQnVmZmVyaW5n
IDogV2ViVmlldzo6Tm9GZWF0dXJlKSk7Ci0gICAgd2ViVmlldy0+bG9hZChob21lVXJsKTsKLQot
ICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgotICAgIE1TRyBtc2c7Ci0gICAgQk9PTCBiUmV0Owot
ICAgIHdoaWxlIChiUmV0ID0gR2V0TWVzc2FnZSgmbXNnLCAwLCAwLCAwKSkgewotICAgICAgICBp
ZiAoYlJldCA9PSAtMSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgZXJyb3Ig
YW5kIHBvc3NpYmx5IGV4aXQuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUcmFuc2xh
dGVNZXNzYWdlKCZtc2cpOwotICAgICAgICAgICAgRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgd2ViVmlldy5jbGVhcigpOwotICAgIERlc3Ryb3lXaW5kb3co
aE1haW5XaW5kb3cpOwotCi0gICAgV2ViVmlldzo6Y2xlYW51cCgpOwotICAgIENvVW5pbml0aWFs
aXplKCk7Ci0KLSAgICByZXR1cm4gbXNnLndQYXJhbTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL2d0
ay9tYW5pZmVzdC50eHQgYi9Ub29scy9ndGsvbWFuaWZlc3QudHh0CmluZGV4IDJhZjA2MDIuLjg0
MjIzMzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2d0ay9tYW5pZmVzdC50eHQKKysrIGIvVG9vbHMvZ3Rr
L21hbmlmZXN0LnR4dApAQCAtNCw3ICs0LDYgQEAgZXhjbHVkZSBDaGFuZ2VMb2cKIGV4Y2x1ZGUg
TWFrZWZpbGUKIGV4Y2x1ZGUgUGxhdGZvcm1FZmwuY21ha2UKIGV4Y2x1ZGUgUGxhdGZvcm1XaW4u
Y21ha2UKLWV4Y2x1ZGUgUGxhdGZvcm1XaW5DRS5jbWFrZQogZXhjbHVkZSB0YWdzJAogZXhjbHVk
ZSB+JAogZXhjbHVkZSBcLiMkCkBAIC00MSw3ICs0MCw3IEBAIGV4Y2x1ZGUgXC54Y2NvbmZpZyQK
IGV4Y2x1ZGUgXC54Y29kZXByb2okCiAKICMgRXhjbHVkZSBkaXJlY3RvcmllcyBmcm9tIG90aGVy
IHBvcnRzCi1leGNsdWRlIC4qXC8obWFjfGlvc3xjZnxjZ3xjb2NvYXxDb2NvYXxvYmpjfGF2Zm91
bmRhdGlvbnxjYXxjdXJsfGVmbHx3aW58d2luY2UpXC8uKiQKK2V4Y2x1ZGUgLipcLyhtYWN8aW9z
fGNmfGNnfGNvY29hfENvY29hfG9iamN8YXZmb3VuZGF0aW9ufGNhfGN1cmx8ZWZsfHdpbilcLy4q
JAogCiBkaXJlY3RvcnkgU291cmNlCiBleGNsdWRlIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cwpAQCAtNTMsNyArNTIsNiBAQCBleGNsdWRlIFNvdXJjZS9ibWFsbG9jCiBleGNsdWRlIFNvdXJj
ZS9jbWFrZS9FRkxIZWxwZXJzLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc1dp
bkNhaXJvLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbmRvd3MuY21ha2Uk
Ci1leGNsdWRlIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21ha2UkCiBleGNsdWRlIFNvdXJj
ZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21ha2UkCiBleGNsdWRlIFNvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvZWZsc3ltYm9scy5maWx0ZXIkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238435</attachid>
            <date>2014-09-21 15:30:54 -0700</date>
            <delta_ts>2014-09-24 02:18:53 -0700</delta_ts>
            <desc>WIP patch for EWS - with win fixes</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>595622</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzZlMmY5Li4yNmQwNzBh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTQtMDktMjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFr
ZToKKwogMjAxNC0wOS0xNyAgUmVuYXRvIE5hZ3kgIDxybmFneUBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgW0VGTF1bR1RLXSBSZW1vdmUgV2ViS2l0MSByZWxhdGVkIGNvZGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCAyN2YxNTc2Li4yMDE1N2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wOS0yMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmNhY2hlRmx1
c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogY29uZmlnLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbU90aGVyVGhyZWFkKToKKyAgICAgICAgKEpTQzo6c3dhcElmQmFj
a3dhcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNw
cDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorCiAyMDE0LTA5
LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgU3RydWN0dXJl
OjpnZXRDb25jdXJyZW50bHkoKSBkb2Vzbid0IG5lZWQgdG8gdGFrZSBhIFZNJiBhcmd1bWVudC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCmluZGV4
IDA4N2QzMWMuLjMyMjhhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk1Bc3NlbWJsZXIuaApAQCAtMTExOSw4ICsxMTE5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVudCArIHBhZ2UpOwog
CiAgICAgICAgICAgICBsaW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwotI2VsaWYgT1MoV0lO
Q0UpCi0gICAgICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FDSEVfU1lOQ19B
TEwpOwogI2Vsc2UKICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9u
IHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKaW5kZXggZmZjMzA5MC4uNjQ3ZmViMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaApAQCAtMjQx
MCw4ICsyNDEwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVu
dCwgY3VycmVudCArIHBhZ2UpOwogCiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1cnJlbnQsIGVu
ZCk7Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUs
IENBQ0hFX1NZTkNfQUxMKTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQg
aXMgbWlzc2luZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5o
CmluZGV4IDI3NjE2MjQuLjQ1OTY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb25maWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTM5LDEy
ICszOSwxMiBAQAogI2RlZmluZSBXSU5WRVIgMHgwNTAyCiAjZW5kaWYKIAotI2lmICFDT01QSUxF
UihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihNU1ZDN19PUl9M
T1dFUikKIC8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJzdCAjaW5jbHVk
ZSBvZiBzdGRsaWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5kZWYgX0NSVF9S
QU5EX1MKICNkZWZpbmUgX0NSVF9SQU5EX1MKICNlbmRpZgotI2VuZGlmIC8vICFDT01QSUxFUihN
U1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2VuZGlmIC8vICFDT01QSUxFUihNU1ZDN19P
Ul9MT1dFUgogCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggMDY1NGZmZS4uMTI2OWYw
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuY3BwCkBAIC02OSwxOCArNjksNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBJZkJhY2t3YXJkcyh2b2lkKiYgYmVn
aW4sIHZvaWQqJiBlbmQpCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKGJlZ2luIDw9IGVuZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIHN0ZDo6c3dhcChiZWdpbiwgZW5kKTsKLSNlbHNlCi1VTlVT
RURfUEFSQU0oYmVnaW4pOwotVU5VU0VEX1BBUkFNKGVuZCk7Ci0jZW5kaWYKLX0KLQogI2lmIE9T
KERBUldJTikKIHR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7CiAjZWxpZiBPUyhX
SU5ET1dTKQpAQCAtMjQ4LDEyICsyMzYsMTAgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVy
RnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIAog
ICAgIHZvaWQqIHJlZ2lzdGVyc0JlZ2luID0gJnJlZ2lzdGVyczsKICAgICB2b2lkKiByZWdpc3Rl
cnNFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcmVnaXN0ZXJzICsgMSkpKTsK
LSAgICBzd2FwSWZCYWNrd2FyZHMocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0VuZCk7CiAgICAg
Y29uc2VydmF0aXZlUm9vdHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQsIGppdFN0
dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAKICAgICB2b2lkKiBzdGFja0JlZ2luID0gc3RhY2tD
dXJyZW50OwogICAgIHZvaWQqIHN0YWNrRW5kID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3Jp
Z2luKCk7Ci0gICAgc3dhcElmQmFja3dhcmRzKHN0YWNrQmVnaW4sIHN0YWNrRW5kKTsKICAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tCZWdpbiwgc3RhY2tFbmQsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2Nrcyk7CiB9CiAKQEAgLTQ1Myw3ICs0MzksNiBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjpnYXRoZXJGcm9tT3RoZXJUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzLAogCiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50
ZXIocmVncyk7CiAgICAgdm9pZCogc3RhY2tCYXNlID0gdGhyZWFkLT5zdGFja0Jhc2U7Ci0gICAg
c3dhcElmQmFja3dhcmRzKHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKICAgICBzdGFja1BvaW50
ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrUG9pbnRlcikpKTsK
ICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UsIGppdFN0
dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5kZXggNTVmOWU3Ny4uNjM2YzJmYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTU1LDEy
ICs1NSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFdJTkNFKQot
Ly8gRnJvbSBwa2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZpbGUgZnJvbSB0aGUgUGxhdGZvcm0g
QnVpbGRlcikKLSNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgwN0YKLWV4dGVybiAiQyIgX19kZWNs
c3BlYyhkbGxpbXBvcnQpIHZvaWQgQ2FjaGVSYW5nZUZsdXNoKExQVk9JRCBwQWRkciwgRFdPUkQg
ZHdMZW5ndGgsIERXT1JEIGR3RmxhZ3MpOwotI2VuZGlmCi0KICNkZWZpbmUgSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJMRShBU1NFTUJM
RVJfV1hfRVhDTFVTSVZFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAwOTQ5M2FhLi42OTU4NzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1ZGUgPHNpZ25h
bC5oPgogI2VuZGlmCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09N
UElMRVIoTVNWQykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNpbmNsdWRlIDxtbXN5c3RlbS5oPgog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTExMDksNyArMTEwOSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIC8v
IGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0
aW9uIHJlcXVpcmVzIG9iamVjdAogLy8gdW53aW5kaW5nLgogCi0jaWYgQ09NUElMRVIoTVNWQykg
JiYgIWRlZmluZWQoX0RFQlVHKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNWQykgJiYg
IWRlZmluZWQoX0RFQlVHKQogI2RlZmluZSBUUlkgICAgICAgX190cnkgewogI2RlZmluZSBFWENF
UFQoeCkgfSBfX2V4Y2VwdCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB4OyB9CiAjZWxz
ZQpAQCAtMTE0MSw3ICsxMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
I2VuZGlmCiAKICNpZiBPUyhXSU5ET1dTKQotI2lmICFPUyhXSU5DRSkKICAgICAvLyBDeWd3aW4g
Y2FsbHMgOjpTZXRFcnJvck1vZGUoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyksIHdoaWNoIHdlIHdp
bGwgaW5oZXJpdC4gVGhpcyBpcyBiYWQgZm9yCiAgICAgLy8gdGVzdGluZy9kZWJ1Z2dpbmcsIGFz
IGl0IGNhdXNlcyB0aGUgcG9zdC1tb3J0ZW0gZGVidWdnZXIgbm90IHRvIGJlIGludm9rZWQuIFdl
IHJlc2V0IHRoZQogICAgIC8vIGVycm9yIG1vZGUgaGVyZSB0byB3b3JrIGFyb3VuZCBDeWd3aW4n
cyBiZWhhdmlvci4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1MjIyPi4KQEAgLTExNTUsNyAr
MTE1NCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBfQ3J0U2V0UmVw
b3J0RmlsZShfQ1JUX0FTU0VSVCwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJl
cG9ydE1vZGUoX0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9GSUxFKTsKICNlbmRpZgotI2VuZGlm
CiAKICAgICB0aW1lQmVnaW5QZXJpb2QoMSk7CiAjZW5kaWYKQEAgLTExNzAsNyArMTE2OCw2IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNlbmRpZgogICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChjaGFyKiB0aW1lb3V0
U3RyaW5nID0gZ2V0ZW52KCJKU0NfdGltZW91dCIpKSB7CiAgICAgICAgIGlmIChzc2NhbmYodGlt
ZW91dFN0cmluZywgIiVsZiIsICZzX2Rlc2lyZWRUaW1lb3V0KSAhPSAxKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKApAQCAtMTE3OSw3ICsxMTc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0
VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KLSNlbmRpZgogCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1v
cnkoKSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAppbmRleCA0OWExYzM2Li5hZjU3MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQwLDEwICs0MCw2
IEBACiAjaW5jbHVkZSAiSlNSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCi0jaWYgT1MoV0lOQ0Up
Ci1leHRlcm4gIkMiIHRpbWVfdCB0aW1lKHRpbWVfdCogdGltZXIpOyAvLyBQcm92aWRlZCBieSBs
aWJjZS4KLSNlbmRpZgotCiAjaWYgSEFWRShTWVNfVElNRV9IKQogI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5k
ZXggZjBkZGY5OC4uNDcxOGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKQEAgLTEwNSw3ICsxMDUsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFy
KiBzdHJpbmcsIEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGJvb2wgb3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFy
KiBuYW1lKQogewotI2lmICFPUyhXSU5DRSkKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9
IGdldGVudihuYW1lKTsKICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMTQsNyArMTEzLDYgQEAgYm9vbCBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMo
VCYgdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAogICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlICVzPSVzXG4i
LCBuYW1lLCBzdHJpbmdWYWx1ZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0OTE0MTk3Li4xMzk2MzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNjYsMTEgKzI2Niw5IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV9wZXJCeXRlY29k
ZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOwogCiAg
ICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHBhdGhPdXQ7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAg
ICBjb25zdCBjaGFyKiBwcm9maWxlclBhdGggPSBnZXRlbnYoIkpTQ19QUk9GSUxFUl9QQVRIIik7
CiAgICAgICAgIGlmIChwcm9maWxlclBhdGgpCiAgICAgICAgICAgICBwYXRoT3V0LnByaW50KHBy
b2ZpbGVyUGF0aCwgIi8iKTsKLSNlbmRpZgogICAgICAgICBwYXRoT3V0LnByaW50KCJKU0NQcm9m
aWxlLSIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIi0iLCBtX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmRhdGFiYXNlSUQoKSwgIi5qc29uIik7CiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
cmVnaXN0ZXJUb1NhdmVBdEV4aXQocGF0aE91dC50b0NTdHJpbmcoKS5kYXRhKCkpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAppbmRleCA5Mjg2Y2UxLi5hYjhkMWRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgIU9TKFdJ
TkNFKQorI2lmIENPTVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjaW5jbHVkZSA8
bW1zeXN0ZW0uaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xNTAsNyArMTUwLDcgQEAgR2xv
YmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGEKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBi
ZWNhdXNlIHRoZSByZWFsTWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKIC8vIHVud2luZGlu
Zy4KIAotI2lmIENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykgJiYgIU9TKFdJTkNF
KQorI2lmIENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykKICNkZWZpbmUgVFJZICAg
ICAgIF9fdHJ5IHsKICNkZWZpbmUgRVhDRVBUKHgpIH0gX19leGNlcHQgKEVYQ0VQVElPTl9FWEVD
VVRFX0hBTkRMRVIpIHsgeDsgfQogI2Vsc2UKQEAgLTE2MywxMiArMTYzLDEwIEBAIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogewogI2lmIE9TKFdJTkRPV1MpCi0jaWYgIU9TKFdJTkNFKQogICAgIC8vIEN5Z3dpbiBj
YWxscyA6OlNldEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKSwgd2hpY2ggd2Ugd2ls
bCBpbmhlcml0LiBUaGlzIGlzIGJhZCBmb3IKICAgICAvLyB0ZXN0aW5nL2RlYnVnZ2luZywgYXMg
aXQgY2F1c2VzIHRoZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlciBub3QgdG8gYmUgaW52b2tlZC4gV2Ug
cmVzZXQgdGhlCiAgICAgLy8gZXJyb3IgbW9kZSBoZXJlIHRvIHdvcmsgYXJvdW5kIEN5Z3dpbidz
IGJlaGF2aW9yLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUyMjI+LgogICAgIDo6U2V0RXJy
b3JNb2RlKDApOwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9ERUJVRykKICAgICBfQ3J0U2V0UmVw
b3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCmluZGV4IGM3NmE5YTguLjMwMmI1Zjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKQEAg
LTkyLDcgKzkyLDYgQEAgdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQq
KiBmcmFtZVBvaW50ZXIpCiAKIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdU
Rjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogewotI2lmICFPUyhXSU5DRSkKICAgICAvLyBD
aGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgogICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxp
bmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKICAgICBpZiAoIWNvZGVQcm9m
aWxpbmdNb2RlKQpAQCAtMTE5LDcgKzExOCw2IEBAIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5
QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgIEFTU0VSVCghc190
cmFja2VyKTsKICAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigp
OwogICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwotI2VuZGlmCiB9
CiAKIHZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzI0M2EyYy4uOTg3MTg1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxNC0wOS0yMSAg
Q3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBX
aW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgor
ICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmg6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAg
ICAgICAgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYvQ3VycmVudFRp
bWUuY3BwOgorICAgICAgICAoV1RGOjpsb3dSZXNVVENUaW1lKToKKyAgICAgICAgKiB3dGYvRGF0
YUxvZy5jcHA6CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6Z2V0
TG9jYWxUaW1lKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToKKyAgICAgICAg
KiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6Cisg
ICAgICAgICogd3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpk
ZWNvbW1pdEFuZFJlbGVhc2UpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAq
IHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiB3dGYvUkFNU2l6ZS5jcHA6CisgICAg
ICAgIChXVEY6OmNvbXB1dGVSQU1TaXplKToKKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyU2Vl
ZC5oOgorICAgICAgICAoV1RGOjppbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKToKKyAg
ICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6
aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6
OlN0YWNrQm91bmRzOjppc0dyb3dpbmdEb3dud2FyZCk6CisgICAgICAgICogd3RmL1N0ZExpYkV4
dHJhcy5oOgorICAgICAgICAod3RmX2JzZWFyY2gpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9T
dHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKHN0cm5pY21wKTogRGVsZXRlZC4KKyAgICAgICAgKHN0
cmljbXApOiBEZWxldGVkLgorICAgICAgICAoc3RyZHVwKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9XaW5kb3dz
RXh0cmFzLmg6CisgICAgICAgIChXVEY6OmdldFJlZ2lzdHJ5VmFsdWUpOgorICAgICAgICAoV1RG
OjpnZXRXaW5kb3dQb2ludGVyKToKKyAgICAgICAgKFdURjo6c2V0V2luZG93UG9pbnRlcik6Cisg
ICAgICAgICogd3RmL2R0b2EvdXRpbHMuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZvcm1hdCk6CisKIDIwMTQtMDktMTkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBET00gbWV0aG9kcyB0
byByZXR1cm4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL2NvbmZpZy5oIGIvU291cmNlL1dURi9jb25maWcuaAppbmRleCA1YzIyMzE2Li4yOTAz
Y2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XVEYvY29u
ZmlnLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIo
TVNWQzdfT1JfTE9XRVIpICYmICFPUyhXSU5DRSkKKyNpZiAhQ09NUElMRVIoTVNWQzdfT1JfTE9X
RVIpCiAvLyBXZSBuZWVkIHRvIGRlZmluZSB0aGlzIGJlZm9yZSB0aGUgZmlyc3QgI2luY2x1ZGUg
b2Ygc3RkbGliLmggb3IgaXQgd29uJ3QgY29udGFpbiByYW5kX3MuCiAjaWZuZGVmIF9DUlRfUkFO
RF9TCiAjZGVmaW5lIF9DUlRfUkFORF9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3Nl
cnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IDM0MWJkMDEu
LjZkOWQ5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC01NSw3ICs1NSw3IEBACiAjZW5kaWYK
ICNlbmRpZiAvLyBVU0UoQ0YpCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisj
aWYgQ09NUElMRVIoTVNWQykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCkBAIC0xMjIs
MjAgKzEyMiw3IEBAIHN0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX2NvbW1vbihjb25zdCBjaGFy
KiBmb3JtYXQsIHZhX2xpc3QgYXJncykKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgaWYgKF92c25wcmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgICAgICAgICAgLy8gV2luQ0Ugb25seSBzdXBwb3J0cyB3
aWRlIGNoYXJzCi0gICAgICAgICAgICAgICAgd2NoYXJfdCogd2lkZUJ1ZmZlciA9ICh3Y2hhcl90
KiltYWxsb2Moc2l6ZSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdp
ZGVCdWZmZXIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCEod2lkZUJ1ZmZlcltpXSA9IGJ1ZmZlcltpXSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
T3V0cHV0RGVidWdTdHJpbmdXKHdpZGVCdWZmZXIpOwotICAgICAgICAgICAgICAgIGZyZWUod2lk
ZUJ1ZmZlcik7Ci0jZWxzZQogICAgICAgICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nQShidWZm
ZXIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgZnJlZShidWZmZXIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTk2LDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lk
IHByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQogCiBzdGF0aWMg
dm9pZCBwcmludENhbGxTaXRlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbikKIHsKLSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpICYmIGRlZmluZWQo
X0RFQlVHKQorI2lmIE9TKFdJTkRPV1MpICYmIGRlZmluZWQoX0RFQlVHKQogICAgIF9DcnREYmdS
ZXBvcnQoX0NSVF9XQVJOLCBmaWxlLCBsaW5lLCBOVUxMLCAiJXNcbiIsIGZ1bmN0aW9uKTsKICNl
bHNlCiAgICAgLy8gQnkgdXNpbmcgdGhpcyBmb3JtYXQsIHdoaWNoIG1hdGNoZXMgdGhlIGZvcm1h
dCB1c2VkIGJ5IE1TVkMgZm9yIGNvbXBpbGVyIGVycm9ycywgZGV2ZWxvcGVycwpAQCAtMjM1LDcg
KzIyMiw3IEBAIHZvaWQgV1RGR2V0QmFja3RyYWNlKHZvaWQqKiBzdGFjaywgaW50KiBzaXplKQog
ewogI2lmIE9TKERBUldJTikgfHwgKE9TKExJTlVYKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSkK
ICAgICAqc2l6ZSA9IGJhY2t0cmFjZShzdGFjaywgKnNpemUpOwotI2VsaWYgT1MoV0lORE9XUykg
JiYgIU9TKFdJTkNFKQorI2VsaWYgT1MoV0lORE9XUykKICAgICAvLyBUaGUgQ2FwdHVyZVN0YWNr
QmFja1RyYWNlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBYUCwgYnV0IGl0IGlzIG5vdCBkZWZp
bmVkCiAgICAgLy8gaW4gdGhlIFdpbmRvd3MgU2VydmVyIDIwMDMgUjIgUGxhdGZvcm0gU0RLLiBT
bywgd2UnbGwgZ3JhYiB0aGUgZnVuY3Rpb24KICAgICAvLyB0aHJvdWdoIEdldFByb2NBZGRyZXNz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5oCmluZGV4IGY0Yzg5MmEuLmY4YTEwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgK
QEAgLTE5NiwxNCArMTk2LDYgQEAgZXh0ZXJuICJDIiB7CiAgIEV4cHJlc3Npb25zIGluc2lkZSB0
aGVtIGFyZSBldmFsdWF0ZWQgaW4gZGVidWcgYnVpbGRzIG9ubHkuCiAqLwogCi0jaWYgT1MoV0lO
Q0UpCi0vKiBGSVhNRTogV2UgaW5jbHVkZSB0aGlzIGhlcmUgb25seSB0byBhdm9pZCBhIGNvbmZs
aWN0IHdpdGggdGhlIEFTU0VSVCBtYWNyby4gKi8KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jdW5k
ZWYgbWluCi0jdW5kZWYgbWF4Ci0jdW5kZWYgRVJST1IKLSNlbmRpZgotCiAjaWYgT1MoV0lORE9X
UykKIC8qIEZJWE1FOiBDaGFuZ2UgdG8gdXNlIHNvbWV0aGluZyBvdGhlciB0aGFuIEFTU0VSVCB0
byBhdm9pZCB0aGlzIGNvbmZsaWN0IHdpdGggdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gKi8KICN1
bmRlZiBBU1NFUlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaCBiL1NvdXJj
ZS9XVEYvd3RmL0F0b21pY3MuaAppbmRleCA0ZTYzMGMyLi43ODc2ODE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKKysrIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCkBA
IC03NCwxMSArNzQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICNpZiBPUyhXSU5ET1dTKQogaW5saW5l
IGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIHVuc2lnbmVkKiBsb2NhdGlvbiwgdW5z
aWduZWQgZXhwZWN0ZWQsIHVuc2lnbmVkIG5ld1ZhbHVlKQogewotI2lmIE9TKFdJTkNFKQotICAg
IHJldHVybiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShyZWludGVycHJldF9jYXN0PExPTkcq
Pihjb25zdF9jYXN0PHVuc2lnbmVkKj4obG9jYXRpb24pKSwgc3RhdGljX2Nhc3Q8TE9ORz4obmV3
VmFsdWUpLCBzdGF0aWNfY2FzdDxMT05HPihleHBlY3RlZCkpID09IHN0YXRpY19jYXN0PExPTkc+
KGV4cGVjdGVkKTsKLSNlbHNlCiAgICAgcmV0dXJuIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdl
KHJlaW50ZXJwcmV0X2Nhc3Q8TE9ORyB2b2xhdGlsZSo+KGxvY2F0aW9uKSwgc3RhdGljX2Nhc3Q8
TE9ORz4obmV3VmFsdWUpLCBzdGF0aWNfY2FzdDxMT05HPihleHBlY3RlZCkpID09IHN0YXRpY19j
YXN0PExPTkc+KGV4cGVjdGVkKTsKLSNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFy
ZUFuZFN3YXAodm9pZCp2b2xhdGlsZSogbG9jYXRpb24sIHZvaWQqIGV4cGVjdGVkLCB2b2lkKiBu
ZXdWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcAppbmRleCA5OTBjYWExLi40MTFlNjcxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0N1cnJlbnRUaW1lLmNwcApAQCAtNzIsMTEgKzcyLDcgQEAgc3RhdGljIGRvdWJsZSBsb3dS
ZXNVVENUaW1lKCkKIHsKICAgICBGSUxFVElNRSBmaWxlVGltZTsKIAotI2lmIE9TKFdJTkNFKQot
ICAgIEdldEN1cnJlbnRGVCgmZmlsZVRpbWUpOwotI2Vsc2UKICAgICBHZXRTeXN0ZW1UaW1lQXNG
aWxlVGltZSgmZmlsZVRpbWUpOwotI2VuZGlmCiAKICAgICAvLyBBcyBwZXIgV2luZG93cyBkb2N1
bWVudGF0aW9uIGZvciBGSUxFVElNRSwgY29weSB0aGUgcmVzdWx0aW5nIEZJTEVUSU1FIHN0cnVj
dHVyZSB0byBhCiAgICAgLy8gVUxBUkdFX0lOVEVHRVIgc3RydWN0dXJlIHVzaW5nIG1lbWNweSAo
dXNpbmcgbWVtY3B5IGluc3RlYWQgb2YgZGlyZWN0IGFzc2lnbm1lbnQgY2FuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3Bw
CmluZGV4IDI5YmVkMTUuLmVhMDRmNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGFM
b2cuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCkBAIC0zNSwxMiArMzUsNiBA
QAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLSNpZiBPUyhXSU5DRSkKLSNpZm5kZWYg
X0lPTkJGCi0jZGVmaW5lIF9JT05CRiAweDAwMDQKLSNlbmRpZgotI2VuZGlmCi0KICNkZWZpbmUg
REFUQV9MT0dfVE9fRklMRSAwCiAKIC8vIFNldCB0byAxIHRvIHVzZSB0aGUgdGVtcCBkaXJlY3Rv
cnkgZnJvbSBjb25mc3RyIGluc3RlYWQgb2YgaGFyZGNvZGVkIGRpcmVjdG9yeS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRo
LmNwcAppbmRleCA2ZWUzNmQzLi4zN2NmMzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9E
YXRlTWF0aC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCkBAIC0xMjEsNyAr
MTIxLDYgQEAgc3RhdGljIGNvbnN0IGludCBmaXJzdERheU9mTW9udGhbMl1bMTJdID0gewogICAg
IHswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNX0K
IH07CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TG9jYWxUaW1lKGNv
bnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1Y3QgdG0qIGxvY2FsVE0pCiB7CiAjaWYgQ09NUElM
RVIoTUlOR1cpCkBAIC0xMzIsNyArMTMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldExvY2Fs
VGltZShjb25zdCB0aW1lX3QqIGxvY2FsVGltZSwgc3RydWN0IHRtKiBsb2NhbFRNKQogICAgIGxv
Y2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxUTSk7CiAjZW5kaWYKIH0KLSNlbmRpZgogCiBib29s
IGlzTGVhcFllYXIoaW50IHllYXIpCiB7CkBAIC00MjQsMTEgKzQyMiw3IEBAIHN0YXRpYyB2b2lk
IFVuaXhUaW1lVG9GaWxlVGltZSh0aW1lX3QgdCwgTFBGSUxFVElNRSBwZnQpCiAgKi8KIHN0YXRp
YyBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0KHRpbWVfdCBsb2NhbFRpbWUsIGRvdWJsZSB1dGNP
ZmZzZXQpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgVU5VU0VEX1BBUkFNKGxvY2FsVGltZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHV0Y09mZnNldCk7Ci0gICAgcmV0dXJuIDA7Ci0jZWxpZiBPUyhXSU5E
T1dTKQorI2lmIE9TKFdJTkRPV1MpCiAgICAgRklMRVRJTUUgdXRjRmlsZVRpbWU7CiAgICAgVW5p
eFRpbWVUb0ZpbGVUaW1lKGxvY2FsVGltZSwgJnV0Y0ZpbGVUaW1lKTsKICAgICBTWVNURU1USU1F
IHV0Y1N5c3RlbVRpbWUsIGxvY2FsU3lzdGVtVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0Zhc3RNYWxsb2MuY3BwIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKaW5kZXgg
Nzk4YzFkYy4uMzEzNTcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKQEAgLTExOCwxMSArMTE4LDYg
QEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiBPUyhXSU5ET1dTKQogCi0vLyBUTFNfT1VUX09GX0lO
REVYRVMgaXMgbm90IGRlZmluZWQgb24gV2luQ0UuCi0jaWZuZGVmIFRMU19PVVRfT0ZfSU5ERVhF
UwotI2RlZmluZSBUTFNfT1VUX09GX0lOREVYRVMgMHhmZmZmZmZmZgotI2VuZGlmCi0KIHN0YXRp
YyBEV09SRCBpc0ZvcmliaWRkZW5UbHNJbmRleCA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKIHN0YXRp
YyBjb25zdCBMUFZPSUQga1Rsc0FsbG93VmFsdWUgPSByZWludGVycHJldF9jYXN0PExQVk9JRD4o
MCk7IC8vIE11c3QgYmUgemVyby4KIHN0YXRpYyBjb25zdCBMUFZPSUQga1Rsc0ZvcmJpZGRlblZh
bHVlID0gcmVpbnRlcnByZXRfY2FzdDxMUFZPSUQ+KDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvRmVhdHVyZURlZmluZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgK
aW5kZXggZGY3NmE3YS4uNjAzMjg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVy
ZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC0yMzks
NyArMjM5LDcgQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0byB1cGRh
dGUgdGhlIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGZpbGUKICNlbmRpZiAvKiBQTEFURk9STShN
QUMpICovCiAKIC8qIC0tLS0tLS0tLSBBcHBsZSBXaW5kb3dzIHBvcnQgLS0tLS0tLS0tICovCi0j
aWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpICYmICFQTEFURk9STShXSU5fQ0FJUk8pCisj
aWYgUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKQogCiAjaWYgIWRlZmluZWQo
RU5BQkxFX0ZVTExTQ1JFRU5fQVBJKQogI2RlZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMQpA
QCAtMjUzLDI2ICsyNTMsNyBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVk
IHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQogI2RlZmluZSBFTkFC
TEVfV0VCR0wgMQogI2VuZGlmCiAKLSNlbmRpZiAvKiBQTEFURk9STShXSU4pICYmICFPUyhXSU5D
RSkgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgKi8KLQotLyogLS0tLS0tLS0tIFdpbkNFIHBvcnQg
LS0tLS0tLS0tICovCi0vKiBXaW5DRSBwb3J0IGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgUExBVEZP
Uk0oV0lOKS4gKi8KLS8qIFBMQVRGT1JNKFdJTikgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiBidWls
ZGluZyBmb3IgdGhlIFdpbkNFIHBvcnQuICovCi0jaWYgUExBVEZPUk0oV0lOKSAmJiBPUyhXSU5D
RSkKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9EUkFHX1NVUFBPUlQpCi0jZGVmaW5lIEVOQUJMRV9E
UkFHX1NVUFBPUlQgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRlRQRElSKQotI2Rl
ZmluZSBFTkFCTEVfRlRQRElSIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0lOU1BF
Q1RPUikKLSNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUiAwCi0jZW5kaWYKLQotI2VuZGlmIC8qIFBM
QVRGT1JNKFdJTikgJiYgT1MoV0lOQ0UpICovCisjZW5kaWYgLyogUExBVEZPUk0oV0lOKSAmJiAh
UExBVEZPUk0oV0lOX0NBSVJPKSAqLwogCiAvKiAtLS0tLS0tLS0gV2luZG93cyBDQUlSTyBwb3J0
IC0tLS0tLS0tLSAqLwogLyogUExBVEZPUk0oV0lOX0NBSVJPKSBpcyBhIHNwZWNpYWxpemF0aW9u
IG9mIFBMQVRGT1JNKFdJTikuICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9j
YXRvci5oIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAppbmRleCBhNTc2NjcyLi5iYTEy
N2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKQEAgLTc5LDE3ICs3OSw5IEBAIGlubGluZSB2b2lkKiBP
U0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChzaXplX3QgcmVzZXJ2ZVNpemUsIHNpemVfdCBj
b21taXRTaXplCiAgICAgcmV0dXJuIGJhc2U7CiB9CiAKLWlubGluZSB2b2lkIE9TQWxsb2NhdG9y
OjpkZWNvbW1pdEFuZFJlbGVhc2Uodm9pZCogcmVsZWFzZUJhc2UsIHNpemVfdCByZWxlYXNlU2l6
ZSwgdm9pZCogZGVjb21taXRCYXNlLCBzaXplX3QgZGVjb21taXRTaXplKQoraW5saW5lIHZvaWQg
T1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90
IHJlbGVhc2VTaXplLCB2b2lkKiwgc2l6ZV90KQogewogICAgIEFTU0VSVChkZWNvbW1pdEJhc2Ug
Pj0gcmVsZWFzZUJhc2UgJiYgKHN0YXRpY19jYXN0PGNoYXIqPihkZWNvbW1pdEJhc2UpICsgZGVj
b21taXRTaXplKSA8PSAoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlbGVhc2VCYXNlKSArIHJlbGVhc2VT
aXplKSk7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgLy8gT24gbW9zdCBwbGF0Zm9ybXMgd2UgY2FuIGFj
dHVhbGx5IHNraXAgdGhpcyBmaW5hbCBkZWNvbW1pdDsgcmVsZWFzaW5nIHRoZSBWTSB3aWxsCi0g
ICAgLy8gaW1wbGljaXRseSBkZWNvbW1pdCBhbnkgcGh5c2ljYWwgbWVtb3J5IGluIHRoZSByZWdp
b24uIFRoaXMgaXMgbm90IHRydWUgb24gV0lOQ0UuCi0gICAgZGVjb21taXQoZGVjb21taXRCYXNl
LCBkZWNvbW1pdFNpemUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZGVjb21taXRCYXNlKTsK
LSAgICBVTlVTRURfUEFSQU0oZGVjb21taXRTaXplKTsKLSNlbmRpZgogICAgIHJlbGVhc2VEZWNv
bW1pdHRlZChyZWxlYXNlQmFzZSwgcmVsZWFzZVNpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA1
MzI3NzhlLi5iNjAwN2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTM5NCwxMSArMzk0LDYgQEAKICNkZWZp
bmUgV1RGX09TX1NPTEFSSVMgMQogI2VuZGlmCiAKLS8qIE9TKFdJTkNFKSAtIFdpbmRvd3MgQ0U7
IG5vdGUgdGhhdCBmb3IgdGhpcyBwbGF0Zm9ybSBPUyhXSU5ET1dTKSBpcyBhbHNvIGRlZmluZWQg
Ki8KLSNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0jZGVmaW5lIFdURl9PU19XSU5DRSAxCi0jZW5k
aWYKLQogLyogT1MoV0lORE9XUykgLSBBbnkgdmVyc2lvbiBvZiBXaW5kb3dzICovCiAjaWYgZGVm
aW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpCiAjZGVmaW5lIFdURl9PU19XSU5ET1dTIDEK
QEAgLTYwMCw3ICs1OTUsNyBAQAogCiAjZW5kaWYgLyogT1MoREFSV0lOKSAqLwogCi0jaWYgT1Mo
V0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAKICNkZWZpbmUgSEFWRV9T
WVNfVElNRUJfSCAxCiAjZGVmaW5lIEhBVkVfQUxJR05FRF9NQUxMT0MgMQpAQCAtNjU1LDggKzY1
MCw3IEBACiAvKiBUaGUgSklUIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBhbGwgeDg2LCB4ODYt
NjQsIEFSTSAmIE1JUFMgcGxhdGZvcm1zIGV4Y2VwdCBBUk12N2sgYW5kIFdpbmRvd3MuICovCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgXAogICAgICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkgXAotICAgICYmICFDUFUo
QVBQTEVfQVJNVjdLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICYmICFPUyhXSU5DRSkKKyAgICAmJiAhQ1BVKEFQUExFX0FS
TVY3SykKICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKIApAQCAtOTQzLDcgKzkzNyw3IEBA
CiAjZGVmaW5lIFdURl9VU0VfVU5JWF9ET01BSU5fU09DS0VUUyAxCiAjZW5kaWYKIAotI2lmICFk
ZWZpbmVkKFdURl9VU0VfSU1MQU5HX0ZPTlRfTElOSzIpICYmICFPUyhXSU5DRSkKKyNpZiAhZGVm
aW5lZChXVEZfVVNFX0lNTEFOR19GT05UX0xJTksyKQogI2RlZmluZSBXVEZfVVNFX0lNTEFOR19G
T05UX0xJTksyIDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGNiMmM1
MjYuLjc0YzllYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC01LDE1ICs1LDkgQEAg
bGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICB3aW4vUnVuTG9vcFdpbi5jcHAKICkKIAotaWYg
KFdJTkNFKQotICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAgICAgICAgbW10aW1lcgot
ICAgICkKLWVsc2UgKCkKLSAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCi0gICAgICAgIHdp
bm1tCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKKyAgICB3aW5t
bQorKQogCiBsaXN0KEFQUEVORCBXVEZfSEVBREVSUwogICAgICIke0RFUklWRURfU09VUkNFU19X
VEZfRElSfS9XVEZIZWFkZXJEZXRlY3Rpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1JBTVNpemUuY3BwIGIvU291cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKaW5kZXggNTBiNTIyMi4u
YTZkMWY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKQEAgLTYxLDEzICs2MSw2IEBAIHN0YXRpYyBzaXplX3Qg
Y29tcHV0ZVJBTVNpemUoKQogICAgIGlmIChwYWdlcyA9PSAtMSB8fCBwYWdlU2l6ZSA9PSAtMSkK
ICAgICAgICAgcmV0dXJuIHJhbVNpemVHdWVzczsKICAgICByZXR1cm4gcGFnZXMgKiBwYWdlU2l6
ZTsKLSNlbGlmIE9TKFdJTkNFKQotICAgIE1FTU9SWVNUQVRVUyBzdGF0dXM7Ci0gICAgc3RhdHVz
LmR3TGVuZ3RoID0gc2l6ZW9mKHN0YXR1cyk7Ci0gICAgR2xvYmFsTWVtb3J5U3RhdHVzKCZzdGF0
dXMpOwotICAgIGlmIChzdGF0dXMuZHdUb3RhbFBoeXMgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJh
bVNpemVHdWVzczsKLSAgICByZXR1cm4gc3RhdHVzLmR3VG90YWxQaHlzOwogI2VsaWYgT1MoV0lO
RE9XUykKICAgICBNRU1PUllTVEFUVVNFWCBzdGF0dXM7CiAgICAgc3RhdHVzLmR3TGVuZ3RoID0g
c2l6ZW9mKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJT
ZWVkLmggYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKaW5kZXggMTNhZDQ4ZS4u
YTY1ZDdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaApAQCAtNDUsOSArNDUsNiBAQCBp
bmxpbmUgdm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCkKIHsKICNpZiBPUyhE
QVJXSU4pCiAgICAgLy8gT24gRGFyd2luIHdlIHVzZSBhcmM0cmFuZG9tIHdoaWNoIGluaXRpYWxp
c2VzIGl0c2VsZi4KLSNlbGlmIE9TKFdJTkNFKQotICAgIC8vIGluaXRpYWxpemUgcmFuZCgpCi0g
ICAgc3JhbmQoR2V0VGlja0NvdW50KCkpOwogI2VsaWYgQ09NUElMRVIoTVNWQykgJiYgZGVmaW5l
ZChfQ1JUX1JBTkRfUykKICAgICAvLyBPbiBXaW5kb3dzIHdlIHVzZSByYW5kX3Mgd2hpY2ggaW5p
dGlhbGlzZXMgaXRzZWxmCiAjZWxpZiBPUyhVTklYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU3RhY2tCb3VuZHMuY3BwIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuY3BwCmluZGV4
IDFjODY3NTAuLmYzMDhhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5jcHAKQEAgLTEyNCwxNiArMTI0
LDYgQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCiAgICAgLy8gc3RhY2tPcmlnaW4u
QWxsb2NhdGlvbkJhc2UgcG9pbnRzIHRvIHRoZSByZXNlcnZlZCBzdGFjayBtZW1vcnkgYmFzZSBh
ZGRyZXNzLgogCiAgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tPcmlnaW4u
QmFzZUFkZHJlc3MpICsgc3RhY2tPcmlnaW4uUmVnaW9uU2l6ZTsKLSNpZiBPUyhXSU5DRSkKLSAg
ICBTWVNURU1fSU5GTyBzeXN0ZW1JbmZvOwotICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbUluZm8p
OwotICAgIERXT1JEIHBhZ2VTaXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotCi0gICAgTUVN
T1JZX0JBU0lDX0lORk9STUFUSU9OIHN0YWNrTWVtb3J5OwotICAgIFZpcnR1YWxRdWVyeShtX29y
aWdpbiwgJnN0YWNrTWVtb3J5LCBzaXplb2Yoc3RhY2tNZW1vcnkpKTsKLQotICAgIG1fYm91bmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pIC0gc3RhY2tNZW1vcnkuUmVnaW9uU2l6ZSAr
IHBhZ2VTaXplOwotI2Vsc2UKICAgICAvLyBUaGUgc3RhY2sgb24gV2luZG93cyBjb25zaXN0cyBv
dXQgb2YgdGhyZWUgcGFydHMgKHVuY29tbWl0dGVkIG1lbW9yeSwgYSBndWFyZCBwYWdlIGFuZCBw
cmVzZW50CiAgICAgLy8gY29tbWl0dGVkIG1lbW9yeSkuIFRoZSAzIHJlZ2lvbnMgaGF2ZSBkaWZm
ZXJlbnQgQmFzZUFkZHJlc3NlcyBidXQgYWxsIGhhdmUgdGhlIHNhbWUgQWxsb2NhdGlvbkJhc2UK
ICAgICAvLyBzaW5jZSB0aGV5IGFyZSBhbGwgZnJvbSB0aGUgc2FtZSBWaXJ0dWFsQWxsb2MuIFRo
ZSAzIHJlZ2lvbnMgYXJlIGxhaWQgb3V0IGluIG1lbW9yeSAoZnJvbSBoaWdoIHRvCkBAIC0xNzMs
NyArMTYzLDYgQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCiAgICAgQVNTRVJUKGVu
ZE9mU3RhY2sgPT0gY29tcHV0ZWRFbmQpOwogI2VuZGlmIC8vIE5ERUJVRwogICAgIG1fYm91bmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kT2ZTdGFjaykgKyBndWFyZFBhZ2UuUmVnaW9uU2l6ZTsK
LSNlbmRpZiAvLyBPUyhXSU5DRSkKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IGI1
N2FhZTIuLjE3OWNjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgK
KysrIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtOTgsMTEgKzk4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fb3JpZ2luICYmIG1fYm91bmQpOwotI2lmIE9TKFdJTkNFKQotICAgICAgICByZXR1
cm4gbV9vcmlnaW4gPiBtX2JvdW5kOwotI2Vsc2UKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5k
aWYKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJF
eHRyYXMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCmluZGV4IGMxZjQ1ZTAuLmEw
MTg3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCkBAIC0yOTcsMzEgKzI5Nyw2IEBAIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKLSNpZiBPUyhXSU5DRSkKLS8vIFdpbmRvd3MgQ0UgQ1JUIGhhcyBkb2VzIG5vdCBpbXBs
ZW1lbnQgYnNlYXJjaCgpLgotaW5saW5lIHZvaWQqIHd0Zl9ic2VhcmNoKGNvbnN0IHZvaWQqIGtl
eSwgY29uc3Qgdm9pZCogYmFzZSwgc2l6ZV90IGNvdW50LCBzaXplX3Qgc2l6ZSwgaW50ICgqY29t
cGFyZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotewotICAgIGNvbnN0IGNoYXIqIGZp
cnN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpOwotCi0gICAgd2hpbGUgKGNvdW50
KSB7Ci0gICAgICAgIHNpemVfdCBwb3MgPSAoY291bnQgLSAxKSA+PiAxOwotICAgICAgICBjb25z
dCBjaGFyKiBpdGVtID0gZmlyc3QgKyBwb3MgKiBzaXplOwotICAgICAgICBpbnQgY29tcGFyZVJl
c3VsdCA9IGNvbXBhcmUoaXRlbSwga2V5KTsKLSAgICAgICAgaWYgKCFjb21wYXJlUmVzdWx0KQot
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhcio+KGl0ZW0pOwotICAgICAgICBpZiAo
Y29tcGFyZVJlc3VsdCA8IDApIHsKLSAgICAgICAgICAgIGNvdW50IC09IChwb3MgKyAxKTsKLSAg
ICAgICAgICAgIGZpcnN0ICs9IChwb3MgKyAxKSAqIHNpemU7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY291bnQgPSBwb3M7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZp
bmUgYnNlYXJjaChrZXksIGJhc2UsIGNvdW50LCBzaXplLCBjb21wYXJlKSB3dGZfYnNlYXJjaChr
ZXksIGJhc2UsIGNvdW50LCBzaXplLCBjb21wYXJlKQotI2VuZGlmCi0KIC8vIFRoaXMgdmVyc2lv
biBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KIGVudW0gTm90TnVsbFRhZyB7IE5v
dE51bGwgfTsKIGlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBOb3ROdWxsVGFnLCB2
b2lkKiBsb2NhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5o
IGIvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKaW5kZXggMTAzZTE3My4uYjFhZWE1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvU3RyaW5nRXh0cmFzLmgKQEAgLTY5LDI1ICs2OSw2IEBAIGlubGluZSBkb3VibGUgd3Rm
X3ZzbnByaW50ZihjaGFyKiBidWZmZXIsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogZm9ybWF0
LCB2YV9sCiAvLyB2c25wcmludGYgZG9lcyBub3QgbnVsbCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlci4g
V2ViS2l0IGNhbiByZWx5IG9uIHRoZSBudWxsIHRlcm1pbmF0aW9uLgogI2RlZmluZSB2c25wcmlu
dGYoYnVmZmVyLCBjb3VudCwgZm9ybWF0LCBhcmdzKSB3dGZfdnNucHJpbnRmKGJ1ZmZlciwgY291
bnQsIGZvcm1hdCwgYXJncykKIAotI2lmIE9TKFdJTkNFKQotCi1pbmxpbmUgaW50IHN0cm5pY21w
KGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IGNoYXIqIHN0cmluZzIsIHNpemVfdCBjb3VudCkK
LXsKLSAgICByZXR1cm4gX3N0cm5pY21wKHN0cmluZzEsIHN0cmluZzIsIGNvdW50KTsKLX0KLQot
aW5saW5lIGludCBzdHJpY21wKGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IGNoYXIqIHN0cmlu
ZzIpCi17Ci0gICAgcmV0dXJuIF9zdHJpY21wKHN0cmluZzEsIHN0cmluZzIpOwotfQotCi1pbmxp
bmUgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHN0clNvdXJjZSkKLXsKLSAgICByZXR1cm4gX3N0
cmR1cChzdHJTb3VyY2UpOwotfQotCi0jZW5kaWYKLQogaW5saW5lIGludCBzdHJuY2FzZWNtcChj
b25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVfdCBsZW4pCiB7CiAgICAgcmV0dXJu
IF9zdHJuaWNtcChzMSwgczIsIGxlbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRTcGVjaWZpYy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaAppbmRleCAxZGNi
Mzc4Li5mNDA0MGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKQEAgLTE1OCwxMSArMTU4LDYg
QEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OnNldChUKiBwdHIpCiAKICNlbGlmIE9T
KFdJTkRPV1MpCiAKLS8vIFRMU19PVVRfT0ZfSU5ERVhFUyBpcyBub3QgZGVmaW5lZCBvbiBXaW5D
RS4KLSNpZm5kZWYgVExTX09VVF9PRl9JTkRFWEVTCi0jZGVmaW5lIFRMU19PVVRfT0ZfSU5ERVhF
UyAweGZmZmZmZmZmCi0jZW5kaWYKLQogLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFRMUyBrZXlz
IHRoYXQgY2FuIGJlIGNyZWF0ZWQuIEZvciBzaW1wbGlmaWNhdGlvbiwgd2UgYXNzdW1lIHRoYXQ6
CiAvLyAxKSBPbmNlIHRoZSBpbnN0YW5jZSBvZiBUaHJlYWRTcGVjaWZpYzw+IGlzIGNyZWF0ZWQs
IGl0IHdpbGwgbm90IGJlIGRlc3RydWN0ZWQgdW50aWwgdGhlIHByb2dyYW0gZGllcy4KIC8vIDIp
IFdlIGRvIG5vdCBuZWVkIHRvIGhvbGQgbWFueSBpbnN0YW5jZXMgb2YgVGhyZWFkU3BlY2lmaWM8
PiBkYXRhLiBUaGlzIGZpeGVkIG51bWJlciBzaG91bGQgYmUgZmFyIGVub3VnaC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCmluZGV4IGU3MmFmZmYuLjJlOTc2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcApAQCAtOTQsNiArOTQsNyBAQAogCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1
ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEwNywxMCArMTA4LDYgQEAKICNpbmNsdWRlICJUaHJlYWRT
cGVjaWZpYy5oIgogI2VuZGlmCiAKLSNpZiAhT1MoV0lOQ0UpCi0jaW5jbHVkZSA8cHJvY2Vzcy5o
PgotI2VuZGlmCi0KICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRp
ZgpAQCAtMjE4LDE3ICsyMTUsOSBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIHVuc2ln
bmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQg
PSAwOwogICAgIE93blB0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24gPSBh
ZG9wdFB0cihuZXcgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpKTsK
LSNpZiBPUyhXSU5DRSkKLSAgICAvLyBUaGlzIGlzIHNhZmUgb24gV0lOQ0UsIHNpbmNlIENSVCBp
cyBpbiB0aGUgY29yZSBhbmQgaW5uYXRlbHkgbXVsdGl0aHJlYWRlZC4KLSAgICAvLyBPbiBkZXNr
dG9wIFdpbmRvd3MsIG5lZWQgdG8gdXNlIF9iZWdpbnRocmVhZGV4IChub3QgYXZhaWxhYmxlIG9u
IFdpbkNFKSBpZiB1c2luZyBhbnkgQ1JUIGZ1bmN0aW9ucwotICAgIEhBTkRMRSB0aHJlYWRIYW5k
bGUgPSBDcmVhdGVUaHJlYWQoMCwgMCwgKExQVEhSRUFEX1NUQVJUX1JPVVRJTkUpd3RmVGhyZWFk
RW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgKExQRFdPUkQpJnRocmVhZElkZW50aWZp
ZXIpOwotI2Vsc2UKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxI
QU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRp
b24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7Ci0jZW5kaWYKICAgICBpZiAoIXRocmVh
ZEhhbmRsZSkgewotI2lmIE9TKFdJTkNFKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQ
b2ludCwgZGF0YSwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0jZWxpZiAhSEFWRShFUlJOT19IKQorI2lm
ICFIQVZFKEVSUk5PX0gpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJl
YWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwLiIsIGVudHJ5UG9pbnQsIGRhdGEpOwog
I2Vsc2UKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRy
eSBwb2ludCAlcCB3aXRoIGRhdGEgJXA6ICVsZCIsIGVudHJ5UG9pbnQsIGRhdGEsIGVycm5vKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dpbmRvd3NFeHRyYXMuaCBiL1NvdXJjZS9XVEYv
d3RmL1dpbmRvd3NFeHRyYXMuaAppbmRleCAxNmJjODY1Li4wNjFkYjUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9XaW5kb3dzRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvV2luZG93
c0V4dHJhcy5oCkBAIC0zOSwzNCArMzksMTcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGlubGluZSBI
UkVTVUxUIGdldFJlZ2lzdHJ5VmFsdWUoSEtFWSBoa2V5LCBMUENXU1RSIHBzelN1YktleSwgTFBD
V1NUUiBwc3pWYWx1ZSwgTFBEV09SRCBwZHdUeXBlLCBMUFZPSUQgcHZEYXRhLCBMUERXT1JEIHBj
YkRhdGEpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgSEtFWSBrZXk7Ci0gICAgaWYgKDo6UmVnT3Bl
bktleUV4Vyhoa2V5LCBwc3pTdWJLZXksIDAsIDAsICZrZXkpICE9IEVSUk9SX1NVQ0NFU1MpCi0g
ICAgICAgIHJldHVybiBFUlJPUl9JTlZBTElEX05BTUU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSA6
OlJlZ1F1ZXJ5VmFsdWVFeFcoa2V5LCBwc3pWYWx1ZSwgMCwgcGR3VHlwZSwgc3RhdGljX2Nhc3Q8
TFBCWVRFPihwdkRhdGEpLCBwY2JEYXRhKTsKLSAgICA6OlJlZ0Nsb3NlS2V5KGtleSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSNlbHNlCiAgICAgcmV0dXJuIDo6U0hHZXRWYWx1ZVcoaGtleSwgcHN6
U3ViS2V5LCBwc3pWYWx1ZSwgcGR3VHlwZSwgcHZEYXRhLCBwY2JEYXRhKTsKLSNlbmRpZgogfQog
CiBpbmxpbmUgdm9pZCogZ2V0V2luZG93UG9pbnRlcihIV05EIGhXbmQsIGludCBpbmRleCkKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oOjpHZXRX
aW5kb3dMb25nKGhXbmQsIGluZGV4KSk7Ci0jZWxzZQogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPig6OkdldFdpbmRvd0xvbmdQdHIoaFduZCwgaW5kZXgpKTsKLSNlbmRpZgogfQog
CiBpbmxpbmUgdm9pZCogc2V0V2luZG93UG9pbnRlcihIV05EIGhXbmQsIGludCBpbmRleCwgdm9p
ZCogdmFsdWUpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KDo6U2V0V2luZG93TG9uZyhoV25kLCBpbmRleCwgcmVpbnRlcnByZXRfY2FzdDxMT05H
Pih2YWx1ZSkpKTsKLSNlbHNlCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDo6
U2V0V2luZG93TG9uZ1B0cihoV25kLCBpbmRleCwgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4o
dmFsdWUpKSk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmgK
aW5kZXggNWM0MTQ4Mi4uOWUyZmMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS91
dGlscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2R0b2EvdXRpbHMuaApAQCAtNDksNyArNDksNyBA
QAogZGVmaW5lZChfX0FSTUVMX18pIHx8IFwKIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikK
ICNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCi0j
ZWxpZiBDUFUoTUlQUykgfHwgQ1BVKFBQQykgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoUFBDNjRMRSkg
fHwgT1MoV0lOQ0UpIHx8IENQVShTSDQpIHx8IENQVShTMzkwKSB8fCBDUFUoUzM5MFgpIHx8IENQ
VShJQTY0KSB8fCBDUFUoQUxQSEEpIHx8IENQVShBUk02NCkgfHwgQ1BVKEhQUEEpCisjZWxpZiBD
UFUoTUlQUykgfHwgQ1BVKFBQQykgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoUFBDNjRMRSkgfHwgQ1BV
KFNINCkgfHwgQ1BVKFMzOTApIHx8IENQVShTMzkwWCkgfHwgQ1BVKElBNjQpIHx8IENQVShBTFBI
QSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoSFBQQSkKICNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05f
Q09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCiAjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRl
ZmluZWQoX19pMzg2X18pCiAjaWYgZGVmaW5lZChfV0lOMzIpCkBAIC01OCw4ICs1OCw2IEBAIGRl
ZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikKICNlbHNlCiAjdW5kZWYgRE9VQkxFX0NPTlZFUlNJ
T05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUwogI2VuZGlmICAvLyBfV0lOMzIKLSNlbGlmIGRl
ZmluZWQoV0lOQ0UpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLSNkZWZpbmUgRE9VQkxFX0NPTlZF
UlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCiAjZWxzZQogI2Vycm9yIFRhcmdldCBh
cmNoaXRlY3R1cmUgd2FzIG5vdCBkZXRlY3RlZCBhcyBzdXBwb3J0ZWQgYnkgRG91YmxlLUNvbnZl
cnNpb24uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCAwODAzYzJkLi5m
NjllYzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC00NTIsMjkgKzQ1Miw2IEBA
IFZlY3RvcjxVQ2hhcj4gU3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpIGNv
bnN0CiAKIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKLQotICAgIFZlY3RvcjxjaGFyLCAyNTY+IGJ1ZmZlcjsKLQotICAgIGludCBidWZmZXJT
aXplID0gMjU2OwotICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7Ci0gICAgZm9yICg7Oykg
ewotICAgICAgICBpbnQgd3JpdHRlbiA9IHZzbnByaW50ZihidWZmZXIuZGF0YSgpLCBidWZmZXJT
aXplLCBmb3JtYXQsIGFyZ3MpOwotICAgICAgICB2YV9lbmQoYXJncyk7Ci0KLSAgICAgICAgaWYg
KHdyaXR0ZW4gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwotICAgICAgICBp
ZiAod3JpdHRlbiA+IDApCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0YSgpKSwgd3JpdHRlbik7Ci0g
ICAgICAgIAotICAgICAgICBidWZmZXJTaXplIDw8PSAxOwotICAgICAgICBidWZmZXIucmVzaXpl
KGJ1ZmZlclNpemUpOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIH0KLQot
I2Vsc2UKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKIApA
QCAtNTA5LDcgKzQ4Niw2IEBAIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKICAgICB2YV9lbmQoYXJncyk7CiAgICAgCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnVmZmVyLmRhdGEoKSksIGxl
bik7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFN0cmluZzo6bnVtYmVyKGludCBudW1iZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODdmNGYxNy4uNzdkMDVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAor
MjAxNC0wOS0yMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2
YXRlTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIFBsYXRmb3JtV2luQ0UuY21ha2U6IFJlbW92
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgICogbG9hZGVyL2ljb24vd2luY2Uv
SWNvbkRhdGFiYXNlV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51
RXZlbnRGb3JLZXkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAqIHBh
Z2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmNyZWF0ZURyYWdnaW5nRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250
ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNv
bGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmFtZUFuZEFj
dGl2YXRlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRJQlBpeGVsRGF0YTo6c2V0UkdCQUJpdG1hcEFs
cGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNBbHBoYUJsZW5kU3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjph
bHBoYUJsZW5kSWZTdXBwb3J0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
Y29uV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjppbml0R0RJRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpi
b3VuZHNGb3JHRElHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6d2lk
dGhGb3JHRElHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c2NyaXB0
Rm9udFByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRD
YWNoZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdl
VHJlZU5vZGVXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhZGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyRGF0YVdpbmNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5
ZXJQcml2YXRlV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1h
cC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZv
bnREYXRhV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmllcldpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRlTm90aWZpZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9DT01QdHIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJ
dGVtV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmdldENvbnRleHRNZW51SXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmNyZWF0ZVBsYXRmb3JtQ29udGV4dE1lbnVGcm9t
SXRlbXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhZ0xhYmVsRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpsb2dMZXZlbFN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZE93
bmVyV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5
QW5kUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZXNz
YWdlVG9FdmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVl
bldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VJbmZvRm9yV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNob3cp
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnVXaW46OnJlZ2lzdGVyQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51V2luOjp3bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhl
bWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50QnV0
dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGltZXJXaW5kb3dXbmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVPZmZTY3Jl
ZW5UaW1lcldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpxdWV1ZVRpbWVyUHJvYyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Tb2Z0TGlua2lu
Zy5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndpbmRvd3NWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NvckFyY2hp
dGVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjphcmNoaXRlY3R1cmVUb2tlbkZvclVBU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldDRGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgICogcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
Vmlld05vbmUuY3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9y
eSk6CisgICAgICAgIChXZWJDb3JlOjphZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMpOgor
ICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luUGFja2FnZTo6bG9hZCk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9v
a3MpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJQbHVnaW5WaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnduZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBh
aW50SW50b1RyYW5zZm9ybWVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFk
V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRX
aW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFk
V2luQ0UuaDogUmVtb3ZlZC4KKwogMjAxNC0wOS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHNwZWN1bGF0aXZlIGJ1aWxkIGZpeC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0
ZU1lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
Q0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcAppbmRleCBhYzZmNDZmLi4xMjcxYTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRp
YVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAKLSNpZiBQTEFURk9STShJ
T1MpIHx8IE9TKFdJTkNFKQorI2lmIFBMQVRGT1JNKElPUykKICNpbmNsdWRlICJTb2Z0TGlua2lu
Zy5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ0Uu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtlCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNmU4OTE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ0UuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1saXN0KEFQ
UEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vd2luY2UiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
IgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3dpbiIKLSAgICAiJHszUkRQ
QVJUWV9ESVJ9L2xpYmpwZWciCi0gICAgIiR7M1JEUEFSVFlfRElSfS9saWJwbmciCi0gICAgIiR7
M1JEUEFSVFlfRElSfS9saWJ4bWwyL2luY2x1ZGUiCi0gICAgIiR7M1JEUEFSVFlfRElSfS9saWJ4
c2x0L2luY2x1ZGUiCi0gICAgIiR7M1JEUEFSVFlfRElSfS9zcWxpdGUiCi0gICAgIiR7M1JEUEFS
VFlfRElSfS96bGliIgotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICBwYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5j
cHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRT
aXplV2luLmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luY2Uu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdpbmNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0dyYWRpZW50V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
R3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNF
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5jZS5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tp
ZUphcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9DcmVkZW50aWFsU3RvcmFnZVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Qcm94eVNlcnZlcldpbi5jcHAKLSAgICBw
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Tb2NrZXRTdHJlYW1IYW5kbGVXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0
L0xvY2FsZU5vbmUuY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3Bw
Ci0KLSAgICByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAKLSkKLQotbGlzdChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkKLSAgICBsaWJqcGVn
Ci0gICAgbGlicG5nCi0gICAgbGlieG1sMgotICAgIGxpYnhzbHQKLSAgICBzcWxpdGUKLSAgICB3
aW5pbmV0Ci0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAppbmRleCBmMTk1M2Q2Li5kNjYzNWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTU2Niw3ICs1NjYsNyBAQCB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnJlbW92ZShXaWRnZXQqIHZpZXcpCiB9CiAgICAgCiAgICAgCi0jaWYgIVBMQVRG
T1JNKFdJTikgfHwgT1MoV0lOQ0UpCisjaWYgIVBMQVRGT1JNKFdJTikKIEFYSUQgQVhPYmplY3RD
YWNoZTo6cGxhdGZvcm1HZW5lcmF0ZUFYSUQoKSBjb25zdAogewogICAgIHN0YXRpYyBBWElEIGxh
c3RVc2VkSUQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApp
bmRleCBiYWIxMjU3Li4xMDhkMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcApAQCAtNzcwLDggKzc3MCw2IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVj
dGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogICAg
ICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgLy8gVmlzdWFsIHdvcmQgbW92ZW1lbnQgcmVs
aWVzIG9uIGlzV29yZFRleHRCcmVhayB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gV2luQ0Ug
YW5kIFFULgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMzYuCiAgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJh
bWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92
aW5nUmlnaHQoKTsKICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0
aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSwgc2tpcHNT
cGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2luQ0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2luQ0UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGZkOWViLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2gg
TW9iaWxlIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJY29uRGF0YWJhc2UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudC5oIgotI2luY2x1
ZGUgIkljb25SZWNvcmQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9BdXRv
ZHJhaW5lZFBvb2wuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIEljb25EYXRhYmFzZSogc2hhcmVkSWNvbkRhdGFiYXNlID0g
MDsKLQotLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgaWNvbiBkYXRhYmFzZS4KLUlj
b25EYXRhYmFzZSYgaWNvbkRhdGFiYXNlKCkKLXsKLSAgICBpZiAoIXNoYXJlZEljb25EYXRhYmFz
ZSkKLSAgICAgICAgc2hhcmVkSWNvbkRhdGFiYXNlID0gbmV3IEljb25EYXRhYmFzZTsKLSAgICBy
ZXR1cm4gKnNoYXJlZEljb25EYXRhYmFzZTsKLX0KLQotSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJh
c2UoKSB7fQotSWNvbkRhdGFiYXNlOjp+SWNvbkRhdGFiYXNlKCkge30KLQotdm9pZCBJY29uRGF0
YWJhc2U6OnNldENsaWVudChJY29uRGF0YWJhc2VDbGllbnQqKSB7fQotCi1ib29sIEljb25EYXRh
YmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIElj
b25EYXRhYmFzZTo6Y2xvc2UoKSB7fQotCi12b2lkIEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNv
bnMoKSB7fQotCi1JbWFnZSogSWNvbkRhdGFiYXNlOjppY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmLCBjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsgfQotdm9pZCBJY29uRGF0YWJhc2U6OnJl
YWRJY29uRm9yUGFnZVVSTEZyb21EaXNrKGNvbnN0IFN0cmluZyYpIHt9Ci1TdHJpbmcgSWNvbkRh
dGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IHJldHVybiBTdHJpbmco
KTsgfQotSW1hZ2UqIEljb25EYXRhYmFzZTo6ZGVmYXVsdEljb24oY29uc3QgSW50U2l6ZSYpIHsg
cmV0dXJuIDA7fQotCi12b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29u
c3QgU3RyaW5nJikge30KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJikge30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNv
blVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJikge30KLXZv
aWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25V
UkwsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkge30KLQotSWNvbkxvYWREZWNpc2lvbiBJY29uRGF0
YWJhc2U6OmxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2Fk
ZXIqKSB7IHJldHVybiBJY29uTG9hZE5vOyB9Ci1ib29sIEljb25EYXRhYmFzZTo6aWNvbkRhdGFL
bm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KLQotdm9pZCBJ
Y29uRGF0YWJhc2U6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7fQotYm9vbCBJY29uRGF0YWJh
c2U6OmlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXZvaWQgSWNvbkRhdGFi
YXNlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykge30KLWJvb2wgSWNvbkRh
dGFiYXNlOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotCi12b2lkIEljb25EYXRhYmFzZTo6ZGVsYXlEYXRhYmFzZUNsZWFudXAoKSB7fQotdm9pZCBJ
Y29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCkge30KLXZvaWQgSWNvbkRhdGFiYXNl
OjpjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKSB7fQotCi0vLyBTdXBwb3J0IGZvciBXZWJD
b3JlU3RhdGlzdGljcyBpbiBXZWJLaXQKLXNpemVfdCBJY29uRGF0YWJhc2U6OnBhZ2VVUkxNYXBw
aW5nQ291bnQoKSB7IHJldHVybiAwOyB9Ci1zaXplX3QgSWNvbkRhdGFiYXNlOjpyZXRhaW5lZFBh
Z2VVUkxDb3VudCgpIHtyZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29y
ZENvdW50KCkgeyByZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENv
dW50V2l0aERhdGEoKSB7IHJldHVybiAwOyB9Ci0KLWJvb2wgSWNvbkRhdGFiYXNlOjppc09wZW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotU3RyaW5nIEljb25EYXRhYmFzZTo6ZGF0YWJhc2VQ
YXRoKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLVN0cmluZyBJY29uRGF0YWJhc2U6OmRl
ZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE4NDE3
ZmQuLmM1MWJiYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI4MjAs
NyArMjgyMCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEZvcktl
eSgpCiAKICAgICBzdGF0aWMgY29uc3QgaW50IGtDb250ZXh0TWVudU1hcmdpbiA9IDE7CiAKLSNp
ZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaWYgT1MoV0lORE9XUykKICAgICBpbnQgcmln
aHRBbGlnbmVkID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX01FTlVEUk9QQUxJR05NRU5UKTsKICNl
bHNlCiAgICAgaW50IHJpZ2h0QWxpZ25lZCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmlu
ZGV4IGZlNWEzZDUuLmI4NTg1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC0xMDEs
NyArMTAxLDcgQEAgYm9vbCBTZXR0aW5nczo6Z01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZhbHNlOwog
CiAvLyBOT1RFcwogLy8gIDEpIEVkaXRpbmdNYWNCZWhhdmlvciBjb21wcmlzZXMgVGlnZXIsIExl
b3BhcmQsIFNub3dMZW9wYXJkIGFuZCBpT1MgYnVpbGRzLCBhcyB3ZWxsIGFzIFF0V2ViS2l0IHdo
ZW4gYnVpbHQgb24gTWFjOwotLy8gIDIpIEVkaXRpbmdXaW5kb3dzQmVoYXZpb3IgY29tcHJpc2Vz
IFdpbjMyIGFuZCBXaW5DRSBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgYW5kIENocm9taXVt
IHdoZW4gYnVpbHQgb24gV2luZG93czsKKy8vICAyKSBFZGl0aW5nV2luZG93c0JlaGF2aW9yIGNv
bXByaXNlcyBXaW4zMiBidWlsZDsKIC8vICAzKSBFZGl0aW5nVW5peEJlaGF2aW9yIGNvbXByaXNl
cyBhbGwgdW5peC1iYXNlZCBzeXN0ZW1zLCBidXQgRGFyd2luL01hY09TIChhbmQgdGhlbiBhYnVz
aW5nIHRoZSB0ZXJtaW5vbG9neSk7CiAvLyA5OSkgTWFjRWRpdGluZ0JlaGF2aW9yIGlzIHVzZWQg
YXMgYSBmYWxsYmFjay4KIHN0YXRpYyBFZGl0aW5nQmVoYXZpb3JUeXBlIGVkaXRpbmdCZWhhdmlv
clR5cGVGb3JQbGF0Zm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVy
V2luLmNwcAppbmRleCA2MGI3ZjIwLi42NDQyZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
d2luL0V2ZW50SGFuZGxlcldpbi5jcHAKQEAgLTk0LDExICs5NCw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkg
Y29uc3QKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXI+
IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdEYXRhVHJhbnNmZXIoKSBjb25zdAogewotI2lm
IE9TKFdJTkNFKQotICAgIHJldHVybiAwOwotI2Vsc2UKICAgICByZXR1cm4gRGF0YVRyYW5zZmVy
OjpjcmVhdGVGb3JEcmFnQW5kRHJvcCgpOwotI2VuZGlmCiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmgKaW5kZXggZmY5ZDM2Yi4uYzhlMmE3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCkBAIC05Miw5ICs5Miw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtX3BsYXRmb3JtRGVz
Y3JpcHRpb247CiAjZWxzZQogICAgICAgICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtX3BsYXRm
b3JtRGVzY3JpcHRpb247Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIHVuc2lnbmVkIG1faXRlbUNv
dW50OwotI2VuZGlmCiAjZW5kaWYKIAogI2VuZGlmIC8vIFVTRShDUk9TU19QTEFURk9STV9DT05U
RVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKaW5kZXggNWYxZTFk
ZC4uODE5MWM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0yMDEs
NyArMjAxLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckltYWdlKEZyYW1lJiBm
cmFtZSwgTm9kZSYgbm9kZSwgSW50UmVjdCYgaW1hZ2VSZWMKICAgICByZXR1cm4gY3JlYXRlRHJh
Z0ltYWdlRnJvbVNuYXBzaG90KHNuYXBzaG90Tm9kZShmcmFtZSwgbm9kZSksICZub2RlKTsKIH0K
IAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgKCFQTEFURk9STShXSU4pIHx8IE9TKFdJTkNFKSkK
KyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShXSU4pCiBEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRm9yTGluayhVUkwmLCBjb25zdCBTdHJpbmcmLCBGb250UmVuZGVyaW5nTW9k
ZSkKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
aAppbmRleCA0M2NmODc2Li5hODEzODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3Rl
bS5oCkBAIC0xOTcsNyArMTk3LDcgQEAgQ1N0cmluZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCk7CiB1
aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29uc3QgY2hhciopOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkKKyNpZiBQTEFURk9STShXSU4pCiBTdHJp
bmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcgcm9hbWluZ1Vz
ZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGJmYTlkMGYuLjIyMGIz
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAKQEAgLTY3NiwxMSArNjc2LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6bWF5RmlsbFdpdGhT
b2xpZENvbG9yKCkKIHsKICAgICBpZiAoIW1fY2hlY2tlZEZvclNvbGlkQ29sb3IgJiYgZnJhbWVD
b3VudCgpID4gMCkgewogICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKLSAgICAgICAgLy8g
V0lOQ0UgUE9SVDogY2hlY2tGb3JTb2xpZENvbG9yKCkgZG9lc24ndCBzZXQgbV9jaGVja2VkRm9y
U29saWRDb2xvciB1bnRpbAotICAgICAgICAvLyBpdCBnZXRzIGVub3VnaCBpbmZvcm1hdGlvbiB0
byBtYWtlIGZpbmFsIGRlY2lzaW9uLgotI2lmICFPUyhXSU5DRSkKICAgICAgICAgQVNTRVJUKG1f
Y2hlY2tlZEZvclNvbGlkQ29sb3IpOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiBtX2lzU29s
aWRDb2xvciAmJiAhbV9jdXJyZW50RnJhbWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCmluZGV4IGE4Y2FkNDQuLjUyMGI0NTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCkBAIC0z
OTQsMjAgKzM5NCwxMCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250R2x5
cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKGNvbnN0CiAgICAgICAgIEdseXBoRGF0
YSBkYXRhID0gZmFsbGJhY2tQYWdlICYmIGZhbGxiYWNrUGFnZS0+Zm9udERhdGFGb3JDaGFyYWN0
ZXIoYykgPyBmYWxsYmFja1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IGNoYXJhY3Rl
ckZvbnREYXRhLT5taXNzaW5nR2x5cGhEYXRhKCk7CiAgICAgICAgIC8vIENhY2hlIGl0IHNvIHdl
IGRvbid0IGhhdmUgdG8gZG8gc3lzdGVtIGZhbGxiYWNrIGFnYWluIG5leHQgdGltZS4KICAgICAg
ICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotI2lmIE9TKFdJTkNFKQotICAgICAg
ICAgICAgLy8gbWlzc2luZ0dseXBoRGF0YSByZXR1cm5zIGEgbnVsbCBjaGFyYWN0ZXIsIHdoaWNo
IGlzIG5vdCBzdWl0YWJsZSBmb3IgR0RJIHRvIGRpc3BsYXkuCi0gICAgICAgICAgICAvLyBBbHNv
LCBzb21ldGltZXMgd2UgY2Fubm90IG1hcCBhIGZvbnQgZm9yIHRoZSBjaGFyYWN0ZXIgb24gV0lO
Q0UsIGJ1dCBHREkgY2FuIHN0aWxsCi0gICAgICAgICAgICAvLyBkaXNwbGF5IHRoZSBjaGFyYWN0
ZXIsIHByb2JhYmx5IGJlY2F1c2UgdGhlIGZvbnQgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkIGNv
cnJlY3RseS4KLSAgICAgICAgICAgIC8vIFNvIHdlIGp1c3QgYWx3YXlzIHNldCB0aGUgZ2x5cGgg
dG8gYmUgc2FtZSBhcyB0aGUgY2hhcmFjdGVyLCBhbmQgbGV0IEdESSBzb2x2ZSBpdC4KLSAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBjLCBjaGFyYWN0ZXJGb250
RGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0YS0+c2V0TWF4R2x5cGhQ
YWdlVHJlZUxldmVsKHN0ZDo6bWF4KGNoYXJhY3RlckZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVl
TGV2ZWwoKSwgbm9kZS0+bGV2ZWwoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSwgcGFnZSk7Ci0jZWxzZQogICAgICAg
ICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGRhdGEu
Zm9udERhdGEpOwogICAgICAgICAgICAgZGF0YS5mb250RGF0YS0+c2V0TWF4R2x5cGhQYWdlVHJl
ZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBu
b2RlLT5sZXZlbCgpKSk7CiAgICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JT
eW1ib2woYykgJiYgZGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSAh
PSBIb3Jpem9udGFsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUFuZFBhZ2VGb3JOb25DSktDaGFy
YWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVu
dGF0aW9uKCksIGRhdGEsIGZhbGxiYWNrUGFnZSwgcGFnZU51bWJlcik7Ci0jZW5kaWYKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZGF0YSwgcGFnZSk7CiAgICAgfQpA
QCAtNDE2LDE1ICs0MDYsOCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250
R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKGNvbnN0CiAgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHVzZSB0aGUgbWlzc2luZyBnbHlwaCBmcm9tIHRoZSBsYXN0
IHJlc29ydCBmb250IGluc3RlYWQuCiAgICAgR2x5cGhEYXRhIGRhdGEgPSBwcmltYXJ5U2ltcGxl
Rm9udERhdGEoZGVzY3JpcHRpb24pLT5taXNzaW5nR2x5cGhEYXRhKCk7CiAgICAgaWYgKHZhcmlh
bnQgPT0gTm9ybWFsVmFyaWFudCkgewotI2lmIE9TKFdJTkNFKQotICAgICAgICAvLyBTZWUgY29t
bWVudCBhYm91dCBXSU5DRSBHREkgaGFuZGxpbmcgbmVhciBzZXRHbHlwaERhdGFGb3JDaGFyYWN0
ZXIgYWJvdmUuCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBjLCBk
YXRhLmZvbnREYXRhKTsKLSAgICAgICAgZGF0YS5mb250RGF0YS0+c2V0TWF4R2x5cGhQYWdlVHJl
ZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBu
b2RlLT5sZXZlbCgpKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKICAgICAgICAgcGFnZS0+c2V0R2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGRhdGEuZm9udERhdGEpOwogICAgICAg
ICBkYXRhLmZvbnREYXRhLT5zZXRNYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoc3RkOjptYXgoZGF0YS5m
b250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCksIG5vZGUtPmxldmVsKCkpKTsKLSNlbmRp
ZgogICAgIH0KICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZGF0YSwgcGFnZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
aW5kZXggODIwMzNhMC4uOTdlODVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjMsOSArMjMsNyBAQAogICovCiAK
IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwgcG9ydHMgc3dpdGNoIHRvIHVz
aW5nIHRoaXMgZmlsZS4KLSNpZiBVU0UoV0lOR0RJKQotI2luY2x1ZGUgIndpbmNlL0ZvbnRQbGF0
Zm9ybURhdGEuaCIKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBM
QVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgImZyZWV0eXBlL0ZvbnRQbGF0
Zm9ybURhdGEuaCIKICNlbHNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKaW5kZXggZTFhOWU2Yi4uZmJkYWU3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKQEAg
LTI3LDYgKzI3LDQgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgogI2VsaWYgVVNF
KENBSVJPKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZWxpZiBVU0UoV0lO
R0RJKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YVdpbmNlLmgiCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBhN2Y0
YjFlLi40MDlhNTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCkBAIC02Niw5ICs2Niw2IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjZW5kaWYKICNlbmRpZgotI2VsaWYgT1MoV0lO
Q0UpCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCIKLSNkZWZpbmUgUGxhdGZv
cm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGUKICNlbGlmIFBMQVRGT1JN
KFdJTikgJiYgIVVTRShHU1RSRUFNRVIpCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKaW5kZXggZDMwMjcyMi4uZjEy
ZjgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
I2VuZGlmCiAKLSNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpKQorI2lmIFBMQVRGT1JN
KFdJTikKICNpbmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAKQEAgLTIzMCwxMCArMjMwLDggQEAg
cHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgaXNTeXN0ZW1Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9pc1N5c3RlbUZvbnQ7IH0KLSNpZiAhT1MoV0lOQ0UpIC8vIGRpc2FibGUg
dW51c2VkIG1lbWJlcnMgdG8gc2F2ZSBzcGFjZQogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyog
c2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENh
Y2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KLSNlbmRpZgogICAgIHN0YXRp
YyB2b2lkIHNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhib29sKTsKICAgICBzdGF0aWMgYm9v
bCBzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsKICAgICBzdGF0aWMgZmxvYXQgYXNjZW50Q29u
c2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQgYXNjZW50LCBmbG9hdCBk
ZXNjZW50KTsKQEAgLTI1NCw3ICsyNTIsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAotI2lmIChQTEFURk9STShXSU4pICYmICFPUyhXSU5D
RSkpCisjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lk
IHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOwogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3Q7CkBAIC0zMzYsMTEgKzMzNCw5IEBAIHByaXZhdGU6CiAKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKLSNpZiAhT1MoV0lOQ0Up
IC8vIGRpc2FibGUgdW51c2VkIG1lbWJlcnMgdG8gc2F2ZSBzcGFjZQogICAgIG11dGFibGUgU0NS
SVBUX0NBQ0hFIG1fc2NyaXB0Q2FjaGU7CiAgICAgbXV0YWJsZSBTQ1JJUFRfRk9OVFBST1BFUlRJ
RVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYKLSNlbmRpZgogI2lmIFBMQVRGT1JN
KElPUykKICAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKaW5kZXggZDA5YzVhNC4uZjdkMGFjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGls
aXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVXRpbGl0aWVzLmNwcApAQCAtNDA4LDcgKzQwOCw2IEBAIGJvb2wgcmVuYW1lRm9u
dChjb25zdCBTaGFyZWRCdWZmZXImIGZvbnREYXRhLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBW
ZWN0b3I8Y2hhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiAhT1MoV0lOQ0UpCiAvLyBSZW5h
bWUgdGhlIGZvbnQgYW5kIGluc3RhbGwgdGhlIG5ldyBmb250IGRhdGEgaW50byB0aGUgc3lzdGVt
CiBIQU5ETEUgcmVuYW1lQW5kQWN0aXZhdGVGb250KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZm9udERh
dGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUpCiB7CkBAIC00MjYsNiArNDI1LDUgQEAgSEFORExF
IHJlbmFtZUFuZEFjdGl2YXRlRm9udChjb25zdCBTaGFyZWRCdWZmZXImIGZvbnREYXRhLCBjb25z
dCBTdHJpbmcmIGZvbnROYW0KIAogICAgIHJldHVybiBmb250SGFuZGxlOwogfQotI2VuZGlmCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCmluZGV4IGFiODM5ZTAuLjgzMmE0YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVVdGlsaXRpZXMuaApAQCAtMzcsMTAgKzM3LDYgQEAgc3RydWN0IEJpZ0VuZGlh
blVTaG9ydDsKIHN0cnVjdCBFT1RQcmVmaXg7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLSNpZiBP
UyhXSU5DRSkKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ4IFVJbnQ4OwotI2VuZGlmCi0KIHN0cnVj
dCBFT1RIZWFkZXIgewogICAgIEVPVEhlYWRlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCmluZGV4IGU5YTBmOWIu
LjBhODY1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9ESUJQaXhlbERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9ESUJQaXhlbERhdGEuY3BwCkBAIC05MSwxMiArOTEsMTAgQEAgdm9pZCBESUJQaXhlbERh
dGE6OnNldFJHQkFCaXRtYXBBbHBoYShIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCB1
bnNpZ25lZAogICAgIEFTU0VSVChwaXhlbERhdGEuYml0c1BlclBpeGVsKCkgPT0gMzIpOwogCiAg
ICAgSW50UmVjdCBkcmF3UmVjdChkc3RSZWN0KTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgWEZPUk0g
dHJhbnM7CiAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmdHJhbnMpOwogICAgIEludFNpemUg
dHJhbnNmb3JtZWRQb3NpdGlvbih0cmFucy5lRHgsIHRyYW5zLmVEeSk7CiAgICAgZHJhd1JlY3Qu
bW92ZSh0cmFuc2Zvcm1lZFBvc2l0aW9uKTsKLSNlbmRpZgogCiAgICAgaW50IHBpeGVsRGF0YVdp
ZHRoID0gcGl4ZWxEYXRhLnNpemUoKS53aWR0aCgpOwogICAgIGludCBwaXhlbERhdGFIZWlnaHQg
PSBwaXhlbERhdGEuc2l6ZSgpLmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNGJkOTVkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR0RJRXh0cmFzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHRElFeHRyYXMuaCIKLQotI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIE9TKFdJTkNFKQot
U09GVF9MSU5LX0xJQlJBUlkoY29yZWRsbCkKLVNPRlRfTElOS19PUFRJT05BTChjb3JlZGxsLCBB
bHBoYUJsZW5kLCBCT09MLCBBUElFTlRSWSwgKEhEQyBoZGNEZXN0LCBpbnQgblhPcmlnaW5EZXN0
LCBpbnQgbllPcmlnaW5EZXN0LCBpbnQgbldpZHRoRGVzdCwgaW50IG5IZWlnaHREZXN0LCBIREMg
aGRjU3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG5YT3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMsIGludCBuV2lkdGhTcmMs
IGludCBuSGVpZ2h0U3JjLCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb24pKQotCi1BbHBoYUJs
ZW5kUG9pbnRlclR5cGUgQWxwaGFCbGVuZFBvaW50ZXIoKQotewotICAgIHJldHVybiBBbHBoYUJs
ZW5kUHRyKCk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5oCmluZGV4IDAxNjYx
MjQuLmM5MTI5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HRElFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR0RJRXh0cmFzLmgKQEAgLTMyLDMxICszMiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0
eXBlZGVmIEJPT0wgKEFQSUVOVFJZICpBbHBoYUJsZW5kUG9pbnRlclR5cGUpIChIREMgaGRjRGVz
dCwgaW50IG5YT3JpZ2luRGVzdCwgaW50IG5ZT3JpZ2luRGVzdCwgaW50IG5XaWR0aERlc3QsIGlu
dCBuSGVpZ2h0RGVzdCwgSERDIGhkY1NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBuWE9yaWdpblNyYywgaW50IG5ZT3JpZ2luU3JjLCBpbnQg
bldpZHRoU3JjLCBpbnQgbkhlaWdodFNyYywgQkxFTkRGVU5DVElPTiBibGVuZEZ1bmN0aW9uKTsK
IAotI2lmIE9TKFdJTkNFKQotQWxwaGFCbGVuZFBvaW50ZXJUeXBlIEFscGhhQmxlbmRQb2ludGVy
KCk7Ci0jZW5kaWYKLQogaW5saW5lIGJvb2wgaGFzQWxwaGFCbGVuZFN1cHBvcnQoKQogewotI2lm
IE9TKFdJTkNFKQotICAgIHJldHVybiBBbHBoYUJsZW5kUG9pbnRlcigpOwotI2Vsc2UKICAgICBy
ZXR1cm4gdHJ1ZTsKLSNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCBhbHBoYUJsZW5kSWZTdXBwb3J0
ZWQoSERDIGhkY0Rlc3QsIGludCBuWE9yaWdpbkRlc3QsIGludCBuWU9yaWdpbkRlc3QsIGludCBu
V2lkdGhEZXN0LCBpbnQgbkhlaWdodERlc3QsIEhEQyBoZGNTcmMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG5YT3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMsIGludCBu
V2lkdGhTcmMsIGludCBuSGVpZ2h0U3JjLCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb24pCiB7
Ci0jaWYgT1MoV0lOQ0UpCi0gICAgQWxwaGFCbGVuZFBvaW50ZXJUeXBlIGFscGhhQmxlbmRQb2lu
dGVyID0gQWxwaGFCbGVuZFBvaW50ZXIoKTsKLSAgICBpZiAoIWFscGhhQmxlbmRQb2ludGVyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhbHBoYUJsZW5kUG9pbnRlcihoZGNEZXN0LCBu
WE9yaWdpbkRlc3QsIG5ZT3JpZ2luRGVzdCwgbldpZHRoRGVzdCwgbkhlaWdodERlc3QsIGhkY1Ny
YywgblhPcmlnaW5TcmMsIG5ZT3JpZ2luU3JjLCBuV2lkdGhTcmMsIG5IZWlnaHRTcmMsIGJsZW5k
RnVuY3Rpb24pOwotI2Vsc2UKICAgICBBbHBoYUJsZW5kKGhkY0Rlc3QsIG5YT3JpZ2luRGVzdCwg
bllPcmlnaW5EZXN0LCBuV2lkdGhEZXN0LCBuSGVpZ2h0RGVzdCwgaGRjU3JjLCBuWE9yaWdpblNy
YywgbllPcmlnaW5TcmMsIG5XaWR0aFNyYywgbkhlaWdodFNyYywgYmxlbmRGdW5jdGlvbik7Ci0j
ZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCmluZGV4IDUwY2YzZTUuLmYzYjBkMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKQEAg
LTI3LDExICsyNyw2IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBTSEdGSV9TSEVMTElDT05TSVpFIGlz
IG5vdCBhdmFpbGFibGUgb24gV0lOQ0UKLSNkZWZpbmUgU0hHRklfU0hFTExJQ09OU0laRSAgICAg
ICAgIDAKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBpbnQg
c2hlbGwzMk11bHRpcGxlRmlsZUljb25JbmRleCA9IDU0OwpAQCAtNjQsOSArNTksNiBAQCBQYXNz
UmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzKQogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oc2ZpLmhJY29u
KSk7CiAgICAgfQogCi0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIDA7Ci0jZWxzZQogICAgIFdD
SEFSIGJ1ZmZlcltNQVhfUEFUSF07CiAgICAgVUlOVCBsZW5ndGggPSA6OkdldFN5c3RlbURpcmVj
dG9yeVcoYnVmZmVyLCBXVEZfQVJSQVlfTEVOR1RIKGJ1ZmZlcikpOwogICAgIGlmICghbGVuZ3Ro
KQpAQCAtNzksNyArNzEsNiBAQCBQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIGlmICghOjpFeHRyYWN0
SWNvbkV4VyhidWZmZXIsIHNoZWxsMzJNdWx0aXBsZUZpbGVJY29uSW5kZXgsIDAsICZoSWNvbiwg
MSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihoSWNv
bikpOwotI2VuZGlmCiB9CiAKIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByKQpAQCAtODcsMTIgKzc4LDggQEAgdm9pZCBJY29uOjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCiAgICAgaWYgKGNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lO
Q0UpCi0gICAgY29udGV4dC0+ZHJhd0ljb24obV9oSWNvbiwgciwgRElfTk9STUFMKTsKLSNlbHNl
CiAgICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dDb250ZXh0KGNvbnRleHQsIHIpOwogICAg
IERyYXdJY29uRXgod2luZG93Q29udGV4dC5oZGMoKSwgci54KCksIHIueSgpLCBtX2hJY29uLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCksIDAsIDAsIERJX05PUk1BTCk7Ci0jZW5kaWYKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YVdpbi5jcHAKaW5kZXggNmMxNDg2Ni4uOTY1ODQ1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFX
aW4uY3BwCkBAIC05NiwxMyArOTYsMTEgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdEdESUZv
bnQoKQogICAgIG1fYXZnQ2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1BdmVDaGFyV2lkdGg7CiAg
ICAgbV9tYXhDaGFyV2lkdGggPSB0ZXh0TWV0cmljcy50bU1heENoYXJXaWR0aDsKICAgICBmbG9h
dCB4SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhIZWlnaHQgaWYg
bm8geCBnbHlwaCBpcyBwcmVzZW50LgotI2lmICFPUyhXSU5DRSkKICAgICBHTFlQSE1FVFJJQ1Mg
Z207CiAgICAgc3RhdGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwg
MCwgIDAsIDEgfTsKICAgICBEV09SRCBsZW4gPSBHZXRHbHlwaE91dGxpbmUoaGRjLCAneCcsIEdH
T19NRVRSSUNTLCAmZ20sIDAsIDAsICZpZGVudGl0eSk7CiAgICAgaWYgKGxlbiAhPSBHRElfRVJS
T1IgJiYgZ20uZ21wdEdseXBoT3JpZ2luLnkgPiAwKQogICAgICAgICB4SGVpZ2h0ID0gZ20uZ21w
dEdseXBoT3JpZ2luLnk7Ci0jZW5kaWYKICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7CiAgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKG1ldHJpY3Mub3RtRU1TcXVh
cmUpOwogCkBAIC0xMjEsMTAgKzExOSw4IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCgpCiAKIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgp
CiB7Ci0jaWYgIU9TKFdJTkNFKQogICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNoZSk7
CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7Ci0jZW5kaWYKIH0KIAogUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdApAQCAtMjAwLDkgKzE5Niw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OmRldGVybWluZVBpdGNoKCkKIAogRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JH
RElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0jZWxzZQogICAgIEhXbmREQyBoZGMoMCk7CiAgICAgU2V0R3JhcGhpY3NN
b2RlKGhkYywgR01fQURWQU5DRUQpOwogICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVj
dChoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwpAQCAtMjE1LDM1ICsyMDgsMjQgQEAgRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKIAogICAgIHJldHVybiBGbG9hdFJlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmlnaW4ueCwg
LWdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLnksCiAgICAgICAgIGdkaU1ldHJpY3MuZ21CbGFj
a0JveFggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQsIGdkaU1ldHJpY3MuZ21CbGFja0JveFkpOyAK
LSNlbmRpZgogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKIHsKICAgICBIV25kREMgaGRjKDApOwotI2lmICFPUyhXSU5DRSkKICAg
ICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7Ci0jZW5kaWYKICAgICBIR0RJT0JK
IG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKIAot
I2lmIE9TKFdJTkNFKQotICAgIFdDSEFSIGMgPSBnbHlwaDsKLSAgICBTSVpFIGZvbnRTaXplOwot
ICAgIEdldFRleHRFeHRlbnRQb2ludDMyVyhoZGMsICZjLCAxLCAmZm9udFNpemUpOwotICAgIGZs
b2F0IHJlc3VsdCA9IGZvbnRTaXplLmN4ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gNzIuZjsK
LSNlbHNlCiAgICAgR0xZUEhNRVRSSUNTIGdkaU1ldHJpY3M7CiAgICAgc3RhdGljIGNvbnN0IE1B
VDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsKICAgICBHZXRHbHlw
aE91dGxpbmUoaGRjLCBnbHlwaCwgR0dPX01FVFJJQ1MgfCBHR09fR0xZUEhfSU5ERVgsICZnZGlN
ZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpOwogICAgIGZsb2F0IHJlc3VsdCA9IGdkaU1ldHJpY3Mu
Z21DZWxsSW5jWCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbmRpZgogCiAgICAgU2VsZWN0
T2JqZWN0KGhkYywgb2xkRm9udCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgIU9T
KFdJTkNFKQogU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9u
dFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGlmICghbV9zY3JpcHRGb250UHJvcGVydGllcykg
ewpAQCAtMjYxLDYgKzI0Myw1IEBAIFNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERh
dGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3QKICAgICB9CiAgICAgcmV0dXJuIG1fc2Ny
aXB0Rm9udFByb3BlcnRpZXM7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENh
Y2hlV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dENhY2hlV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWViZTRiLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRD
YWNoZVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0qCi0qIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0qICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0qICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0qIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0qIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUu
aCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNpbmNsdWRlIDxtbGFuZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWV4
dGVybiBIREMgZ19zY3JlZW5EQzsKLQotc3RhdGljIElNdWx0aUxhbmd1YWdlICptdWx0aUxhbmd1
YWdlID0gMDsKLXN0YXRpYyBJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250TGluayA9IDA7Ci0K
LUlNdWx0aUxhbmd1YWdlKiBGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UoKQot
ewotICAgIGlmICghbXVsdGlMYW5ndWFnZSkKLSAgICAgICAgQ29DcmVhdGVJbnN0YW5jZShDTFNJ
RF9DTXVsdGlMYW5ndWFnZSwgMCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JTXVsdGlMYW5n
dWFnZSwgKHZvaWQqKikmbXVsdGlMYW5ndWFnZSk7Ci0KLSAgICByZXR1cm4gbXVsdGlMYW5ndWFn
ZTsKLX0KLQotSU1MYW5nRm9udExpbmtUeXBlKiBGb250Q2FjaGU6OmdldEZvbnRMaW5rSW50ZXJm
YWNlKCkKLXsKLSAgICBpZiAoIWxhbmdGb250TGluaykgewotICAgICAgICBpZiAoSU11bHRpTGFu
Z3VhZ2UqIG1saSA9IGdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UoKSkKLSAgICAgICAgICAgIG1s
aS0+UXVlcnlJbnRlcmZhY2UoJmxhbmdGb250TGluayk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxh
bmdGb250TGluazsKLX0KLQotc3RhdGljIGJvb2wgY3VycmVudEZvbnRDb250YWluc0NoYXJhY3Rl
cihJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250TGluaywgSERDIGhkYywgSEZPTlQgaGZvbnQs
IFVDaGFyIGNoYXJhY3RlciwgY29uc3Qgd2NoYXJfdCogZmFjZU5hbWUpCi17Ci0jaWYgVVNFKElN
TEFOR19GT05UX0xJTksyKQotICAgIFVJTlQgdW5pY29kZVJhbmdlczsKLSAgICBpZiAoU19PSyAh
PSBsYW5nRm9udExpbmstPkdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgJnVuaWNvZGVSYW5nZXMs
IDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgVmVjdG9yPFVOSUNPREVS
QU5HRSwgNjQ+IGdseXBoc2V0QnVmZmVyOwotICAgIGdseXBoc2V0QnVmZmVyLnJlc2l6ZSh1bmlj
b2RlUmFuZ2VzKTsKLQotICAgIGlmIChTX09LICE9IGxhbmdGb250TGluay0+R2V0Rm9udFVuaWNv
ZGVSYW5nZXMoaGRjLCAmdW5pY29kZVJhbmdlcywgZ2x5cGhzZXRCdWZmZXIuZGF0YSgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIGEgYmlu
YXJ5IHNlYXJjaC4gKFlvbmcgTGk6IFRoYXQncyBlYXN5LiBCdXQsIGlzIGl0IGd1YXJhbnRlZWQg
dGhhdCB0aGUgcmFuZ2VzIGFyZSBzb3J0ZWQ/KQotICAgIGZvciAoVmVjdG9yPFVOSUNPREVSQU5H
RSwgNjQ+Ojpjb25zdF9pdGVyYXRvciBpID0gZ2x5cGhzZXRCdWZmZXIuYmVnaW4oKTsgaSAhPSBn
bHlwaHNldEJ1ZmZlci5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT53Y1RvID49IGNoYXJh
Y3RlcikKLSAgICAgICAgICAgIHJldHVybiBpLT53Y0Zyb20gPD0gY2hhcmFjdGVyOwotICAgIH0K
LSNlbHNlCi0gICAgRFdPUkQgZm9udENvZGVQYWdlcyA9IDAsIGNoYXJDb2RlUGFnZXMgPSAwOwot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5HZXRGb250Q29kZVBhZ2VzKGhkYywg
aGZvbnQsICZmb250Q29kZVBhZ2VzKTsKLSAgICBpZiAocmVzdWx0ICE9IFNfT0spCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBsYW5nRm9udExpbmstPkdldENoYXJDb2RlUGFn
ZXMoY2hhcmFjdGVyLCAmY2hhckNvZGVQYWdlcyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTX09LKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb250Q29kZVBhZ2VzIHw9IEZvbnRQbGF0Zm9y
bURhdGE6OmdldEtub3duRm9udENvZGVQYWdlcyhmYWNlTmFtZSk7Ci0gICAgaWYgKGZvbnRDb2Rl
UGFnZXMgJiBjaGFyQ29kZVBhZ2VzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgSEZPTlQgY3JlYXRlTUxhbmdGb250KElNTGFu
Z0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rLCBIREMgaGRjLCBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiByZWZGb250LCBEV09SRCBjb2RlUGFnZU1hc2ssIFVDaGFyIGNoYXJhY3RlciA9IDApCi17
Ci0gICAgSEZPTlQgbWxhbmdGb250OwotCi0jaWYgVVNFKElNTEFOR19GT05UX0xJTksyKQotICAg
IEhSRVNVTFQgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5NYXBGb250KGhkYywgY29kZVBhZ2VNYXNr
LCBjaGFyYWN0ZXIsICZtbGFuZ0ZvbnQpOwotI2Vsc2UKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGxh
bmdGb250TGluay0+TWFwRm9udChoZGMsIGNvZGVQYWdlTWFzaywgcmVmRm9udC5oZm9udCgpLCAm
bWxhbmdGb250KTsKLSNlbmRpZgotCi0gICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAg
ICByZXR1cm4gbWxhbmdGb250OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgVmVj
dG9yPERXT1JELCA0PiYgZ2V0Q0pLQ29kZVBhZ2VNYXNrcygpCi17Ci0gICAgLy8gVGhlIGRlZmF1
bHQgb3JkZXIgaW4gd2hpY2ggd2UgbG9vayBmb3IgYSBmb250IGZvciBhIENKSyBjaGFyYWN0ZXIu
IElmIHRoZSB1c2VyJ3MgZGVmYXVsdCBjb2RlIHBhZ2UgaXMKLSAgICAvLyBvbmUgb2YgdGhlc2Us
IHdlIHdpbGwgdXNlIGl0IGZpcnN0LgotICAgIHN0YXRpYyBjb25zdCBVSU5UIENKS0NvZGVQYWdl
c1tdID0gewotICAgICAgICA5MzIsIC8qIEphcGFuZXNlICovCi0gICAgICAgIDkzNiwgLyogU2lt
cGxpZmllZCBDaGluZXNlICovCi0gICAgICAgIDk1MCwgLyogVHJhZGl0aW9uYWwgQ2hpbmVzZSAq
LwotICAgICAgICA5NDkgIC8qIEtvcmVhbiAqLwotICAgIH07Ci0KLSAgICBzdGF0aWMgVmVjdG9y
PERXT1JELCA0PiBjb2RlUGFnZU1hc2tzOwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwot
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICBJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLmdldEZv
bnRMaW5rSW50ZXJmYWNlKCk7Ci0gICAgICAgIGlmICghbGFuZ0ZvbnRMaW5rKQotICAgICAgICAg
ICAgcmV0dXJuIGNvZGVQYWdlTWFza3M7Ci0KLSAgICAgICAgVUlOVCBkZWZhdWx0Q29kZVBhZ2U7
Ci0gICAgICAgIERXT1JEIGRlZmF1bHRDb2RlUGFnZU1hc2sgPSAwOwotICAgICAgICBpZiAoR2V0
TG9jYWxlSW5mbyhMT0NBTEVfVVNFUl9ERUZBVUxULCBMT0NBTEVfUkVUVVJOX05VTUJFUiB8IExP
Q0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgcmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZkZWZh
dWx0Q29kZVBhZ2UpLCBzaXplb2YoZGVmYXVsdENvZGVQYWdlKSkpCi0gICAgICAgICAgICBsYW5n
Rm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoZGVmYXVsdENvZGVQYWdlLCAmZGVmYXVsdENv
ZGVQYWdlTWFzayk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFn
ZXNbMF0gfHwgZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1sxXSB8fCBkZWZhdWx0Q29k
ZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzJdIHx8IGRlZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFn
ZXNbM10pCi0gICAgICAgICAgICBjb2RlUGFnZU1hc2tzLmFwcGVuZChkZWZhdWx0Q29kZVBhZ2VN
YXNrKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAg
ICAgICAgaWYgKGRlZmF1bHRDb2RlUGFnZSAhPSBDSktDb2RlUGFnZXNbaV0pIHsKLSAgICAgICAg
ICAgICAgICBEV09SRCBjb2RlUGFnZU1hc2s7Ci0gICAgICAgICAgICAgICAgbGFuZ0ZvbnRMaW5r
LT5Db2RlUGFnZVRvQ29kZVBhZ2VzKENKS0NvZGVQYWdlc1tpXSwgJmNvZGVQYWdlTWFzayk7Ci0g
ICAgICAgICAgICAgICAgY29kZVBhZ2VNYXNrcy5hcHBlbmQoY29kZVBhZ2VNYXNrKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY29kZVBhZ2VNYXNrczsKLX0K
LQotCi1zdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7Ci0gICAgVHJhaXRzSW5GYW1pbHlQ
cm9jRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgICAgIDogbV9mYW1p
bHlOYW1lKGZhbWlseU5hbWUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbV9mYW1pbHlOYW1lOwotICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fdHJhaXRzTWFza3M7Ci19
OwotCi1zdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByb2MoQ09OU1QgTE9H
Rk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdPUkQgZm9udFR5cGUs
IExQQVJBTSBsUGFyYW0pCi17Ci0gICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSogcHJvY0RhdGEg
PSByZWludGVycHJldF9jYXN0PFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqPihsUGFyYW0pOwotCi0g
ICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7Ci0gICAgdHJhaXRzTWFzayB8PSBsb2dGb250LT5s
Zkl0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3JtYWxNYXNrOwotICAg
IHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnROb3JtYWxNYXNrOwotICAgIExPTkcgd2VpZ2h0ID0g
Rm9udFBsYXRmb3JtRGF0YTo6YWRqdXN0ZWRHRElGb250V2VpZ2h0KGxvZ0ZvbnQtPmxmV2VpZ2h0
LCBwcm9jRGF0YS0+bV9mYW1pbHlOYW1lKTsKLSAgICB0cmFpdHNNYXNrIHw9IHdlaWdodCA9PSBG
V19USElOID8gRm9udFdlaWdodDEwME1hc2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfRVhUUkFM
SUdIVCA/IEZvbnRXZWlnaHQyMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX0xJR0hUID8g
Rm9udFdlaWdodDMwME1hc2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfTk9STUFMID8gRm9udFdl
aWdodDQwME1hc2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfTUVESVVNID8gRm9udFdlaWdodDUw
ME1hc2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfU0VNSUJPTEQgPyBGb250V2VpZ2h0NjAwTWFz
ayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19CT0xEID8gRm9udFdlaWdodDcwME1hc2sgOgotICAg
ICAgICB3ZWlnaHQgPT0gRldfRVhUUkFCT0xEID8gRm9udFdlaWdodDgwME1hc2sgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFdlaWdodDkwME1hc2s7Ci0gICAgcHJvY0Rh
dGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOwotICAgIHJldHVybiAxOwotfQotCi12
b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmNv
bUluaXRpYWxpemUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Y29tVW5pbml0aWFsaXplKCkK
LXsKLSAgICBpZiAobGFuZ0ZvbnRMaW5rKSB7Ci0gICAgICAgIGxhbmdGb250TGluay0+UmVsZWFz
ZSgpOwotICAgICAgICBsYW5nRm9udExpbmsgPSAwOwotICAgIH0KLSAgICBpZiAobXVsdGlMYW5n
dWFnZSkgewotICAgICAgICBtdWx0aUxhbmd1YWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG11bHRp
TGFuZ3VhZ2UgPSAwOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJv
b2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIFN0cmluZyBm
YW1pbHlOYW1lOwotICAgIFdDSEFSIG5hbWVbTEZfRkFDRVNJWkVdOwotCi0gICAgVUNoYXIgY2hh
cmFjdGVyID0gY2hhcmFjdGVyc1swXTsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvcmln
Rm9udCA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOwotCi0gICAgaWYgKElNTGFu
Z0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgewot
ICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBHZXRDdXJyZW50T2JqZWN0KGdfc2NyZWVuREMsIE9C
Sl9GT05UKTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSAwOwotICAgICAgICBEV09SRCBjb2RlUGFn
ZXMgPSAwOwotICAgICAgICBVSU5UIGNvZGVQYWdlID0gMDsKLSAgICAgICAgLy8gVHJ5IE1MYW5n
IGZvbnQgbGlua2luZyBmaXJzdC4KLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBh
Z2VzKGNoYXJhY3RlciwgJmNvZGVQYWdlcyk7Ci0gICAgICAgIGlmIChjb2RlUGFnZXMgJiYgdV9n
ZXRJbnRQcm9wZXJ0eVZhbHVlKGNoYXJhY3RlciwgVUNIQVJfVU5JRklFRF9JREVPR1JBUEgpKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgQ0pLIGNoYXJhY3RlciBtYXkgYmVsb25nIHRvIG11bHRpcGxl
IGNvZGUgcGFnZXMuIFdlIHdhbnQgdG8KLSAgICAgICAgICAgIC8vIGRvIGZvbnQgbGlua2luZyBh
Z2FpbnN0IGEgc2luZ2xlIG9uZSBvZiB0aGVtLCBwcmVmZXJyaW5nIHRoZSBkZWZhdWx0Ci0gICAg
ICAgICAgICAvLyBjb2RlIHBhZ2UgZm9yIHRoZSB1c2VyJ3MgbG9jYWxlLgotICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPERXT1JELCA0PiYgQ0pLQ29kZVBhZ2VNYXNrcyA9IGdldENKS0NvZGVQYWdl
TWFza3MoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUNvZGVQYWdlcyA9IENKS0NvZGVQYWdl
TWFza3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNv
ZGVQYWdlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaGZvbnQgPSBjcmVhdGVNTGFuZ0ZvbnQo
bGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBvcmlnRm9udCwgQ0pLQ29kZVBhZ2VNYXNrc1tpXSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFoZm9udCkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgaGZvbnQpOwot
ICAgICAgICAgICAgICAgIEdldFRleHRGYWNlKGdfc2NyZWVuREMsIExGX0ZBQ0VTSVpFLCBuYW1l
KTsKLQotICAgICAgICAgICAgICAgIGlmIChoZm9udCAmJiAhKGNvZGVQYWdlcyAmIENKS0NvZGVQ
YWdlTWFza3NbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFza2VkIGFib3V0IGEg
Y29kZSBwYWdlIHRoYXQgaXMgbm90IG9uZSBvZiB0aGUgY29kZSBwYWdlcwotICAgICAgICAgICAg
ICAgICAgICAvLyByZXR1cm5lZCBieSBNTGFuZywgc28gdGhlIGZvbnQgbWlnaHQgbm90IGNvbnRh
aW4gdGhlIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Rm9udENv
bnRhaW5zQ2hhcmFjdGVyKGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgaGZvbnQsIGNoYXJhY3Rl
ciwgbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBvbGRGb250KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaGZvbnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBoZm9udCA9
IGNyZWF0ZU1MYW5nRm9udChsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIG9yaWdGb250LCBjb2Rl
UGFnZXMsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywg
aGZvbnQpOwotICAgICAgICAgICAgR2V0VGV4dEZhY2UoZ19zY3JlZW5EQywgTEZfRkFDRVNJWkUs
IG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBvbGRG
b250KTsKLQotICAgICAgICBpZiAoaGZvbnQpIHsKLSAgICAgICAgICAgIGZhbWlseU5hbWUgPSBu
YW1lOwotICAgICAgICAgICAgbGFuZ0ZvbnRMaW5rLT5SZWxlYXNlRm9udChoZm9udCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YTo6bWFwS25vd25Gb250KGNv
ZGVQYWdlcywgZmFtaWx5TmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKGZhbWlseU5hbWUuaXNFbXB0
eSgpKQotICAgICAgICBmYW1pbHlOYW1lID0gRm9udFBsYXRmb3JtRGF0YTo6ZGVmYXVsdEZvbnRG
YW1pbHkoKTsKLQotICAgIGlmICghZmFtaWx5TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8g
RklYTUU6IHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBUaGFpIGZvbnQgcHJvYmxlbQotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKLSAgICAgICAg
aWYgKHVibG9ja19nZXRDb2RlKGMpID09IFVCTE9DS19USEFJICYmIGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSA+IEZvbnRXZWlnaHROb3JtYWwpCi0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHJlc3VsdCA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmhhc2goKSAhPSBvcmlnRm9u
dC5oYXNoKCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnRE
YXRhID0gZ2V0Q2FjaGVkRm9udERhdGEocmVzdWx0LCBEb05vdFJldGFpbikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzYywg
U2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICAvLyBGSVhNRTogV291bGQgYmUgZXZl
biBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZv
ciBub3cgd2UnbGwgcGljawotICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQg
Z2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShmb250RGVzYywgRm9udFBsYXRmb3JtRGF0YTo6ZGVmYXVsdEZvbnRGYW1pbHkoKSwgZmFs
c2UsIHNob3VsZFJldGFpbik7Ci19Ci0KLVBhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsK
LX0KLQotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci0gICAgTE9H
Rk9OVCBsb2dGb250OwotICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwot
ICAgIHVuc2lnbmVkIGZhbWlseUxlbmd0aCA9IHN0ZDo6bWluKGZhbWlseU5hbWUubGVuZ3RoKCks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihMRl9GQUNFU0laRSAtIDEpKTsKLSAgICBtZW1jcHkobG9n
Rm9udC5sZkZhY2VOYW1lLCBmYW1pbHlOYW1lLmNoYXJhY3RlcnMoKSwgZmFtaWx5TGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSk7Ci0gICAgbG9nRm9udC5sZkZhY2VOYW1lW2ZhbWlseUxlbmd0aF0gPSAw
OwotICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IDA7Ci0KLSAgICBUcmFpdHNJbkZhbWls
eVByb2NEYXRhIHByb2NEYXRhKGZhbWlseU5hbWUpOwotICAgIEVudW1Gb250RmFtaWxpZXNFeChn
X3NjcmVlbkRDLCAmbG9nRm9udCwgdHJhaXRzSW5GYW1pbHlFbnVtUHJvYywgcmVpbnRlcnByZXRf
Y2FzdDxMUEFSQU0+KCZwcm9jRGF0YSksIDApOwotICAgIGNvcHlUb1ZlY3Rvcihwcm9jRGF0YS5t
X3RyYWl0c01hc2tzLCB0cmFpdHNNYXNrcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRiOTQ4ZjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEZv
bnQuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiT3BlblR5cGVV
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmFu
ZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIEN1c3RvbUZvbnRDYWNoZSogZ19jdXN0b21Gb250Q2FjaGUgPSAw
OwotCi12b2lkIHNldEN1c3RvbUZvbnRDYWNoZShDdXN0b21Gb250Q2FjaGUqIGNhY2hlKQotewot
ICAgIGdfY3VzdG9tRm9udENhY2hlID0gY2FjaGU7Ci19Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURh
dGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKLXsKLSAgICBpZiAoZ19jdXN0b21Gb250Q2Fj
aGUgJiYgIW1fbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGdfY3VzdG9tRm9udENhY2hlLT51bnJl
Z2lzdGVyRm9udChtX25hbWUpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKLXsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2M7Ci0gICAgZm9u
dERlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7Ci0gICAgZm9udERlc2Muc2V0SXRhbGljKGl0YWxpYyk7Ci0gICAgZm9udERlc2Mu
c2V0V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwotICAg
IHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjLCBtX25hbWUsIGZhbHNlKTsKLX0KLQot
Ly8gQ3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVy
IHRvIGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCi0vLyBub3QgYWxsb3cgYWNjZXNzIGZyb20gQ1NT
Lgotc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCi17Ci0gICAgR1VJRCBmb250
VXVpZDsKLQotICAgIHVuc2lnbmVkIGludCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPigmZm9udFV1aWQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKEdVSUQp
IC8gc2l6ZW9mKGludCkgOyArK2kpCi0gICAgICAgICoocHRyICsgaSkgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSArIDEuMCkpOwotCi0gICAgU3RyaW5nIGZvbnROYW1lID0gYmFzZTY0RW5jb2Rl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZmb250VXVpZCksIHNpemVvZihmb250VXVpZCkpOwot
ICAgIEFTU0VSVChmb250TmFtZS5sZW5ndGgoKSA8IExGX0ZBQ0VTSVpFKTsKLSAgICByZXR1cm4g
Zm9udE5hbWUucmVwbGFjZSgnLycsICdfJyk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhPiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZl
ciYgYnVmZmVyKQotewotICAgIFN0cmluZyBmb250TmFtZSA9IGNyZWF0ZVVuaXF1ZUZvbnROYW1l
KCk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gcmV3cml0dGVuRm9udERhdGE7Ci0gICAgaWYgKCFyZW5h
bWVGb250KGJ1ZmZlciwgZm9udE5hbWUsIHJld3JpdHRlbkZvbnREYXRhKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2NhbEJ1ZmZlciA9IFNo
YXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IocmV3cml0dGVuRm9udERhdGEpOwotICAgIGlmICghZ19j
dXN0b21Gb250Q2FjaGUgfHwgIWdfY3VzdG9tRm9udENhY2hlLT5yZWdpc3RlckZvbnQoZm9udE5h
bWUsIGxvY2FsQnVmZmVyLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPihmb250TmFtZSk7
Ci19Ci0KLWJvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3Qg
U3RyaW5nJiBmb3JtYXQpCi17Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwg
InRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAib3BlbnR5cGUiKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0NDJkNzQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAorKysgL2Rldi9udWxsCkBAIC0x
LDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gK
LSNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0KLSNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKLSNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgIkZvbnRX
aWR0aFZhcmlhbnQuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKLSAgICBjbGFzcyBDYWNoZWRGb250OwotICAgIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKLQotICAgIGNsYXNzIEN1c3RvbUZvbnRDYWNoZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIGJvb2wgcmVnaXN0ZXJGb250KGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIGNv
bnN0IFNoYXJlZEJ1ZmZlciopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJG
b250KGNvbnN0IFN0cmluZyYgZm9udE5hbWUpID0gMDsKLSAgICB9OwotCi0gICAgc3RydWN0IEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICAgICAgOiBtX25hbWUobmFtZSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkZvbnRDdXN0b21QbGF0Zm9ybURhdGEo
KTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb3JtYXQoY29u
c3QgU3RyaW5nJik7Ci0KLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICB9OwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoU2hhcmVkQnVmZmVyJik7Ci0gICAgdm9pZCBzZXRDdXN0b21Gb250Q2FjaGUoQ3Vz
dG9tRm9udENhY2hlKik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2Y2E1Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDUxOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
IFRvcmNoIE1vYmlsZSBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5j
bHVkZSA8bWxhbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1leHRlcm4gSERDIGdfc2Ny
ZWVuREM7Ci0KLXN0YXRpYyB3Y2hhcl90IHNvbmdUaVN0cltdID0geyAweDViOGIsIDB4NGY1Mywg
MCB9Owotc3RhdGljIHdjaGFyX3QgaGVpVGlTdHJbXSA9IHsgMHg5ZWQxLCAweDRmNTMsIDAgfTsK
LQotY2xhc3MgRm9udEZhbWlseUNvZGVQYWdlSW5mbyB7Ci1wdWJsaWM6Ci0gICAgRm9udEZhbWls
eUNvZGVQYWdlSW5mbygpCi0gICAgICAgIDogbV9jb2RlUGFnZSgwKSwgbV9jb2RlUGFnZXMoMCkK
LSAgICB7Ci0gICAgfQotICAgIEZvbnRGYW1pbHlDb2RlUGFnZUluZm8oY29uc3Qgd2NoYXJfdCog
ZmFtaWx5LCBVSU5UIGNvZGVQYWdlKQotICAgICAgICA6IG1fZmFtaWx5KGZhbWlseSksIG1fY29k
ZVBhZ2UoY29kZVBhZ2UpLCBtX2NvZGVQYWdlcygwKQotICAgIHsKLSAgICB9Ci0gICAgRFdPUkQg
Y29kZVBhZ2VzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9jb2RlUGFnZXMpIHsKLSAg
ICAgICAgICAgIGlmIChJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250TGluayA9IGZvbnRDYWNo
ZSgpLmdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCi0gICAgICAgICAgICAgICAgbGFuZ0ZvbnRMaW5r
LT5Db2RlUGFnZVRvQ29kZVBhZ2VzKG1fY29kZVBhZ2UsICZtX2NvZGVQYWdlcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG1fY29kZVBhZ2VzOwotICAgIH0KLQotICAgIFN0cmluZyBtX2Zh
bWlseTsKLSAgICBVSU5UIG1fY29kZVBhZ2U7Ci1wcml2YXRlOgotICAgIG11dGFibGUgRFdPUkQg
bV9jb2RlUGFnZXM7Ci19OwotCi1jbGFzcyBGb250RmFtaWx5Q2hlY2tlciB7Ci1wdWJsaWM6Ci0g
ICAgRm9udEZhbWlseUNoZWNrZXIoY29uc3Qgd2NoYXJfdCogZmFtaWx5KQotICAgICAgICA6IG1f
ZXhpc3RzKGZhbHNlKQotICAgIHsKLSAgICAgICAgRW51bUZvbnRGYW1pbGllcyhnX3NjcmVlbkRD
LCBmYW1pbHksIGVudW1Gb250RmFtUHJvYywgKExQQVJBTSl0aGlzKTsKLSAgICB9Ci0gICAgYm9v
bCBpc1N1cHBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhpc3RzOyB9Ci1wcml2YXRlOgotICAg
IGJvb2wgbV9leGlzdHM7Ci0gICAgc3RhdGljIGludCBDQUxMQkFDSyBlbnVtRm9udEZhbVByb2Mo
Y29uc3QgTE9HRk9OVCBGQVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERX
T1JEIEZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKTsKLX07Ci0KLWNsYXNzIFZhbGlkRm9udEZhbWls
eUZpbmRlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRGb250RmFtaWx5RmluZGVyKCkKLSAgICB7Ci0g
ICAgICAgIEVudW1Gb250RmFtaWxpZXMoZ19zY3JlZW5EQywgMCwgZW51bUZvbnRGYW1Qcm9jLCAo
TFBBUkFNKXRoaXMpOwotICAgIH0KLSAgICBjb25zdCBTdHJpbmcmIGZhbWlseSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmFtaWx5OyB9Ci1wcml2YXRlOgotICAgIFN0cmluZyBtX2ZhbWlseTsKLSAgICBz
dGF0aWMgaW50IENBTExCQUNLIGVudW1Gb250RmFtUHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBl
bGYsIGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBs
UGFyYW0pOwotfTsKLQotY2xhc3MgRml4ZWRTaXplRm9udERhdGE6IHB1YmxpYyBSZWZDb3VudGVk
PEZpeGVkU2l6ZUZvbnREYXRhPiB7Ci1wdWJsaWM6Ci0gICAgTE9HRk9OVCBtX2ZvbnQ7Ci0gICAg
R0RJT2JqZWN0PEhGT05UPiBtX2hmb250OwotICAgIFRFWFRNRVRSSUMgbV9tZXRyaWNzOwotICAg
IERXT1JEIG1fY29kZVBhZ2VzOwotICAgIHVuc2lnbmVkIG1fd2VpZ2h0OwotICAgIGJvb2wgbV9p
dGFsaWM7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCB1bnNpZ25lZCB3ZWlnaHQsIGJvb2wgaXRhbGlj
KTsKLXByaXZhdGU6Ci0gICAgRml4ZWRTaXplRm9udERhdGEoKQotICAgICAgICA6IG1fY29kZVBh
Z2VzKDApCi0gICAgICAgICwgbV93ZWlnaHQoMCkKLSAgICAgICAgLCBtX2l0YWxpYyhmYWxzZSkK
LSAgICB7Ci0gICAgICAgIG1lbXNldCgmbV9mb250LCAwLCBzaXplb2YobV9mb250KSk7Ci0gICAg
ICAgIG1lbXNldCgmbV9tZXRyaWNzLCAwLCBzaXplb2YobV9tZXRyaWNzKSk7Ci0gICAgfQotfTsK
LQotc3RydWN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5IHsKLSAgICBGaXhlZFNpemVGb250RGF0YUtl
eShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IEF0b21pY1N0cmluZygpLCB1bnNpZ25lZCB3
ZWlnaHQgPSAwLCBib29sIGl0YWxpYyA9IGZhbHNlKQotICAgICAgICA6IG1fZmFtaWx5KGZhbWls
eSkKLSAgICAgICAgLCBtX3dlaWdodCh3ZWlnaHQpCi0gICAgICAgICwgbV9pdGFsaWMoaXRhbGlj
KQotICAgIHsKLSAgICB9Ci0KLSAgICBGaXhlZFNpemVGb250RGF0YUtleShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV93ZWlnaHQoLTIpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3dlaWdodCA9PSAtMjsgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX2ZhbWlseSwgb3RoZXIu
bV9mYW1pbHkpCi0gICAgICAgICAgICAmJiBtX3dlaWdodCA9PSBvdGhlci5tX3dlaWdodAotICAg
ICAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWM7Ci0gICAgfQotCi0gICAgQXRv
bWljU3RyaW5nIG1fZmFtaWx5OwotICAgIHVuc2lnbmVkIG1fd2VpZ2h0OwotICAgIGJvb2wgbV9p
dGFsaWM7Ci19OwotCi1zdHJ1Y3QgRml4ZWRTaXplRm9udERhdGFLZXlIYXNoIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgZm9udCkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRp
bmdIYXNoOjpoYXNoKGZvbnQubV9mYW1pbHkpLAotICAgICAgICAgICAgZm9udC5tX3dlaWdodCwK
LSAgICAgICAgICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmb250Lm1faXRhbGljKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2Yo
aGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgYSwgY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkm
IGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0
cnVjdCBGaXhlZFNpemVGb250RGF0YUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8
Rml4ZWRTaXplRm9udERhdGFLZXk+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIGVt
cHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KEZpeGVkU2l6ZUZvbnREYXRhS2V5LCBrZXksIChudWxsQXRvbSkpOwotICAgICAgICByZXR1cm4g
a2V5OwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRml4ZWRT
aXplRm9udERhdGFLZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGaXhlZFNp
emVGb250RGF0YUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7Ci0gICAgfQotICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OwotICAgIH0KLX07Ci0KLWludCBDQUxMQkFDSyBGb250RmFtaWx5Q2hlY2tlcjo6ZW51bUZvbnRG
YW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxw
bnRtLCBEV09SRCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICAoKEZvbnRGYW1pbHlD
aGVja2VyKilsUGFyYW0pLT5tX2V4aXN0cyA9IHRydWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBDQUxMQkFDSyBWYWxpZEZvbnRGYW1pbHlGaW5kZXI6OmVudW1Gb250RmFtUHJvYyhjb25zdCBM
T0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9u
dFR5cGUsIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgaWYgKGxwZWxmLT5sZkNoYXJTZXQgIT0gU1lN
Qk9MX0NIQVJTRVQpIHsKLSAgICAgICAgKChWYWxpZEZvbnRGYW1pbHlGaW5kZXIqKWxQYXJhbSkt
Pm1fZmFtaWx5ID0gU3RyaW5nKGxwZWxmLT5sZkZhY2VOYW1lKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotCi10eXBlZGVmIFZlY3RvcjxGb250RmFtaWx5Q29k
ZVBhZ2VJbmZvPiBLbm93bkZvbnRzOwotc3RhdGljIEtub3duRm9udHMmIGtub3duRm9udHMoKQot
ewotICAgIHN0YXRpYyBLbm93bkZvbnRzIGZvbnRzOwotICAgIHN0YXRpYyBib29sIGZpcnN0VGlt
ZSA9IHRydWU7Ci0gICAgaWYgKGZpcnN0VGltZSkgewotICAgICAgICBmaXJzdFRpbWUgPSBmYWxz
ZTsKLSAgICAgICAgaWYgKEZvbnRQbGF0Zm9ybURhdGE6OmlzU29uZ1RpU3VwcG9ydGVkKCkpCi0g
ICAgICAgICAgICBmb250cy5hcHBlbmQoRm9udEZhbWlseUNvZGVQYWdlSW5mbyhzb25nVGlTdHIs
IDkzNikpOwotICAgIH0KLSAgICByZXR1cm4gZm9udHM7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0
RGVmYXVsdEZvbnRGYW1pbHkoKQotewotICAgIGlmIChGb250RmFtaWx5Q2hlY2tlcihMIlRhaG9t
YSIpLmlzU3VwcG9ydGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoTCJUYWhvbWEiKTsKLQot
ICAgIGJvb2wgZ29vZCA9IGZhbHNlOwotICAgIFN0cmluZyBmYW1pbHk7Ci0gICAgSEtFWSBrZXk7
Ci0gICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU1lTVEVNXFxHRElc
XFN5c0ZudCIsIDAsIDAsICZrZXkpID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgRFdPUkQg
bWF4bGVuLCB0eXBlOwotICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGtleSwgTCJObSIsIDAs
ICZ0eXBlLCAwLCAmbWF4bGVuKSA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7
Ci0gICAgICAgICAgICArK21heGxlbjsKLSAgICAgICAgICAgIGlmICh3Y2hhcl90KiBidWZmZXIg
PSBuZXcgd2NoYXJfdFttYXhsZW5dKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFJlZ1F1ZXJ5VmFs
dWVFeChrZXksIEwiTm0iLCAwLCAmdHlwZSwgKExQQllURSlidWZmZXIsICZtYXhsZW4pID09IEVS
Uk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gU3RyaW5nKGJ1ZmZl
ciwgbWF4bGVuKTsKLSAgICAgICAgICAgICAgICAgICAgZ29vZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIGJ1ZmZlcjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLSAgICBpZiAoZ29v
ZCkKLSAgICAgICAgcmV0dXJuIGZhbWlseTsKLQotICAgIHJldHVybiBWYWxpZEZvbnRGYW1pbHlG
aW5kZXIoKS5mYW1pbHkoKTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZpeGVkU2l6ZUZvbnREYXRh
S2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+LCBGaXhlZFNpemVGb250RGF0YUtleUhhc2gs
IEZpeGVkU2l6ZUZvbnREYXRhS2V5VHJhaXRzPiBGaXhlZFNpemVGb250Q2FjaGU7Ci1GaXhlZFNp
emVGb250Q2FjaGUgZ19maXhlZFNpemVGb250Q2FjaGU7Ci0KLVBhc3NSZWZQdHI8Rml4ZWRTaXpl
Rm9udERhdGE+IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHksIHVuc2lnbmVkIHdlaWdodCwgYm9vbCBpdGFsaWMpCi17Ci0gICAgRml4ZWRTaXplRm9u
dERhdGEqIGZvbnREYXRhID0gbmV3IEZpeGVkU2l6ZUZvbnREYXRhKCk7Ci0KLSAgICBmb250RGF0
YS0+bV93ZWlnaHQgPSB3ZWlnaHQ7Ci0gICAgZm9udERhdGEtPm1faXRhbGljID0gaXRhbGljOwot
Ci0gICAgTE9HRk9OVCYgd2luRm9udCA9IGZvbnREYXRhLT5tX2ZvbnQ7Ci0gICAgLy8gVGhlIHNp
emUgaGVyZSBsb29rcyB1bnVzdWFsLiAgVGhlIG5lZ2F0aXZlIG51bWJlciBpcyBpbnRlbnRpb25h
bC4KLSAgICB3aW5Gb250LmxmSGVpZ2h0ID0gLTcyOwotICAgIHdpbkZvbnQubGZXaWR0aCA9IDA7
Ci0gICAgd2luRm9udC5sZkVzY2FwZW1lbnQgPSAwOwotICAgIHdpbkZvbnQubGZPcmllbnRhdGlv
biA9IDA7Ci0gICAgd2luRm9udC5sZlVuZGVybGluZSA9IGZhbHNlOwotICAgIHdpbkZvbnQubGZT
dHJpa2VPdXQgPSBmYWxzZTsKLSAgICB3aW5Gb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNF
VDsKLSAgICB3aW5Gb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX0RFRkFVTFRfUFJFQ0lTOwotICAg
IHdpbkZvbnQubGZRdWFsaXR5ID0gQ0xFQVJUWVBFX1FVQUxJVFk7IC8vREVGQVVMVF9RVUFMSVRZ
OwotICAgIHdpbkZvbnQubGZDbGlwUHJlY2lzaW9uID0gQ0xJUF9ERUZBVUxUX1BSRUNJUzsKLSAg
ICB3aW5Gb250LmxmUGl0Y2hBbmRGYW1pbHkgPSBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkU7
Ci0gICAgd2luRm9udC5sZkl0YWxpYyA9IGl0YWxpYzsKLSAgICB3aW5Gb250LmxmV2VpZ2h0ID0g
Rm9udFBsYXRmb3JtRGF0YTo6YWRqdXN0ZWRHRElGb250V2VpZ2h0KHdlaWdodCwgZmFtaWx5KTsK
LQotICAgIGludCBsZW4gPSBzdGQ6Om1pbihmYW1pbHkubGVuZ3RoKCksICh1bnNpZ25lZCBpbnQp
TEZfRkFDRVNJWkUgLSAxKTsKLSAgICB3bWVtY3B5KHdpbkZvbnQubGZGYWNlTmFtZSwgZmFtaWx5
LmNoYXJhY3RlcnMoKSwgbGVuKTsKLSAgICB3aW5Gb250LmxmRmFjZU5hbWVbbGVuXSA9IEwnXDAn
OwotCi0gICAgZm9udERhdGEtPm1faGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJ
bmRpcmVjdCgmd2luRm9udCkpOwotCi0gICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0
KGdfc2NyZWVuREMsIGZvbnREYXRhLT5tX2hmb250LmdldCgpKTsKLQotICAgIEdldFRleHRNZXRy
aWNzKGdfc2NyZWVuREMsICZmb250RGF0YS0+bV9tZXRyaWNzKTsKLQotICAgIGlmIChJTUxhbmdG
b250TGlua1R5cGUqIGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLmdldEZvbnRMaW5rSW50ZXJm
YWNlKCkpIHsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRGb250Q29kZVBhZ2VzKGdfc2NyZWVu
REMsIGZvbnREYXRhLT5tX2hmb250LmdldCgpLCAmZm9udERhdGEtPm1fY29kZVBhZ2VzKTsKLSAg
ICAgICAgZm9udERhdGEtPm1fY29kZVBhZ2VzIHw9IEZvbnRQbGF0Zm9ybURhdGE6OmdldEtub3du
Rm9udENvZGVQYWdlcyh3aW5Gb250LmxmRmFjZU5hbWUpOwotICAgIH0KLQotICAgIFNlbGVjdE9i
amVjdChnX3NjcmVlbkRDLCBvbGRGb250KTsKLQotICAgIHJldHVybiBhZG9wdFJlZihmb250RGF0
YSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBjcmVhdGVGaXhl
ZFNpemVGb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgdW5zaWduZWQgd2VpZ2h0
LCBib29sIGl0YWxpYykKLXsKLSAgICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkoZmFtaWx5LCB3
ZWlnaHQsIGl0YWxpYyk7Ci0gICAgRml4ZWRTaXplRm9udENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZ19maXhlZFNpemVGb250Q2FjaGUuYWRkKGtleSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRh
PigpKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFs
aWMpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXN0YXRpYyBM
T05HIHRvR0RJRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCi17Ci0gICAgc3RhdGlj
IExPTkcgZ2RpRm9udFdlaWdodHNbXSA9IHsKLSAgICAgICAgRldfVEhJTiwgICAgICAgIC8vIEZv
bnRXZWlnaHQxMDAKLSAgICAgICAgRldfRVhUUkFMSUdIVCwgIC8vIEZvbnRXZWlnaHQyMDAKLSAg
ICAgICAgRldfTElHSFQsICAgICAgIC8vIEZvbnRXZWlnaHQzMDAKLSAgICAgICAgRldfTk9STUFM
LCAgICAgIC8vIEZvbnRXZWlnaHQ0MDAKLSAgICAgICAgRldfTUVESVVNLCAgICAgIC8vIEZvbnRX
ZWlnaHQ1MDAKLSAgICAgICAgRldfU0VNSUJPTEQsICAgIC8vIEZvbnRXZWlnaHQ2MDAKLSAgICAg
ICAgRldfQk9MRCwgICAgICAgIC8vIEZvbnRXZWlnaHQ3MDAKLSAgICAgICAgRldfRVhUUkFCT0xE
LCAgIC8vIEZvbnRXZWlnaHQ4MDAKLSAgICAgICAgRldfSEVBVlkgICAgICAgIC8vIEZvbnRXZWln
aHQ5MDAKLSAgICB9OwotICAgIHJldHVybiBnZGlGb250V2VpZ2h0c1tmb250V2VpZ2h0XTsKLX0K
LQotY2xhc3MgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEgewotcHVibGljOgotICAgIGludCBtX3Jl
ZmVyZW5jZTsKLSAgICBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IG1fcm9vdEZvbnREYXRhOwot
ICAgIEF0b21pY1N0cmluZyBtX2ZhbWlseTsKLSAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVz
Y3JpcHRpb247Ci0gICAgR0RJT2JqZWN0PEhGT05UPiBtX2hmb250U2NhbGVkOwotICAgIGludCBt
X3NpemU7Ci0gICAgbG9uZyBtX2ZvbnRTY2FsZWRXaWR0aDsKLSAgICBsb25nIG1fZm9udFNjYWxl
ZEhlaWdodDsKLSAgICBib29sIG1fZGlzYWJsZWQ7Ci0gICAgRm9udFBsYXRmb3JtUHJpdmF0ZURh
dGEoaW50IHNpemUsIHVuc2lnbmVkIHdlaWdodCkKLSAgICAgICAgOiBtX3JlZmVyZW5jZSgxKQot
ICAgICAgICAsIG1fZmFtaWx5KEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCkp
Ci0gICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgICwgbV9mb250U2NhbGVkV2lkdGgoMCkK
LSAgICAgICAgLCBtX2ZvbnRTY2FsZWRIZWlnaHQoMCkKLSAgICAgICAgLCBtX2Rpc2FibGVkKGZh
bHNlKQotICAgIHsKLSAgICAgICAgbV9yb290Rm9udERhdGEgPSBjcmVhdGVGaXhlZFNpemVGb250
RGF0YShtX2ZhbWlseSwgd2VpZ2h0LCBmYWxzZSk7Ci0gICAgfQotICAgIEZvbnRQbGF0Zm9ybVBy
aXZhdGVEYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkKLSAgICAgICAgOiBtX3JlZmVyZW5jZSgxKQotICAgICAgICAs
IG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAgICAgLCBt
X2ZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pCi0gICAgICAgICwgbV9mYW1pbHkoZmFt
aWx5KQotICAgICAgICAsIG1fZm9udFNjYWxlZFdpZHRoKDApCi0gICAgICAgICwgbV9mb250U2Nh
bGVkSGVpZ2h0KDApCi0gICAgICAgICwgbV9kaXNhYmxlZCghZm9udERlc2NyaXB0aW9uLnNwZWNp
ZmllZFNpemUoKSkKLSAgICB7Ci0gICAgICAgIG1fcm9vdEZvbnREYXRhID0gRml4ZWRTaXplRm9u
dERhdGE6OmNyZWF0ZShmYW1pbHksIHRvR0RJRm9udFdlaWdodChmb250RGVzY3JpcHRpb24ud2Vp
Z2h0KCkpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCkpOwotICAgIH0KLX07Ci0KLUZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZGVzaXJlZEZhbWlseSwgYm9vbCB1c2VEZWZh
dWx0Rm9udElmTm90UHJlc2VudCkKLXsKLSAgICBTdHJpbmcgZmFtaWx5KGRlc2lyZWRGYW1pbHkp
OwotICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBkZWZhdWx0Rm9udEZhbWlseSgp
KSAmJiAhRm9udEZhbWlseUNoZWNrZXIoZmFtaWx5LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpKS5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIFN0cmluZyhoZWlUaVN0cikpICYmIGlzU29uZ1RpU3VwcG9ydGVkKCkpCi0g
ICAgICAgICAgICBmYW1pbHkgPSBTdHJpbmcoc29uZ1RpU3RyKTsKLSAgICAgICAgZWxzZSBpZiAo
dXNlRGVmYXVsdEZvbnRJZk5vdFByZXNlbnQpCi0gICAgICAgICAgICBmYW1pbHkgPSBkZWZhdWx0
Rm9udEZhbWlseSgpOwotICAgIH0KLQotICAgIG1fcHJpdmF0ZSA9IG5ldyBGb250UGxhdGZvcm1Q
cml2YXRlRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
Ci17Ci0gICAgaWYgKCFzaXplKQotICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIGVsc2UKLSAg
ICAgICAgbV9wcml2YXRlID0gbmV3IEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKChpbnQpKHNpemUg
KyAwLjUpLCBib2xkID8gRldfQk9MRCA6IEZXX05PUk1BTCk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLSAgICBpZiAoaXNWYWxpZCgpICYmICEtLW1fcHJp
dmF0ZS0+bV9yZWZlcmVuY2UpIHsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9yb290Rm9udERh
dGEtPnJlZkNvdW50KCkgPT0gMikgewotICAgICAgICAgICAgRml4ZWRTaXplRm9udERhdGFLZXkg
a2V5KG1fcHJpdmF0ZS0+bV9mYW1pbHksIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fd2Vp
Z2h0LCBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2l0YWxpYyk7Ci0gICAgICAgICAgICBn
X2ZpeGVkU2l6ZUZvbnRDYWNoZS5yZW1vdmUoa2V5KTsKLSAgICAgICAgfQotICAgICAgICBkZWxl
dGUgbV9wcml2YXRlOwotICAgIH0KLX0KLQotRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG8pCi17Ci0gICAgaWYgKGlz
VmFsaWQoKSAmJiAhLS1tX3ByaXZhdGUtPm1fcmVmZXJlbmNlKQotICAgICAgICBkZWxldGUgbV9w
cml2YXRlOwotCi0gICAgaWYgKG1fcHJpdmF0ZSA9IG8ubV9wcml2YXRlKQotICAgICAgICArK21f
cHJpdmF0ZS0+bV9yZWZlcmVuY2U7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUhGT05UIEZv
bnRQbGF0Zm9ybURhdGE6Omhmb250KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX2Rpc2FibGVkKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmICghbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9u
dCkKLSAgICAgICAgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udCA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5t
X2ZvbnQpKTsKLQotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250
LmdldCgpOwotfQotCi1IRk9OVCBGb250UGxhdGZvcm1EYXRhOjpnZXRTY2FsZWRGb250SGFuZGxl
KGludCBoZWlnaHQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSB8fCBt
X3ByaXZhdGUtPm1fZGlzYWJsZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFtX3By
aXZhdGUtPm1faGZvbnRTY2FsZWQgfHwgbV9wcml2YXRlLT5tX2ZvbnRTY2FsZWRIZWlnaHQgIT0g
aGVpZ2h0IHx8IG1fcHJpdmF0ZS0+bV9mb250U2NhbGVkV2lkdGggIT0gd2lkdGgpIHsKLSAgICAg
ICAgbV9wcml2YXRlLT5tX2ZvbnRTY2FsZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1fcHJp
dmF0ZS0+bV9mb250U2NhbGVkV2lkdGggPSB3aWR0aDsKLSAgICAgICAgTE9HRk9OVCBmb250ID0g
bV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9mb250OwotICAgICAgICBmb250LmxmSGVpZ2h0
ID0gLWhlaWdodDsKLSAgICAgICAgZm9udC5sZldpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1fcHJp
dmF0ZS0+bV9oZm9udFNjYWxlZCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0
KCZmb250KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9oZm9udFNjYWxlZC5n
ZXQoKTsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpkaXNjYXJkRm9udEhhbmRsZSgpCi17
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICht
X3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250KSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+
bV9yb290Rm9udERhdGEtPm1faGZvbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX2hmb250U2NhbGVkKSB7Ci0gICAgICAgIG1f
cHJpdmF0ZS0+bV9oZm9udFNjYWxlZCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IFRFWFRNRVRSSUMmIEZvbnRQbGF0
Zm9ybURhdGE6Om1ldHJpY3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcm9v
dEZvbnREYXRhLT5tX21ldHJpY3M7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNTeXN0
ZW1Gb250KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBGb250UGxhdGZv
cm1EYXRhOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3NpemU7Ci19
Ci0KLWNvbnN0IEZvbnREZXNjcmlwdGlvbiYgRm9udFBsYXRmb3JtRGF0YTo6Zm9udERlc2NyaXB0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX2ZvbnREZXNjcmlwdGlvbjsK
LX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZmFtaWx5OwotfQotCi1jb25zdCBMT0dGT05U
JiBGb250UGxhdGZvcm1EYXRhOjpsb2dGb250KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9mb250OwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6
OmlzRGlzYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiAhaXNWYWxpZCgpIHx8IG1fcHJpdmF0
ZS0+bV9kaXNhYmxlZDsKLX0KLQotRFdPUkQgRm9udFBsYXRmb3JtRGF0YTo6Y29kZVBhZ2VzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9jb2RlUGFn
ZXM7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNTb25nVGlTdXBwb3J0ZWQoKQotewot
ICAgIHN0YXRpYyBib29sIGV4aXN0cyA9IEZvbnRGYW1pbHlDaGVja2VyKHNvbmdUaVN0cikuaXNT
dXBwb3J0ZWQoKTsKLSAgICByZXR1cm4gZXhpc3RzOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURh
dGE6Om1hcEtub3duRm9udChEV09SRCBjb2RlUGFnZXMsIFN0cmluZyYgZmFtaWx5KQotewotICAg
IEtub3duRm9udHMmIGZvbnRzID0ga25vd25Gb250cygpOwotICAgIGZvciAoS25vd25Gb250czo6
aXRlcmF0b3IgaSA9IGZvbnRzLmJlZ2luKCk7IGkgIT0gZm9udHMuZW5kKCk7ICsraSkgewotICAg
ICAgICBpZiAoaS0+Y29kZVBhZ2VzKCkgJiBjb2RlUGFnZXMpIHsKLSAgICAgICAgICAgIGZhbWls
eSA9IGktPm1fZmFtaWx5OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1EV09SRCBGb250UGxhdGZvcm1EYXRhOjpnZXRL
bm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KQotewotICAgIEtub3duRm9u
dHMmIGZvbnRzID0ga25vd25Gb250cygpOwotICAgIGZvciAoS25vd25Gb250czo6aXRlcmF0b3Ig
aSA9IGZvbnRzLmJlZ2luKCk7IGkgIT0gZm9udHMuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoaS0+bV9mYW1pbHksIFN0cmluZyhmYW1pbHkpKSkKLSAgICAgICAg
ICAgIHJldHVybiBpLT5jb2RlUGFnZXMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNv
bnN0IFN0cmluZyYgRm9udFBsYXRmb3JtRGF0YTo6ZGVmYXVsdEZvbnRGYW1pbHkoKQotewotICAg
IHN0YXRpYyBTdHJpbmcgZmFtaWx5KGdldERlZmF1bHRGb250RmFtaWx5KCkpOwotICAgIHJldHVy
biBmYW1pbHk7Ci19Ci0KLUxPTkcgRm9udFBsYXRmb3JtRGF0YTo6YWRqdXN0ZWRHRElGb250V2Vp
Z2h0KExPTkcgZ2RpRm9udFdlaWdodCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgc3Rh
dGljIEF0b21pY1N0cmluZyBsdWNpZGFTdHIoIkx1Y2lkYSBHcmFuZGUiKTsKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFTdHIpKSB7Ci0gICAgICAgIGlmIChnZGlGb250
V2VpZ2h0ID09IEZXX05PUk1BTCkKLSAgICAgICAgICAgIHJldHVybiBGV19NRURJVU07Ci0gICAg
ICAgIGlmIChnZGlGb250V2VpZ2h0ID09IEZXX0JPTEQpCi0gICAgICAgICAgICByZXR1cm4gRldf
U0VNSUJPTEQ7Ci0gICAgfQotICAgIHJldHVybiBnZGlGb250V2VpZ2h0OwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGM5NDY4Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysg
L2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVk
ZWQgYnkgYW55b25lIG90aGVyIHRoYW4KLSAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQg
Rm9udC5jcHAuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBG
b250UGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgdGFnVEVYVE1FVFJJ
Q1cgVEVYVE1FVFJJQzsKLXR5cGVkZWYgc3RydWN0IHRhZ0xPR0ZPTlRXIExPR0ZPTlQ7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhOwot
Ci0gICAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Ci0KLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSgpOiBtX3ByaXZhdGUoMCkge30KLSAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0KLSAgICAgICAgLy8g
VXNlZCBmb3IgZGVsZXRlZCB2YWx1ZXMgaW4gdGhlIGZvbnQgY2FjaGUncyBoYXNoIHRhYmxlcy4K
LSAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9wcml2YXRlKChGb250UGxhdGZvcm1Qcml2YXRlRGF0YSopMSkge30KLSAgICAgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICh1bnNpZ25lZCltX3By
aXZhdGUgPT0gMTsgfQotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29s
IHVzZURlZmF1bHRGb250SWZOb3RQcmVzZW50ID0gdHJ1ZSk7Ci0KLSAgICAgICAgfkZvbnRQbGF0
Zm9ybURhdGEoKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG8pIDogbV9wcml2YXRlKDApIHsgb3BlcmF0b3I9KG8pOyB9Ci0gICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKTsKLQotICAg
ICAgICBpbnQgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQ+KG1fcHJpdmF0ZSkgJiB+MTsgfQotICAgICAgICBIRk9OVCBoZm9udCgpIGNvbnN0OwotICAg
ICAgICBjb25zdCBURVhUTUVUUklDJiBtZXRyaWNzKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNT
eXN0ZW1Gb250KCkgY29uc3Q7Ci0gICAgICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiAodW5zaWduZWQpbV9wcml2YXRlOyB9Ci0gICAg
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7Ci0gICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QgeyAgICAgcmV0dXJu
IG1fcHJpdmF0ZSA9PSBvdGhlci5tX3ByaXZhdGU7IH0KLSAgICAgICAgSEZPTlQgZ2V0U2NhbGVk
Rm9udEhhbmRsZShpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpIGNvbnN0OwotICAgICAgICBjb25zdCBM
T0dGT05UJiBsb2dGb250KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0
OwotICAgICAgICBib29sIGRpc2NhcmRGb250SGFuZGxlKCk7Ci0gICAgICAgIERXT1JEIGNvZGVQ
YWdlcygpIGNvbnN0OwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzU29uZ1RpU3VwcG9ydGVkKCk7
Ci0gICAgICAgIHN0YXRpYyBib29sIG1hcEtub3duRm9udChEV09SRCBjb2RlUGFnZXMsIFN0cmlu
ZyYgZmFtaWx5KTsKLSAgICAgICAgc3RhdGljIERXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhj
b25zdCB3Y2hhcl90KiBmYW1pbHkpOwotICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZh
dWx0Rm9udEZhbWlseSgpOwotICAgICAgICBzdGF0aWMgTE9ORyBhZGp1c3RlZEdESUZvbnRXZWln
aHQoTE9ORyBnZGlGb250V2VpZ2h0LCBjb25zdCBTdHJpbmcmIGZhbWlseSk7Ci0KLSAgICAgICAg
Rm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gSG9yaXpvbnRhbDsg
fSAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgICAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRP
cmllbnRhdGlvbikgeyB9IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBwcml2YXRl
OgotICAgICAgICBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSogbV9wcml2YXRlOwotICAgIH07Ci0K
LX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9Gb250V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAyODQ4
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dERhdGEuaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVk
ZSAiV2lkdGhJdGVyYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV1RGOjpVbmljb2RlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUhEQyBnX3NjcmVlbkRD
ID0gR2V0REMoMCk7Ci0KLWNsYXNzIFNjcmVlbkRjUmVsZWFzZXIgewotcHVibGljOgotICAgIH5T
Y3JlZW5EY1JlbGVhc2VyKCkKLSAgICB7Ci0gICAgICAgIFJlbGVhc2VEQygwLCBnX3NjcmVlbkRD
KTsKLSAgICB9Ci19OwotCi1TY3JlZW5EY1JlbGVhc2VyIHJlbGVhc2VTY3JlZW5EYzsKLQotdm9p
ZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwKLSAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Ci17Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGV4dChmb250RGF0YSwgZ2x5cGhC
dWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOwotfQotCi1jbGFzcyBUZXh0UnVuQ29tcG9u
ZW50IHsKLXB1YmxpYzoKLSAgICBUZXh0UnVuQ29tcG9uZW50KCkgOiBtX3RleHRSdW4oMCwgMCkg
e30KLSAgICBUZXh0UnVuQ29tcG9uZW50KGNvbnN0IFVDaGFyICpzdGFydCwgaW50IGxlbmd0aCwg
Y29uc3QgVGV4dFJ1biYgcGFyZW50VGV4dFJ1biwgY29uc3QgRm9udCAmZm9udCwgaW50IG9mZnNl
dCk7Ci0gICAgVGV4dFJ1bkNvbXBvbmVudChpbnQgc3BhY2VzLCBjb25zdCBGb250ICZmb250LCBp
bnQgb2Zmc2V0KTsKLSAgICB+VGV4dFJ1bkNvbXBvbmVudCgpIHsgbV90ZXh0UnVuOyB9Ci0KLSAg
ICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlczsgfQotICAgIGludCB0ZXh0
TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZXMgPyBtX3NwYWNlcyA6IG1fdGV4dFJ1bi5s
ZW5ndGgoKTsgfQotCi0gICAgVGV4dFJ1biBtX3RleHRSdW47Ci0gICAgZmxvYXQgbV93aWR0aDsK
LSAgICBpbnQgbV9vZmZzZXQ7Ci0gICAgaW50IG1fc3BhY2VzOwotfTsKLQotVGV4dFJ1bkNvbXBv
bmVudDo6VGV4dFJ1bkNvbXBvbmVudChjb25zdCBVQ2hhciAqc3RhcnQsIGludCBsZW5ndGgsIGNv
bnN0IFRleHRSdW4mIHBhcmVudFRleHRSdW4sIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvKQotICAg
IDogbV90ZXh0UnVuKHN0YXJ0LCBsZW5ndGgsIDAsIDAKLSAgICAgICAgLCBwYXJlbnRUZXh0UnVu
LmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkgPyBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uIDogVGV4dFJ1bjo6Rm9yYmlkVHJhaWxpbmdFeHBhbnNpb24KLSAgICAgICAgLCBwYXJlbnRU
ZXh0UnVuLmRpcmVjdGlvbigpCi0gICAgICAgICwgcGFyZW50VGV4dFJ1bi5kaXJlY3Rpb25hbE92
ZXJyaWRlKCkpCi0gICAgLCBtX29mZnNldChvKQotICAgICwgbV9zcGFjZXMoMCkKLXsKLSAgICBt
X3RleHRSdW4uc2V0VGFiU2l6ZShwYXJlbnRUZXh0UnVuLmFsbG93VGFicygpLCBwYXJlbnRUZXh0
UnVuLnRhYlNpemUoKSk7Ci0KLSAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBtX3RleHRSdW4p
OwotICAgIGl0LmFkdmFuY2UobV90ZXh0UnVuLmxlbmd0aCgpLCAwKTsKLSAgICBtX3dpZHRoID0g
aXQubV9ydW5XaWR0aFNvRmFyOwotfQotCi1UZXh0UnVuQ29tcG9uZW50OjpUZXh0UnVuQ29tcG9u
ZW50KGludCBzLCBjb25zdCBGb250ICZmb250LCBpbnQgbykKLSAgICA6IG1fdGV4dFJ1bigwLCAw
KQotICAgICwgbV9vZmZzZXQobykKLSAgICAsIG1fc3BhY2VzKHMpCi17Ci0gICAgbV93aWR0aCA9
IHMgKiBmb250LnByaW1hcnlGb250KCktPndpZHRoRm9yR2x5cGgoJyAnKTsKLX0KLQotdHlwZWRl
ZiBWZWN0b3I8VGV4dFJ1bkNvbXBvbmVudCwgMTI4PiBUZXh0UnVuQ29tcG9uZW50czsKLQotc3Rh
dGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbXBvbmVudHMqIGNvbXBvbmVudHMs
IGNvbnN0IEZvbnQgJmZvbnQsIGNvbnN0IFRleHRSdW4gJnJ1bikKLXsKLSAgICBpbnQgbGV0dGVy
U3BhY2luZyA9IGZvbnQubGV0dGVyU3BhY2luZygpOwotICAgIGludCB3b3JkU3BhY2luZyA9IGZv
bnQud29yZFNwYWNpbmcoKTsKLSAgICBpbnQgcGFkZGluZyA9IHJ1bi5leHBhbnNpb24oKTsKLSAg
ICBpbnQgbnVtU3BhY2VzID0gMDsKLSAgICBpZiAocGFkZGluZykgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJ1bi5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgaWYgKEZvbnQ6OnRy
ZWF0QXNTcGFjZShydW5baV0pKQotICAgICAgICAgICAgICAgICsrbnVtU3BhY2VzOwotICAgIH0K
LQotICAgIGludCBvZmZzZXQgPSAwOwotICAgIGlmIChsZXR0ZXJTcGFjaW5nKSB7Ci0gICAgICAg
IC8vIG5lZWQgdG8gZHJhdyBldmVyeSBsZXR0ZXIgb24gaXQncyBvd24KLSAgICAgICAgaW50IHN0
YXJ0ID0gMDsKLSAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5bMF0pKSB7Ci0gICAg
ICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAgICAgIGlmIChudW1TcGFjZXMpIHsKLSAgICAg
ICAgICAgICAgICBhZGQgPSBwYWRkaW5nL251bVNwYWNlczsKLSAgICAgICAgICAgICAgICBwYWRk
aW5nIC09IGFkZDsKLSAgICAgICAgICAgICAgICAtLW51bVNwYWNlczsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIGZvbnQs
IG9mZnNldCkpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IGFkZCArIGxldHRlclNwYWNpbmcgKyBj
b21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJ1bi5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBVQ2hhciBjaCA9IHJ1bltpXTsKLSAgICAgICAgICAgIGlmIChVMTZfSVNfTEVB
RChjaCkgJiYgVTE2X0lTX1RSQUlMKHJ1bltpLTFdKSkKLSAgICAgICAgICAgICAgICBjaCA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShjaCwgcnVuW2ktMV0pOwotICAgICAgICAgICAgaWYgKFUxNl9J
U19UUkFJTChjaCkgfHwgVV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01OX01BU0spCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1
bltpXSkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAgICAgICAgICBp
ZiAoaSAtIHN0YXJ0ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBl
bmQoVGV4dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgaSAtIHN0YXJ0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBydW4sIGZvbnQsIG9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29t
cG9uZW50cy0+bGFzdCgpLm1fd2lkdGggKyBsZXR0ZXJTcGFjaW5nOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAobnVtU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIC09
IGFkZDsKLSAgICAgICAgICAgICAgICAgICAgLS1udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEs
IGZvbnQsIG9mZnNldCkpOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSB3b3JkU3BhY2luZyAr
IGFkZCArIGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoICsgbGV0dGVyU3BhY2luZzsKLSAgICAg
ICAgICAgICAgICBzdGFydCA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgLSBzdGFydCA+IDApIHsKLSAgICAgICAgICAg
ICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVyczE2
KCkgKyBzdGFydCwgaSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGggKyBsZXR0ZXJTcGFjaW5nOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc3RhcnQgPSBpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChy
dW4ubGVuZ3RoKCkgLSBzdGFydCA+IDApIHsKLSAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVu
ZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBydW4ubGVuZ3Ro
KCkgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvbnQsIG9mZnNldCkpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3Qo
KS5tX3dpZHRoOwotICAgICAgICB9Ci0gICAgICAgIG9mZnNldCArPSBsZXR0ZXJTcGFjaW5nOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzdGFydCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChGb250Ojp0cmVh
dEFzU3BhY2UocnVuW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50
KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBpIC0gc3RhcnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkubV93
aWR0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IGFkZCA9IDA7Ci0g
ICAgICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAgICAgICAgICBhZGQg
PSBwYWRkaW5nL251bVNwYWNlczsKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZyAtPSBhZGQ7
Ci0gICAgICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudCgxLCBmb250
LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYWRkICsgY29tcG9uZW50cy0+
bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAg
ICAgIG9mZnNldCArPSB3b3JkU3BhY2luZzsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGkgKyAx
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChydW4ubGVuZ3RoKCkgLSBz
dGFydCA+IDApIHsKLSAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9u
ZW50KHJ1bi5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBydW4ubGVuZ3RoKCkgLSBzdGFydCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsIG9mZnNldCkp
OwotICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAg
aWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7Ci0gICAgaWYgKGZyb20gPCAw
KQotICAgICAgICBmcm9tID0gMDsKLQotICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7
Ci0gICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4p
OwotCi0gICAgZmxvYXQgd2lkdGhPZkRyYXduVGV4dCA9IDA7Ci0gICAgaW50IGN1clBvcyA9IDA7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7
Ci0gICAgICAgIGludCBsZW4gPSBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgaW50IGN1ckVu
ZCA9IGN1clBvcyArIGxlbjsKLSAgICAgICAgaWYgKGN1clBvcyA8IHRvICYmIGZyb20gPCBjdXJF
bmQgJiYgIWNvbXAuaXNTcGFjZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHB0ID0gcG9p
bnQ7Ci0gICAgICAgICAgICBpZiAocnVuLnJ0bCgpKQotICAgICAgICAgICAgICAgIHB0LnNldFgo
cG9pbnQueCgpICsgdyAtIGNvbXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgY29tcC5tX29mZnNl
dCk7Ci0gICAgICAgICAgICB3aWR0aE9mRHJhd25UZXh0ICs9IGRyYXdTaW1wbGVUZXh0KGNvbnRl
eHQsIGNvbXAubV90ZXh0UnVuLCBwdCwgZnJvbSAtIGN1clBvcywgc3RkOjptaW4odG8sIGN1ckVu
ZCkgLSBjdXJQb3MpOwotICAgICAgICB9Ci0gICAgICAgIGN1clBvcyArPSBsZW47Ci0gICAgICAg
IGlmIChmcm9tIDwgY3VyUG9zKQotICAgICAgICAgICAgZnJvbSA9IGN1clBvczsKLSAgICB9Ci0g
ICAgcmV0dXJuIHdpZHRoT2ZEcmF3blRleHQ7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0
IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25z
dCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdp
ZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0Ci17Ci0gICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKLSAgICBpbnQgdyA9
IGdlbmVyYXRlQ29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7Ci0gICAgcmV0dXJu
IHc7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBm
b3IgSFRNTCwgYnV0IG9ubHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2lu
dCBudW1iZXJzCi0gICAgLy8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6
Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50
IHBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0gICAgVGV4dFJ1bkNvbXBv
bmVudHMgY29tcG9uZW50czsKLSAgICBpbnQgdyA9IGdlbmVyYXRlQ29tcG9uZW50cygmY29tcG9u
ZW50cywgKnRoaXMsIHJ1bik7Ci0KLSAgICBpZiAocG9zaXRpb24gPj0gdykKLSAgICAgICAgcmV0
dXJuIHJ1bi5sZW5ndGgoKTsKLQotICAgIGludCBvZmZzZXQgPSAwOwotICAgIGlmIChydW4ucnRs
KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBUZXh0UnVuQ29tcG9uZW50JiBjb21wID0gY29tcG9u
ZW50cy5hdChpKTsKLSAgICAgICAgICAgIGludCB4ZSA9IHcgLSBjb21wLm1fb2Zmc2V0OwotICAg
ICAgICAgICAgaW50IHhzID0geGUgLSBjb21wLm1fd2lkdGg7Ci0gICAgICAgICAgICBpZiAocG9z
aXRpb24gPj0geHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIChjb21wLmlzU3Bh
Y2UoKQotICAgICAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGludD4oKHBvc2l0aW9uIC0g
eGUpICogY29tcC5tX3NwYWNlcyAvIHN0ZDo6bWF4KDEuZiwgY29tcC5tX3dpZHRoKSArIDAuNSkK
LSAgICAgICAgICAgICAgICAgICAgOiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29t
cC5tX3RleHRSdW4sIHBvc2l0aW9uIC0geHMsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSk7Ci0KLSAg
ICAgICAgICAgIG9mZnNldCArPSBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBv
bmVudHMuYXQoaSk7Ci0gICAgICAgICAgICBpbnQgeHMgPSBjb21wLm1fb2Zmc2V0OwotICAgICAg
ICAgICAgaW50IHhlID0geHMgKyBjb21wLm1fd2lkdGg7Ci0gICAgICAgICAgICBpZiAocG9zaXRp
b24gPD0geGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gLSB4cyA+PSB4ZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIGNvbXAudGV4dExlbmd0aCgpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAoY29tcC5pc1NwYWNlKCkKLSAgICAgICAgICAg
ICAgICAgICAgPyBzdGF0aWNfY2FzdDxpbnQ+KChwb3NpdGlvbiAtIHhzKSAqIGNvbXAubV9zcGFj
ZXMgLyBzdGQ6Om1heCgxLmYsIGNvbXAubV93aWR0aCkgKyAwLjUpCi0gICAgICAgICAgICAgICAg
ICAgIDogb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbXAubV90ZXh0UnVuLCBwb3Np
dGlvbiAtIHhzLCBpbmNsdWRlUGFydGlhbEdseXBocykpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgb2Zmc2V0ICs9IGNvbXAudGV4dExlbmd0aCgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBydW4ubGVuZ3RoKCk7Ci19Ci0KLQotc3RhdGljIGZsb2F0IGN1cnNvclRvWChjb25z
dCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuQ29tcG9uZW50cyYgY29tcG9uZW50cywgaW50IHdp
ZHRoLCBib29sIHJ0bCwgaW50IGN1cnNvcikKLXsKLSAgICBpbnQgc3RhcnQgPSAwOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBUZXh0UnVuQ29tcG9uZW50JiBjb21wID0gY29tcG9uZW50cy5hdChpKTsKLSAgICAgICAg
aWYgKHN0YXJ0ICsgY29tcC50ZXh0TGVuZ3RoKCkgPD0gY3Vyc29yKSB7Ci0gICAgICAgICAgICBz
dGFydCArPSBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGludCB4cyA9IGNvbXAubV9vZmZzZXQ7Ci0gICAgICAgIGlmIChydGwpCi0g
ICAgICAgICAgICB4cyA9IHdpZHRoIC0geHMgLSBjb21wLm1fd2lkdGg7Ci0KLSAgICAgICAgaW50
IHBvcyA9IGN1cnNvciAtIHN0YXJ0OwotICAgICAgICBpZiAoY29tcC5pc1NwYWNlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChydGwpCi0gICAgICAgICAgICAgICAgcG9zID0gY29tcC50ZXh0TGVuZ3Ro
KCkgLSBwb3M7Ci0gICAgICAgICAgICByZXR1cm4geHMgKyBwb3MgKiBjb21wLm1fd2lkdGggLyBj
b21wLm1fc3BhY2VzOwotICAgICAgICB9Ci0gICAgICAgIFdpZHRoSXRlcmF0b3IgaXQoZm9udCwg
Y29tcC5tX3RleHRSdW4pOwotICAgICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICAg
ICAgaXQuYWR2YW5jZShwb3MsICZnbHlwaEJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiB4cyArIGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKLSAgICB9Ci0gICAgcmV0dXJuIHdpZHRoOwotfQotCi1GbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcHQsCi0gICAgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
Ci17Ci0gICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKLSAgICBpbnQgdyA9IGdlbmVy
YXRlQ29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7Ci0KLSAgICBpZiAoIWZyb20g
JiYgdG8gPT0gcnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSwg
cHQueSgpLCB3LCBoKTsKLQotICAgIGZsb2F0IHgxID0gY3Vyc29yVG9YKHRoaXMsIGNvbXBvbmVu
dHMsIHcsIHJ1bi5ydGwoKSwgZnJvbSk7Ci0gICAgZmxvYXQgeDIgPSBjdXJzb3JUb1godGhpcywg
Y29tcG9uZW50cywgdywgcnVuLnJ0bCgpLCB0byk7Ci0gICAgaWYgKHgyIDwgeDEpCi0gICAgICAg
IHN0ZDo6c3dhcCh4MSwgeDIpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkgKyB4MSwg
cHQueSgpLCB4MiAtIHgxLCBoKTsKLX0KLQotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0Zv
bnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBGb250
OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdpbkNFLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dseXBoUGFnZVRyZWVO
b2RlV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGM1NWY0Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dseXBoUGFn
ZVRyZWVOb2RlV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0K
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dERhdGEuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLURXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkp
OwotCi10eXBlZGVmIHVuc2lnbmVkICgqZnVuY0dldENoYXJDb2RlUGFnZXMpKHVuc2lnbmVkIHNo
b3J0IGMsIHVuc2lnbmVkJiBsYXN0UG9zKTsKLWZ1bmNHZXRDaGFyQ29kZVBhZ2VzIGdldENoYXJD
b2RlUGFnZXMgPSAwOwotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgaWYgKGxlbmd0aCAhPSBidWZmZXJM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkuaGZvbnQoKSkgewotICAgICAgICBEV09SRCBmb250Q29kZVBhZ2VzID0gZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLmNvZGVQYWdlcygpOwotICAgICAgICBpZiAoZm9udENvZGVQYWdl
cykgewotICAgICAgICAgICAgaWYgKGdldENoYXJDb2RlUGFnZXMpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsYXN0UG9zID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgRFdPUkQg
YWN0dWFsQ29kZVBhZ2VzID0gZ2V0Q2hhckNvZGVQYWdlcyhidWZmZXJbaV0sIGxhc3RQb3MpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbENvZGVQYWdlcyB8fCAoYWN0dWFsQ29kZVBh
Z2VzICYgZm9udENvZGVQYWdlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChJTUxhbmdGb250TGlua1R5cGUq
IGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLmdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgRFdPUkQgYWN0dWFsQ29kZVBhZ2VzOwotICAgICAgICAg
ICAgICAgICAgICBsYW5nRm9udExpbmstPkdldENoYXJDb2RlUGFnZXMoYnVmZmVyW2ldLCAmYWN0
dWFsQ29kZVBhZ2VzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxDb2RlUGFnZXMg
fHwgKGFjdHVhbENvZGVQYWdlcyAmIGZvbnRDb2RlUGFnZXMpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCBmb250RGF0
YSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCBmb250RGF0YSk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5D
RS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFkaWVudFdp
bkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczNTg4MS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFkaWVudFdpbkNF
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYWRp
ZW50OjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZVN0b3BzKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGEsIGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AmIGIpCi17Ci0gICAgcmV0dXJuIGEuc3RvcCA8IGIuc3RvcDsKLX0KLQotY29uc3QgVmVj
dG9yPEdyYWRpZW50OjpDb2xvclN0b3AsIDI+JiBHcmFkaWVudDo6Z2V0U3RvcHMoKSBjb25zdAot
ewotICAgIGlmICghbV9zdG9wc1NvcnRlZCkgewotICAgICAgICBpZiAobV9zdG9wcy5zaXplKCkp
Ci0gICAgICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5l
bmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICAgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBtX3N0b3BzOwotfQotCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCogYywgY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGMtPmZpbGxSZWN0KHIsIHRo
aXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5D
RS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNjlmMDAuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg1MyArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR0RJRXh0cmFzLmgiCi0jaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbkNFLmgi
Ci0jaW5jbHVkZSAiU2hhcmVkQml0bWFwLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
LSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dHlwZWRlZiB2b2lkICgqRnVuY0dyYWRpZW50RmlsbFJlY3RMaW5lYXIpKEhEQyBoZGMsIGNvbnN0
IEludFJlY3QmIHIsIGNvbnN0IEludFBvaW50JiBwMCwgY29uc3QgSW50UG9pbnQmIHAxLCBjb25z
dCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzKTsKLXR5cGVkZWYgdm9pZCAoKkZ1
bmNHcmFkaWVudEZpbGxSZWN0UmFkaWFsKShIREMgaGRjLCBjb25zdCBJbnRSZWN0JiByLCBjb25z
dCBJbnRQb2ludCYgcDAsIGNvbnN0IEludFBvaW50JiBwMSwgZmxvYXQgcjAsIGZsb2F0IHIxLCBj
b25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzKTsKLUZ1bmNHcmFkaWVudEZp
bGxSZWN0TGluZWFyIGdfbGluZWFyR3JhZGllbnRGaWxsZXIgPSAwOwotRnVuY0dyYWRpZW50Rmls
bFJlY3RSYWRpYWwgZ19yYWRpYWxHcmFkaWVudEZpbGxlciA9IDA7Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1plcm8oZG91YmxlIGQpCi17Ci0gICAgcmV0dXJuIGQgPiAwID8gZCA8PSAxLkUtMTAg
OiBkID49IC0xLkUtMTA7Ci19Ci0KLS8vIHN0YWJsZVJvdW5kIHJvdW5kcyAtMC41IHRvIDAsIHdo
ZXJlIGxyb3VuZCByb3VuZHMgLTAuNSB0byAtMS4KLXN0YXRpYyBpbmxpbmUgaW50IHN0YWJsZVJv
dW5kKGRvdWJsZSBkKQotewotICAgIGlmIChkID4gMCkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oZCArIDAuNSk7Ci0KLSAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7Ci0g
ICAgcmV0dXJuIGkgLSBkID4gMC41ID8gaSAtIDEgOiBpOwotfQotCi0vLyBVbmxpa2UgZW5jbG9z
aW5nSW50UmVjdCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgc3RyaWN0IHJvdW5kaW5nLgotc3RhdGlj
IGlubGluZSBJbnRSZWN0IHJvdW5kUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgcmV0
dXJuIEludFJlY3Qoc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLnkoKSksIHN0YWJs
ZVJvdW5kKHIubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci5tYXhZ
KCkpIC0gc3RhYmxlUm91bmQoci55KCkpKTsKLX0KLQotLy8gUm90YXRpb24gdHJhbnNmb3JtYXRp
b24KLWNsYXNzIFJvdGF0aW9uVHJhbnNmb3JtIHsKLXB1YmxpYzoKLSAgICBSb3RhdGlvblRyYW5z
Zm9ybSgpCi0gICAgICAgIDogbV9jb3NBKDEuKQotICAgICAgICAsIG1fc2luQSgwLikKLSAgICAg
ICAgLCBtX3ByZVNoaWZ0WCgwKQotICAgICAgICAsIG1fcHJlU2hpZnRZKDApCi0gICAgICAgICwg
bV9wb3N0U2hpZnRYKDApCi0gICAgICAgICwgbV9wb3N0U2hpZnRZKDApCi0gICAgewotICAgIH0K
LSAgICBSb3RhdGlvblRyYW5zZm9ybSBvcGVyYXRvci0oKSBjb25zdAotICAgIHsKLSAgICAgICAg
Um90YXRpb25UcmFuc2Zvcm0gcnRuOwotICAgICAgICBydG4ubV9jb3NBID0gbV9jb3NBOwotICAg
ICAgICBydG4ubV9zaW5BID0gLW1fc2luQTsKLSAgICAgICAgcnRuLm1fcHJlU2hpZnRYID0gbV9w
b3N0U2hpZnRYOwotICAgICAgICBydG4ubV9wcmVTaGlmdFkgPSBtX3Bvc3RTaGlmdFk7Ci0gICAg
ICAgIHJ0bi5tX3Bvc3RTaGlmdFggPSBtX3ByZVNoaWZ0WDsKLSAgICAgICAgcnRuLm1fcG9zdFNo
aWZ0WSA9IG1fcHJlU2hpZnRZOwotICAgICAgICByZXR1cm4gcnRuOwotICAgIH0KLSAgICB2b2lk
IG1hcChkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHgxICs9IG1fcHJlU2hpZnRYOwotICAgICAgICB5MSArPSBtX3ByZVNo
aWZ0WTsKLSAgICAgICAgKngyID0geDEgKiBtX2Nvc0EgKyB5MSAqIG1fc2luQSArIG1fcG9zdFNo
aWZ0WDsKLSAgICAgICAgKnkyID0geTEgKiBtX2Nvc0EgLSB4MSAqIG1fc2luQSArIG1fcG9zdFNo
aWZ0WTsKLSAgICB9Ci0gICAgdm9pZCBtYXAoaW50IHgxLCBpbnQgeTEsIGludCogeDIsIGludCog
eTIpIGNvbnN0Ci0gICAgewotICAgICAgICB4MSArPSBtX3ByZVNoaWZ0WDsKLSAgICAgICAgeTEg
Kz0gbV9wcmVTaGlmdFk7Ci0gICAgICAgICp4MiA9IHN0YWJsZVJvdW5kKHgxICogbV9jb3NBICsg
eTEgKiBtX3NpbkEpICsgbV9wb3N0U2hpZnRYOwotICAgICAgICAqeTIgPSBzdGFibGVSb3VuZCh5
MSAqIG1fY29zQSAtIHgxICogbV9zaW5BKSArIG1fcG9zdFNoaWZ0WTsKLSAgICB9Ci0KLSAgICBk
b3VibGUgbV9jb3NBOwotICAgIGRvdWJsZSBtX3NpbkE7Ci0gICAgaW50IG1fcHJlU2hpZnRYOwot
ICAgIGludCBtX3ByZVNoaWZ0WTsKLSAgICBpbnQgbV9wb3N0U2hpZnRYOwotICAgIGludCBtX3Bv
c3RTaGlmdFk7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5saW5lIEludFBvaW50
IG1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwLCBjb25zdCBUJiB0KQotewotICAgIGludCB4LCB5
OwotICAgIHQubWFwKHAueCgpLCBwLnkoKSwgJngsICZ5KTsKLSAgICByZXR1cm4gSW50UG9pbnQo
eCwgeSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBt
YXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBUJiB0KQotewotICAgIGRvdWJsZSB4
LCB5OwotICAgIHQubWFwKHAueCgpLCBwLnkoKSwgJngsICZ5KTsKLSAgICByZXR1cm4gRmxvYXRQ
b2ludChzdGF0aWNfY2FzdDxmbG9hdD4oeCksIHN0YXRpY19jYXN0PGZsb2F0Pih5KSk7Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIFRyYW5zZm9ybSwgY2xhc3MgUmVjdCwgY2xhc3MgVmFsdWU+IHN0YXRp
YyBpbmxpbmUgUmVjdCBtYXBSZWN0KGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIFZhbHVlIHhbNF0sIHlbNF07Ci0gICAgVmFsdWUgbCwgdCwgciwg
YjsKLSAgICByID0gcmVjdC5tYXhYKCkgLSAxOwotICAgIGIgPSByZWN0Lm1heFkoKSAtIDE7Ci0g
ICAgdHJhbnNmb3JtLm1hcChyZWN0LngoKSwgcmVjdC55KCksIHgsIHkpOwotICAgIHRyYW5zZm9y
bS5tYXAocmVjdC54KCksIGIsIHggKyAxLCB5ICsgMSk7Ci0gICAgdHJhbnNmb3JtLm1hcChyLCBi
LCB4ICsgMiwgeSArIDIpOwotICAgIHRyYW5zZm9ybS5tYXAociwgcmVjdC55KCksIHggKyAzLCB5
ICsgMyk7Ci0gICAgbCA9IHIgPSB4WzNdOwotICAgIHQgPSBiID0geVszXTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAoeFtpXSA8IGwpCi0gICAgICAgICAg
ICBsID0geFtpXTsKLSAgICAgICAgZWxzZSBpZiAoeFtpXSA+IHIpCi0gICAgICAgICAgICByID0g
eFtpXTsKLQotICAgICAgICBpZiAoeVtpXSA8IHQpCi0gICAgICAgICAgICB0ID0geVtpXTsKLSAg
ICAgICAgZWxzZSBpZiAoeVtpXSA+IGIpCi0gICAgICAgICAgICBiID0geVtpXTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gSW50UmVjdChsLCB0LCByIC0gbCArIDEsIGIgLSB0ICsgMSk7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IFQmIHRyYW5zZm9ybSkKLXsKLSAgICByZXR1cm4gbWFwUmVjdDxULCBJ
bnRSZWN0LCBpbnQ+KHJlY3QsIHRyYW5zZm9ybSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0
YXRpYyBpbmxpbmUgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBUJiB0cmFuc2Zvcm0pCi17Ci0gICAgcmV0dXJuIG1hcFJlY3Q8VCwgRmxvYXRSZWN0LCBkb3Vi
bGU+KHJlY3QsIHRyYW5zZm9ybSk7Ci19Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZURhdGEgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZURhdGEoKQotICAgICAgICA6IG1fdHJhbnNmb3JtKCkKLSAgICAgICAgLCBtX29wYWNpdHkoMS4w
KQotICAgIHsKLSAgICB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0gICAg
ZmxvYXQgbV9vcGFjaXR5OwotfTsKLQotZW51bSBBbHBoYVBhaW50VHlwZSB7Ci0gICAgQWxwaGFQ
YWludE5vbmUsCi0gICAgQWxwaGFQYWludEltYWdlLAotICAgIEFscGhhUGFpbnRPdGhlciwKLX07
Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoSERDIGRjKQotICAgICAgICA6IG1fZGMoZGMpCi0gICAgewotICAg
IH0KLSAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLSAgICB7Ci0gICAgICAg
IHdoaWxlICghbV9iYWNrdXBEYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3RvcmUoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIHsKLSAg
ICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHgsIHkpOwotICAgIH0KLQotICAgIHZvaWQgc2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgIHsKLSAgICAgICAgbV90cmFuc2Zvcm0uc2Nh
bGVOb25Vbmlmb3JtKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCByb3RhdGUoZmxvYXQgcmFkaWFucykKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNmb3JtLnJv
dGF0ZShyYWQyZGVnKHJhZGlhbnMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNmb3Jt
ICo9IHRyYW5zZm9ybTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNmb3JtID0gdHJhbnNmb3Jt
OwotICAgIH0KLQotICAgIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Ci0gICAg
fQotCi0gICAgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Ci0gICAgfQot
Ci0gICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKLSAgICB9Ci0K
LSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKLSAgICB9
Ci0KLSAgICBGbG9hdFNpemUgbWFwU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Ci0g
ICAgewotICAgICAgICBkb3VibGUgdywgaDsKLSAgICAgICAgbV90cmFuc2Zvcm0ubWFwKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdywgaCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHcpLCBzdGF0aWNfY2FzdDxmbG9hdD4oaCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBpZiAobV9kYykKLSAgICAgICAgICAgIFNh
dmVEQyhtX2RjKTsKLQotICAgICAgICBtX2JhY2t1cERhdGEuYXBwZW5kKCpzdGF0aWNfY2FzdDxH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhKj4odGhpcykpOwotICAgIH0KLQotICAg
IHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBpZiAobV9iYWNrdXBEYXRhLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9kYykKLSAgICAgICAgICAg
IFJlc3RvcmVEQyhtX2RjLCAtMSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlRGF0YTo6b3BlcmF0b3I9KG1fYmFja3VwRGF0YS5sYXN0KCkpOwotICAgICAgICBtX2Jh
Y2t1cERhdGEucmVtb3ZlTGFzdCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25z
dCB7IHJldHVybiBtX2JpdG1hcCAmJiBtX2JpdG1hcC0+aGFzQWxwaGEoKTsgfQotCi0gICAgUGFz
c1JlZlB0cjxTaGFyZWRCaXRtYXA+IGdldFRyYW5zcGFyZW50TGF5ZXJCaXRtYXAoSW50UmVjdCYg
b3JpZ1JlY3QsIEFscGhhUGFpbnRUeXBlIGFscGhhUGFpbnQsIFJFQ1QmIGJtcFJlY3QsIGJvb2wg
Y2hlY2tDbGlwQm94LCBib29sIGZvcmNlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fb3Bh
Y2l0eSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKGZvcmNlIHx8
IG1fb3BhY2l0eSA8IDEuKSAgewotICAgICAgICAgICAgaWYgKGNoZWNrQ2xpcEJveCkgewotICAg
ICAgICAgICAgICAgIFJFQ1QgY2xpcEJveDsKLSAgICAgICAgICAgICAgICBpbnQgY2xpcFR5cGUg
PSBHZXRDbGlwQm94KG1fZGMsICZjbGlwQm94KTsKLSAgICAgICAgICAgICAgICBpZiAoY2xpcFR5
cGUgPT0gU0lNUExFUkVHSU9OIHx8IGNsaXBUeXBlID09IENPTVBMRVhSRUdJT04pCi0gICAgICAg
ICAgICAgICAgICAgIG9yaWdSZWN0LmludGVyc2VjdChjbGlwQm94KTsKLSAgICAgICAgICAgICAg
ICBpZiAob3JpZ1JlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0g
U2hhcmVkQml0bWFwOjpjcmVhdGUob3JpZ1JlY3Quc2l6ZSgpLCBhbHBoYVBhaW50ID09IEFscGhh
UGFpbnROb25lID8gQml0bWFwSW5mbzo6Qml0Q291bnQxNiA6IEJpdG1hcEluZm86OkJpdENvdW50
MzIsIGZhbHNlKTsKLSAgICAgICAgICAgIFNldFJlY3QoJmJtcFJlY3QsIDAsIDAsIG9yaWdSZWN0
LndpZHRoKCksIG9yaWdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChibXApIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGFscGhhUGFpbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEFscGhhUGFpbnROb25lOgotICAgICAgICAgICAgICAgIGNhc2UgQWxwaGFQYWludEltYWdlOgot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWRCaXRt
YXA6OkRDSG9sZGVyIGRjKGJtcC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZGMuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCbHQoZGMuZ2V0KCks
IDAsIDAsIG9yaWdSZWN0LndpZHRoKCksIG9yaWdSZWN0LmhlaWdodCgpLCBtX2RjLCBvcmlnUmVj
dC54KCksIG9yaWdSZWN0LnkoKSwgU1JDQ09QWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJtcC0+aXMzMmJpdCgpICYmICghbV9iaXRtYXAgfHwgbV9iaXRtYXAtPmlzMTZiaXQo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFscGhhIGNoYW5u
ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVscyA9ICh1
bnNpZ25lZCopYm1wLT5ieXRlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCogY29uc3QgcGl4ZWxzRW5kID0gcGl4ZWxzICsgYm1wLT5iaXRtYXBJbmZv
KCkubnVtUGl4ZWxzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChw
aXhlbHMgPCBwaXhlbHNFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpwaXhlbHMgfD0gMHhGRjAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICsrcGl4ZWxzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBibXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy9jYXNlIEFscGhh
UGFpbnRPdGhlcjoKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBtZW1zZXQoYm1wLT5ieXRlcygpLCAweEZGLCBibXAtPmJpdG1hcEluZm8oKS5udW1QaXhlbHMo
KSAqIDQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm1wOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBibXBSZWN0ID0gb3JpZ1JlY3Q7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHZvaWQgcGFpbnRCYWNrVHJhbnNwYXJlbnRMYXllckJpdG1hcChIREMgaGRjLCBTaGFy
ZWRCaXRtYXAqIGJtcCwgY29uc3QgSW50UmVjdCYgb3JpZ1JlY3QsIEFscGhhUGFpbnRUeXBlIGFs
cGhhUGFpbnQsIGNvbnN0IFJFQ1QmIGJtcFJlY3QpCi0gICAgewotICAgICAgICBpZiAoaGRjID09
IG1fZGMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGFscGhhUGFpbnQgPT0g
QWxwaGFQYWludE90aGVyICYmIGhhc0FscGhhQmxlbmRTdXBwb3J0KCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChibXAgJiYgYm1wLT5ieXRlcygpICYmIGJtcC0+aXMzMmJpdCgpKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbHMgPSAodW5zaWduZWQqKWJtcC0+Ynl0ZXMoKTsKLSAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkKiBjb25zdCBwaXhlbHNFbmQgPSBwaXhlbHMgKyBibXAtPmJpdG1h
cEluZm8oKS5udW1QaXhlbHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChwaXhlbHMgPCBwaXhlbHNF
bmQpIHsKLSAgICAgICAgICAgICAgICAqcGl4ZWxzIF49IDB4RkYwMDAwMDA7Ci0gICAgICAgICAg
ICAgICAgKytwaXhlbHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCht
X29wYWNpdHkgPCAxLiB8fCBhbHBoYVBhaW50ID09IEFscGhhUGFpbnRPdGhlcikgJiYgaGFzQWxw
aGFCbGVuZFN1cHBvcnQoKSkgewotICAgICAgICAgICAgY29uc3QgQkxFTkRGVU5DVElPTiBibGVu
ZCA9IHsgQUNfU1JDX09WRVIsIDAKLSAgICAgICAgICAgICAgICAsIG1fb3BhY2l0eSA+PSAxLiA/
IDI1NSA6IChCWVRFKShtX29wYWNpdHkgKiAyNTUpCi0gICAgICAgICAgICAgICAgLCBhbHBoYVBh
aW50ID09IEFscGhhUGFpbnROb25lID8gMCA6IEFDX1NSQ19BTFBIQSB9OwotICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gYWxwaGFCbGVuZElmU3VwcG9ydGVkKG1fZGMsIG9yaWdSZWN0LngoKSwg
b3JpZ1JlY3QueSgpLCBvcmlnUmVjdC53aWR0aCgpLCBvcmlnUmVjdC5oZWlnaHQoKSwgaGRjLCAw
LCAwLCBibXBSZWN0LnJpZ2h0LCBibXBSZWN0LmJvdHRvbSwgYmxlbmQpOwotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBTdHJldGNoQmx0KG1fZGMsIG9yaWdSZWN0LngoKSwgb3JpZ1JlY3QueSgpLCBvcmlnUmVj
dC53aWR0aCgpLCBvcmlnUmVjdC5oZWlnaHQoKSwgaGRjLCAwLCAwLCBibXBSZWN0LnJpZ2h0LCBi
bXBSZWN0LmJvdHRvbSwgU1JDQ09QWSk7Ci0gICAgfQotCi0gICAgSERDIG1fZGM7Ci0gICAgUmVm
UHRyPFNoYXJlZEJpdG1hcD4gbV9iaXRtYXA7Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURhdGE+IG1fYmFja3VwRGF0YTsKLX07Ci0KLXN0YXRpYyBHRElPYmplY3Q8
SFBFTj4gY3JlYXRlUGVuKGNvbnN0IENvbG9yJiBjb2wsIGRvdWJsZSBmV2lkdGgsIFN0cm9rZVN0
eWxlIHN0eWxlKQotewotICAgIGludCB3aWR0aCA9IHN0YWJsZVJvdW5kKGZXaWR0aCk7Ci0gICAg
aWYgKHdpZHRoIDwgMSkKLSAgICAgICAgd2lkdGggPSAxOwotCi0gICAgaW50IHBlblN0eWxlID0g
UFNfTlVMTDsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgICAgIGNhc2UgU29saWRTdHJva2U6
Ci0gICAgICAgIGNhc2UgRG91YmxlU3Ryb2tlOgotICAgICAgICBjYXNlIFdhdnlTdHJva2U6IC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMTQgLSBO
ZWVkcyBwbGF0Zm9ybSBzdXBwb3J0LgotICAgICAgICAgICAgcGVuU3R5bGUgPSBQU19TT0xJRDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvdHRlZFN0cm9rZTogIC8vIG5vdCBz
dXBwb3J0ZWQgb24gV2luZG93cyBDRQotICAgICAgICBjYXNlIERhc2hlZFN0cm9rZToKLSAgICAg
ICAgICAgIHBlblN0eWxlID0gUFNfREFTSDsKLSAgICAgICAgICAgIHdpZHRoID0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUGVuKHBlblN0eWxlLCB3aWR0
aCwgUkdCKGNvbC5yZWQoKSwgY29sLmdyZWVuKCksIGNvbC5ibHVlKCkpKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgR0RJT2JqZWN0PEhCUlVTSD4gY3JlYXRlQnJ1c2goY29uc3QgQ29sb3ImIGNvbCkK
LXsKLSAgICByZXR1cm4gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVTb2xpZEJydXNoKFJHQihjb2wu
cmVkKCksIGNvbC5ncmVlbigpLCBjb2wuYmx1ZSgpKSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgUGl4ZWxUeXBlLCBib29sIElzMTZiaXQ+IHN0YXRpYyB2b2lkIF9yb3RhdGVCaXRtYXAoU2hh
cmVkQml0bWFwKiBkZXN0Qm1wLCBjb25zdCBTaGFyZWRCaXRtYXAqIHNvdXJjZUJtcCwgY29uc3Qg
Um90YXRpb25UcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpbnQgZGVzdFcgPSBkZXN0Qm1w
LT53aWR0aCgpOwotICAgIGludCBkZXN0SCA9IGRlc3RCbXAtPmhlaWdodCgpOwotICAgIGludCBz
b3VyY2VXID0gc291cmNlQm1wLT53aWR0aCgpOwotICAgIGludCBzb3VyY2VIID0gc291cmNlQm1w
LT5oZWlnaHQoKTsKLSAgICBQaXhlbFR5cGUqIGRlc3QgPSAoUGl4ZWxUeXBlKilkZXN0Qm1wLT5i
eXRlcygpOwotICAgIGNvbnN0IFBpeGVsVHlwZSogc291cmNlID0gKGNvbnN0IFBpeGVsVHlwZSop
c291cmNlQm1wLT5ieXRlcygpOwotICAgIGludCBwYWRkaW5nOwotICAgIGludCBwYWRkZWRTb3Vy
Y2VXOwotICAgIGlmIChJczE2Yml0KSB7Ci0gICAgICAgIHBhZGRpbmcgPSBkZXN0VyAmIDE7Ci0g
ICAgICAgIHBhZGRlZFNvdXJjZVcgPSBzb3VyY2VXICsgKHNvdXJjZVcgJiAxKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBwYWRkaW5nID0gMDsKLSAgICAgICAgcGFkZGVkU291cmNlVyA9IHNvdXJj
ZVc7Ci0gICAgfQotICAgIGlmIChpc1plcm8odHJhbnNmb3JtLm1fc2luQSkpIHsKLSAgICAgICAg
aW50IGNvc0EgPSB0cmFuc2Zvcm0ubV9jb3NBID4gMCA/IDEgOiAtMTsKLSAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBkZXN0SDsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGRlc3RXOyArK3gpIHsKLSAgICAgICAgICAgICAgICBpbnQgeDEgPSB4ICsgdHJhbnNmb3Jt
Lm1fcHJlU2hpZnRYOwotICAgICAgICAgICAgICAgIGludCB5MSA9IHkgKyB0cmFuc2Zvcm0ubV9w
cmVTaGlmdFk7Ci0gICAgICAgICAgICAgICAgaW50IHNyY1ggPSB4MSAqIGNvc0EgKyB0cmFuc2Zv
cm0ubV9wb3N0U2hpZnRYOwotICAgICAgICAgICAgICAgIGludCBzcmNZID0geTEgKiBjb3NBIC0g
dHJhbnNmb3JtLm1fcG9zdFNoaWZ0WTsKLSAgICAgICAgICAgICAgICBpZiAoc3JjWCA+PSAwICYm
IHNyY1ggPD0gc291cmNlVyAmJiBzcmNZID49IDAgJiYgc3JjWSA8PSBzb3VyY2VIKQotICAgICAg
ICAgICAgICAgICAgICAqZGVzdCsrID0gc291cmNlW3NyY1kgKiBwYWRkZWRTb3VyY2VXICsgc3Jj
WF0gfCAweEZGMDAwMDAwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgKmRlc3QrKyB8PSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdCArPSBw
YWRkaW5nOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpc1plcm8odHJhbnNmb3JtLm1fY29z
QSkpIHsKLSAgICAgICAgaW50IHNpbkEgPSB0cmFuc2Zvcm0ubV9zaW5BID4gMCA/IDEgOiAtMTsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBkZXN0SDsgKyt5KSB7Ci0gICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGRlc3RXOyArK3gpIHsKLSAgICAgICAgICAgICAgICBpbnQgeDEg
PSB4ICsgdHJhbnNmb3JtLm1fcHJlU2hpZnRYOwotICAgICAgICAgICAgICAgIGludCB5MSA9IHkg
KyB0cmFuc2Zvcm0ubV9wcmVTaGlmdFk7Ci0gICAgICAgICAgICAgICAgaW50IHNyY1ggPSB5MSAq
IHNpbkEgKyB0cmFuc2Zvcm0ubV9wb3N0U2hpZnRYOwotICAgICAgICAgICAgICAgIGludCBzcmNZ
ID0gLXgxICogc2luQSArIHRyYW5zZm9ybS5tX3Bvc3RTaGlmdFk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNyY1ggPj0gMCAmJiBzcmNYIDw9IHNvdXJjZVcgJiYgc3JjWSA+PSAwICYmIHNyY1kgPD0g
c291cmNlSCkKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IHNvdXJjZVtzcmNZICogcGFk
ZGVkU291cmNlVyArIHNyY1hdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdCArPSBw
YWRkaW5nOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBkZXN0SDsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGRlc3RX
OyArK3gpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIGJlc3QgcXVhbGl0eSwgd2Ug
c2hvdWxkIGdldCB3ZWlnaHRlZCBzdW0gb2YgZm91ciBuZWlnaGJvdXJzLAotICAgICAgICAgICAg
ICAgIC8vIGJ1dCB0aGF0IHdpbGwgYmUgdG9vIGV4cGVuc2l2ZQotICAgICAgICAgICAgICAgIGlu
dCBzcmNYLCBzcmNZOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tYXAoeCwgeSwgJnNyY1gs
ICZzcmNZKTsKLSAgICAgICAgICAgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1ggPD0gc291cmNl
VyAmJiBzcmNZID49IDAgJiYgc3JjWSA8PSBzb3VyY2VIKQotICAgICAgICAgICAgICAgICAgICAq
ZGVzdCsrID0gc291cmNlW3NyY1kgKiBwYWRkZWRTb3VyY2VXICsgc3JjWF07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBkZXN0ICs9IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIHJvdGF0ZUJpdG1hcChTaGFyZWRCaXRtYXAqIGRlc3RCbXAsIGNvbnN0IFNo
YXJlZEJpdG1hcCogc291cmNlQm1wLCBjb25zdCBSb3RhdGlvblRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIEFTU0VSVChkZXN0Qm1wLT5pczE2Yml0KCkgPT0gc291cmNlQm1wLT5pczE2Yml0
KCkpOwotICAgIGlmIChkZXN0Qm1wLT5pczE2Yml0KCkpCi0gICAgICAgIF9yb3RhdGVCaXRtYXA8
dW5zaWduZWQgc2hvcnQsIHRydWU+KGRlc3RCbXAsIHNvdXJjZUJtcCwgdHJhbnNmb3JtKTsKLSAg
ICBlbHNlCi0gICAgICAgIF9yb3RhdGVCaXRtYXA8dW5zaWduZWQsIGZhbHNlPihkZXN0Qm1wLCBz
b3VyY2VCbXAsIHRyYW5zZm9ybSk7Ci19Ci0KLWNsYXNzIFRyYW5zcGFyZW50TGF5ZXJEQyB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhbnNwYXJlbnRMYXllckRDKTsKLXB1YmxpYzoKLSAg
ICBUcmFuc3BhcmVudExheWVyREMoR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkYXRh
LCBJbnRSZWN0JiBvcmlnUmVjdCwgY29uc3QgSW50UmVjdCogcmVjdEJlZm9yZVRyYW5zZm9ybSA9
IDAsIGludCBhbHBoYSA9IDI1NSwgYm9vbCBwYWludEltYWdlID0gZmFsc2UpOwotICAgIH5UcmFu
c3BhcmVudExheWVyREMoKTsKLQotICAgIEhEQyBoZGMoKSBjb25zdCB7IHJldHVybiBtX21lbURj
OyB9Ci0gICAgY29uc3QgUkVDVCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm1wUmVjdDsgfQot
ICAgIEludFNpemUgdG9TaGlmdCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9ibXBSZWN0Lmxl
ZnQgLSBtX29yaWdSZWN0LngoKSwgbV9ibXBSZWN0LnRvcCAtIG1fb3JpZ1JlY3QueSgpKTsgfQot
ICAgIHZvaWQgZmlsbEFscGhhQ2hhbm5lbCgpOwotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOwotICAgIEludFJlY3QgbV9vcmlnUmVjdDsKLSAg
ICBJbnRSZWN0IG1fcm90YXRlZE9yaWdSZWN0OwotICAgIEhEQyBtX21lbURjOwotICAgIFJlZlB0
cjxTaGFyZWRCaXRtYXA+IG1fYml0bWFwOwotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IG1fcm90
YXRlZEJpdG1hcDsKLSAgICBSRUNUIG1fYm1wUmVjdDsKLSAgICB1bnNpZ25lZCBtX2tleTsKLSAg
ICBSb3RhdGlvblRyYW5zZm9ybSBtX3JvdGF0aW9uOwotICAgIGZsb2F0IG1fb2xkT3BhY2l0eTsK
LSAgICBBbHBoYVBhaW50VHlwZSBtX2FscGhhUGFpbnRUeXBlOwotfTsKLQotVHJhbnNwYXJlbnRM
YXllckRDOjpUcmFuc3BhcmVudExheWVyREMoR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkYXRhLCBJbnRSZWN0JiBvcmlnUmVjdCwgY29uc3QgSW50UmVjdCogcmVjdEJlZm9yZVRyYW5z
Zm9ybSwgaW50IGFscGhhLCBib29sIHBhaW50SW1hZ2UpCi06IG1fZGF0YShkYXRhKQotLCBtX29y
aWdSZWN0KG9yaWdSZWN0KQotLCBtX29sZE9wYWNpdHkoZGF0YS0+bV9vcGFjaXR5KQotLy8gbV9r
ZXkxIGFuZCBtX2tleTIgYXJlIG5vdCBpbml0YWxpemVkIGhlcmUuIFRoZXkgYXJlIHVzZWQgb25s
eSBpbiB0aGUgY2FzZSB0aGF0Ci0vLyBTaGFyZWRCaXRtYXA6OmdldERDKCkgaXMgY2FsbGVkLCBJ
LkUuLCB3aGVuIG1fYml0bWFwIGlzIG5vdCBudWxsLgotewotICAgIG1fZGF0YS0+bV9vcGFjaXR5
ICo9IGFscGhhIC8gMjU1LjsKLSAgICBib29sIG11c3RDcmVhdGVMYXllcjsKLSAgICBpZiAoIW1f
ZGF0YS0+aGFzQWxwaGEoKSkgewotICAgICAgICBtdXN0Q3JlYXRlTGF5ZXIgPSBmYWxzZTsKLSAg
ICAgICAgbV9hbHBoYVBhaW50VHlwZSA9IEFscGhhUGFpbnROb25lOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG11c3RDcmVhdGVMYXllciA9IHRydWU7Ci0gICAgICAgIG1fYWxwaGFQYWludFR5cGUg
PSBwYWludEltYWdlID8gQWxwaGFQYWludEltYWdlIDogQWxwaGFQYWludE90aGVyOwotICAgIH0K
LSAgICBpZiAocmVjdEJlZm9yZVRyYW5zZm9ybSAmJiAhaXNaZXJvKG1fZGF0YS0+bV90cmFuc2Zv
cm0uYigpKSkgewotICAgICAgICBtX3JvdGF0ZWRPcmlnUmVjdCA9IG9yaWdSZWN0OwotICAgICAg
ICBtX3JvdGF0ZWRCaXRtYXAgPSBtX2RhdGEtPmdldFRyYW5zcGFyZW50TGF5ZXJCaXRtYXAobV9y
b3RhdGVkT3JpZ1JlY3QsIG1fYWxwaGFQYWludFR5cGUsIG1fYm1wUmVjdCwgZmFsc2UsIHRydWUp
OwotICAgICAgICBpZiAobV9yb3RhdGVkQml0bWFwKSB7Ci0gICAgICAgICAgICBkb3VibGUgYSA9
IG1fZGF0YS0+bV90cmFuc2Zvcm0uYSgpOwotICAgICAgICAgICAgZG91YmxlIGIgPSBtX2RhdGEt
Pm1fdHJhbnNmb3JtLmIoKTsKLSAgICAgICAgICAgIGRvdWJsZSBjID0gX2h5cG90KGEsIGIpOwot
ICAgICAgICAgICAgbV9yb3RhdGlvbi5tX2Nvc0EgPSBhIC8gYzsKLSAgICAgICAgICAgIG1fcm90
YXRpb24ubV9zaW5BID0gYiAvIGM7Ci0KLSAgICAgICAgICAgIGludCBjZW50ZXJYID0gb3JpZ1Jl
Y3QueCgpICsgb3JpZ1JlY3Qud2lkdGgoKSAvIDI7Ci0gICAgICAgICAgICBpbnQgY2VudGVyWSA9
IG9yaWdSZWN0LnkoKSArIG9yaWdSZWN0LmhlaWdodCgpIC8gMjsKLSAgICAgICAgICAgIG1fcm90
YXRpb24ubV9wcmVTaGlmdFggPSAtY2VudGVyWDsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9w
cmVTaGlmdFkgPSAtY2VudGVyWTsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRY
ID0gY2VudGVyWDsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRZID0gY2VudGVy
WTsKLQotICAgICAgICAgICAgbV9vcmlnUmVjdCA9IG1hcFJlY3QobV9yb3RhdGVkT3JpZ1JlY3Qs
IG1fcm90YXRpb24pOwotCi0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcHJlU2hpZnRYICs9IG1f
cm90YXRlZE9yaWdSZWN0LngoKTsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wcmVTaGlmdFkg
Kz0gbV9yb3RhdGVkT3JpZ1JlY3QueSgpOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RT
aGlmdFggLT0gbV9vcmlnUmVjdC54KCk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNo
aWZ0WSAtPSBtX29yaWdSZWN0LnkoKTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BMZWZ0
ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50KHJlY3RCZWZvcmVUcmFu
c2Zvcm0tPmxvY2F0aW9uKCkpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVj
dEJlZm9yZVRyYW5zZm9ybS0+bWF4WCgpIC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+eSgpKTsK
LSAgICAgICAgICAgIHRvcFJpZ2h0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludCh0b3BS
aWdodCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQocmVjdEJlZm9yZVRyYW5z
Zm9ybS0+eCgpLCByZWN0QmVmb3JlVHJhbnNmb3JtLT5tYXhZKCkgLSAxKTsKLSAgICAgICAgICAg
IGJvdHRvbUxlZnQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KGJvdHRvbUxlZnQpOwot
ICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVUb3AgPSB0b3BSaWdodCAtIHRvcExlZnQ7Ci0gICAg
ICAgICAgICBGbG9hdFNpemUgc2lkZUxlZnQgPSBib3R0b21MZWZ0IC0gdG9wTGVmdDsKLSAgICAg
ICAgICAgIGZsb2F0IHdpZHRoID0gX2h5cG90KHNpZGVUb3Aud2lkdGgoKSArIDEsIHNpZGVUb3Au
aGVpZ2h0KCkgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGhlaWdodCA9IF9oeXBvdChzaWRlTGVm
dC53aWR0aCgpICsgMSwgc2lkZUxlZnQuaGVpZ2h0KCkgKyAxKTsKLQotICAgICAgICAgICAgb3Jp
Z1JlY3QuaW5mbGF0ZVgoc3RhYmxlUm91bmQoKHdpZHRoIC0gb3JpZ1JlY3Qud2lkdGgoKSkgKiAw
LjUpKTsKLSAgICAgICAgICAgIG9yaWdSZWN0LmluZmxhdGVZKHN0YWJsZVJvdW5kKChoZWlnaHQg
LSBvcmlnUmVjdC5oZWlnaHQoKSkgKiAwLjUpKTsKLQotICAgICAgICAgICAgbV9iaXRtYXAgPSBT
aGFyZWRCaXRtYXA6OmNyZWF0ZShtX29yaWdSZWN0LnNpemUoKSwgbV9yb3RhdGVkQml0bWFwLT5p
czE2Yml0KCkgPyBCaXRtYXBJbmZvOjpCaXRDb3VudDE2IDogQml0bWFwSW5mbzo6Qml0Q291bnQz
MiwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAobV9iaXRtYXApCi0gICAgICAgICAgICAgICAgcm90
YXRlQml0bWFwKG1fYml0bWFwLmdldCgpLCBtX3JvdGF0ZWRCaXRtYXAuZ2V0KCksIC1tX3JvdGF0
aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3JvdGF0ZWRCaXRtYXAg
PSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fYml0bWFwID0gbV9kYXRhLT5n
ZXRUcmFuc3BhcmVudExheWVyQml0bWFwKG1fb3JpZ1JlY3QsIG1fYWxwaGFQYWludFR5cGUsIG1f
Ym1wUmVjdCwgdHJ1ZSwgbXVzdENyZWF0ZUxheWVyKTsKLSAgICBpZiAobV9iaXRtYXApCi0gICAg
ICAgIG1fbWVtRGMgPSBtX2JpdG1hcC0+Z2V0REMoJm1fa2V5KTsKLSAgICBlbHNlCi0gICAgICAg
IG1fbWVtRGMgPSBtX2RhdGEtPm1fZGM7Ci19Ci0KLVRyYW5zcGFyZW50TGF5ZXJEQzo6flRyYW5z
cGFyZW50TGF5ZXJEQygpCi17Ci0gICAgaWYgKG1fcm90YXRlZEJpdG1hcCkgewotICAgICAgICBt
X2JpdG1hcC0+cmVsZWFzZURDKG1fbWVtRGMsIG1fa2V5KTsKLSAgICAgICAgbV9rZXkgPSAwOwot
ICAgICAgICByb3RhdGVCaXRtYXAobV9yb3RhdGVkQml0bWFwLmdldCgpLCBtX2JpdG1hcC5nZXQo
KSwgbV9yb3RhdGlvbik7Ci0gICAgICAgIG1fbWVtRGMgPSBtX3JvdGF0ZWRCaXRtYXAtPmdldERD
KCZtX2tleSk7Ci0gICAgICAgIG1fZGF0YS0+cGFpbnRCYWNrVHJhbnNwYXJlbnRMYXllckJpdG1h
cChtX21lbURjLCBtX3JvdGF0ZWRCaXRtYXAuZ2V0KCksIG1fcm90YXRlZE9yaWdSZWN0LCBtX2Fs
cGhhUGFpbnRUeXBlLCBtX2JtcFJlY3QpOwotICAgICAgICBtX3JvdGF0ZWRCaXRtYXAtPnJlbGVh
c2VEQyhtX21lbURjLCBtX2tleSk7Ci0gICAgfSBlbHNlIGlmIChtX2JpdG1hcCkgewotICAgICAg
ICBtX2RhdGEtPnBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAobV9tZW1EYywgbV9iaXRt
YXAuZ2V0KCksIG1fb3JpZ1JlY3QsIG1fYWxwaGFQYWludFR5cGUsIG1fYm1wUmVjdCk7Ci0gICAg
ICAgIG1fYml0bWFwLT5yZWxlYXNlREMobV9tZW1EYywgbV9rZXkpOwotICAgIH0KLSAgICBtX2Rh
dGEtPm1fb3BhY2l0eSA9IG1fb2xkT3BhY2l0eTsKLX0KLQotdm9pZCBUcmFuc3BhcmVudExheWVy
REM6OmZpbGxBbHBoYUNoYW5uZWwoKQotewotICAgIGlmICghbV9iaXRtYXAgfHwgIW1fYml0bWFw
LT5pczMyYml0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkKiBwaXhlbHMgPSAo
dW5zaWduZWQqKW1fYml0bWFwLT5ieXRlcygpOwotICAgIGNvbnN0IHVuc2lnbmVkKiBjb25zdCBw
aXhlbHNFbmQgPSBwaXhlbHMgKyBtX2JpdG1hcC0+Yml0bWFwSW5mbygpLm51bVBpeGVscygpOwot
ICAgIHdoaWxlIChwaXhlbHMgPCBwaXhlbHNFbmQpIHsKLSAgICAgICAgKnBpeGVscyB8PSAweEZG
MDAwMDAwOwotICAgICAgICArK3BpeGVsczsKLSAgICB9Ci19Ci0KLWNsYXNzIFNjb3BlRENQcm92
aWRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVEQ1Byb3ZpZGVyKTsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBTY29wZURDUHJvdmlkZXIoR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBkYXRhKQotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgIHsKLSAgICAgICAgaWYg
KG1fZGF0YS0+bV9iaXRtYXApCi0gICAgICAgICAgICBtX2RhdGEtPm1fZGMgPSBtX2RhdGEtPm1f
Yml0bWFwLT5nZXREQygmbV9rZXkpOwotICAgIH0KLSAgICB+U2NvcGVEQ1Byb3ZpZGVyKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2RhdGEtPm1fYml0bWFwKSB7Ci0gICAgICAgICAgICBtX2RhdGEt
Pm1fYml0bWFwLT5yZWxlYXNlREMobV9kYXRhLT5tX2RjLCBtX2tleSk7Ci0gICAgICAgICAgICBt
X2RhdGEtPm1fZGMgPSAwOwotICAgICAgICB9Ci0gICAgfQotcHJpdmF0ZToKLSAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YTsKLSAgICB1bnNpZ25lZCBtX2tleTsKLX07
Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogZGMsIGJvb2wpCi17Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShkYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURl
c3Ryb3koKQotewotICAgIGRlbGV0ZSBtX2RhdGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRCaXRtYXAoUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCkKLXsKLSAgICBBU1NFUlQo
IW1fZGF0YS0+bV9kYyk7Ci0gICAgbV9kYXRhLT5tX2JpdG1hcCA9IGJtcDsKLX0KLQotSERDIEdy
YXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwg
Ym9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9vbCBtYXlDcmVhdGVCaXRtYXApCi17Ci0gICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBBbHBoYUJsZW5kLgotICAgIEFTU0VSVCghc3VwcG9ydEFs
cGhhQmxlbmQpOwotICAgIHJldHVybiBtX2RhdGEtPm1fZGM7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0
UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9vbCBtYXlDcmVhdGVCaXRtYXApCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCi17Ci0gICAgbV9k
YXRhLT5zYXZlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0KQotewotICAgIGlmICgh
bV9kYXRhLT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IHJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2Rh
dGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRS
ZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVy
REMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJnJlY3QpOwotICAgIEhEQyBkYyA9IHRy
YW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRy
UmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIEdESU9iamVjdDxIQlJV
U0g+IGJydXNoOwotICAgIEhHRElPQkogb2xkQnJ1c2g7Ci0gICAgaWYgKGZpbGxDb2xvcigpLmFs
cGhhKCkpIHsKLSAgICAgICAgYnJ1c2ggPSBjcmVhdGVCcnVzaChmaWxsQ29sb3IoKSk7Ci0gICAg
ICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBicnVzaC5nZXQoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxM
X0JSVVNIKSk7Ci0KLSAgICBHRElPYmplY3Q8SFBFTj4gcGVuOwotICAgIEhHRElPQkogb2xkUGVu
OwotICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7Ci0gICAgICAgIHBlbiA9IGNy
ZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGUoKSk7
Ci0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxM
X1BFTikpOwotCi0gICAgaWYgKGJydXNoIHx8IHBlbikgewotICAgICAgICBpZiAodHJSZWN0Lndp
ZHRoKCkgPD0gMCkKLSAgICAgICAgICAgIHRyUmVjdC5zZXRXaWR0aCgxKTsKLSAgICAgICAgaWYg
KHRyUmVjdC5oZWlnaHQoKSA8PSAwKQotICAgICAgICAgICAgdHJSZWN0LnNldEhlaWdodCgxKTsK
LQotICAgICAgICBSZWN0YW5nbGUoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5t
YXhYKCksIHRyUmVjdC5tYXhZKCkpOwotICAgIH0KLQotICAgIFNlbGVjdE9iamVjdChkYywgb2xk
UGVuKTsKLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkgfHwgcGFpbnRpbmdE
aXNhYmxlZCgpIHx8IHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UgfHwgIXN0cm9rZUNvbG9yKCku
YWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlk
ZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UG9pbnQgdHJQb2ludDEgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50MSk7Ci0gICAgSW50
UG9pbnQgdHJQb2ludDIgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50Mik7Ci0KLSAgICBJbnRSZWN0
IGxpbmVSZWN0KHRyUG9pbnQxLCB0clBvaW50MiAtIHRyUG9pbnQxKTsKLSAgICBsaW5lUmVjdC5z
ZXRIZWlnaHQobGluZVJlY3QuaGVpZ2h0KCkgKyBzdHJva2VUaGlja25lc3MoKSk7Ci0gICAgVHJh
bnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBsaW5lUmVjdCwgMCwgc3Ryb2tl
Q29sb3IoKS5hbHBoYSgpKTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAg
IGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clBvaW50MSArPSB0cmFuc3BhcmVudERD
LnRvU2hpZnQoKTsKLSAgICB0clBvaW50MiArPSB0cmFuc3BhcmVudERDLnRvU2hpZnQoKTsKLQot
ICAgIGF1dG8gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygp
LCBzdHJva2VTdHlsZSgpKTsKLSAgICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywg
cGVuLmdldCgpKTsKLQotICAgIE1vdmVUb0V4KGRjLCB0clBvaW50MS54KCksIHRyUG9pbnQxLnko
KSwgMCk7Ci0gICAgTGluZVRvKGRjLCB0clBvaW50Mi54KCksIHRyUG9pbnQyLnkoKSk7Ci0KLSAg
ICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9kYXRhLT5tX29w
YWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8ICghZmlsbENvbG9yKCkuYWxwaGEoKSAmJiBz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVE
Q1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QocmVj
dCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3Qs
ICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMp
Ci0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQo
KSk7Ci0KLSAgICBHRElPYmplY3Q8SEJSVVNIPiBicnVzaDsKLSAgICBIR0RJT0JKIG9sZEJydXNo
OwotICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIGJydXNoID0gY3JlYXRl
QnJ1c2goZmlsbENvbG9yKCkpOwotICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywg
YnJ1c2guZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVj
dChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwotCi0gICAgR0RJT2JqZWN0PEhQRU4+
IHBlbjsKLSAgICBIR0RJT0JKIG9sZFBlbiA9IDA7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0g
Tm9TdHJva2UpIHsKLSAgICAgICAgcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9r
ZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0T2Jq
ZWN0KGRjLCBwZW4uZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBvbGRQZW4gPSBTZWxlY3RP
YmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0KLSAgICBpZiAoYnJ1c2ggfHwg
cGVuKQotICAgICAgICBFbGxpcHNlKGRjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3Qu
bWF4WCgpLCB0clJlY3QubWF4WSgpKTsKLQotICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsK
LSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGVxdWFsQW5nbGUoZG91YmxlIGEsIGRvdWJsZSBiKSAKLXsKLSAgICByZXR1cm4gZmFicyhhIC0g
YikgPCAxRS01OwotfQotCi12b2lkIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoZG91YmxlIGFuZ2xl
LCBkb3VibGUgYSwgZG91YmxlIGIsIGZsb2F0JiB4LCBmbG9hdCYgeSkKLXsKLSAgICB3aGlsZSAo
YW5nbGUgPCAwKQotICAgICAgICBhbmdsZSArPSAyICogcGlEb3VibGU7Ci0gICAgd2hpbGUgKGFu
Z2xlID49IDIgKiBwaURvdWJsZSkKLSAgICAgICAgYW5nbGUgLT0gMiAqIHBpRG91YmxlOwotCi0g
ICAgaWYgKGVxdWFsQW5nbGUoYW5nbGUsIDApIHx8IGVxdWFsQW5nbGUoYW5nbGUsIDIgKiBwaURv
dWJsZSkpIHsKLSAgICAgICAgeCA9IGE7Ci0gICAgICAgIHkgPSAwOwotICAgIH0gZWxzZSBpZiAo
ZXF1YWxBbmdsZShhbmdsZSwgcGlEb3VibGUpKSB7Ci0gICAgICAgIHggPSAtYTsKLSAgICAgICAg
eSA9IDA7Ci0gICAgfSBlbHNlIGlmIChlcXVhbEFuZ2xlKGFuZ2xlLCAuNSAqIHBpRG91YmxlKSkg
ewotICAgICAgICB4ID0gMDsKLSAgICAgICAgeSA9IGI7Ci0gICAgfSBlbHNlIGlmIChlcXVhbEFu
Z2xlKGFuZ2xlLCAxLjUgKiBwaURvdWJsZSkpIHsKLSAgICAgICAgeCA9IDA7Ci0gICAgICAgIHkg
PSAtYjsKLSAgICB9IGVsc2UgewotICAgICAgICBkb3VibGUgayA9IHRhbihhbmdsZSk7Ci0gICAg
ICAgIGRvdWJsZSBzcUEgPSBhICogYTsKLSAgICAgICAgZG91YmxlIHNxQiA9IGIgKiBiOwotICAg
ICAgICBkb3VibGUgdG1wID0gMS4gLyAoMS4gLyBzcUEgKyAoayAqIGspIC8gc3FCKTsKLSAgICAg
ICAgdG1wID0gdG1wIDw9IDAgPyAwIDogc3FydCh0bXApOwotICAgICAgICBpZiAoYW5nbGUgPiAu
NSAqIHBpRG91YmxlICYmIGFuZ2xlIDwgMS41ICogcGlEb3VibGUpCi0gICAgICAgICAgICB0bXAg
PSAtdG1wOwotICAgICAgICB4ID0gdG1wOwotCi0gICAgICAgIGsgPSB0YW4oLjUgKiBwaURvdWJs
ZSAtIGFuZ2xlKTsKLSAgICAgICAgdG1wID0gMS4gLyAoKGsgKiBrKSAvIHNxQSArIDEgLyBzcUIp
OwotICAgICAgICB0bXAgPSB0bXAgPD0gMCA/IDAgOiBzcXJ0KHRtcCk7Ci0gICAgICAgIGlmIChh
bmdsZSA+IHBpRG91YmxlKQotICAgICAgICAgICAgdG1wID0gLXRtcDsKLSAgICAgICAgeSA9IHRt
cDsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlh
bGlhcykKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBucG9pbnRzIDw9IDEgfHwgIXBvaW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nv
cGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFBPSU5ULCAyMD4gd2luUG9pbnRzKG5wb2lu
dHMpOwotICAgIEZsb2F0UG9pbnQgdHJQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQocG9pbnRzWzBd
KTsKLSAgICB3aW5Qb2ludHNbMF0ueCA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueCgpKTsKLSAgICB3
aW5Qb2ludHNbMF0ueSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKLSAgICBSRUNUIHJlY3Qg
PSB7IHdpblBvaW50c1swXS54LCB3aW5Qb2ludHNbMF0ueSwgd2luUG9pbnRzWzBdLngsIHdpblBv
aW50c1swXS55IH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucG9pbnRzOyArK2kpIHsK
LSAgICAgICAgdHJQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQocG9pbnRzW2ldKTsKLSAgICAgICAg
d2luUG9pbnRzW2ldLnggPSBzdGFibGVSb3VuZCh0clBvaW50LngoKSk7Ci0gICAgICAgIHdpblBv
aW50c1tpXS55ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkpOwotICAgICAgICBpZiAocmVjdC5s
ZWZ0ID4gd2luUG9pbnRzW2ldLngpCi0gICAgICAgICAgICByZWN0LmxlZnQgPSB3aW5Qb2ludHNb
aV0ueDsKLSAgICAgICAgZWxzZSBpZiAocmVjdC5yaWdodCA8IHdpblBvaW50c1tpXS54KQotICAg
ICAgICAgICAgcmVjdC5yaWdodCA9IHdpblBvaW50c1tpXS54OwotICAgICAgICBpZiAocmVjdC50
b3AgPiB3aW5Qb2ludHNbaV0ueSkKLSAgICAgICAgICAgIHJlY3QudG9wID0gd2luUG9pbnRzW2ld
Lnk7Ci0gICAgICAgIGVsc2UgaWYgKHJlY3QuYm90dG9tIDwgd2luUG9pbnRzW2ldLnkpCi0gICAg
ICAgICAgICByZWN0LmJvdHRvbSA9IHdpblBvaW50c1tpXS55OwotICAgIH0KLSAgICByZWN0LmJv
dHRvbSArPSAxOwotICAgIHJlY3QucmlnaHQgKz0gMTsKLQotICAgIEludFJlY3QgaW50UmVjdChy
ZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIGludFJl
Y3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucG9pbnRzOyArK2kp
IHsKLSAgICAgICAgd2luUG9pbnRzW2ldLnggKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0KCkud2lk
dGgoKTsKLSAgICAgICAgd2luUG9pbnRzW2ldLnkgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0KCku
aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgR0RJT2JqZWN0PEhCUlVTSD4gYnJ1c2g7Ci0gICAgSEdE
SU9CSiBvbGRCcnVzaDsKLSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBi
cnVzaCA9IGNyZWF0ZUJydXNoKGZpbGxDb2xvcigpKTsKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxl
Y3RPYmplY3QoZGMsIGJydXNoLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkQnJ1c2gg
PSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLQotICAgIEdE
SU9iamVjdDxIUEVOPiBwZW47Ci0gICAgSEdESU9CSiBvbGRQZW47Ci0gICAgaWYgKHN0cm9rZVN0
eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9y
KCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKLSAgICAgICAgb2xkUGVuID0g
U2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBvbGRQZW4g
PSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0KLSAgICBpZiAo
YnJ1c2ggfHwgcGVuKQotICAgICAgICBQb2x5Z29uKGRjLCB3aW5Qb2ludHMuZGF0YSgpLCBucG9p
bnRzKTsKLQotICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKLSAgICBTZWxlY3RPYmplY3Qo
ZGMsIG9sZEJydXNoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRp
YWxpYXNlZCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobnVtUG9pbnRzIDw9IDEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAv
LyBGSVhNRTogSU1QTEVNRU5UISEKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhbV9kYXRhLT5tX29w
YWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7
Ci0gICAgaWYgKCFhbHBoYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVy
IGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50UmVjdCBpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKLSAg
ICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIG1fZGF0YS0+bWFwUmVj
dChpbnRSZWN0KSwgJmludFJlY3QsIGFscGhhKTsKLQotICAgIGlmICghdHJhbnNwYXJlbnREQy5o
ZGMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBoYnJ1c2ggPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCkpKSk7Ci0gICAgRmlsbFJlY3QodHJhbnNwYXJlbnREQy5oZGMoKSwgJnRyYW5zcGFy
ZW50REMucmVjdCgpLCBoYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPm1h
cFJlY3QocmVjdCkpOwotCi0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICBpZiAoR2V0Q2xpcFJnbihtX2RhdGEtPm1fZGMs
IGNsaXBSZ24uZ2V0KCkpID4gMCkKLSAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9kYXRhLT5t
X2RjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
UmVjdFJnbih0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4
WSgpKSk7Ci0gICAgICAgIFNlbGVjdENsaXBSZ24obV9kYXRhLT5tX2RjLCBjbGlwUmduLmdldCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50
UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7Ci0KLSAgICBFeGNsdWRlQ2xpcFJl
Y3QobV9kYXRhLT5tX2RjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0
clJlY3QubWF4WSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9v
cGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nv
cGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMjsKLSAg
ICBvZmZzZXQgKz0gcmFkaXVzOwotCi0gICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6
ZSgpOwotICAgIEludFJlY3QgZmluYWxGb2N1c1JlY3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlY3RDb3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgZm9jdXNSZWN0ID0gcmVj
dHNbaV07Ci0gICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKG9mZnNldCk7Ci0gICAgICAgIGZpbmFs
Rm9jdXNSZWN0LnVuaXRlKGZvY3VzUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UmVjdCBpbnRSZWN0
ID0gZmluYWxGb2N1c1JlY3Q7Ci0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3Qo
ZmluYWxGb2N1c1JlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1f
ZGF0YSwgdHJSZWN0LCAmaW50UmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMo
KTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNw
YXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgUkVDVCByZWN0ID0gdHJSZWN0OwotICAgIERyYXdG
b2N1c1JlY3QoZGMsICZyZWN0KTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lk
dGgsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0
U2l6ZSh3aWR0aCwgc3Ryb2tlVGhpY2tuZXNzKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRo
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3Ryb2tlU3R5bGUgb2xkU3R5
bGUgPSBzdHJva2VTdHlsZSgpOwotICAgIHNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAg
ICBkcmF3TGluZShyb3VuZGVkSW50UG9pbnQob3JpZ2luKSwgcm91bmRlZEludFBvaW50KG9yaWdp
biArIEZsb2F0U2l6ZSh3aWR0aCwgMCkpKTsKLSAgICBpZiAoZG91YmxlVW5kZXJsaW5lcykKLSAg
ICAgICAgZHJhd0xpbmUocm91bmRlZEludFBvaW50KG9yaWdpbiArIEZsb2F0U2l6ZSgwLCBzdHJv
a2VUaGlja25lc3MoKSAqIDIpKSwgcm91bmRlZEludFBvaW50KG9yaWdpbiArIEZsb2F0U2l6ZSh3
aWR0aCwgc3Ryb2tlVGhpY2tuZXNzKCkgKiAyKSkpOwotICAgIHNldFN0cm9rZVN0eWxlKG9sZFN0
eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZVVuZGVybGluZXMpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3
aWR0aHMuc2l6ZSgpOyBpICs9IDIpCi0gICAgICAgIGRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50
KHBvaW50LngoKSArIHdpZHRoc1tpXSwgcG9pbnQueSgpKSwgd2lkdGhzW2krMV0gLSB3aWR0aHNb
aV0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbCwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25l
c3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0g
ICAgICAgIEludFJlY3QgdHJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPm1hcFJlY3Qo
cmVjdCkpOwotICAgICAgICBtX2RhdGEtPm1fYml0bWFwLT5jbGVhclBpeGVscyh0clJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfSAKLQotICAgIGZpbGxSZWN0KHJlY3QsIENvbG9yKENvbG9y
Ojp3aGl0ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAg
IGlmICghbV9kYXRhLT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRl
ciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFJlY3QgaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci0g
ICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QoaW50UmVjdCk7Ci0gICAgVHJhbnNw
YXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZpbnRSZWN0KTsKLSAg
ICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJl
dHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBh
dXRvIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc3Ry
b2tlU3R5bGUoKSk7Ci0gICAgSEdESU9CSiBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5n
ZXQoKSk7Ci0KLSAgICBpbnQgcmlnaHQgPSB0clJlY3QubWF4WCgpIC0gMTsKLSAgICBpbnQgYm90
dG9tID0gdHJSZWN0Lm1heFkoKSAtIDE7Ci0gICAgY29uc3QgUE9JTlQgaW50UG9pbnRzWzVdID0K
LSAgICB7Ci0gICAgICAgIHsgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSB9LAotICAgICAgICB7IHJp
Z2h0LCB0clJlY3QueSgpIH0sCi0gICAgICAgIHsgcmlnaHQsIGJvdHRvbSB9LAotICAgICAgICB7
IHRyUmVjdC54KCksIGJvdHRvbSB9LAotICAgICAgICB7IHRyUmVjdC54KCksIHRyUmVjdC55KCkg
fQotICAgIH07Ci0KLSAgICBQb2x5bGluZShkYywgaW50UG9pbnRzLCA1KTsKLQotICAgIFNlbGVj
dE9iamVjdChkYywgb2xkUGVuKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxh
dGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIG1fZGF0YS0+c2F2
ZSgpOwotICAgIG1fZGF0YS0+bV9vcGFjaXR5ICo9IG9wYWNpdHk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBtX2RhdGEt
PnJlc3RvcmUoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBt
X2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSYgR3JhcGhpY3NDb250ZXh0
OjphZmZpbmVUcmFuc2Zvcm0oKQotewotICAgIHJldHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOwot
fQotCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIEdyYXBoaWNzQ29udGV4dDo6YWZmaW5lVHJhbnNm
b3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc2V0QWZmaW5lVHJhbnNmb3JtKCkKLXsKLSAgICBtX2RhdGEt
Pm1fdHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwg
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKLXsK
LSAgICBtX2RhdGEtPnJvdGF0ZShyYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX2RhdGEtPnNjYWxlKHNpemUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBo
YShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX2RhdGEtPm1fb3BhY2l0eSA9IGFscGhhOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17
Ci0gICAgY2xpcChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IFBhdGgmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgSW50UG9pbnQgcmVjdENlbnRlclBvaW50KGNvbnN0IFJFQ1QmIHJlY3QpCi17Ci0g
ICAgcmV0dXJuIEludFBvaW50KHJlY3QubGVmdCArIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAv
IDIsIHJlY3QudG9wICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApIC8gMik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBTY29w
ZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0
IHNoYWRvd0JsdXIgPSAwOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIENvbG9yU3BhY2Ug
c2hhZG93Q29sb3JTcGFjZTsKLSAgICAgICAgCi0gICAgZ2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOwotICAgIAotICAgIGNv
bnN0IEZsb2F0UmVjdCYgZmlsbFJlY3QgPSByZWN0LnJlY3QoKTsKLSAgICBJbnRSZWN0IGRzdFJl
Y3QgPSBmaWxsUmVjdDsKLSAgICAKLSAgICBkc3RSZWN0Lm1vdmUoc3RhYmxlUm91bmQoc2hhZG93
T2Zmc2V0LndpZHRoKCkpLCBzdGFibGVSb3VuZChzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKLSAg
ICBkc3RSZWN0LmluZmxhdGUoc3RhYmxlUm91bmQoc2hhZG93Qmx1cikpOwotICAgIGRzdFJlY3Qg
PSBtX2RhdGEtPm1hcFJlY3QoZHN0UmVjdCk7Ci0gIAotICAgIEZsb2F0U2l6ZSBuZXdUb3BMZWZ0
KG1fZGF0YS0+bWFwU2l6ZShyZWN0LnJhZGlpKCkudG9wTGVmdCgpKSk7Ci0gICAgRmxvYXRTaXpl
IG5ld1RvcFJpZ2h0KG1fZGF0YS0+bWFwU2l6ZShyZWN0LnJhZGlpKCkudG9wUmlnaHQoKSkpOwot
ICAgIEZsb2F0U2l6ZSBuZXdCb3R0b21MZWZ0KG1fZGF0YS0+bWFwU2l6ZShyZWN0LnJhZGlpKCku
Ym90dG9tTGVmdCgpKSk7Ci0gICAgRmxvYXRTaXplIG5ld0JvdHRvbVJpZ2h0KG1fZGF0YS0+bWFw
U2l6ZShyZWN0LnJhZGlpKCkuYm90dG9tUmlnaHQoKSkpOwotCi0gICAgVHJhbnNwYXJlbnRMYXll
ckRDIHRyYW5zcGFyZW50RGMobV9kYXRhLCBkc3RSZWN0LCAmZmlsbFJlY3QpOwotICAgIEhEQyBk
YyA9IHRyYW5zcGFyZW50RGMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZHN0UmVjdC5tb3ZlKHRyYW5zcGFyZW50RGMudG9TaGlmdCgpKTsKLQotICAgIFJFQ1Qg
cmVjdFdpbiA9IGRzdFJlY3Q7Ci0KLSAgICBhdXRvIGJydXNoID0gY3JlYXRlQnJ1c2goc2hhZG93
Q29sb3IpOwotICAgIEhHRElPQkogb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIGJydXNoLmdl
dCgpKTsKLQotICAgIFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsK
LQotICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gcmVjdENlbnRlclBvaW50KHJlY3RXaW4pOwot
ICAgIC8vIERyYXcgdG9wIGxlZnQgaGFsZgotICAgIFJFQ1QgY2xpcFJlY3QocmVjdFdpbik7Ci0g
ICAgY2xpcFJlY3QucmlnaHQgPSBjZW50ZXJQb2ludC54KCk7Ci0gICAgY2xpcFJlY3QuYm90dG9t
ID0gY2VudGVyUG9pbnQueSgpOwotCi0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICBib29sIG5lZWRzTmV3Q2xpcCA9IChH
ZXRDbGlwUmduKGRjLCBjbGlwUmduLmdldCgpKSA8PSAwKTsKLQotICAgIGRyYXdSb3VuZENvcm5l
cihuZWVkc05ld0NsaXAsIGNsaXBSZWN0LCByZWN0V2luLCBkYywgc3RhYmxlUm91bmQobmV3VG9w
TGVmdC53aWR0aCgpICogMiksIHN0YWJsZVJvdW5kKG5ld1RvcExlZnQuaGVpZ2h0KCkgKiAyKSk7
Ci0KLSAgICAvLyBEcmF3IHRvcCByaWdodAotICAgIGNsaXBSZWN0ID0gcmVjdFdpbjsKLSAgICBj
bGlwUmVjdC5sZWZ0ID0gY2VudGVyUG9pbnQueCgpOwotICAgIGNsaXBSZWN0LmJvdHRvbSA9IGNl
bnRlclBvaW50LnkoKTsKLQotICAgIGRyYXdSb3VuZENvcm5lcihuZWVkc05ld0NsaXAsIGNsaXBS
ZWN0LCByZWN0V2luLCBkYywgc3RhYmxlUm91bmQobmV3VG9wUmlnaHQud2lkdGgoKSAqIDIpLCBz
dGFibGVSb3VuZChuZXdUb3BSaWdodC5oZWlnaHQoKSAqIDIpKTsKLQotICAgICAvLyBEcmF3IGJv
dHRvbSBsZWZ0Ci0gICAgY2xpcFJlY3QgPSByZWN0V2luOwotICAgIGNsaXBSZWN0LnJpZ2h0ID0g
Y2VudGVyUG9pbnQueCgpOwotICAgIGNsaXBSZWN0LnRvcCA9IGNlbnRlclBvaW50LnkoKTsKLQot
ICAgIGRyYXdSb3VuZENvcm5lcihuZWVkc05ld0NsaXAsIGNsaXBSZWN0LCByZWN0V2luLCBkYywg
c3RhYmxlUm91bmQobmV3Qm90dG9tTGVmdC53aWR0aCgpICogMiksIHN0YWJsZVJvdW5kKG5ld0Jv
dHRvbUxlZnQuaGVpZ2h0KCkgKiAyKSk7Ci0KLSAgICAvLyBEcmF3IGJvdHRvbSByaWdodAotICAg
IGNsaXBSZWN0ID0gcmVjdFdpbjsKLSAgICBjbGlwUmVjdC5sZWZ0ID0gY2VudGVyUG9pbnQueCgp
OwotICAgIGNsaXBSZWN0LnRvcCA9IGNlbnRlclBvaW50LnkoKTsKLQotICAgIGRyYXdSb3VuZENv
cm5lcihuZWVkc05ld0NsaXAsIGNsaXBSZWN0LCByZWN0V2luLCBkYywgc3RhYmxlUm91bmQobmV3
Qm90dG9tUmlnaHQud2lkdGgoKSAqIDIpLCBzdGFibGVSb3VuZChuZXdCb3R0b21SaWdodC5oZWln
aHQoKSAqIDIpKTsKLQotICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JvdW5kQ29ybmVyKGJvb2wgbmVlZHNOZXdDbGlwLCBSRUNU
IGNsaXBSZWN0LCBSRUNUIHJlY3RXaW4sIEhEQyBkYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY2xpcFJnbiA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgaWYgKG5lZWRz
TmV3Q2xpcCkgewotICAgICAgICBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0
UmduKGNsaXBSZWN0LmxlZnQsIGNsaXBSZWN0LnRvcCwgY2xpcFJlY3QucmlnaHQsIGNsaXBSZWN0
LmJvdHRvbSkpOwotICAgICAgICBTZWxlY3RDbGlwUmduKGRjLCBjbGlwUmduLmdldCgpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QoZGMsIGNsaXBSZWN0LmxlZnQsIGNs
aXBSZWN0LnRvcCwgY2xpcFJlY3QucmlnaHQsIGNsaXBSZWN0LmJvdHRvbSk7Ci0KLSAgICA6OlJv
dW5kUmVjdChkYywgcmVjdFdpbi5sZWZ0ICwgcmVjdFdpbi50b3AgLCByZWN0V2luLnJpZ2h0ICwg
cmVjdFdpbi5ib3R0b20gLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIFNlbGVjdENsaXBSZ24oZGMs
IG5lZWRzTmV3Q2xpcCA/IDAgOiBjbGlwUmduLmdldCgpKTsKLX0KLQotCi1GbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3Qs
IFJvdW5kaW5nTW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmcmVj
dDsKLX0KLQotQ29sb3IgZ3JhZGllbnRBdmVyYWdlQ29sb3IoY29uc3QgR3JhZGllbnQqIGdyYWRp
ZW50KQotewotICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYgc3RvcHMgPSBn
cmFkaWVudC0+Z2V0U3RvcHMoKTsKLSAgICBpZiAoc3RvcHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLQotICAgIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3AgPSBz
dG9wcy5maXJzdCgpOwotICAgIGlmIChzdG9wcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJu
IENvbG9yKHN0b3AucmVkLCBzdG9wLmdyZWVuLCBzdG9wLmJsdWUsIHN0b3AuYWxwaGEpOwotCi0g
ICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgbGFzdFN0b3AgPSBzdG9wcy5sYXN0KCk7Ci0g
ICAgcmV0dXJuIENvbG9yKChzdG9wLnJlZCArIGxhc3RTdG9wLnJlZCkgKiAwLjVmCi0gICAgICAg
ICwgKHN0b3AuZ3JlZW4gKyBsYXN0U3RvcC5ncmVlbikgKiAwLjVmCi0gICAgICAgICwgKHN0b3Au
Ymx1ZSArIGxhc3RTdG9wLmJsdWUpICogMC41ZgotICAgICAgICAsIChzdG9wLmFscGhhICsgbGFz
dFN0b3AuYWxwaGEpICogMC41Zik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDb2xvciBjID0gbV9zdGF0ZS5maWxsR3JhZGllbnQKLSAgICAgICAgPyBn
cmFkaWVudEF2ZXJhZ2VDb2xvcihtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKLSAgICAgICAg
OiBmaWxsQ29sb3IoKTsKLQotICAgIGlmICghYy5hbHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9k
YXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBicnVzaCA9IGNyZWF0ZUJydXNoKGMpOwotCi0gICAgaWYgKG1fZGF0YS0+bV9vcGFjaXR5IDwg
MS4wZiB8fCBtX2RhdGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAgSW50UmVjdCB0clJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChwYXRoLmJvdW5kaW5nUmVjdCgpKSk7Ci0g
ICAgICAgIHRyUmVjdC5pbmZsYXRlKDEpOwotICAgICAgICBUcmFuc3BhcmVudExheWVyREMgdHJh
bnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCk7Ci0gICAgICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50
REMuaGRjKCk7Ci0gICAgICAgIGlmICghZGMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLSAgICAgICAgdHIu
dHJhbnNsYXRlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndpZHRoKCksIHRyYW5zcGFyZW50REMu
dG9TaGlmdCgpLmhlaWdodCgpKTsKLQotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2Nr
T2JqZWN0KE5VTExfUEVOKSk7Ci0gICAgICAgIEhHRElPQkogb2xkQnJ1c2ggPSBTZWxlY3RPYmpl
Y3QoZGMsIGJydXNoLmdldCgpKTsKLSAgICAgICAgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+ZmlsbFBh
dGgoZGMsICZ0cik7Ci0gICAgICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIEdldFN0b2NrT2JqZWN0
KE5VTExfUEVOKSk7Ci0gICAgICAgIEhHRElPQkogb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QobV9k
YXRhLT5tX2RjLCBicnVzaC5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRoKCktPmZp
bGxQYXRoKG1fZGF0YS0+bV9kYywgJm1fZGF0YS0+bV90cmFuc2Zvcm0pOwotICAgICAgICBTZWxl
Y3RPYmplY3QobV9kYXRhLT5tX2RjLCBvbGRCcnVzaCk7Ci0gICAgfQotfQotCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBh
dGguaXNOdWxsKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5t
X2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VD
b2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGUoKSk7Ci0KLSAgICBpZiAobV9k
YXRhLT5tX29wYWNpdHkgPCAxLjBmIHx8IG1fZGF0YS0+aGFzQWxwaGEoKSkgewotICAgICAgICBJ
bnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHBhdGguYm91
bmRpbmdSZWN0KCkpKTsKLSAgICAgICAgdHJSZWN0LmluZmxhdGUoMSk7Ci0gICAgICAgIFRyYW5z
cGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0KTsKLSAgICAgICAgSERD
IGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICAgICAgaWYgKCFkYykKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHIgPSBtX2RhdGEtPm1fdHJhbnNm
b3JtOwotICAgICAgICB0ci50cmFuc2xhdGUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkud2lkdGgo
KSwgdHJhbnNwYXJlbnREQy50b1NoaWZ0KCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIFNlbGVjdE9i
amVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwotICAgICAgICBIR0RJT0JKIG9s
ZFBlbiA9IFNlbGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKLSAgICAgICAgcGF0aC5wbGF0Zm9y
bVBhdGgoKS0+c3Ryb2tlUGF0aChkYywgJnRyKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBv
bGRQZW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMs
IEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLSAgICAgICAgSEdESU9CSiBvbGRQZW4gPSBT
ZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBwZW4uZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRm
b3JtUGF0aCgpLT5zdHJva2VQYXRoKG1fZGF0YS0+bV9kYywgJm1fZGF0YS0+bV90cmFuc2Zvcm0p
OwotICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBvbGRQZW4pOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29u
c3QgR3JhZGllbnQqIGdyYWRpZW50KQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYg
c3RvcHMgPSBncmFkaWVudC0+Z2V0U3RvcHMoKTsKLSAgICBpZiAoc3RvcHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgbnVtU3RvcHMgPSBzdG9wcy5zaXplKCk7Ci0g
ICAgaWYgKG51bVN0b3BzID09IDEpIHsKLSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3Rv
cCYgc3RvcCA9IHN0b3BzLmZpcnN0KCk7Ci0gICAgICAgIENvbG9yIGNvbG9yKHN0b3AucmVkLCBz
dG9wLmdyZWVuLCBzdG9wLmJsdWUsIHN0b3AuYWxwaGEpOwotICAgICAgICBmaWxsUmVjdChyLCBj
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IAotICAg
IAotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2Rh
dGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgaW50UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3Qocik7Ci0gICAgSW50UmVjdCByZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGludFJl
Y3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgcmVjdCwg
JmludFJlY3QsIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsK
LSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWN0Lm1vdmUodHJhbnNwYXJl
bnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UG9pbnQgZnAwID0gbV9kYXRhLT5tYXBQb2ludChn
cmFkaWVudC0+cDAoKSk7Ci0gICAgRmxvYXRQb2ludCBmcDEgPSBtX2RhdGEtPm1hcFBvaW50KGdy
YWRpZW50LT5wMSgpKTsKLSAgICBJbnRQb2ludCBwMChzdGFibGVSb3VuZChmcDAueCgpKSwgc3Rh
YmxlUm91bmQoZnAwLnkoKSkpOwotICAgIEludFBvaW50IHAxKHN0YWJsZVJvdW5kKGZwMS54KCkp
LCBzdGFibGVSb3VuZChmcDEueSgpKSk7Ci0gICAgcDAgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0
KCk7Ci0gICAgcDEgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0KCk7Ci0KLSAgICBpZiAoZ3JhZGll
bnQtPmlzUmFkaWFsKCkpIHsKLSAgICAgICAgaWYgKGdfcmFkaWFsR3JhZGllbnRGaWxsZXIpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBkb24ndCBzdXBwb3J0IDJEIHNjYWxpbmcgYXQgdGhpcyB0
aW1lCi0gICAgICAgICAgICBkb3VibGUgc2NhbGUgPSAobV9kYXRhLT5tX3RyYW5zZm9ybS5hKCkg
KyBtX2RhdGEtPm1fdHJhbnNmb3JtLmQoKSkgKiAwLjU7Ci0gICAgICAgICAgICBmbG9hdCByMCA9
IGdyYWRpZW50LT5zdGFydFJhZGl1cygpICogc2NhbGU7Ci0gICAgICAgICAgICBmbG9hdCByMSA9
IGdyYWRpZW50LT5lbmRSYWRpdXMoKSAqIHNjYWxlOwotICAgICAgICAgICAgZ19yYWRpYWxHcmFk
aWVudEZpbGxlcihkYywgcmVjdCwgcDAsIHAxLCByMCwgcjEsIGdyYWRpZW50LT5nZXRTdG9wcygp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ19saW5l
YXJHcmFkaWVudEZpbGxlcikgewotICAgICAgICBnX2xpbmVhckdyYWRpZW50RmlsbGVyKGRjLCBy
ZWN0LCBwMCwgcDEsIGdyYWRpZW50LT5nZXRTdG9wcygpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFNpbXBsZSAxRCBsaW5lYXIgc29sdXRpb24gdGhhdCBhc3N1bWVzIHAwIGlz
IG9uIHRoZSB0b3Agb3IgbGVmdCBzaWRlLCBhbmQgcDEgaXMgb24gdGhlIHJpZ2h0IG9yIGJvdHRv
bSBzaWRlCi0gICAgc2l6ZV90IG51bVJlY3RzID0gKG51bVN0b3BzIC0gMSk7Ci0gICAgVmVjdG9y
PFRSSVZFUlRFWCwgMjA+IHR2OwotICAgIHR2LnJlc2l6ZShudW1SZWN0cyAqIDIpOwotICAgIFZl
Y3RvcjxHUkFESUVOVF9SRUNULCAxMD4gbWVzaDsKLSAgICBtZXNoLnJlc2l6ZShudW1SZWN0cyk7
Ci0gICAgaW50IHggPSByZWN0LngoKTsKLSAgICBpbnQgeSA9IHJlY3QueSgpOwotICAgIGludCB3
aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLSAg
ICBGbG9hdFNpemUgZCA9IGdyYWRpZW50LT5wMSgpIC0gZ3JhZGllbnQtPnAwKCk7Ci0gICAgYm9v
bCB2ZXJ0aWNhbCA9IGZhYnMoZC5oZWlnaHQoKSkgPiBmYWJzKGQud2lkdGgoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEdyYWRp
ZW50OjpDb2xvclN0b3AmIHN0b3AgPSBzdG9wc1tpXTsKLSAgICAgICAgaW50IGlUdiA9IGkgPyAy
ICogaSAtIDEgOiAwOwotICAgICAgICB0dltpVHZdLlJlZCA9IHN0b3AucmVkICogMHhGRkZGOwot
ICAgICAgICB0dltpVHZdLkdyZWVuID0gc3RvcC5ncmVlbiAqIDB4RkZGRjsKLSAgICAgICAgdHZb
aVR2XS5CbHVlID0gc3RvcC5ibHVlICogMHhGRkZGOwotICAgICAgICB0dltpVHZdLkFscGhhID0g
c3RvcC5hbHBoYSAqIDB4RkZGRjsKLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIHR2W2lU
dl0ueCA9IHZlcnRpY2FsID8geCArIHdpZHRoOiB4ICsgd2lkdGggKiBzdG9wLnN0b3A7Ci0gICAg
ICAgICAgICB0dltpVHZdLnkgPSB2ZXJ0aWNhbCA/IHkgKyBoZWlnaHQgKiBzdG9wLnN0b3AgOiB5
ICsgaGVpZ2h0OwotICAgICAgICAgICAgbWVzaFtpIC0gMV0uVXBwZXJMZWZ0ID0gaVR2IC0gMTsK
LSAgICAgICAgICAgIG1lc2hbaSAtIDFdLkxvd2VyUmlnaHQgPSBpVHY7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB0dltpVHZdLnggPSB4OwotICAgICAgICAgICAgdHZbaVR2XS55ID0g
eTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpICYmIGkgPCBudW1SZWN0cykgewotICAgICAg
ICAgICAgdHZbaVR2ICsgMV0gPSB0dltpVHZdOwotICAgICAgICAgICAgaWYgKHZlcnRpY2FsKQot
ICAgICAgICAgICAgICAgIHR2W2lUdiArIDFdLnggPSB4OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHR2W2lUdiArIDFdLnkgPSB5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
R3JhZGllbnRGaWxsKGRjLCB0di5kYXRhKCksIHR2LnNpemUoKSwgbWVzaC5kYXRhKCksIG1lc2gu
c2l6ZSgpLCB2ZXJ0aWNhbCA/IEdSQURJRU5UX0ZJTExfUkVDVF9WIDogR1JBRElFTlRfRklMTF9S
RUNUX0gpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlKSBjb25zdAotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIHJldHVybiBtX2RhdGEtPm1f
dHJhbnNmb3JtOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0KLSAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQpCi0gICAgICAgIGZpbGxSZWN0KHJlY3QsIG1fc3RhdGUuZmlsbEdy
YWRpZW50LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJlY3QsIGZpbGxDb2xv
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JbnRlcnBvbGF0aW9uUXVhbGl0eSBH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludGVycG9sYXRpb25EZWZhdWx0OwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNDaGFyVmlzaWJsZShVQ2hhciBjKQotewotICAgIHJldHVybiBjICYmIGMg
IT0gemVyb1dpZHRoU3BhY2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
IWZpbGxDb2xvcigpLmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIG11c3RTdXBwb3J0QWxwaGEgPSBtX2RhdGEtPmhhc0FscGhhKCk7Ci0K
LSAgICBpZiAoIW11c3RTdXBwb3J0QWxwaGEgJiYgZmlsbENvbG9yKCkuYWxwaGEoKSA9PSAweEZG
ICYmIG1fZGF0YS0+bV9vcGFjaXR5ID49IDEuMCkgewotICAgICAgICBmb250LmRyYXdUZXh0KHRo
aXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZsb2F0IG9sZE9wYWNpdHkgPSBtX2RhdGEtPm1fb3BhY2l0eTsKLSAgICBtX2RhdGEtPm1fb3Bh
Y2l0eSAqPSBmaWxsQ29sb3IoKS5hbHBoYSgpIC8gMjU1LjA7Ci0KLSAgICBGbG9hdFJlY3QgdGV4
dFJlY3QgPSBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgcG9pbnQsIGZvbnQuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKSwgZnJvbSwgdG8pOwotICAgIHRleHRSZWN0LnNldFkodGV4dFJlY3Qu
eSgpIC0gZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICBJbnRSZWN0IHRyUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHRleHRSZWN0KSk7Ci0gICAgUkVDVCBi
bXBSZWN0OwotICAgIEFscGhhUGFpbnRUeXBlIGFscGhhUGFpbnRUeXBlID0gbXVzdFN1cHBvcnRB
bHBoYSA/IEFscGhhUGFpbnRPdGhlciA6IEFscGhhUGFpbnROb25lOwotICAgIGlmIChSZWZQdHI8
U2hhcmVkQml0bWFwPiBibXAgPSBtX2RhdGEtPmdldFRyYW5zcGFyZW50TGF5ZXJCaXRtYXAodHJS
ZWN0LCBhbHBoYVBhaW50VHlwZSwgYm1wUmVjdCwgdHJ1ZSwgbXVzdFN1cHBvcnRBbHBoYSkpIHsK
LSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKDApOwotICAgICAgICAg
ICAgZ2Muc2V0Qml0bWFwKGJtcCk7Ci0gICAgICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUobV9k
YXRhLT5tX3RyYW5zZm9ybS5hKCksIG1fZGF0YS0+bV90cmFuc2Zvcm0uZCgpKSk7Ci0gICAgICAg
ICAgICBmb250LmRyYXdUZXh0KCZnYywgcnVuLCBJbnRQb2ludCgwLCBmb250LmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpLCBmcm9tLCB0byk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQga2V5
MTsKLSAgICAgICAgSERDIG1lbURDID0gYm1wLT5nZXREQygma2V5MSk7Ci0gICAgICAgIGlmICht
ZW1EQykgewotICAgICAgICAgICAgbV9kYXRhLT5wYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0
bWFwKG1lbURDLCBibXAuZ2V0KCksIHRyUmVjdCwgYWxwaGFQYWludFR5cGUsIGJtcFJlY3QpOwot
ICAgICAgICAgICAgYm1wLT5yZWxlYXNlREMobWVtREMsIGtleTEpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbV9kYXRhLT5tX29wYWNpdHkgPSBvbGRPcGFjaXR5OwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmICgh
bV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoOzspIHsKLSAg
ICAgICAgaWYgKCFudW1HbHlwaHMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChp
c0NoYXJWaXNpYmxlKCpnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSkpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICsrZnJvbTsKLSAgICAgICAgLS1udW1HbHlwaHM7Ci0gICAgfQotCi0gICAg
ZG91YmxlIHNjYWxlWCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0uYSgpOwotICAgIGRvdWJsZSBzY2Fs
ZVkgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLmQoKTsKLQotICAgIGludCBoZWlnaHQgPSBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpICogc2NhbGVZOwotICAgIGludCB3aWR0aCA9IGZvbnRE
YXRhLT5hdmdDaGFyV2lkdGgoKSAqIHNjYWxlWDsKLQotICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0
aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9k
YXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSEZP
TlQgaEZvbnQgPSBoZWlnaHQgPiAxCi0gICAgICAgID8gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LmdldFNjYWxlZEZvbnRIYW5kbGUoaGVpZ2h0LCBzY2FsZVggPT0gc2NhbGVZID8gMCA6IHdpZHRo
KQotICAgICAgICA6IDA7Ci0KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBw
b2ludC55KCkgLSBmb250RGF0YS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgRmxvYXRQ
b2ludCB0clBvaW50ID0gbV9kYXRhLT5tYXBQb2ludChzdGFydFBvaW50KTsKLSAgICBpbnQgeSA9
IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKLQotICAgIENvbG9yIGNvbG9yID0gZmlsbENvbG9y
KCk7Ci0gICAgaWYgKCFjb2xvci5hbHBoYSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT0xP
UlJFRiBmb250Q29sb3IgPSBSR0IoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJs
dWUoKSk7Ci0KLSAgICBpZiAoIWhGb250KSB7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXQgPSB0clBv
aW50LngoKTsKLSAgICAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlID0gZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7Ci0gICAgICAgIGlmIChzY2FsZVggPT0gMS4pCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bUdseXBoczsgKytpKQotICAgICAgICAgICAg
ICAgIG9mZnNldCArPSAoKmFkdmFuY2UrKykud2lkdGgoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1HbHlwaHM7ICsraSkKLSAgICAgICAgICAgICAg
ICBvZmZzZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCkgKiBzY2FsZVg7Ci0KLSAgICAgICAgb2Zm
c2V0ICs9IHdpZHRoOwotCi0gICAgICAgIGF1dG8gaFBlbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlUGVuKFBTX0RBU0gsIDEsIGZvbnRDb2xvcikpOwotICAgICAgICBIR0RJT0JKIG9sZFBlbiA9
IFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIGhQZW4uZ2V0KCkpOwotCi0gICAgICAgIE1vdmVU
b0V4KG1fZGF0YS0+bV9kYywgc3RhYmxlUm91bmQodHJQb2ludC54KCkpLCB5LCAwKTsKLSAgICAg
ICAgTGluZVRvKG1fZGF0YS0+bV9kYywgc3RhYmxlUm91bmQob2Zmc2V0KSwgeSk7Ci0KLSAgICAg
ICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgb2xkUGVuKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1
ciA9IDA7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xv
clNwYWNlOwotICAgIGJvb2wgaGFzU2hhZG93ID0gdGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1v
ZGVGaWxsCi0gICAgICAgICYmIGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNo
YWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKQotICAgICAgICAmJiBzaGFkb3dDb2xvci5hbHBo
YSgpOwotICAgIENPTE9SUkVGIHNoYWRvd1JHQkNvbG9yOwotICAgIEZsb2F0UG9pbnQgdHJTaGFk
b3dQb2ludDsKLSAgICBpZiAoaGFzU2hhZG93KSB7Ci0gICAgICAgIHNoYWRvd1JHQkNvbG9yID0g
UkdCKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5i
bHVlKCkpOwotICAgICAgICB0clNoYWRvd1BvaW50ID0gbV9kYXRhLT5tYXBQb2ludChzdGFydFBv
aW50ICsgc2hhZG93T2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBIR0RJT0JKIGhPbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgaEZvbnQpOwotICAgIENPTE9SUkVGIG9sZFRleHRDb2xv
ciA9IEdldFRleHRDb2xvcihtX2RhdGEtPm1fZGMpOwotICAgIGludCBvbGRUZXh0QWxpZ24gPSBH
ZXRUZXh0QWxpZ24obV9kYXRhLT5tX2RjKTsKLSAgICBTZXRUZXh0QWxpZ24obV9kYXRhLT5tX2Rj
LCAwKTsKLQotICAgIGludCBvbGRCa01vZGUgPSBHZXRCa01vZGUobV9kYXRhLT5tX2RjKTsKLSAg
ICBTZXRCa01vZGUobV9kYXRhLT5tX2RjLCBUUkFOU1BBUkVOVCk7Ci0KLSAgICBpZiAobnVtR2x5
cGhzID4gMSkgewotICAgICAgICBkb3VibGUgb2Zmc2V0ID0gdHJQb2ludC54KCk7Ci0gICAgICAg
IFZlY3RvcjxpbnQsIDI1Nj4gZ2x5cGhTcGFjZShudW1HbHlwaHMpOwotICAgICAgICBWZWN0b3I8
VUNoYXIsIDI1Nj4gdGV4dChudW1HbHlwaHMpOwotICAgICAgICBpbnQqIGN1clNwYWNlID0gZ2x5
cGhTcGFjZS5kYXRhKCk7Ci0gICAgICAgIFVDaGFyKiBjdXJDaGFyID0gdGV4dC5kYXRhKCk7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyKiBzcmNDaGFyID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwot
ICAgICAgICBjb25zdCBVQ2hhciogY29uc3Qgc3JjQ2hhckVuZCA9IHNyY0NoYXIgKyBudW1HbHlw
aHM7Ci0gICAgICAgICpjdXJDaGFyKysgPSAqc3JjQ2hhcisrOwotICAgICAgICBpbnQgZmlyc3RP
ZmZzZXQgPSBzdGFibGVSb3VuZChvZmZzZXQpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZp
cnN0T2Zmc2V0OwotICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2UgPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsKLSAgICAgICAgLy8gRklYTUU6IEV4dFRleHRPdXQo
KSBjYW4gZmxpcCBvdmVyIGVhY2ggd29yZCBmb3IgUlRMIGxhbmd1YWdlcywgZXZlbiB3aGVuIFRB
X1JUTFJFQURJTkcgaXMgb2ZmLgotICAgICAgICAvLyAodGhpcyBjYW4gYmUgR0RJIGJ1ZyBvciBm
b250IGRyaXZlciBidWc/KQotICAgICAgICAvLyBXZSBhcmUgbm90IGNsZWFyIGhvdyBpdCBwcm9j
ZXNzZXMgY2hhcmFjdGVycyBhbmQgaGFuZGxlcyBzcGVjaWZpZWQgc3BhY2VzLiBPbiB0aGUgb3Ro
ZXIgc2lkZSwKLSAgICAgICAgLy8gb3VyIGdseXBoIGJ1ZmZlciBpcyBhbHJlYWR5IGluIHRoZSBj
b3JyZWN0IG9yZGVyIGZvciByZW5kZXJpbmcuIFNvLCB0aGUgc29sdXRpb24gaXMgdGhhdCB3ZQot
ICAgICAgICAvLyBjYWxsIEV4dFRleHRPdXQoKSBmb3IgZWFjaCBzaW5nbGUgY2hhcmFjdGVyIHdo
ZW4gdGhlIHRleHQgY29udGFpbnMgYW55IFJUTCBjaGFyYWN0ZXIuCi0gICAgICAgIC8vIFRoaXMg
c29sdXRpb24gaXMgbm90IHBlcmZlY3QgYXMgaXQgaXMgc2xvd2VyIHRoYW4gY2FsbGluZyBFeHRU
ZXh0T3V0KCkgb25lIHRpbWUgZm9yIGFsbCBjaGFyYWN0ZXJzLgotICAgICAgICAvLyBEcmF3aW5n
IGNoYXJhY3RlcnMgb25lIGJ5IG9uZSBtYXkgYmUgdG9vIHNsb3cuCi0gICAgICAgIGJvb2wgZHJh
d09uZUJ5T25lID0gZmFsc2U7Ci0gICAgICAgIGlmIChzY2FsZVggPT0gMS4pIHsKLSAgICAgICAg
ICAgIGZvciAoOyBzcmNDaGFyIDwgc3JjQ2hhckVuZDsgKytzcmNDaGFyKSB7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0ICs9ICgqYWR2YW5jZSsrKS53aWR0aCgpOwotICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXRJbnQgPSBzdGFibGVSb3VuZChvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChp
c0NoYXJWaXNpYmxlKCpzcmNDaGFyKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWRyYXdP
bmVCeU9uZSAmJiB1X2NoYXJEaXJlY3Rpb24oKnNyY0NoYXIpID09IFVfUklHSFRfVE9fTEVGVCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdPbmVCeU9uZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICpjdXJDaGFyKysgPSAqc3JjQ2hhcjsKLSAgICAgICAgICAgICAgICAgICAgKmN1
clNwYWNlKysgPSBvZmZzZXRJbnQgLSBsYXN0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBs
YXN0T2Zmc2V0ID0gb2Zmc2V0SW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoOyBzcmNDaGFyIDwgc3JjQ2hhckVu
ZDsgKytzcmNDaGFyKSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9ICgqYWR2YW5jZSsrKS53
aWR0aCgpICogc2NhbGVYOwotICAgICAgICAgICAgICAgIGludCBvZmZzZXRJbnQgPSBzdGFibGVS
b3VuZChvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChpc0NoYXJWaXNpYmxlKCpzcmNDaGFy
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWRyYXdPbmVCeU9uZSAmJiB1X2NoYXJEaXJl
Y3Rpb24oKnNyY0NoYXIpID09IFVfUklHSFRfVE9fTEVGVCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdPbmVCeU9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICpjdXJDaGFyKysg
PSAqc3JjQ2hhcjsKLSAgICAgICAgICAgICAgICAgICAgKmN1clNwYWNlKysgPSBvZmZzZXRJbnQg
LSBsYXN0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0SW50
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBu
dW1HbHlwaHMgPSBjdXJDaGFyIC0gdGV4dC5kYXRhKCk7Ci0gICAgICAgIGlmIChoYXNTaGFkb3cp
IHsKLSAgICAgICAgICAgIFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIHNoYWRvd1JHQkNvbG9y
KTsKLSAgICAgICAgICAgIGlmIChkcmF3T25lQnlPbmUpIHsKLSAgICAgICAgICAgICAgICBpbnQg
eFNoYWRvdyA9IGZpcnN0T2Zmc2V0ICsgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC54KCkgLSB0
clBvaW50LngoKSk7Ci0gICAgICAgICAgICAgICAgaW50IHlTaGFkb3cgPSBzdGFibGVSb3VuZCh0
clNoYWRvd1BvaW50LnkoKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBFeHRUZXh0T3V0KG1fZGF0YS0+
bV9kYywgeFNoYWRvdywgeVNoYWRvdywgMCwgTlVMTCwgdGV4dC5kYXRhKCkgKyBpLCAxLCAwKTsK
LSAgICAgICAgICAgICAgICAgICAgeFNoYWRvdyArPSBnbHlwaFNwYWNlW2ldOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEV4dFRleHRPdXQo
bV9kYXRhLT5tX2RjLCBmaXJzdE9mZnNldCArIHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueCgp
IC0gdHJQb2ludC54KCkpLCBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LnkoKSksIDAsIE5VTEws
IHRleHQuZGF0YSgpLCBudW1HbHlwaHMsIGdseXBoU3BhY2UuZGF0YSgpKTsKLSAgICAgICAgfQot
ICAgICAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBmb250Q29sb3IpOwotICAgICAgICBp
ZiAoZHJhd09uZUJ5T25lKSB7Ci0gICAgICAgICAgICBpbnQgeCA9IGZpcnN0T2Zmc2V0OwotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAg
ICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCB4LCB5LCAwLCBOVUxMLCB0ZXh0LmRhdGEo
KSArIGksIDEsIDApOwotICAgICAgICAgICAgICAgIHggKz0gZ2x5cGhTcGFjZVtpXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBFeHRUZXh0T3V0KG1fZGF0YS0+
bV9kYywgZmlyc3RPZmZzZXQsIHksIDAsIE5VTEwsIHRleHQuZGF0YSgpLCBudW1HbHlwaHMsIGds
eXBoU3BhY2UuZGF0YSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciBjID0gKmdseXBo
QnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICAgICAgaWYgKGhhc1NoYWRvdykgewotICAgICAgICAg
ICAgU2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywgc2hhZG93UkdCQ29sb3IpOwotICAgICAgICAg
ICAgRXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueCgp
KSwgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC55KCkpLCAwLCBOVUxMLCAmYywgMSwgMCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgU2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywgZm9udENvbG9yKTsK
LSAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1fZGMsIHN0YWJsZVJvdW5kKHRyUG9pbnQueCgp
KSwgeSwgMCwgTlVMTCwgJmMsIDEsIDApOwotICAgIH0KLQotICAgIFNldFRleHRBbGlnbihtX2Rh
dGEtPm1fZGMsIG9sZFRleHRBbGlnbik7Ci0gICAgU2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywg
b2xkVGV4dENvbG9yKTsKLSAgICBTZXRCa01vZGUobV9kYXRhLT5tX2RjLCBvbGRCa01vZGUpOwot
ICAgIFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIGhPbGRGb250KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGcmFtZUNvbnRyb2woY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWdu
ZWQgdHlwZSwgdW5zaWduZWQgc3RhdGUpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgaW50IGJveFdpZHRoQmVzdCA9IDg7Ci0gICAg
Y29uc3QgaW50IGJveEhlaWdodEJlc3QgPSA4OwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJv
dmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7Ci0gICAgVHJhbnNw
YXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZyZWN0LCAyNTUsIHRy
dWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAg
ICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsK
LQotICAgIFJFQ1QgcmVjdFdpbiA9IHRyUmVjdDsKLQotICAgIGlmICgocmVjdFdpbi5yaWdodCAt
IHJlY3RXaW4ubGVmdCkgPCBib3hXaWR0aEJlc3QpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJp
dG1hcD4gYm1wID0gU2hhcmVkQml0bWFwOjpjcmVhdGUoSW50U2l6ZShib3hXaWR0aEJlc3QsIGJv
eEhlaWdodEJlc3QpLCBCaXRtYXBJbmZvOjpCaXRDb3VudDE2LCB0cnVlKTsKLSAgICAgICAgU2hh
cmVkQml0bWFwOjpEQ0hvbGRlciBtZW1EQyhibXAuZ2V0KCkpOwotICAgICAgICBpZiAobWVtREMu
Z2V0KCkpIHsKLSAgICAgICAgICAgIFJFQ1QgdGVtcFJlY3QgPSB7MCwgMCwgYm94V2lkdGhCZXN0
LCBib3hIZWlnaHRCZXN0fTsKLSAgICAgICAgICAgIERyYXdGcmFtZUNvbnRyb2wobWVtREMuZ2V0
KCksICZ0ZW1wUmVjdCwgdHlwZSwgc3RhdGUpOwotCi0gICAgICAgICAgICA6OlN0cmV0Y2hCbHQo
ZGMsIHJlY3RXaW4ubGVmdCwgcmVjdFdpbi50b3AsIHJlY3RXaW4ucmlnaHQgLSByZWN0V2luLmxl
ZnQsIHJlY3RXaW4uYm90dG9tIC0gcmVjdFdpbi50b3AsIG1lbURDLmdldCgpLCAwLCAwLCBib3hX
aWR0aEJlc3QsIGJveEhlaWdodEJlc3QsIFNSQ0NPUFkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgRHJhd0ZyYW1lQ29udHJvbChkYywgJnJlY3RXaW4sIHR5
cGUsIHN0YXRlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAg
IGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVj
dCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNw
YXJlbnREQyhtX2RhdGEsIHRyUmVjdCwgJnJlY3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50
REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3Zl
KHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIFJFQ1QgcmVjdFdpbiA9IHRyUmVjdDsK
LSAgICBEcmF3Rm9jdXNSZWN0KGRjLCAmcmVjdFdpbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCBzdGF0ZSkK
LXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
Y29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2Rj
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVj
dChyZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRy
UmVjdCwgJnJlY3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYg
KCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9T
aGlmdCgpKTsKLQotICAgIFJFQ1QgcmVjdFdpbiA9IHRyUmVjdDsKLSAgICBEcmF3RWRnZShkYywg
JnJlY3RXaW4sIEVER0VfRVRDSEVELCBCRl9SRUNUIHwgQkZfQURKVVNUKTsKLSAgICBGaWxsUmVj
dChkYywgJnJlY3RXaW4sIHJlaW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPigoKHN0YXRlICYgREZDU19J
TkFDVElWRSkgPyBDT0xPUl9CVE5GQUNFIDogQ09MT1JfV0lORE9XKSArIDEpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXAoU2hhcmVkQml0bWFwKiBibXAsIGNvbnN0IElu
dFJlY3QmIGRzdFJlY3RJbiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2Rh
dGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZHN0UmVjdCA9IG1fZGF0
YS0+bWFwUmVjdChkc3RSZWN0SW4pOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVu
dERDKG1fZGF0YSwgZHN0UmVjdCwgJmRzdFJlY3RJbiwgMjU1LCB0cnVlKTsKLSAgICBIREMgZGMg
PSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBkc3RSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgYm1wLT5kcmF3
KGRjLCBkc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlKTsKLQotICAgIGlm
IChibXAtPmlzMTZiaXQoKSkKLSAgICAgICAgdHJhbnNwYXJlbnREQy5maWxsQWxwaGFDaGFubmVs
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFwUGF0dGVybihTaGFyZWRC
aXRtYXAqIGJtcCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdEluLCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNl
U2l6ZSkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRh
LT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGludERzdFJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KGRlc3RSZWN0SW4pOwotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5t
YXBSZWN0KGludERzdFJlY3QpOwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERD
KG1fZGF0YSwgdHJSZWN0LCAmaW50RHN0UmVjdCwgMjU1LCB0cnVlKTsKLSAgICBIREMgZGMgPSB0
cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0
clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0gICAgRmxvYXRSZWN0IG1vdmVk
RHN0UmVjdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0
KHRyUmVjdCkpOwotICAgIEZsb2F0U2l6ZSBtb3ZlZChtb3ZlZERzdFJlY3QubG9jYXRpb24oKSAt
IGRlc3RSZWN0SW4ubG9jYXRpb24oKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IG1fZGF0YS0+bV90cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtb3ZlZC53aWR0
aCgpLCBtb3ZlZC5oZWlnaHQoKSk7Ci0KLSAgICBibXAtPmRyYXdQYXR0ZXJuKGRjLCB0cmFuc2Zv
cm0sIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdEluLCBvcmlnU291cmNlU2l6ZSk7Ci0KLSAgICBpZiAoIWJtcC0+aGFzQWxw
aGEoKSkKLSAgICAgICAgdHJhbnNwYXJlbnREQy5maWxsQWxwaGFDaGFubmVsKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbihISUNPTiBpY29uLCBjb25zdCBJbnRSZWN0JiBk
c3RSZWN0SW4sIFVJTlQgZmxhZ3MpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsK
LSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBk
c3RSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGRzdFJlY3RJbik7Ci0gICAgVHJhbnNwYXJlbnRMYXll
ckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBkc3RSZWN0LCAmZHN0UmVjdEluLCAyNTUsIHRydWUp
OwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgaWYgKCFkYykKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRzdFJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0K
LSAgICBEcmF3SWNvbkV4KGRjLCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGljb24sIGRzdFJl
Y3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSwgMCwgTlVMTCwgZmxhZ3MpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlckRhdGFXaW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VCdWZmZXJEYXRhV2luY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0
NmQzOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9JbWFnZUJ1ZmZlckRhdGFXaW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YSB7
Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKLSAgICBSZWZQ
dHI8U2hhcmVkQml0bWFwPiBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdl
QnVmZmVyV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VCdWZmZXJXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYzIz
ZjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VCdWZmZXJXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEJ1ZmZlcmVkSW1hZ2U6IHB1YmxpYyBJbWFnZSB7Ci0KLXB1Ymxp
YzoKLSAgICBCdWZmZXJlZEltYWdlKGNvbnN0IEltYWdlQnVmZmVyRGF0YSogZGF0YSkKLSAgICAg
ICAgOiBtX2RhdGEoZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGN1cnJl
bnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIHsgcmV0dXJuICFtX2RhdGEtPm1fYml0bWFwLT5oYXNB
bHBoYSgpIDsgfQotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50
U2l6ZShtX2RhdGEtPm1fYml0bWFwLT53aWR0aCgpLCBtX2RhdGEtPm1fYml0bWFwLT5oZWlnaHQo
KSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFs
bCA9IHRydWUpIHt9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKLQotICAgIGNvbnN0IEltYWdl
QnVmZmVyRGF0YSogbV9kYXRhOwotfTsKLQotdm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uKQotewotICAgIEludFJlY3QgaW50RHN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZHN0
UmVjdCk7Ci0gICAgSW50UmVjdCBpbnRTcmNSZWN0KHNyY1JlY3QpOwotICAgIG1fZGF0YS0+bV9i
aXRtYXAtPmRyYXcoY3R4dCwgaW50RHN0UmVjdCwgaW50U3JjUmVjdCwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJ
biwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSkKLXsKLSAgICBt
X2RhdGEtPm1fYml0bWFwLT5kcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIHNpemUoKSk7Ci19
Ci0KLUltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUp
Ci0gICAgOiBtX2JpdG1hcChTaGFyZWRCaXRtYXA6OmNyZWF0ZShzaXplLCBCaXRtYXBJbmZvOjpC
aXRDb3VudDMyLCBmYWxzZSkpCi17Ci0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9X
RC1odG1sNS0yMDA5MDIxMi90aGUtY2FudmFzLWVsZW1lbnQuaHRtbCNjYW52YXNwaXhlbGFycmF5
Ci0gICAgLy8gIldoZW4gdGhlIGNhbnZhcyBpcyBpbml0aWFsaXplZCBpdCBtdXN0IGJlIHNldCB0
byBmdWxseSB0cmFuc3BhcmVudCBibGFjay4iCi0gICAgbV9iaXRtYXAtPnJlc2V0UGl4ZWxzKHRy
dWUpOwotICAgIG1fYml0bWFwLT5zZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotSW1hZ2VCdWZmZXI6
OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQotICAg
IDogbV9kYXRhKHNpemUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fbG9naWNhbFNpemUo
c2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogUmVzcGVjdCByZXNvdXRpb25TY2FsZSB0byBzdXBwb3J0
IGhpZ2gtRFBJIGNhbnZhcy4KLSAgICBVTlVTRURfUEFSQU0ocmVzb2x1dGlvblNjYWxlKTsKLSAg
ICAvLyBGSVhNRTogY29sb3JTcGFjZSBpcyBub3QgdXNlZAotICAgIFVOVVNFRF9QQVJBTShjb2xv
clNwYWNlKTsKLQotICAgIG1fY29udGV4dCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQo
MCkpOwotICAgIG1fY29udGV4dC0+c2V0Qml0bWFwKG1fZGF0YS5tX2JpdG1hcCk7Ci0gICAgc3Vj
Y2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQotewotfQotCi1H
cmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2FsZUJlaGF2aW9yKSBj
b25zdAotewotICAgIEFTU0VSVChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSk7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZEltYWdlKCZtX2RhdGEpKTsKLX0KLQotQmFj
a2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJl
dHVybiBDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHls
ZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24oKSwgdXNlTG93UXVhbGl0eVNjYWxlKTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250
ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QpOwotfQotCi10ZW1wbGF0ZSA8Ym9vbCBwcmVtdWx0aXBsaWVkPgotc3RhdGlj
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBTaGFyZWRCaXRtYXAqIGJpdG1hcCkKLXsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKLQotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIHNyYyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihiaXRt
YXAtPmJ5dGVzKCkpOwotICAgIGlmICghc3JjKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhLnJl
bGVhc2UoKTsKLQotICAgIEludFJlY3Qgc291cmNlUmVjdCgwLCAwLCBiaXRtYXAtPndpZHRoKCks
IGJpdG1hcC0+aGVpZ2h0KCkpOwotICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHJlY3QpOwotICAg
IGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxl
YXNlKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAg
ICBpbWFnZURhdGEtPnplcm9GaWxsKCk7Ci0gICAgc3JjICs9IChzb3VyY2VSZWN0LnkoKSAqIGJp
dG1hcC0+d2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQ7Ci0gICAgZHN0ICs9ICgoc291cmNl
UmVjdC55KCkgLSByZWN0LnkoKSkgKiByZWN0LndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSAtIHJl
Y3QueCgpKSAqIDQ7Ci0gICAgaW50IGJ5dGVzVG9Db3B5ID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKLSAgICBpbnQgc3JjU2tpcCA9IChiaXRtYXAtPndpZHRoKCkgLSBzb3VyY2VSZWN0LndpZHRo
KCkpICogNDsKLSAgICBpbnQgZHN0U2tpcCA9IChyZWN0LndpZHRoKCkgLSBzb3VyY2VSZWN0Lndp
ZHRoKCkpICogNDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RFbmQgPSBkc3QgKyBzb3Vy
Y2VSZWN0LmhlaWdodCgpICogcmVjdC53aWR0aCgpICogNDsKLSAgICB3aGlsZSAoZHN0IDwgZHN0
RW5kKSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRzdFJvd0VuZCA9IGRzdCArIGJ5
dGVzVG9Db3B5OwotICAgICAgICB3aGlsZSAoZHN0IDwgZHN0Um93RW5kKSB7Ci0gICAgICAgICAg
ICAvLyBDb252ZXJ0IEFSR0IgbGl0dGxlIGVuZGlhbiB0byBSR0JBIGJpZyBlbmRpYW4KLSAgICAg
ICAgICAgIGludCBibHVlID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGdyZWVuID0gKnNyYysr
OwotICAgICAgICAgICAgaW50IHJlZCA9ICpzcmMrKzsKLSAgICAgICAgICAgIGludCBhbHBoYSA9
ICpzcmMrKzsKLSAgICAgICAgICAgIGlmIChwcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAg
ICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKHJlZCAqIGFscGhhICsgMjU0
KSAvIDI1NSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1KTsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1
NSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
YWxwaGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihyZWQpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGdyZWVuKTsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihibHVlKTsKLSAgICAgICAgICAgICAgICAq
ZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7Ci0gICAgICAgICAgICAg
ICAgKytzcmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3JjICs9IHNyY1Nr
aXA7Ci0gICAgICAgIGRzdCArPSBkc3RTa2lwOwotICAgIH0KLQotICAgIHJldHVybiBpbWFnZURh
dGEucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxmYWxzZT4ocmVj
dCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPHRydWU+KHJlY3QsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEJ5dGVBcnJheShNdWx0aXBseSBtdWx0aXBsaWVkLCBVaW50OENsYW1wZWRBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKQotewot
ICAgIFNoYXJlZEJpdG1hcCogYml0bWFwID0gbV9kYXRhLm1fYml0bWFwLmdldCgpOwotICAgIHVu
c2lnbmVkIGNoYXIqIGRzdCA9ICh1bnNpZ25lZCBjaGFyKiliaXRtYXAtPmJ5dGVzKCk7Ci0gICAg
aWYgKCFkc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZGVzdFJlY3QoZGVzdFBv
aW50LCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpKSk7Ci0KLSAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBzcmMgPSBzb3VyY2UtPmRhdGEoKTsKLSAgICBkc3QgKz0gKGRlc3RSZWN0LnkoKSAqIGJp
dG1hcC0+d2lkdGgoKSArIGRlc3RSZWN0LngoKSkgKiA0OwotICAgIHNyYyArPSAoc291cmNlUmVj
dC55KCkgKiBzb3VyY2VTaXplLndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwotICAgIGlu
dCBieXRlc1RvQ29weSA9IGRlc3RSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBkc3RTa2lwID0g
KGJpdG1hcC0+d2lkdGgoKSAtIGRlc3RSZWN0LndpZHRoKCkpICogNDsKLSAgICBpbnQgc3JjU2tp
cCA9IChzb3VyY2VTaXplLndpZHRoKCkgLSBkZXN0UmVjdC53aWR0aCgpKSAqIDQ7Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgZGVzdFJlY3QuaGVpZ2h0KCkgKiBiaXRt
YXAtPndpZHRoKCkgKiA0OwotICAgIHdoaWxlIChkc3QgPCBkc3RFbmQpIHsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogZHN0Um93RW5kID0gZHN0ICsgYnl0ZXNUb0NvcHk7Ci0gICAgICAg
IHdoaWxlIChkc3QgPCBkc3RSb3dFbmQpIHsKLSAgICAgICAgICAgIC8vIENvbnZlcnQgUkdCQSBi
aWcgZW5kaWFuIHRvIEFSR0IgbGl0dGxlIGVuZGlhbgotICAgICAgICAgICAgaW50IHJlZCA9ICpz
cmMrKzsKLSAgICAgICAgICAgIGludCBncmVlbiA9ICpzcmMrKzsKLSAgICAgICAgICAgIGludCBi
bHVlID0gKnNyYysrOwotICAgICAgICAgICAgaW50IGFscGhhID0gKnNyYysrOwotICAgICAgICAg
ICAgaWYgKG11bHRpcGxpZWQgPT0gUHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgICpk
c3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJsdWUgKiAyNTUgLyBhbHBoYSk7Ci0g
ICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZ3JlZW4g
KiAyNTUgLyBhbHBoYSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4ocmVkICogMjU1IC8gYWxwaGEpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFscGhhKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYmx1
ZSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
Z3JlZW4pOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KHJlZCk7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oYWxwaGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNyYyArPSBz
cmNTa2lwOwotICAgICAgICBkc3QgKz0gZHN0U2tpcDsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9v
a1VwVGFibGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvb2tVcFRhYmxlKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAotewot
ICAgIGlmICghbV9kYXRhLm1fYml0bWFwLT5ieXRlcygpKQotICAgICAgICByZXR1cm4gImRhdGE6
LCI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmMwYTk2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VE
ZWNvZGVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIldp
bmNlR3JhcGhpY3NFeHRyYXMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gU2hhcmVkQml0bWFwOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1fc2l6ZSwg
aGFzQWxwaGEoKSk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YURh
dGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YURhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBtX2ZyYW1lID0gMDsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJp
dG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXplKiBz
aXplKQotewotICAgIGlmICghYm1wKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCSVRN
QVAgYm1wSW5mbzsKLSAgICBHZXRPYmplY3QoYm1wLCBzaXplb2YoQklUTUFQKSwgJmJtcEluZm8p
OwotCi0gICAgQVNTRVJUKGJtcEluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOwotICAgIGludCBidWZm
ZXJTaXplID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0OwotCi0gICAg
YXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAg
SEdESU9CSiBoT2xkQm1wID0gU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgYm1wKTsKLQotICAgIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGhkYy5nZXQoKSk7Ci0KLSAgICAgICAgSW50U2l6
ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgICAgICBpZiAoc2l6ZSkKLSAg
ICAgICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgwLCAw
LCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCAqc2l6ZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXco
JmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwg
RmxvYXRSZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5LCBCbGVuZE1vZGVOb3JtYWwsIEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRj
LmdldCgpLCBoT2xkQm1wKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJpdG1hcElt
YWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKLXsKLSAg
ICBpbnQgZnJhbWVzID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJh
bWVzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gZnJhbWVBdElu
ZGV4KGkpOwotICAgICAgICBpZiAoIWJtcCB8fCBibXAtPmhlaWdodCgpICE9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzcmNTaXplLmhlaWdodCgpKSB8fCBibXAtPndpZHRoKCkgIT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNyY1NpemUud2lkdGgoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWU7Ci0gICAgICAgIG1f
Y3VycmVudEZyYW1lID0gaTsKLSAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3Qo
MCwgMCwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24oKSk7Ci0gICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMg
Zm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBJbnRTaXpl
IGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0
LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSks
IHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uKCkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24pCi17Ci0gICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpCi0gICAgICAgIGZpbGxX
aXRoU29saWRDb2xvcihjdHh0LCBkc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFj
ZSwgY29tcG9zaXRlT3ApOwotICAgIGVsc2UgewotICAgICAgICBJbnRSZWN0IGludFNyY1JlY3Qo
c3JjUmVjdEluKTsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gYm1wID0gZnJhbWVBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICAgICAgaWYgKGJtcCkgewotICAgICAgICAgICAgaWYg
KGJtcC0+d2lkdGgoKSAhPSBtX3NvdXJjZS5zaXplKCkud2lkdGgoKSkgewotICAgICAgICAgICAg
ICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYm1wLT53aWR0aCgp
KSAvIG1fc291cmNlLnNpemUoKS53aWR0aCgpOwotCi0gICAgICAgICAgICAgICAgaW50U3JjUmVj
dC5zZXRYKHN0YWJsZVJvdW5kKHNyY1JlY3RJbi54KCkgKiBzY2FsZUZhY3RvcikpOwotICAgICAg
ICAgICAgICAgIGludFNyY1JlY3Quc2V0V2lkdGgoc3RhYmxlUm91bmQoc3JjUmVjdEluLndpZHRo
KCkgKiBzY2FsZUZhY3RvcikpOwotICAgICAgICAgICAgICAgIGludFNyY1JlY3Quc2V0WShzdGFi
bGVSb3VuZChzcmNSZWN0SW4ueSgpICogc2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgICAgICBp
bnRTcmNSZWN0LnNldEhlaWdodChzdGFibGVSb3VuZChzcmNSZWN0SW4uaGVpZ2h0KCkgKiBzY2Fs
ZUZhY3RvcikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm1wLT5kcmF3KGN0eHQsIGVu
Y2xvc2luZ0ludFJlY3QoZHN0UmVjdCksIGludFNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgY29t
cG9zaXRlT3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGFydEFuaW1h
dGlvbigpOwotfQotCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJt
cCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFibXApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGJtcC0+ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBtX3NvdXJj
ZS5zaXplKCkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2Ft
cGxpbmdMZXZlbCgpIGNvbnN0Ci17Ci0gICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7
Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCi17Ci0gICAgaWYg
KG1fY2hlY2tlZEZvclNvbGlkQ29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmcmFt
ZUNvdW50KCkgIT0gMSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAg
ICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IGZyYW1lQXRJbmRleCgwKTsKLSAgICBp
ZiAoIWJtcCB8fCAhYm1wLT52YWxpZEhlaWdodCgpKSB7Ci0gICAgICAgIG1faXNTb2xpZENvbG9y
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYm1wLT53aWR0aCgp
ICE9IDEgfHwgYm1wLT52YWxpZEhlaWdodCgpICE9IDEpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29s
b3IgPSBmYWxzZTsKLSAgICAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2lzU29saWRDb2xvciA9IHRydWU7Ci0KLSAgICBp
ZiAoYm1wLT5pczE2Yml0KCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYyA9ICgodW5zaWdu
ZWQgc2hvcnQgKilibXAtPmJ5dGVzKCkpWzBdOwotICAgICAgICBpbnQgciA9IChjID4+IDcpICYg
MHhGODsKLSAgICAgICAgaW50IGcgPSAoYyA+PiAyKSAmIDB4Rjg7Ci0gICAgICAgIGludCBiID0g
KGMgPDwgMykgJiAweEY4OwotICAgICAgICBpZiAoYm1wLT51c2VzVHJhbnNwYXJlbnRDb2xvcigp
ICYmIGJtcC0+dHJhbnNwYXJlbnRDb2xvcigpID09IFJHQihyLCBnLCBiKSkKLSAgICAgICAgICAg
IG1fc29saWRDb2xvciA9IENvbG9yKHIsIGcsIGIsIDApOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcihyLCBnLCBiKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICB1bnNpZ25lZCBjID0gKCh1bnNpZ25lZCAqKWJtcC0+Ynl0ZXMoKSlbMF07Ci0gICAgICAgIG1f
c29saWRDb2xvciA9IENvbG9yKGMpOwotICAgIH0KLQotICAgIGlmIChibXAtPnZhbGlkSGVpZ2h0
KCkgPT0gYm1wLT5oZWlnaHQoKSkKLSAgICAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRy
dWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJpdmF0ZVdpbkNFLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZhdGVX
aW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGMyNTIzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJp
dmF0ZVdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0VfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVX
aW5DRV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBJbnRSZWN0Owot
Ci0gICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLQotICAgICAgICB+TWVkaWFQbGF5ZXJQ
cml2YXRlKCk7Ci0KLSAgICAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwotICAgICAg
ICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyYgdXJsKTsKLSAgICAgICAgdm9pZCBjYW5jZWxMb2FkKCk7Ci0KLSAgICAgICAgdm9pZCBwbGF5
KCk7Ci0gICAgICAgIHZvaWQgcGF1c2UoKTsKLQotICAgICAgICBib29sIHBhdXNlZCgpIGNvbnN0
OwotICAgICAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKLQotICAgICAgICBmbG9hdCBkdXJhdGlv
bigpIGNvbnN0OwotICAgICAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OwotICAgICAgICB2
b2lkIHNlZWsoZmxvYXQgdGltZSk7Ci0KLSAgICAgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKLSAg
ICAgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwotCi0gICAgICAgIE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrU3RhdGU7IH0K
LSAgICAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVhZHlTdGF0ZTsgfQotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRp
bWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IG1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0OwotICAgICAgICAvLyBGSVhNRTogYnl0ZXNMb2FkZWQoKSBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSAoYnkgc29tZWJvZHkgd2hvIGNhbiBmaW5k
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzKS4KLSAgICAgICAgdW5zaWduZWQgYnl0
ZXNMb2FkZWQoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0Owot
Ci0gICAgICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICAgICAgdm9pZCBzZXRTaXplKGNv
bnN0IEludFNpemUmKTsKLQotICAgICAgICB2b2lkIGxvYWRTdGF0ZUNoYW5nZWQoKTsKLSAgICAg
ICAgdm9pZCBkaWRFbmQoKTsKLQotICAgICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1lZGlhUGxheWVyUHJp
dmF0ZShNZWRpYVBsYXllciopOwotCi0gICAgICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7Ci0gICAg
ICAgIHZvaWQgZG9TZWVrKCk7Ci0gICAgICAgIHZvaWQgY2FuY2VsU2VlaygpOwotICAgICAgICB2
b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICAgICAg
ZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNhd1Vuc3VwcG9ydGVk
VHJhY2tzKCk7Ci0KLSAgICAgICAgLy8gZW5naW5lIHN1cHBvcnQKLSAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIq
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+
JiB0eXBlcyk7Ci0gICAgICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBv
cnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7Ci0gICAgICAgIHN0
YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5naW5l
RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiV2luQ0UiOyB9Ci0KLSAgICAgICAgTWVkaWFQ
bGF5ZXIqIG1fcGxheWVyOwotICAgICAgICBmbG9hdCBtX3NlZWtUbzsKLSAgICAgICAgZmxvYXQg
bV9lbmRUaW1lOwotICAgICAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fc2Vla1RpbWVy
OwotICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwotICAg
ICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgICAgIHVuc2ln
bmVkIG1fZW5hYmxlZFRyYWNrQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fdG90YWxUcmFja0Nv
dW50OwotICAgICAgICBib29sIG1faGFzVW5zdXBwb3J0ZWRUcmFja3M7Ci0gICAgICAgIGJvb2wg
bV9zdGFydGVkUGxheWluZzsKLSAgICAgICAgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAgIH07Ci0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQotI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJp
dmF0ZVdpbkNFX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI4ZDEwNDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJveHkuaCIKLQotI2luY2x1ZGUg
IkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiSFRN
TFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgi
Ci0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAi
UGx1Z2luVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlclBhcnRPYmplY3QuaCIKLSNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlICJjX2NsYXNzLmgi
Ci0jaW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgImNfcnVudGltZS5oIgotI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEJpbmRpbmdzOwotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotV2ViTWVkaWFQbGF5ZXJQcm94eTo6V2ViTWVkaWFQbGF5
ZXJQcm94eShNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogbV9tZWRpYVBsYXllcihwbGF5ZXIp
Ci0gICAgLCBtX2luaXQoZmFsc2UpCi0gICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKGZh
bHNlKQotewotICAgIGlmICghbV9pbml0KQotICAgICAgICBpbml0RW5naW5lKCk7Ci19Ci0KLVdl
Yk1lZGlhUGxheWVyUHJveHk6On5XZWJNZWRpYVBsYXllclByb3h5KCkKLXsKLSAgICBtX2luc3Rh
bmNlLnJlbGVhc2UoKTsKLX0KLQotU2NyaXB0SW5zdGFuY2UgV2ViTWVkaWFQbGF5ZXJQcm94eTo6
cGx1Z2luSW5zdGFuY2UoKQotewotICAgIGlmICghbV9pbnN0YW5jZSkgewotICAgICAgICBSZW5k
ZXJPYmplY3QqIHIgPSBlbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghciB8fCAh
ci0+aXNXaWRnZXQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIEZyYW1lKiBm
cmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotCi0gICAgICAgIFJlbmRlcldp
ZGdldCogcmVuZGVyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4oZWxlbWVudCgp
LT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKHJlbmRlcldpZGdldCAmJiByZW5kZXJXaWRnZXQt
PndpZGdldCgpKQotICAgICAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5zY3JpcHQoKS5jcmVh
dGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9pbnN0YW5jZTsKLX0KLQotdm9pZCBXZWJNZWRpYVBsYXllclByb3h5
Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmICghbV9pbml0KQotICAgICAgICBp
bml0RW5naW5lKCk7Ci0gICAgaWYgKG1faW5pdCkKLSAgICAgICAgaW52b2tlTWV0aG9kKCJwbGF5
Iik7Ci19Ci0KLXZvaWQgV2ViTWVkaWFQbGF5ZXJQcm94eTo6aW5pdEVuZ2luZSgpCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTE1lZGlhRWxlbWVudChtX21lZGlhUGxh
eWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKLSAgICBTdHJpbmcgdXJsID0gZWxlbWVudC0+aW5p
dGlhbFVSTCgpOwotCi0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiBwYXJhbU5hbWVzOwotICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwot
ICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKLQotICAgIC8vIGFkZCBhbGwgYXR0cmlidXRlcyBzZXQg
b24gdGhlIGVtYmVkIG9iamVjdAotICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50
KCk7ICsraSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGVsZW1lbnQtPmF0dHJpYnV0
ZUl0ZW0oaSk7Ci0gICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+bmFtZSgpLmxvY2Fs
TmFtZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFs
dWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc2VydmljZVR5cGUgPSAiYXBw
bGljYXRpb24veC1tcGxheWVyMiI7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRl
cigpLT5yZXF1ZXN0T2JqZWN0KHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihlbGVtZW50
LT5yZW5kZXJlcigpKSwgdXJsLCBudWxsQXRvbSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzKTsKLSAgICBtX2luaXQgPSB0cnVlOwotCi19Ci0KLUhUTUxNZWRpYUVsZW1lbnQq
IFdlYk1lZGlhUGxheWVyUHJveHk6OmVsZW1lbnQoKQotewotICAgIHJldHVybiB0b0hUTUxNZWRp
YUVsZW1lbnQobV9tZWRpYVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7Ci0KLX0KLQotdm9p
ZCBXZWJNZWRpYVBsYXllclByb3h5OjppbnZva2VNZXRob2QoY29uc3QgU3RyaW5nJiBtZXRob2RO
YW1lKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OwotICAgIFJvb3RPYmplY3QqIHJvb3QgPSBmcmFtZS0+c2NyaXB0KCkuYmluZGluZ1Jvb3RPYmpl
Y3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICBFeGVjU3RhdGUgKmV4
ZWMgPSByb290LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEluc3RhbmNlKiBp
bnN0YW5jZSA9IHBsdWdpbkluc3RhbmNlKCkuZ2V0KCk7Ci0gICAgaWYgKCFpbnN0YW5jZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgQ2xhc3MgKmFDbGFz
cyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwotICAgIElkZW50aWZpZXIgaWRlbihleGVjLCBtZXRo
b2ROYW1lKTsKLSAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBhQ2xhc3MtPm1ldGhvZHNOYW1l
ZChpZGVuLCBpbnN0YW5jZSk7Ci0gICAgQXJnTGlzdCBhcmdzOwotICAgIGluc3RhbmNlLT5pbnZv
a2VNZXRob2QoZXhlYywgbWV0aG9kTGlzdCAsIGFyZ3MpOwotICAgIGluc3RhbmNlLT5lbmQoKTsK
LX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTQ5NWEyNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcm94eV9o
Ci0jZGVmaW5lIE1lZGlhUGxheWVyUHJveHlfaAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3Mg
SW50UmVjdDsKLSAgICBjbGFzcyBJbnRTaXplOwotICAgIGNsYXNzIE1lZGlhUGxheWVyOwotICAg
IGNsYXNzIFBsdWdpblZpZXc7Ci0gICAgY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLQotICAgIGVu
dW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewotICAgICAgICBNZWRpYVBsYXll
ck5vdGlmaWNhdGlvblBsYXlQYXVzZUJ1dHRvblByZXNzZWQsCi0gICAgICAgIElkbGUsCi0gICAg
ICAgIExvYWRpbmcsCi0gICAgICAgIExvYWRlZCwKLSAgICAgICAgRm9ybWF0RXJyb3IsCi0gICAg
ICAgIE5ldHdvcmtFcnJvciwKLSAgICAgICAgRGVjb2RlRXJyb3IKLSAgICB9OwotCi0gICAgY2xh
c3MgV2ViTWVkaWFQbGF5ZXJQcm94eSB7Ci0gICAgcHVibGljOgotICAgICAgICBXZWJNZWRpYVBs
YXllclByb3h5KE1lZGlhUGxheWVyKiBwbGF5ZXIpOwotICAgICAgICB+V2ViTWVkaWFQbGF5ZXJQ
cm94eSgpOwotCi0gICAgICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIHtyZXR1cm4gbV9t
ZWRpYVBsYXllcjt9Ci0gICAgICAgIHZvaWQgaW5pdEVuZ2luZSgpOwotICAgICAgICB2b2lkIGxv
YWQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50
KCk7Ci0gICAgICAgIHZvaWQgaW52b2tlTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSk7
Ci0gICAgICAgIFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gcGx1Z2luSW5zdGFuY2Uo
KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOwot
ICAgICAgICBib29sIG1faW5pdDsKLSAgICAgICAgV2ViQ29yZTo6UGx1Z2luVmlldyogbV9wbHVn
aW5WaWV3OwotICAgICAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47Ci0gICAgICAg
IFNjcmlwdEluc3RhbmNlIG1faW5zdGFuY2U7Ci0gICAgfTsKLQotfQotI2VuZGlmIC8vIEVOQUJM
RShWSURFTykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvUGF0aFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjJjZTllNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9QYXRoV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0KLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbkNFLmgiCi0jaW5jbHVkZSA8d3Rm
L093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhdGg6OlBhdGgoKQotICAgIDogbV9wYXRoKG5ldyBQbGF0Zm9ybVBhdGgo
KSkKLXsKLX0KLQotUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6IG1fcGF0aChu
ZXcgUGxhdGZvcm1QYXRoKCpvdGhlci5tX3BhdGgpKQotewotfQotCi1QYXRoOjp+UGF0aCgpCi17
Ci0gICAgZGVsZXRlIG1fcGF0aDsKLX0KLQotUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBh
dGgmIG90aGVyKQotewotICAgIGlmICgmb3RoZXIgIT0gdGhpcykgewotICAgICAgICBkZWxldGUg
bV9wYXRoOwotICAgICAgICBtX3BhdGggPSBuZXcgUGxhdGZvcm1QYXRoKCpvdGhlci5tX3BhdGgp
OwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcGF0aC0+Y29udGFpbnMocG9pbnQsIHJ1bGUpOwotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgbV9wYXRoLT50cmFuc2xhdGUoc2l6ZSk7
Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAotewotICAgIHJldHVy
biBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOwotfQotCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBtX3BhdGgtPm1vdmVUbyhwb2ludCk7Ci19Ci0KLXZv
aWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIG1fcGF0
aC0+YWRkTGluZVRvKHBvaW50KTsKLX0KLQotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBtX3BhdGgtPmFk
ZFF1YWRDdXJ2ZVRvKGNwLCBwKTsKLX0KLQotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBv
aW50JiBwKQotewotICAgIG1fcGF0aC0+YWRkQmV6aWVyQ3VydmVUbyhjcDEsIGNwMiwgcCk7Ci19
Ci0KLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgbV9wYXRoLT5hZGRBcmNUbyhwMSwgcDIs
IHJhZGl1cyk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKLXsKLSAgICBtX3BhdGgt
PmNsb3NlU3VicGF0aCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50
JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQot
ewotICAgIG1fcGF0aC0+YWRkRWxsaXBzZShwLCByLCByLCBzYXIsIGVhciwgYW50aWNsb2Nrd2lz
ZSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAg
bV9wYXRoLT5hZGRSZWN0KHIpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByKQotewotICAgIG1fcGF0aC0+YWRkRWxsaXBzZShyKTsKLX0KLQotdm9pZCBQYXRo
OjphZGRQYXRoKGNvbnN0IFBhdGgmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xlYXIoKQotewotICAgIG1fcGF0aC0+
Y2xlYXIoKTsKLX0KLQotYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wYXRoLT5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0
aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKLXsKLSAgICBtX3BhdGgtPmFwcGx5KGlu
Zm8sIGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0KQotewotICAgIG1fcGF0aC0+dHJhbnNmb3JtKHQpOwotfQotCi1GbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciopIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLWJvb2wg
UGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiwgY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKLXsKLSAgICAvLyBOb3Qgc3Vy
ZSBpZiB0aGlzIGlzIGNvcnJlY3QuIEF0IHRoZSBtZWFudGltZSwgd2UgZG8gd2hhdCBvdGhlciBw
b3J0cwotICAgIC8vIGRvLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcyNjYsCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3MTg3LCBhbmQgCi0gICAgLy8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvNDU4NzMKLSAgICByZXR1cm4gIWlzRW1wdHkoKTsKLX0KLQotRmxvYXRQb2ludCBQYXRo
OjpjdXJyZW50UG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhdGgtPmxhc3RQb2ludCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NzlkOTIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzcyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIldpbkNFR3JhcGhpY3NFeHRyYXMuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBJbXBsZW1lbnRlZCBpbiBHcmFwaGljc0NvbnRleHRX
aW5DRS5jcHAKLXZvaWQgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShkb3VibGUgYW5nbGUsIGRvdWJs
ZSBhLCBkb3VibGUgYiwgZmxvYXQmIHgsIGZsb2F0JiB5KTsKLQotc3RhdGljIHZvaWQgcXVhZEN1
cnZlKGludCBzZWdtZW50cywgVmVjdG9yPFBhdGhQb2ludD4mIHB0cywgY29uc3QgUGF0aFBvaW50
KiBjb250cm9sKQotewotICAgIGNvbnN0IGZsb2F0IHN0ZXAgPSAxLjAgLyBzZWdtZW50czsKLSAg
ICByZWdpc3RlciBmbG9hdCB0QSA9IDAuMDsKLSAgICByZWdpc3RlciBmbG9hdCB0QiA9IDEuMDsK
LQotICAgIGZsb2F0IGMxeCA9IGNvbnRyb2xbMF0ueCgpOwotICAgIGZsb2F0IGMxeSA9IGNvbnRy
b2xbMF0ueSgpOwotICAgIGZsb2F0IGMyeCA9IGNvbnRyb2xbMV0ueCgpOwotICAgIGZsb2F0IGMy
eSA9IGNvbnRyb2xbMV0ueSgpOwotICAgIGZsb2F0IGMzeCA9IGNvbnRyb2xbMl0ueCgpOwotICAg
IGZsb2F0IGMzeSA9IGNvbnRyb2xbMl0ueSgpOwotCi0gICAgY29uc3QgaW50IG9mZnNldCA9IHB0
cy5zaXplKCk7Ci0gICAgcHRzLnJlc2l6ZShvZmZzZXQgKyBzZWdtZW50cyk7Ci0gICAgUGF0aFBv
aW50IHBwOwotICAgIHBwLm1feCA9IGMxeDsKLSAgICBwcC5tX3kgPSBjMXk7Ci0KLSAgICBmb3Ig
KGludCBpID0gMTsgaSA8IHNlZ21lbnRzOyArK2kpIHsKLSAgICAgICAgdEEgKz0gc3RlcDsKLSAg
ICAgICAgdEIgLT0gc3RlcDsKLQotICAgICAgICBjb25zdCBmbG9hdCBhID0gdEIgKiB0QjsKLSAg
ICAgICAgY29uc3QgZmxvYXQgYiA9IDIuMCAqIHRBICogdEI7Ci0gICAgICAgIGNvbnN0IGZsb2F0
IGMgPSB0QSAqIHRBOwotCi0gICAgICAgIHBwLm1feCA9IGMxeCAqIGEgKyBjMnggKiBiICsgYzN4
ICogYzsKLSAgICAgICAgcHAubV95ID0gYzF5ICogYSArIGMyeSAqIGIgKyBjM3kgKiBjOwotCi0g
ICAgICAgIHB0c1tvZmZzZXQgKyBpIC0gMV0gPSBwcDsKLSAgICB9Ci0KLSAgICBwcC5tX3ggPSBj
M3g7Ci0gICAgcHAubV95ID0gYzN5OwotICAgIHB0c1tvZmZzZXQgKyBzZWdtZW50cyAtIDFdID0g
cHA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZXppZXIoaW50IHNlZ21lbnRzLCBWZWN0b3I8
UGF0aFBvaW50PiYgcHRzLCBjb25zdCBQYXRoUG9pbnQqIGNvbnRyb2wpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgc3RlcCA9IDEuMCAvIHNlZ21lbnRzOwotICAgIHJlZ2lzdGVyIGZsb2F0IHRBID0gMC4w
OwotICAgIHJlZ2lzdGVyIGZsb2F0IHRCID0gMS4wOwotCi0gICAgZmxvYXQgYzF4ID0gY29udHJv
bFswXS54KCk7Ci0gICAgZmxvYXQgYzF5ID0gY29udHJvbFswXS55KCk7Ci0gICAgZmxvYXQgYzJ4
ID0gY29udHJvbFsxXS54KCk7Ci0gICAgZmxvYXQgYzJ5ID0gY29udHJvbFsxXS55KCk7Ci0gICAg
ZmxvYXQgYzN4ID0gY29udHJvbFsyXS54KCk7Ci0gICAgZmxvYXQgYzN5ID0gY29udHJvbFsyXS55
KCk7Ci0gICAgZmxvYXQgYzR4ID0gY29udHJvbFszXS54KCk7Ci0gICAgZmxvYXQgYzR5ID0gY29u
dHJvbFszXS55KCk7Ci0KLSAgICBjb25zdCBpbnQgb2Zmc2V0ID0gcHRzLnNpemUoKTsKLSAgICBw
dHMucmVzaXplKG9mZnNldCArIHNlZ21lbnRzKTsKLSAgICBQYXRoUG9pbnQgcHA7Ci0gICAgcHAu
bV94ID0gYzF4OwotICAgIHBwLm1feSA9IGMxeTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
c2VnbWVudHM7ICsraSkgewotICAgICAgICB0QSArPSBzdGVwOwotICAgICAgICB0QiAtPSBzdGVw
OwotICAgICAgICBjb25zdCBmbG9hdCB0QXNxID0gdEEgKiB0QTsKLSAgICAgICAgY29uc3QgZmxv
YXQgdEJzcSA9IHRCICogdEI7Ci0KLSAgICAgICAgY29uc3QgZmxvYXQgYSA9IHRCc3EgKiB0QjsK
LSAgICAgICAgY29uc3QgZmxvYXQgYiA9IDMuMCAqIHRBICogdEJzcTsKLSAgICAgICAgY29uc3Qg
ZmxvYXQgYyA9IDMuMCAqIHRCICogdEFzcTsKLSAgICAgICAgY29uc3QgZmxvYXQgZCA9IHRBc3Eg
KiB0QTsKLQotICAgICAgICBwcC5tX3ggPSBjMXggKiBhICsgYzJ4ICogYiArIGMzeCAqIGMgKyBj
NHggKiBkOwotICAgICAgICBwcC5tX3kgPSBjMXkgKiBhICsgYzJ5ICogYiArIGMzeSAqIGMgKyBj
NHkgKiBkOwotCi0gICAgICAgIHB0c1tvZmZzZXQgKyBpIC0gMV0gPSBwcDsKLSAgICB9Ci0KLSAg
ICBwcC5tX3ggPSBjNHg7Ci0gICAgcHAubV95ID0gYzR5OwotICAgIHB0c1tvZmZzZXQgKyBzZWdt
ZW50cyAtIDFdID0gcHA7Ci19Ci0KLXN0YXRpYyBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxv
YXRSZWN0JiByLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBwLngoKSA+PSBy
LngoKSAmJiBwLnkoKSA+PSByLnkoKSAmJiBwLngoKSA8IHIubWF4WCgpICYmIHAueSgpIDwgci5t
YXhZKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5vcm1hbGl6ZUFuZ2xlKGZsb2F0JiBhbmdsZSkKLXsK
LSAgICBhbmdsZSA9IGZtb2QoYW5nbGUsIDIgKiBwaUZsb2F0KTsKLSAgICBpZiAoYW5nbGUgPCAw
KQotICAgICAgICBhbmdsZSArPSAyICogcGlGbG9hdDsKLSAgICBpZiAoYW5nbGUgPCAwLjAwMDAx
ZikKLSAgICAgICAgYW5nbGUgPSAwOwotfQotCi1zdGF0aWMgdm9pZCB0cmFuc2Zvcm1BcmNQb2lu
dChmbG9hdCYgeCwgZmxvYXQmIHksIGNvbnN0IEZsb2F0UG9pbnQmIGMpCi17Ci0gICAgeCArPSBj
LngoKTsKLSAgICB5ICs9IGMueSgpOwotfQotCi1zdGF0aWMgdm9pZCBpbmZsYXRlUmVjdFRvQ29u
dGFpblBvaW50KEZsb2F0UmVjdCYgciwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBpZiAoci5p
c0VtcHR5KCkpIHsKLSAgICAgICAgci5zZXRYKHgpOwotICAgICAgICByLnNldFkoeSk7Ci0gICAg
ICAgIHIuc2V0U2l6ZShGbG9hdFNpemUoMSwgMSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICh4IDwgci54KCkpIHsKLSAgICAgICAgci5zZXRXaWR0aChyLm1heFgoKSAtIHgpOwot
ICAgICAgICByLnNldFgoeCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgdyA9IHggLSBy
LngoKSArIDE7Ci0gICAgICAgIGlmICh3ID4gci53aWR0aCgpKQotICAgICAgICAgICAgci5zZXRX
aWR0aCh3KTsKLSAgICB9Ci0gICAgaWYgKHkgPCByLnkoKSkgewotICAgICAgICByLnNldEhlaWdo
dChyLm1heFkoKSAtIHkpOwotICAgICAgICByLnNldFkoeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZmxvYXQgaCA9ICB5IC0gci55KCkgKyAxOwotICAgICAgICBpZiAoaCA+IHIuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICByLnNldEhlaWdodChoKTsKLSAgICB9Ci19Ci0KLS8vIHJldHVybiAwLWJh
c2VkIHZhbHVlOiAwIC0gZmlyc3QgUXVhZHJhbnQgKCAwIC0gOTAgZGVncmVlKQotc3RhdGljIGlu
bGluZSBpbnQgcXVhZHJhbnQoY29uc3QgUGF0aFBvaW50JiBwb2ludCwgY29uc3QgUGF0aFBvaW50
JiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIHBvaW50Lm1feCA8IG9yaWdpbi5tX3ggPwotICAgICAg
ICAocG9pbnQubV95IDwgb3JpZ2luLm1feSA/IDIgOiAxKQotICAgICAgICA6IChwb2ludC5tX3kg
PCBvcmlnaW4ubV95ID8gMyA6IDApOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNRdWFkcmFu
dE9uTGVmdChpbnQgcSkgeyByZXR1cm4gcSA9PSAxIHx8IHEgPT0gMjsgfQotc3RhdGljIGlubGlu
ZSBib29sIGlzUXVhZHJhbnRPblJpZ2h0KGludCBxKSB7IHJldHVybiBxID09IDAgfHwgcSA9PSAz
OyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNRdWFkcmFudE9uVG9wKGludCBxKSB7IHJldHVybiBx
ID09IDIgfHwgcSA9PSAzOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNRdWFkcmFudE9uQm90dG9t
KGludCBxKSB7IHJldHVybiBxID09IDAgfHwgcSA9PSAxOyB9Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IG5leHRRdWFkcmFudChpbnQgcSkgeyByZXR1cm4gcSA9PSAzID8gMCA6IHEgKyAxOyB9Ci1zdGF0
aWMgaW5saW5lIGludCBxdWFkcmFudERpZmYoaW50IHExLCBpbnQgcTIpCi17Ci0gICAgaW50IGQg
PSBxMSAtIHEyOwotICAgIHdoaWxlIChkIDwgMCkKLSAgICAgICAgZCArPSA0OwotICAgIHJldHVy
biBkOwotfQotCi1zdHJ1Y3QgUGF0aFZlY3RvciB7Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0
IG1feTsKLQotICAgIFBhdGhWZWN0b3IoKSA6IG1feCgwKSwgbV95KDApIHt9Ci0gICAgUGF0aFZl
Y3RvcihmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHt9Ci0gICAgZG91YmxlIGFu
Z2xlKCkgY29uc3QgeyByZXR1cm4gYXRhbjIobV95LCBtX3gpOyB9Ci0gICAgb3BlcmF0b3IgZG91
YmxlICgpIGNvbnN0IHsgcmV0dXJuIGFuZ2xlKCk7IH0KLSAgICBkb3VibGUgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gX2h5cG90KG1feCwgbV95KTsgfQotfTsKLQotUGF0aFZlY3RvciBvcGVyYXRv
ci0oY29uc3QgUGF0aFBvaW50JiBwMSwgY29uc3QgUGF0aFBvaW50JiBwMikKLXsKLSAgICByZXR1
cm4gUGF0aFZlY3RvcihwMS5tX3ggLSBwMi5tX3gsIHAxLm1feSAtIHAyLm1feSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGFkZEFyY1BvaW50KFBhdGhQb2x5Z29uJiBwb2x5LCBjb25zdCBQYXRoUG9pbnQm
IGNlbnRlciwgY29uc3QgUGF0aFBvaW50JiByYWRpdXMsIGRvdWJsZSBhbmdsZSkKLXsKLSAgICBQ
YXRoUG9pbnQgcDsKLSAgICBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGFuZ2xlLCByYWRpdXMubV94
LCByYWRpdXMubV95LCBwLm1feCwgcC5tX3kpOwotICAgIHRyYW5zZm9ybUFyY1BvaW50KHAubV94
LCBwLm1feSwgY2VudGVyKTsKLSAgICBpZiAocG9seS5pc0VtcHR5KCkgfHwgcG9seS5sYXN0KCkg
IT0gcCkKLSAgICAgICAgcG9seS5hcHBlbmQocCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZEFyY1Bv
aW50cyhQYXRoUG9seWdvbiYgcG9seSwgY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudDo6QXJjVG8m
IGRhdGEpCi17Ci0gICAgY29uc3QgUGF0aFBvaW50JiBzdGFydFBvaW50ID0gcG9seS5sYXN0KCk7
Ci0gICAgZG91YmxlIGN1ckFuZ2xlID0gc3RhcnRQb2ludCAtIGRhdGEubV9jZW50ZXI7Ci0gICAg
ZG91YmxlIGVuZEFuZ2xlID0gZGF0YS5tX2VuZCAtIGRhdGEubV9jZW50ZXI7Ci0gICAgZG91Ymxl
IGFuZ2xlU3RlcCA9IDIuIC8gc3RkOjptYXgoZGF0YS5tX3JhZGl1cy5tX3gsIGRhdGEubV9yYWRp
dXMubV95KTsKLSAgICBpZiAoZGF0YS5tX2Nsb2Nrd2lzZSkgewotICAgICAgICBpZiAoZW5kQW5n
bGUgPD0gY3VyQW5nbGUgfHwgc3RhcnRQb2ludCA9PSBkYXRhLm1fZW5kKQotICAgICAgICAgICAg
ZW5kQW5nbGUgKz0gMiAqIHBpRG91YmxlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFuZ2xlU3Rl
cCA9IC1hbmdsZVN0ZXA7Ci0gICAgICAgIGlmIChlbmRBbmdsZSA+PSBjdXJBbmdsZSB8fCBzdGFy
dFBvaW50ID09IGRhdGEubV9lbmQpCi0gICAgICAgICAgICBlbmRBbmdsZSAtPSAyICogcGlEb3Vi
bGU7Ci0gICAgfQotCi0gICAgZm9yIChjdXJBbmdsZSArPSBhbmdsZVN0ZXA7IGRhdGEubV9jbG9j
a3dpc2UgPyBjdXJBbmdsZSA8IGVuZEFuZ2xlIDogY3VyQW5nbGUgPiBlbmRBbmdsZTsgY3VyQW5n
bGUgKz0gYW5nbGVTdGVwKQotICAgICAgICBhZGRBcmNQb2ludChwb2x5LCBkYXRhLm1fY2VudGVy
LCBkYXRhLm1fcmFkaXVzLCBjdXJBbmdsZSk7Ci0KLSAgICBpZiAocG9seS5pc0VtcHR5KCkgfHwg
cG9seS5sYXN0KCkgIT0gZGF0YS5tX2VuZCkKLSAgICAgICAgcG9seS5hcHBlbmQoZGF0YS5tX2Vu
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdQb2x5Z29ucyhIREMgZGMsIGNvbnN0IFZlY3RvcjxQ
YXRoUG9seWdvbj4mIHBvbHlnb25zLCBib29sIGZpbGwsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSog
dHJhbnNmb3JtYXRpb24pCi17Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHlnb24+Ojpjb25zdF9p
dGVyYXRvciBpID0gcG9seWdvbnMuYmVnaW4oKTsgaSAhPSBwb2x5Z29ucy5lbmQoKTsgKytpKSB7
Ci0gICAgICAgIGludCBucG9pbnRzID0gaS0+c2l6ZSgpOwotICAgICAgICBpZiAoIW5wb2ludHMp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBQT0lOVCogd2luUG9pbnRzID0gMDsK
LSAgICAgICAgaWYgKGZpbGwpIHsKLSAgICAgICAgICAgIGlmIChucG9pbnRzID4gMikKLSAgICAg
ICAgICAgICAgICB3aW5Qb2ludHMgPSBuZXcgUE9JTlRbbnBvaW50cyArIDFdOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHdpblBvaW50cyA9IG5ldyBQT0lOVFtucG9pbnRzXTsKLQotICAg
ICAgICBpZiAod2luUG9pbnRzKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb24pIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBpMiA9IDA7IGkyIDwgbnBvaW50czsgKytpMikgewot
ICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRyUG9pbnQgPSB0cmFuc2Zvcm1hdGlvbi0+
bWFwUG9pbnQoaS0+YXQoaTIpKTsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9pbnRzW2kyXS54
ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwotICAgICAgICAgICAgICAgICAgICB3aW5Qb2lu
dHNbaTJdLnkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpMiA9IDA7IGky
IDwgbnBvaW50czsgKytpMikgewotICAgICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJdLngg
PSBzdGFibGVSb3VuZChpLT5hdChpMikueCgpKTsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9p
bnRzW2kyXS55ID0gc3RhYmxlUm91bmQoaS0+YXQoaTIpLnkoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmlsbCAmJiB3aW5Qb2ludHNbbnBv
aW50cyAtIDFdICE9IHdpblBvaW50c1swXSkgewotICAgICAgICAgICAgICAgIHdpblBvaW50c1tu
cG9pbnRzXS54ID0gd2luUG9pbnRzWzBdLng7Ci0gICAgICAgICAgICAgICAgd2luUG9pbnRzW25w
b2ludHNdLnkgPSB3aW5Qb2ludHNbMF0ueTsKLSAgICAgICAgICAgICAgICArK25wb2ludHM7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaWxsKQotICAgICAgICAgICAgICAgIDo6
UG9seWdvbihkYywgd2luUG9pbnRzLCBucG9pbnRzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICA6OlBvbHlsaW5lKGRjLCB3aW5Qb2ludHMsIG5wb2ludHMpOwotICAgICAgICAg
ICAgZGVsZXRlW10gd2luUG9pbnRzOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLWludCBQbGF0
Zm9ybVBhdGhFbGVtZW50OjpudW1Db250cm9sUG9pbnRzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgIGNhc2UgUGF0aE1vdmVUbzoKLSAgICBjYXNlIFBhdGhMaW5lVG86Ci0g
ICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgUGF0aFF1YWRDdXJ2ZVRvOgotICAgIGNhc2UgUGF0
aEFyY1RvOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFBhdGhCZXppZXJDdXJ2ZVRvOgot
ICAgICAgICByZXR1cm4gMzsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQobV90eXBlID09
IFBhdGhDbG9zZVN1YnBhdGgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWludCBQ
bGF0Zm9ybVBhdGhFbGVtZW50OjpudW1Qb2ludHMoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90
eXBlKSB7Ci0gICAgY2FzZSBQYXRoTW92ZVRvOgotICAgIGNhc2UgUGF0aExpbmVUbzoKLSAgICBj
YXNlIFBhdGhBcmNUbzoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBQYXRoUXVhZEN1cnZl
VG86Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgUGF0aEJlemllckN1cnZlVG86Ci0gICAg
ICAgIHJldHVybiAzOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gUGF0
aENsb3NlU3VicGF0aCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBQYXRo
UG9seWdvbjo6bW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAgICBmb3IgKFZlY3Rv
cjxQYXRoUG9pbnQ+OjppdGVyYXRvciBpID0gYmVnaW4oKTsgaSA8IGVuZCgpOyArK2kpCi0gICAg
ICAgIGktPm1vdmUob2Zmc2V0KTsKLX0KLQotdm9pZCBQYXRoUG9seWdvbjo6dHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKLXsKLSAgICBmb3IgKFZlY3RvcjxQYXRoUG9pbnQ+Ojpp
dGVyYXRvciBpID0gYmVnaW4oKTsgaSA8IGVuZCgpOyArK2kpCi0gICAgICAgICppID0gdC5tYXBQ
b2ludCgqaSk7Ci19Ci0KLWJvb2wgUGF0aFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAotewotICAgIGlmIChzaXplKCkgPCAzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBUZXN0IGludGVyc2VjdGlvbnMgYmV0d2VlbiB0aGUgcG9seWdvbiBh
bmQgdGhlIHZlcnRpY2FsIGxpbmU6IHggPSBwb2ludC54KCkKLQotICAgIGludCBpbnRlcnNlY3Rl
ZCA9IDA7Ci0gICAgY29uc3QgUGF0aFBvaW50KiBwb2ludDEgPSAmbGFzdCgpOwotICAgIFZlY3Rv
cjxQYXRoUG9pbnQ+Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0gZW5kKCk7Ci0gICAgLy8gd2FzTmVn
YXRpdmU6IC0xIG1lYW5zIHVua25vd24sIDAgbWVhbnMgZmFsc2UsIDEgbWVhbnMgdHJ1ZS4KLSAg
ICBpbnQgd2FzTmVnYXRpdmUgPSAtMTsKLSAgICBmb3IgKFZlY3RvcjxQYXRoUG9pbnQ+Ojpjb25z
dF9pdGVyYXRvciBpID0gYmVnaW4oKTsgaSAhPSBsYXN0OyArK2kpIHsKLSAgICAgICAgY29uc3Qg
UGF0aFBvaW50JiBwb2ludDIgPSAqaTsKLSAgICAgICAgaWYgKHBvaW50MS0+eCgpICE9IHBvaW50
LngoKSkgewotICAgICAgICAgICAgaWYgKHBvaW50Mi54KCkgPT0gcG9pbnQueCgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGdldHRpbmcgb24gdGhlIHZlcnRpY2FsIGxpbmUKLSAgICAg
ICAgICAgICAgICB3YXNOZWdhdGl2ZSA9IHBvaW50MS0+eCgpIDwgcG9pbnQueCgpID8gMSA6IDA7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvaW50Mi54KCkgPCBwb2ludC54KCkgIT0gcG9pbnQx
LT54KCkgPCBwb2ludC54KCkpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB5ID0gKHBvaW50Mi55
KCkgLSBwb2ludDEtPnkoKSkgLyAocG9pbnQyLngoKSAtIHBvaW50MS0+eCgpKSAqIChwb2ludC54
KCkgLSBwb2ludDEtPngoKSkgKyBwb2ludDEtPnkoKTsKLSAgICAgICAgICAgICAgICBpZiAoeSA+
PSBwb2ludC55KCkpCi0gICAgICAgICAgICAgICAgICAgICsraW50ZXJzZWN0ZWQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSB3ZXJlIG9uIHRoZSB2
ZXJ0aWNhbCBsaW5lCi0KLSAgICAgICAgICAgIC8vIGhhbmRsZSBzcGVjaWFsIGNhc2UKLSAgICAg
ICAgICAgIGlmIChwb2ludDEtPnkoKSA9PSBwb2ludC55KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChwb2ludDEtPnkoKSA+IHBvaW50LnkoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChwb2ludDIueCgpID09IHBvaW50LngoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBzZWUgaWYgdGhlIHBvaW50IGlzIG9uIHRoaXMgc2VnbWVudAotICAgICAg
ICAgICAgICAgICAgICBpZiAocG9pbnQyLnkoKSA8PSBwb2ludC55KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUg
c3RpbGwgb24gdGhlIGxpbmUKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBhcmUgbGVhdmluZyB0aGUgbGluZSBub3cuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgdG8gZ2V0IGJhY2sgdG8gc2VlIHdoaWNoIHNpZGUgd2UgY29tZSBmcm9t
LiBJZiB3ZSBjb21lIGZyb20KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgc2lkZSB3
ZSBhcmUgbGVhdmluZywgbm8gaW50ZXJzZWN0aW9uIHNob3VsZCBiZSBjb3VudGVkCi0gICAgICAg
ICAgICAgICAgICAgIGlmICh3YXNOZWdhdGl2ZSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxQYXRoUG9pbnQ+Ojpjb25zdF9pdGVyYXRvciBqTGFzdCA9IGk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8UGF0aFBvaW50Pjo6Y29uc3RfaXRlcmF0b3IgaiA9IGk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGogPT0gYmVnaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9
IGxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtLWo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGot
PngoKSAhPSBwb2ludC54KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGotPngoKSA+IHBvaW50LngoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdhc05lZ2F0aXZlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzTmVnYXRpdmUgPSAxOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChqICE9IGpMYXN0KTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc05lZ2F0aXZlIDwgMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHdhc05lZ2F0aXZlID8gcG9pbnQyLngoKSA+IHBvaW50
LngoKSA6IHBvaW50Mi54KCkgPCBwb2ludC54KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAr
K2ludGVyc2VjdGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
cG9pbnQyLngoKSA9PSBwb2ludC54KCkgJiYgcG9pbnQyLnkoKSA+PSBwb2ludC55KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcG9pbnQxID0gJnBv
aW50MjsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW50ZXJzZWN0ZWQgJiAxOwotfQotCi12b2lkIFBs
YXRmb3JtUGF0aEVsZW1lbnQ6Om1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi17Ci0gICAg
aW50IG4gPSBudW1Db250cm9sUG9pbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyAr
K2kpCi0gICAgICAgIG1fZGF0YS5tX3BvaW50c1tpXS5tb3ZlKG9mZnNldCk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1QYXRoRWxlbWVudDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkK
LXsKLSAgICBpbnQgbiA9IG51bUNvbnRyb2xQb2ludHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG47ICsraSkgewotICAgICAgICBGbG9hdFBvaW50IHAgPSB0Lm1hcFBvaW50KG1fZGF0YS5t
X3BvaW50c1tpXSk7Ci0gICAgICAgIG1fZGF0YS5tX3BvaW50c1tpXS5zZXQocC54KCksIHAueSgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6aW5mbGF0ZVJlY3RUb0Nv
bnRhaW5NZShGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3QK
LXsKLSAgICBpZiAobV90eXBlID09IFBhdGhBcmNUbykgewotICAgICAgICBjb25zdCBBcmNUbyYg
ZGF0YSA9IG1fZGF0YS5tX2FyY1RvRGF0YTsKLSAgICAgICAgUGF0aFBvaW50IHN0YXJ0UG9pbnQ7
Ci0gICAgICAgIHN0YXJ0UG9pbnQgPSBsYXN0UG9pbnQ7Ci0gICAgICAgIFBhdGhQb2ludCBlbmRQ
b2ludCA9IGRhdGEubV9lbmQ7Ci0gICAgICAgIGlmICghZGF0YS5tX2Nsb2Nrd2lzZSkKLSAgICAg
ICAgICAgIHN0ZDo6c3dhcChzdGFydFBvaW50LCBlbmRQb2ludCk7Ci0KLSAgICAgICAgaW50IHEw
ID0gcXVhZHJhbnQoc3RhcnRQb2ludCwgZGF0YS5tX2NlbnRlcik7Ci0gICAgICAgIGludCBxMSA9
IHF1YWRyYW50KGVuZFBvaW50LCBkYXRhLm1fY2VudGVyKTsKLSAgICAgICAgYm9vbCBjb250YWlu
c0V4dHJlbWVzWzRdID0geyBmYWxzZSB9OyAvLyBib3R0b20sIGxlZnQsIHRvcCwgcmlnaHQKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFBhdGhQb2ludCBleHRyZW1lVmVjdG9yc1s0XSA9IHsgeyAwLCAx
IH0sIHsgLTEsIDAgfSwgeyAwLCAtMSB9LCB7IDEsIDAgfSB9OwotICAgICAgICBpZiAocTAgPT0g
cTEpIHsKLSAgICAgICAgICAgIGlmIChzdGFydFBvaW50Lm1feCA9PSBlbmRQb2ludC5tX3ggfHwg
aXNRdWFkcmFudE9uQm90dG9tKHEwKSAhPSBzdGFydFBvaW50Lm1feCA+IGVuZFBvaW50Lm1feCkg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICAg
ICAgICAgICAgICBjb250YWluc0V4dHJlbWVzW2ldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBleHRyZW1lID0gcTA7Ci0gICAgICAgICAg
ICBpbnQgZGlmZiA9IHF1YWRyYW50RGlmZihxMSwgcTApOwotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkaWZmOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb250YWluc0V4dHJlbWVz
W2V4dHJlbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBleHRyZW1lID0gbmV4dFF1YWRyYW50
KGV4dHJlbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW5mbGF0ZVJl
Y3RUb0NvbnRhaW5Qb2ludChyLCBzdGFydFBvaW50Lm1feCwgc3RhcnRQb2ludC5tX3kpOwotICAg
ICAgICBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KHIsIGVuZFBvaW50Lm1feCwgZW5kUG9pbnQu
bV95KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChjb250YWluc0V4dHJlbWVzW2ldKQotICAgICAgICAgICAgICAgIGluZmxhdGVSZWN0VG9D
b250YWluUG9pbnQociwgZGF0YS5tX2NlbnRlci5tX3ggKyBkYXRhLm1fcmFkaXVzLm1feCAqIGV4
dHJlbWVWZWN0b3JzW2ldLm1feCwgZGF0YS5tX2NlbnRlci5tX3kgKyBkYXRhLm1fcmFkaXVzLm1f
eSAqIGV4dHJlbWVWZWN0b3JzW2ldLm1feSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpbnQgbiA9IG51bVBvaW50cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47
ICsraSkKLSAgICAgICAgICAgIGluZmxhdGVSZWN0VG9Db250YWluUG9pbnQociwgbV9kYXRhLm1f
cG9pbnRzW2ldLm1feCwgbV9kYXRhLm1fcG9pbnRzW2ldLm1feSk7Ci0gICAgfQotfQotCi1QYXRo
RWxlbWVudFR5cGUgUGxhdGZvcm1QYXRoRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFBhdGhNb3ZlVG86Ci0gICAgICAgIHJldHVybiBQYXRo
RWxlbWVudE1vdmVUb1BvaW50OwotICAgIGNhc2UgUGF0aExpbmVUbzoKLSAgICAgICAgcmV0dXJu
IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7Ci0gICAgY2FzZSBQYXRoQXJjVG86Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGVyZSdzIG5vIGFyY1RvIHR5cGUgZm9yIFBhdGhFbGVtZW50Ci0gICAgICAg
IHJldHVybiBQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50OwotICAgICAgICAvLyByZXR1cm4gUGF0
aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OwotICAgIGNhc2UgUGF0aFF1YWRDdXJ2ZVRvOgot
ICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OwotICAgIGNhc2Ug
UGF0aEJlemllckN1cnZlVG86Ci0gICAgICAgIHJldHVybiBQYXRoRWxlbWVudEFkZEN1cnZlVG9Q
b2ludDsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQobV90eXBlID09IFBhdGhDbG9zZVN1
YnBhdGgpOwotICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7Ci0gICAgfQot
fQotCi1QbGF0Zm9ybVBhdGg6OlBsYXRmb3JtUGF0aCgpCi0gICAgOiBtX3BlbkxpZnRlZCh0cnVl
KQotewotICAgIG1fY3VycmVudFBvaW50LmNsZWFyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRo
OjplbnN1cmVTdWJwYXRoKCkKLXsKLSAgICBpZiAobV9wZW5MaWZ0ZWQpIHsKLSAgICAgICAgbV9w
ZW5MaWZ0ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9zdWJwYXRocy5hcHBlbmQoUGF0aFBvbHlnb24o
KSk7Ci0gICAgICAgIG1fc3VicGF0aHMubGFzdCgpLmFwcGVuZChtX2N1cnJlbnRQb2ludCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9zdWJwYXRocy5pc0VtcHR5KCkpOwotfQotCi12
b2lkIFBsYXRmb3JtUGF0aDo6YWRkVG9TdWJwYXRoKGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQm
IGUpCi17Ci0gICAgaWYgKGUucGxhdGZvcm1UeXBlKCkgPT0gUGxhdGZvcm1QYXRoRWxlbWVudDo6
UGF0aE1vdmVUbykgewotICAgICAgICBtX3BlbkxpZnRlZCA9IHRydWU7Ci0gICAgICAgIG1fY3Vy
cmVudFBvaW50ID0gZS5wb2ludEF0KDApOwotICAgIH0gZWxzZSBpZiAoZS5wbGF0Zm9ybVR5cGUo
KSA9PSBQbGF0Zm9ybVBhdGhFbGVtZW50OjpQYXRoQ2xvc2VTdWJwYXRoKSB7Ci0gICAgICAgIG1f
cGVuTGlmdGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFtX3N1YnBhdGhzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKG1fY3VycmVudFBvaW50ICE9IG1fc3VicGF0aHMubGFzdCgpWzBdKSB7
Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIFczQywgd2UgaGF2ZSB0byBkcmF3IGEg
bGluZSBmcm9tIGN1cnJlbnQgcG9pbnQgdG8gdGhlIGluaXRpYWwgcG9pbnQKLSAgICAgICAgICAg
ICAgICBtX3N1YnBhdGhzLmxhc3QoKS5hcHBlbmQobV9zdWJwYXRocy5sYXN0KClbMF0pOwotICAg
ICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gbV9zdWJwYXRocy5sYXN0KClbMF07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuY2xl
YXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnN1cmVTdWJwYXRoKCk7Ci0gICAgICAgIHN3
aXRjaCAoZS5wbGF0Zm9ybVR5cGUoKSkgewotICAgICAgICBjYXNlIFBsYXRmb3JtUGF0aEVsZW1l
bnQ6OlBhdGhMaW5lVG86Ci0gICAgICAgICAgICBtX3N1YnBhdGhzLmxhc3QoKS5hcHBlbmQoZS5w
b2ludEF0KDApKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBsYXRmb3JtUGF0
aEVsZW1lbnQ6OlBhdGhBcmNUbzoKLSAgICAgICAgICAgIGFkZEFyY1BvaW50cyhtX3N1YnBhdGhz
Lmxhc3QoKSwgZS5hcmNUbygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBs
YXRmb3JtUGF0aEVsZW1lbnQ6OlBhdGhRdWFkQ3VydmVUbzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBQYXRoUG9pbnQgY29udHJvbFtdID0gewotICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRQb2ludCwKLSAgICAgICAgICAgICAgICAgICAgZS5wb2ludEF0KDApLAotICAgICAg
ICAgICAgICAgICAgICBlLnBvaW50QXQoMSksCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogbWFnaWMgbnVtYmVyPwotICAgICAgICAgICAgICAgIHF1YWRDdXJ2
ZSg1MCwgbV9zdWJwYXRocy5sYXN0KCksIGNvbnRyb2wpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0aEJlemll
ckN1cnZlVG86Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUGF0aFBvaW50IGNvbnRy
b2xbXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQsCi0gICAgICAgICAg
ICAgICAgICAgIGUucG9pbnRBdCgwKSwKLSAgICAgICAgICAgICAgICAgICAgZS5wb2ludEF0KDEp
LAotICAgICAgICAgICAgICAgICAgICBlLnBvaW50QXQoMiksCi0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWFnaWMgbnVtYmVyPwotICAgICAgICAgICAgICAg
IGJlemllcigxMDAsIG1fc3VicGF0aHMubGFzdCgpLCBjb250cm9sKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBt
X2N1cnJlbnRQb2ludCA9IG1fc3VicGF0aHMubGFzdCgpLmxhc3QoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgUGxhdGZvcm1QYXRoOjphcHBlbmQoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSkKLXsK
LSAgICBlLmluZmxhdGVSZWN0VG9Db250YWluTWUobV9ib3VuZGluZ1JlY3QsIGxhc3RQb2ludCgp
KTsKLSAgICBhZGRUb1N1YnBhdGgoZSk7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoZSk7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1QYXRoOjphcHBlbmQoY29uc3QgUGxhdGZvcm1QYXRoJiBwKQotewotICAg
IGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnRzJiBlID0gcC5lbGVtZW50cygpOwotICAgIGZvciAo
UGxhdGZvcm1QYXRoRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0KGUuYmVnaW4oKSk7IGl0ICE9
IGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgYWRkVG9TdWJwYXRoKCppdCk7Ci0gICAgICAgIGl0
LT5pbmZsYXRlUmVjdFRvQ29udGFpbk1lKG1fYm91bmRpbmdSZWN0LCBsYXN0UG9pbnQoKSk7Ci0g
ICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKCppdCk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3Jt
UGF0aDo6Y2xlYXIoKQotewotICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKLSAgICBtX2JvdW5kaW5n
UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3VicGF0aHMuY2xlYXIoKTsKLSAgICBtX2N1cnJl
bnRQb2ludC5jbGVhcigpOwotICAgIG1fcGVuTGlmdGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVBhdGg6OnN0cm9rZVBhdGgoSERDIGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5z
Zm9ybWF0aW9uKSBjb25zdAotewotICAgIGRyYXdQb2x5Z29ucyhkYywgbV9zdWJwYXRocywgZmFs
c2UsIHRyYW5zZm9ybWF0aW9uKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKEhE
QyBkYywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm1hdGlvbikgY29uc3QKLXsKLSAg
ICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9Q
RU4pKTsKLSAgICBkcmF3UG9seWdvbnMoZGMsIG1fc3VicGF0aHMsIHRydWUsIHRyYW5zZm9ybWF0
aW9uKTsKLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Q
YXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGZvciAoUGxhdGZv
cm1QYXRoRWxlbWVudHM6Oml0ZXJhdG9yIGl0KG1fZWxlbWVudHMuYmVnaW4oKSk7IGl0ICE9IG1f
ZWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5tb3ZlKHNpemUpOwotCi0gICAgbV9i
b3VuZGluZ1JlY3QubW92ZShzaXplKTsKLSAgICBmb3IgKFZlY3RvcjxQYXRoUG9seWdvbj46Oml0
ZXJhdG9yIGl0ID0gbV9zdWJwYXRocy5iZWdpbigpOyBpdCAhPSBtX3N1YnBhdGhzLmVuZCgpOyAr
K2l0KQotICAgICAgICBpdC0+bW92ZShzaXplKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OnRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi17Ci0gICAgZm9yIChQbGF0Zm9ybVBh
dGhFbGVtZW50czo6aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVt
ZW50cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnRyYW5zZm9ybSh0KTsKLQotICAgIG1fYm91
bmRpbmdSZWN0ID0gdC5tYXBSZWN0KG1fYm91bmRpbmdSZWN0KTsKLSAgICBmb3IgKFZlY3RvcjxQ
YXRoUG9seWdvbj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJwYXRocy5iZWdpbigpOyBpdCAhPSBtX3N1
YnBhdGhzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+dHJhbnNmb3JtKHQpOwotfQotCi1ib29s
IFBsYXRmb3JtUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxl
IHJ1bGUpIGNvbnN0Ci17Ci0gICAgLy8gb3B0aW1pemF0aW9uOiBjaGVjayB0aGUgYm91bmRpbmcg
cmVjdCBmaXJzdAotICAgIGlmICghY29udGFpbnNQb2ludChtX2JvdW5kaW5nUmVjdCwgcG9pbnQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKFZlY3RvcjxQYXRoUG9seWdvbj46
OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3N1YnBhdGhzLmJlZ2luKCk7IGkgIT0gbV9zdWJwYXRocy5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1QYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgUGxhdGZv
cm1QYXRoRWxlbWVudDo6TW92ZVRvIGRhdGEgPSB7IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfSB9
OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBlKTsKLX0K
LQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
LXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpMaW5lVG8gZGF0YSA9IHsgeyBwb2ludC54KCks
IHBvaW50LnkoKSB9IH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKLSAgICBh
cHBlbmQocGUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgUGxhdGZvcm1QYXRo
RWxlbWVudDo6UXVhZEN1cnZlVG8gZGF0YSA9IHsgeyBjcC54KCksIGNwLnkoKSB9LCB7IHAueCgp
LCBwLnkoKSB9IH07Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKLSAgICBhcHBl
bmQocGUpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYg
cCkKLXsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpCZXppZXJDdXJ2ZVRvIGRhdGEgPSB7IHsg
Y3AxLngoKSwgY3AxLnkoKSB9LCB7IGNwMi54KCksIGNwMi55KCkgfSwgeyBwLngoKSwgcC55KCkg
fSB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBlKTsK
LX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIGZwMSwg
Y29uc3QgRmxvYXRQb2ludCYgZnAyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgY29uc3QgUGF0aFBv
aW50JiBwMCA9IG1fY3VycmVudFBvaW50OwotICAgIFBhdGhQb2ludCBwMTsKLSAgICBwMSA9IGZw
MTsKLSAgICBQYXRoUG9pbnQgcDI7Ci0gICAgcDIgPSBmcDI7Ci0gICAgaWYgKCFyYWRpdXMgfHwg
cDAgPT0gcDEgfHwgcDEgPT0gcDIpIHsKLSAgICAgICAgYWRkTGluZVRvKHAxKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFBhdGhWZWN0b3IgdjAxID0gcDAgLSBwMTsKLSAgICBQYXRo
VmVjdG9yIHYyMSA9IHAyIC0gcDE7Ci0KLSAgICAvLyBzaW4oQSAtIEIpID0gc2luKEEpICogY29z
KEIpIC0gc2luKEIpICogY29zKEEpCi0gICAgZG91YmxlIGNyb3NzID0gdjAxLm1feCAqIHYyMS5t
X3kgLSB2MDEubV95ICogdjIxLm1feDsKLQotICAgIGlmIChmYWJzKGNyb3NzKSA8IDFFLTEwKSB7
Ci0gICAgICAgIC8vIG9uIG9uZSBsaW5lCi0gICAgICAgIGFkZExpbmVUbyhwMSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZDAxID0gdjAxLmxlbmd0aCgpOwotICAgIGRv
dWJsZSBkMjEgPSB2MjEubGVuZ3RoKCk7Ci0gICAgZG91YmxlIGFuZ2xlID0gKHBpRG91YmxlIC0g
ZmFicyhhc2luKGNyb3NzIC8gKGQwMSAqIGQyMSkpKSkgKiAwLjU7Ci0gICAgZG91YmxlIHNwYW4g
PSByYWRpdXMgKiB0YW4oYW5nbGUpOwotICAgIGRvdWJsZSByYXRlID0gc3BhbiAvIGQwMTsKLSAg
ICBQYXRoUG9pbnQgc3RhcnRQb2ludDsKLSAgICBzdGFydFBvaW50Lm1feCA9IHAxLm1feCArIHYw
MS5tX3ggKiByYXRlOwotICAgIHN0YXJ0UG9pbnQubV95ID0gcDEubV95ICsgdjAxLm1feSAqIHJh
dGU7Ci0KLSAgICBhZGRMaW5lVG8oc3RhcnRQb2ludCk7Ci0KLSAgICBQYXRoUG9pbnQgZW5kUG9p
bnQ7Ci0gICAgcmF0ZSA9IHNwYW4gLyBkMjE7Ci0gICAgZW5kUG9pbnQubV94ID0gcDEubV94ICsg
djIxLm1feCAqIHJhdGU7Ci0gICAgZW5kUG9pbnQubV95ID0gcDEubV95ICsgdjIxLm1feSAqIHJh
dGU7Ci0KLSAgICBQYXRoUG9pbnQgbWlkUG9pbnQ7Ci0gICAgbWlkUG9pbnQubV94ID0gKHN0YXJ0
UG9pbnQubV94ICsgZW5kUG9pbnQubV94KSAqIDAuNTsKLSAgICBtaWRQb2ludC5tX3kgPSAoc3Rh
cnRQb2ludC5tX3kgKyBlbmRQb2ludC5tX3kpICogMC41OwotCi0gICAgUGF0aFZlY3RvciB2bTEg
PSBtaWRQb2ludCAtIHAxOwotICAgIGRvdWJsZSBkbTEgPSB2bTEubGVuZ3RoKCk7Ci0gICAgZG91
YmxlIGQgPSBfaHlwb3QocmFkaXVzLCBzcGFuKTsKLQotICAgIFBhdGhQb2ludCBjZW50ZXJQb2lu
dDsKLSAgICByYXRlID0gZCAvIGRtMTsKLSAgICBjZW50ZXJQb2ludC5tX3ggPSBwMS5tX3ggKyB2
bTEubV94ICogcmF0ZTsKLSAgICBjZW50ZXJQb2ludC5tX3kgPSBwMS5tX3kgKyB2bTEubV95ICog
cmF0ZTsKLQotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkFyY1RvIGRhdGEgPSB7Ci0gICAgICAg
IGVuZFBvaW50LAotICAgICAgICBjZW50ZXJQb2ludCwKLSAgICAgICAgeyByYWRpdXMsIHJhZGl1
cyB9LAotICAgICAgICBjcm9zcyA8IDAKLSAgICB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQg
cGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmNsb3Nl
U3VicGF0aCgpCi17Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZTsKLSAgICBhcHBlbmQocGUp
OwotfQotCi0vLyBhZGQgYSBjaXJjdWxhciBhcmMgY2VudHJlZCBhdCBwIHdpdGggcmFkaXVzIHIg
ZnJvbSBzdGFydCBhbmdsZSBzYXIgKHJhZGlhbnMpIHRvIGVuZCBhbmdsZSBlYXIKLXZvaWQgUGxh
dGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IGEsIGZsb2F0
IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgZmxv
YXQgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFk7Ci0KLSAgICBub3JtYWxpemVBbmdsZShzYXIp
OwotICAgIG5vcm1hbGl6ZUFuZ2xlKGVhcik7Ci0KLSAgICBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xl
KHNhciwgYSwgYiwgc3RhcnRYLCBzdGFydFkpOwotICAgIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUo
ZWFyLCBhLCBiLCBlbmRYLCBlbmRZKTsKLQotICAgIHRyYW5zZm9ybUFyY1BvaW50KHN0YXJ0WCwg
c3RhcnRZLCBwKTsKLSAgICB0cmFuc2Zvcm1BcmNQb2ludChlbmRYLCBlbmRZLCBwKTsKLQotICAg
IEZsb2F0UG9pbnQgc3RhcnQoc3RhcnRYLCBzdGFydFkpOwotICAgIG1vdmVUbyhzdGFydCk7Ci0K
LSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyBkYXRhID0geyB7IGVuZFgsIGVuZFkgfSwg
eyBwLngoKSwgcC55KCkgfSwgIHsgYSwgYiB9LCAhYW50aWNsb2Nrd2lzZSB9OwotICAgIFBsYXRm
b3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5kKHBlKTsKLX0KLQotCi12b2lkIFBs
YXRmb3JtUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgbW92ZVRvKHIu
bG9jYXRpb24oKSk7Ci0KLSAgICBmbG9hdCByaWdodCA9IHIubWF4WCgpIC0gMTsKLSAgICBmbG9h
dCBib3R0b20gPSByLm1heFkoKSAtIDE7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmlnaHQs
IHIueSgpKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmlnaHQsIGJvdHRvbSkpOwotICAg
IGFkZExpbmVUbyhGbG9hdFBvaW50KHIueCgpLCBib3R0b20pKTsKLSAgICBhZGRMaW5lVG8oci5s
b2NhdGlvbigpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByKQotewotICAgIEZsb2F0U2l6ZSByYWRpdXMoci53aWR0aCgpICogMC41LCByLmhl
aWdodCgpICogMC41KTsKLSAgICBhZGRFbGxpcHNlKHIubG9jYXRpb24oKSArIHJhZGl1cywgcmFk
aXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSwgMCwgMCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1QYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9u
KSBjb25zdAotewotICAgIFBhdGhFbGVtZW50IHBlbGVtZW50OwotICAgIEZsb2F0UG9pbnQgcG9p
bnRzWzNdOwotICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKLQotICAgIGZvciAoUGxhdGZv
cm1QYXRoRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0KG1fZWxlbWVudHMuYmVnaW4oKSk7IGl0
ICE9IG1fZWxlbWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgcGVsZW1lbnQudHlwZSA9IGl0
LT50eXBlKCk7Ci0gICAgICAgIGludCBuID0gaXQtPm51bVBvaW50cygpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG47ICsraSkKLSAgICAgICAgICAgIHBvaW50c1tpXSA9IGl0LT5wb2lu
dEF0KGkpOwotICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViY29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFlOTI0M2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE4MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtUGF0aFdpbkNFX2gKLSNkZWZp
bmUgUGxhdGZvcm1QYXRoV2luQ0VfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0KLSAgICBzdHJ1Y3QgUGF0aFBvaW50IHsKLSAgICAgICAg
ZmxvYXQgbV94OwotICAgICAgICBmbG9hdCBtX3k7Ci0gICAgICAgIGNvbnN0IGZsb2F0JiB4KCkg
Y29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgICAgIGNvbnN0IGZsb2F0JiB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9Ci0gICAgICAgIHZvaWQgc2V0KGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1feCA9IHg7Ci0gICAgICAgICAgICBtX3kgPSB5OwotICAgICAgICB9
OwotICAgICAgICBvcGVyYXRvciBGbG9hdFBvaW50KCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2lu
dChtX3gsIG1feSk7IH0KLSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ggKz0gb2Zmc2V0LndpZHRoKCk7Ci0gICAgICAg
ICAgICBtX3kgKz0gb2Zmc2V0LmhlaWdodCgpOwotICAgICAgICB9Ci0gICAgICAgIFBhdGhQb2lu
dCYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0UG9pbnQmIHApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1feCA9IHAueCgpOwotICAgICAgICAgICAgbV95ID0gcC55KCk7Ci0gICAgICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBjbGVhcigpIHsgbV94ID0gbV95ID0g
MDsgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGF0aFBvbHlnb246IHB1YmxpYyBWZWN0b3I8UGF0
aFBvaW50PiB7Ci0gICAgICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7Ci0g
ICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCk7Ci0gICAgICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0OwotICAgIH07Ci0K
LSAgICBjbGFzcyBQbGF0Zm9ybVBhdGhFbGVtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVu
dW0gUGxhZm9ybVBhdGhFbGVtZW50VHlwZSB7Ci0gICAgICAgICAgICBQYXRoTW92ZVRvLAotICAg
ICAgICAgICAgUGF0aExpbmVUbywKLSAgICAgICAgICAgIFBhdGhBcmNUbywKLSAgICAgICAgICAg
IFBhdGhRdWFkQ3VydmVUbywKLSAgICAgICAgICAgIFBhdGhCZXppZXJDdXJ2ZVRvLAotICAgICAg
ICAgICAgUGF0aENsb3NlU3VicGF0aCwKLSAgICAgICAgfTsKLQotICAgICAgICBzdHJ1Y3QgTW92
ZVRvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX2VuZDsKLSAgICAgICAgfTsKLQotICAgICAg
ICBzdHJ1Y3QgTGluZVRvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX2VuZDsKLSAgICAgICAg
fTsKLQotICAgICAgICBzdHJ1Y3QgQXJjVG8gewotICAgICAgICAgICAgUGF0aFBvaW50IG1fZW5k
OwotICAgICAgICAgICAgUGF0aFBvaW50IG1fY2VudGVyOwotICAgICAgICAgICAgUGF0aFBvaW50
IG1fcmFkaXVzOwotICAgICAgICAgICAgYm9vbCBtX2Nsb2Nrd2lzZTsKLSAgICAgICAgfTsKLQot
ICAgICAgICBzdHJ1Y3QgUXVhZEN1cnZlVG8gewotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9p
bnQwOwotICAgICAgICAgICAgUGF0aFBvaW50IG1fcG9pbnQxOwotICAgICAgICB9OwotCi0gICAg
ICAgIHN0cnVjdCBCZXppZXJDdXJ2ZVRvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50
MDsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50MTsKLSAgICAgICAgICAgIFBhdGhQb2lu
dCBtX3BvaW50MjsKLSAgICAgICAgfTsKLQotICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50KCk6
IG1fdHlwZShQYXRoQ2xvc2VTdWJwYXRoKSB7IG1fZGF0YS5tX3BvaW50c1swXS5zZXQoMCwgMCk7
ICAgIH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBNb3ZlVG8mIGRhdGEpOiBt
X3R5cGUoUGF0aE1vdmVUbykgeyBtX2RhdGEubV9tb3ZlVG9EYXRhID0gZGF0YTsgfQotICAgICAg
ICBQbGF0Zm9ybVBhdGhFbGVtZW50KGNvbnN0IExpbmVUbyYgZGF0YSk6IG1fdHlwZShQYXRoTGlu
ZVRvKSB7IG1fZGF0YS5tX2xpbmVUb0RhdGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRmb3JtUGF0
aEVsZW1lbnQoY29uc3QgQXJjVG8mIGRhdGEpOiBtX3R5cGUoUGF0aEFyY1RvKSB7IG1fZGF0YS5t
X2FyY1RvRGF0YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBR
dWFkQ3VydmVUbyYgZGF0YSk6IG1fdHlwZShQYXRoUXVhZEN1cnZlVG8pIHsgbV9kYXRhLm1fcXVh
ZEN1cnZlVG9EYXRhID0gZGF0YTsgfQotICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50KGNvbnN0
IEJlemllckN1cnZlVG8mIGRhdGEpOiBtX3R5cGUoUGF0aEJlemllckN1cnZlVG8pIHsgbV9kYXRh
Lm1fYmV6aWVyQ3VydmVUb0RhdGEgPSBkYXRhOyB9Ci0KLSAgICAgICAgY29uc3QgTW92ZVRvJiBt
b3ZlVG8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9tb3ZlVG9EYXRhOyB9Ci0gICAgICAgIGNv
bnN0IExpbmVUbyYgbGluZVRvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fbGluZVRvRGF0YTsg
fQotICAgICAgICBjb25zdCBBcmNUbyYgYXJjVG8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9h
cmNUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgUXVhZEN1cnZlVG8mIHF1YWRDdXJ2ZVRvKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLm1fcXVhZEN1cnZlVG9EYXRhOyB9Ci0gICAgICAgIGNvbnN0IEJl
emllckN1cnZlVG8mIGJlemllckN1cnZlVG8oKSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9iZXpp
ZXJDdXJ2ZVRvRGF0YTsgfQotICAgICAgICBjb25zdCBQYXRoUG9pbnQmIGxhc3RQb2ludCgpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuID0gbnVtUG9pbnRzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbiA+IDEgPyBtX2RhdGEubV9wb2ludHNbbiAtIDFdIDogbV9kYXRhLm1fcG9p
bnRzWzBdOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IFBhdGhQb2ludCYgcG9pbnRBdChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX3BvaW50c1tpbmRleF07IH0KLSAgICAgICAg
aW50IG51bVBvaW50cygpIGNvbnN0OwotICAgICAgICBpbnQgbnVtQ29udHJvbFBvaW50cygpIGNv
bnN0OwotICAgICAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOwotICAgICAg
ICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotICAgICAgICBQYXRo
RWxlbWVudFR5cGUgdHlwZSgpIGNvbnN0OwotICAgICAgICBQbGFmb3JtUGF0aEVsZW1lbnRUeXBl
IHBsYXRmb3JtVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICB2b2lkIGlu
ZmxhdGVSZWN0VG9Db250YWluTWUoRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFBvaW50JiBsYXN0
UG9pbnQpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGxhZm9ybVBhdGhFbGVtZW50
VHlwZSBtX3R5cGU7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIE1vdmVUbyBtX21vdmVU
b0RhdGE7Ci0gICAgICAgICAgICBMaW5lVG8gbV9saW5lVG9EYXRhOwotICAgICAgICAgICAgQXJj
VG8gbV9hcmNUb0RhdGE7Ci0gICAgICAgICAgICBRdWFkQ3VydmVUbyBtX3F1YWRDdXJ2ZVRvRGF0
YTsKLSAgICAgICAgICAgIEJlemllckN1cnZlVG8gbV9iZXppZXJDdXJ2ZVRvRGF0YTsKLSAgICAg
ICAgICAgIFBhdGhQb2ludCBtX3BvaW50c1s0XTsKLSAgICAgICAgfSBtX2RhdGE7Ci0gICAgfTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFBsYXRmb3JtUGF0aEVsZW1lbnQ+IFBsYXRmb3JtUGF0aEVs
ZW1lbnRzOwotCi0gICAgY2xhc3MgUGxhdGZvcm1QYXRoIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFBsYXRmb3JtUGF0aCgpOwotICAgICAgICBjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50cyYgZWxl
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzOyB9Ci0gICAgICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQmIGUpOwotICAgICAgICB2b2lkIGFwcGVuZChjb25z
dCBQbGF0Zm9ybVBhdGgmIHApOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpOyB9Ci0KLSAgICAg
ICAgdm9pZCBzdHJva2VQYXRoKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cikgY29uc3Q7
Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgoSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRyKSBj
b25zdDsKLSAgICAgICAgRmxvYXRQb2ludCBsYXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnRzLmlzRW1wdHkoKSA/IEZsb2F0UG9pbnQoMCwgMCkgOiBtX2VsZW1lbnRzLmxhc3QoKS5s
YXN0UG9pbnQoKTsgfQotCi0gICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ1JlY3Q7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCk7Ci0KLSAgICAgICAgdm9pZCBtb3ZlVG8oY29u
c3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
Jik7Ci0gICAgICAgIHZvaWQgYWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVy
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkQXJj
VG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOwot
ICAgICAgICB2b2lkIGNsb3NlU3VicGF0aCgpOwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29u
c3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgc2FyLCBmbG9hdCBlYXIs
IGJvb2wgYW50aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpOwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKTsKLSAg
ICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9u
KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZW5zdXJlU3VicGF0aCgpOwot
ICAgICAgICB2b2lkIGFkZFRvU3VicGF0aChjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKTsK
LQotICAgICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50cyBtX2VsZW1lbnRzOwotICAgICAgICBGbG9h
dFJlY3QgbV9ib3VuZGluZ1JlY3Q7Ci0gICAgICAgIFZlY3RvcjxQYXRoUG9seWdvbj4gbV9zdWJw
YXRoczsKLSAgICAgICAgUGF0aFBvaW50IG1fY3VycmVudFBvaW50OwotICAgICAgICBib29sIG1f
cGVuTGlmdGVkOwotICAgIH07Ci0KLX0KLQotI2VuZGlmIC8vIFBsYXRmb3JtUGF0aFdpbkNFX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJl
ZEJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFy
ZWRCaXRtYXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDk4NThkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJp
dG1hcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQml0
bWFwLmgiCi0KLSNpbmNsdWRlICJHRElFeHRyYXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKLSNpbmNsdWRlICJXaW5DRUdyYXBoaWNzRXh0cmFzLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWRMZWFrQ291bnRlci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQot
I2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZuZGVmIE5E
RUJVRwotc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHNoYXJlZEJpdG1hcExlYWtD
b3VudGVyKCJTaGFyZWRCaXRtYXAiKTsKLSNlbmRpZgotCi0KLVBhc3NSZWZQdHI8U2hhcmVkQml0
bWFwPiBTaGFyZWRCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBCaXRtYXBJbmZv
OjpCaXRDb3VudCBiaXRDb3VudCwgYm9vbCBpbml0UGl4ZWxzKQotewotICAgIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IHJlc3VsdGFudEJpdG1hcCA9IGFkb3B0UmVmKG5ldyBTaGFyZWRCaXRtYXAoc2l6
ZSwgYml0Q291bnQsIGluaXRQaXhlbHMpKTsKLSAgICBpZiAocmVzdWx0YW50Qml0bWFwICYmICFy
ZXN1bHRhbnRCaXRtYXAtPmJ5dGVzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBy
ZXN1bHRhbnRCaXRtYXAucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4g
U2hhcmVkQml0bWFwOjpjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgZGF0YSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFw
PiByZXN1bHQgPSBjcmVhdGUoc2l6ZSwgQml0bWFwSW5mbzo6Qml0Q291bnQzMiwgZmFsc2UpOwot
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBtZW1jcHkocmVzdWx0LT5i
eXRlcygpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKLSAg
ICByZXN1bHQtPnNldEhhc0FscGhhKGhhc0FscGhhKTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKLX0KLQotU2hhcmVkQml0bWFwOjpTaGFyZWRCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQml0bWFwSW5mbzo6Qml0Q291bnQgYml0Q291bnQsIGJvb2wgaW5pdFBpeGVscykKLSAgICA6
IG1fYm1wSW5mbyhCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChzaXplLCBiaXRDb3VudCkpCi0g
ICAgLCBtX2xvY2tlZChmYWxzZSkKLSAgICAsIG1fdXNlc1RyYW5zcGFyZW50Q29sb3IoZmFsc2Up
Ci0gICAgLCBtX3RyYW5zcGFyZW50Q29sb3IoUkdCKDAsIDAsIDApKQotICAgICwgbV9waXhlbHMo
MCkKLSAgICAsIG1faGFzQWxwaGEoZmFsc2UpCi0gICAgLCBtX3ZhbGlkSGVpZ2h0KGFicyhzaXpl
LmhlaWdodCgpKSkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgc2hhcmVkQml0bWFwTGVha0NvdW50
ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYKLQotICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSBtX2Jt
cEluZm8ubnVtUGl4ZWxzKCk7Ci0gICAgaWYgKGJpdENvdW50ID09IEJpdG1hcEluZm86OkJpdENv
dW50MTYpCi0gICAgICAgIGJ1ZmZlclNpemUgLz0gMjsKLQotICAgIG1fcGl4ZWxEYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihidWZmZXJTaXplKTsKLSAgICBtX3BpeGVscyA9IG1f
cGl4ZWxEYXRhLmdldCgpOwotCi0gICAgaWYgKGluaXRQaXhlbHMpCi0gICAgICAgIHJlc2V0UGl4
ZWxzKCk7Ci19Ci0KLVNoYXJlZEJpdG1hcDo6flNoYXJlZEJpdG1hcCgpCi17Ci0jaWZuZGVmIE5E
RUJVRwotICAgIHNoYXJlZEJpdG1hcExlYWtDb3VudGVyLmRlY3JlbWVudCgpOwotI2VuZGlmCi19
Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpyZXNldFBpeGVscyhib29sIGJsYWNrKQotewotICAgIGlm
ICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUg
PSBtX2JtcEluZm8ubnVtUGl4ZWxzKCk7Ci0gICAgaWYgKGJsYWNrKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGJ1ZmZlclNpemVJbkJ5dGVzID0gYnVmZmVyU2l6ZSAqIChpczE2Yml0KCkgPyAyIDogNCk7
Ci0gICAgICAgIG1lbXNldChtX3BpeGVscywgMCwgYnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzMTZiaXQoKSkgewotICAgICAgICAvLyBGaWxs
IGl0IHdpdGggd2hpdGUgY29sb3IKLSAgICAgICAgd21lbXNldChzdGF0aWNfY2FzdDx3Y2hhcl90
Kj4obV9waXhlbHMpLCAweEZGRkYsIGJ1ZmZlclNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gTWFrZSBpdCB3aGl0ZSBidXQgdHJhbnNwYXJlbnQKLSAgICB1bnNpZ25lZCog
cGl4ZWwgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KG1fcGl4ZWxzKTsKLSAgICBjb25zdCB1bnNp
Z25lZCogYnVmZmVyRW5kID0gcGl4ZWwgKyBidWZmZXJTaXplOwotICAgIHdoaWxlIChwaXhlbCA8
IGJ1ZmZlckVuZCkKLSAgICAgICAgKnBpeGVsKysgPSAweDAwRkZGRkZGOwotfQotCi1zdGF0aWMg
aW5saW5lIHVuc2lnbmVkIHNob3J0IGNvbnZlcnQzMlRvMTYodW5zaWduZWQgcGl4ZWwpCi17Ci0g
ICAgdW5zaWduZWQgc2hvcnQgciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigocGl4ZWwg
JiAweDAwRjgwMDAwKSA+PiA4KTsKLSAgICB1bnNpZ25lZCBzaG9ydCBnID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KChwaXhlbCAmIDB4MDAwMEZDMDApID4+IDUpOwotICAgIHVuc2lnbmVk
IHNob3J0IGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKHBpeGVsICYgMHgwMDAwMDBG
OCkgPj4gMyk7Ci0gICAgcmV0dXJuIHIgfCBnIHwgYjsKLX0KLQotYm9vbCBTaGFyZWRCaXRtYXA6
OnRvMTZiaXQoKQotewotICAgIGlmIChtX2xvY2tlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChpczE2Yml0KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQml0bWFwSW5m
byBuZXdCbXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKG1fYm1wSW5mby5zaXplKCksIEJpdG1h
cEluZm86OkJpdENvdW50MTYpOwotCi0gICAgaW50IHdpZHRoID0gbmV3Qm1wSW5mby53aWR0aCgp
OwotICAgIGludCBwYWRkZWRXaWR0aCA9IG5ld0JtcEluZm8ucGFkZGVkV2lkdGgoKTsKLSAgICBp
bnQgYnVmZmVyU2l6ZSA9IHBhZGRlZFdpZHRoICogbmV3Qm1wSW5mby5oZWlnaHQoKTsKLSAgICBh
dXRvIG5ld1BpeGVsRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWRbXT4oYnVmZmVyU2l6
ZSAvIDIpOwotICAgIHZvaWQqIG5ld1BpeGVscyA9IG5ld1BpeGVsRGF0YS5nZXQoKTsKLQotICAg
IGlmICghbmV3UGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBz
aG9ydCogcDE2ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihuZXdQaXhlbHMpOwotICAg
IGNvbnN0IHVuc2lnbmVkKiBwMzIgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KG1fcGl4
ZWxzKTsKLQotICAgIGJvb2wgc2tpcHMgPSBwYWRkZWRXaWR0aCAhPSB3aWR0aDsKLQotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0KiBwMTZlbmQgPSBwMTYgKyBidWZmZXJTaXplOwotICAgIHdoaWxl
IChwMTYgPCBwMTZlbmQpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBzaG9ydCogcDE2bGluZUVu
ZCA9IHAxNiArIHdpZHRoOyBwMTYgPCBwMTZsaW5lRW5kOyApCi0gICAgICAgICAgICAqcDE2Kysg
PSBjb252ZXJ0MzJUbzE2KCpwMzIrKyk7Ci0KLSAgICAgICAgaWYgKHNraXBzKQotICAgICAgICAg
ICAgKnAxNisrID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9oYml0bWFwKQotICAgICAgICBtX2hi
aXRtYXAgPSBudWxscHRyOwotICAgIGVsc2UKLSAgICAgICAgbV9waXhlbERhdGEgPSBuZXdQaXhl
bERhdGEucmVsZWFzZSgpOwotCi0gICAgbV9waXhlbHMgPSBuZXdQaXhlbHM7Ci0gICAgbV9ibXBJ
bmZvID0gbmV3Qm1wSW5mbzsKLQotICAgIHNldEhhc0FscGhhKGZhbHNlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTaGFyZWRCaXRtYXA6OmZyZWVNZW1vcnkoKQotewotICAgIGlmICht
X2xvY2tlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faGJpdG1hcCkgewot
ICAgICAgICBtX2hiaXRtYXAgPSBudWxscHRyOwotICAgICAgICBtX3BpeGVscyA9IDA7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX3BpeGVscykgewotICAgICAgICBt
X3BpeGVsRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIG1fcGl4ZWxzID0gMDsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1HRElPYmplY3Q8SEJJ
VE1BUD4gU2hhcmVkQml0bWFwOjpjcmVhdGVIYW5kbGUodm9pZCoqIHBpeGVscywgQml0bWFwSW5m
byogYm1wSW5mbywgaW50IGhlaWdodCwgYm9vbCB1c2UxNmJpdCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fcGl4ZWxzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChoZWlnaHQgPT0g
LTEpCi0gICAgICAgIGhlaWdodCA9IHRoaXMtPmhlaWdodCgpOwotICAgICpibXBJbmZvID0gQml0
bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQpLCAodXNlMTZi
aXQgfHwgaXMxNmJpdCgpKSA/IEJpdG1hcEluZm86OkJpdENvdW50MTYgOiBCaXRtYXBJbmZvOjpC
aXRDb3VudDMyKTsKLQotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElC
U2VjdGlvbigwLCBibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcGl4ZWxzLCAwLCAwKSk7Ci0KLSAg
ICBpZiAoIWhibXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBibXBEQyA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLSAgICBIR0RJT0JKIGhP
bGRCbXAgPSBTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhibXAuZ2V0KCkpOwotCi0gICAgU3Ry
ZXRjaERJQml0cyhibXBEQy5nZXQoKSwgMCwgMCwgd2lkdGgoKSwgaGVpZ2h0LCAwLCAwLCB3aWR0
aCgpLCBoZWlnaHQsIG1fcGl4ZWxzLCAmbV9ibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgU1JDQ09Q
WSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhPbGRCbXApOwotCi0gICAgcmV0
dXJuIGhibXA7Ci19Ci0KLWJvb2wgU2hhcmVkQml0bWFwOjplbnN1cmVIYW5kbGUoKQotewotICAg
IGlmIChtX2hiaXRtYXApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX3BpeGVs
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fbG9ja2VkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBCaXRtYXBJbmZvIGJtcEluZm87Ci0gICAgdm9pZCogcGl4ZWxz
OwotICAgIG1faGJpdG1hcCA9IGNyZWF0ZUhhbmRsZSgmcGl4ZWxzLCAmYm1wSW5mbywgLTEsICFo
YXNBbHBoYSgpKTsKLQotICAgIGlmICghbV9oYml0bWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX3BpeGVsRGF0YSA9IG51bGxwdHI7Ci0gICAgbV9waXhlbHMgPSBwaXhlbHM7Ci0g
ICAgbV9ibXBJbmZvID0gYm1wSW5mbzsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNo
YXJlZEJpdG1hcDo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEludFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsK
LSAgICBpZiAoIW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0gICAgY3R4dC0+ZHJhd0JpdG1h
cCh0aGlzLCBkc3RSZWN0LCBzcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBi
bGVuZE1vZGUpOwotfQotCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhdyhIREMgaGRjLCBjb25zdCBJ
bnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAoIW1fcGl4ZWxz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhCSVRNQVAgaGJpdG1hcCA9IDA7
Ci0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGhUZW1wQml0bWFwOwotICAgIGJvb2wgdXNpbmdIYW5k
bGUgPSBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIChoYXNBbHBoYSgpICYm
IGhhc0FscGhhQmxlbmRTdXBwb3J0KCkgfHwgdXNlc1RyYW5zcGFyZW50Q29sb3IoKSk7Ci0KLSAg
ICBpZiAodXNpbmdIYW5kbGUpIHsKLSAgICAgICAgaWYgKGVuc3VyZUhhbmRsZSgpKQotICAgICAg
ICAgICAgaGJpdG1hcCA9IG1faGJpdG1hcC5nZXQoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICB2b2lkKiBwaXhlbHM7Ci0gICAgICAgICAgICBCaXRtYXBJbmZvIGJtcEluZm87Ci0gICAg
ICAgICAgICBoVGVtcEJpdG1hcCA9IGNyZWF0ZUhhbmRsZSgmcGl4ZWxzLCAmYm1wSW5mbywgLTEs
IHVzZXNUcmFuc3BhcmVudENvbG9yKCkpOwotICAgICAgICAgICAgaGJpdG1hcCA9IGhUZW1wQml0
bWFwLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghaGJpdG1hcCkgewotICAgICAg
ICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIGNvbXBvc2l0ZSBvcGVyYXRpb24gdHlwZXM/Ci0gICAg
ICAgIERXT1JEIHJvcCA9IGNvbXBvc2l0ZU9wID09IENvbXBvc2l0ZUNvcHkgPyBTUkNDT1BZCi0g
ICAgICAgICAgICA6IGNvbXBvc2l0ZU9wID09IENvbXBvc2l0ZVhPUiA/IFBBVElOVkVSVAotICAg
ICAgICAgICAgOiBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVDbGVhciA/IFdISVRFTkVTUwotICAg
ICAgICAgICAgOiBTUkNDT1BZOwotCi0gICAgICAgIFN0cmV0Y2hESUJpdHMoaGRjLCBkc3RSZWN0
LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgc3JjUmVjdC53aWR0aCgpLCBzcmNS
ZWN0LmhlaWdodCgpLCBtX3BpeGVscywgJm1fYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsIHJvcCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGhtZW1kYyA9IGFkb3B0R0RJT2Jq
ZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkYykpOwotICAgIEhHRElPQkogaE9sZEJtcCA9IFNl
bGVjdE9iamVjdChobWVtZGMuZ2V0KCksIGhiaXRtYXApOwotCi0gICAgaWYgKCF1c2VzVHJhbnNw
YXJlbnRDb2xvcigpICYmIGhhc0FscGhhQmxlbmRTdXBwb3J0KCkpIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IEJMRU5ERlVOQ1RJT04gYmxlbmQgPSB7IEFDX1NSQ19PVkVSLCAwLCAyNTUsIEFDX1NS
Q19BTFBIQSB9OwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBhbHBoYUJsZW5kSWZTdXBwb3J0ZWQo
aGRjLCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5o
ZWlnaHQoKSwgaG1lbWRjLmdldCgpLAotICAgICAgICAgICAgc3JjUmVjdC54KCksIHNyY1JlY3Qu
eSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGJsZW5kKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBU
cmFuc3BhcmVudEJsdChoZGMsIGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC53aWR0
aCgpLCBkc3RSZWN0LmhlaWdodCgpLCBobWVtZGMuZ2V0KCksCi0gICAgICAgICAgICBzcmNSZWN0
LngoKSwgc3JjUmVjdC55KCksIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgdHJh
bnNwYXJlbnRDb2xvcigpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoaG1lbWRjLmdldCgp
LCBoT2xkQm1wKTsKLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+IFNoYXJlZEJpdG1hcDo6Y2xpcEJp
dG1hcChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIHVzZUFscGhhLCBCaXRtYXBJbmZvJiBibXBJ
bmZvLCB2b2lkKiYgcGl4ZWxzKQotewotICAgIGlmICghYnl0ZXMoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwotICAgIGludCBvbGRIZWln
aHQgPSBoZWlnaHQoKTsKLSAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW48aW50PihyZWN0Lndp
ZHRoKCksIG9sZFdpZHRoIC0gcmVjdC54KCkpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjpt
aW48aW50PihyZWN0LmhlaWdodCgpLCBvbGRIZWlnaHQgLSByZWN0LnkoKSk7Ci0gICAgaWYgKCFj
b3B5V2lkdGggfHwgIWNvcHlIZWlnaHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ym1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUoY29weVdpZHRoLCBj
b3B5SGVpZ2h0KSwgKHVzZUFscGhhICYmIGlzMzJiaXQoKSkgPyBCaXRtYXBJbmZvOjpCaXRDb3Vu
dDMyIDogQml0bWFwSW5mbzo6Qml0Q291bnQxNik7Ci0gICAgYXV0byBuZXdCbXAgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAm
cGl4ZWxzLCAwLCAwKSk7Ci0KLSAgICBpZiAoIW5ld0JtcCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBhdXRvIGRjTmV3ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxl
REMoMCkpOwotICAgIEhHRElPQkogdG1wTmV3ID0gU2VsZWN0T2JqZWN0KGRjTmV3LmdldCgpLCBu
ZXdCbXAuZ2V0KCkpOwotCi0gICAgU3RyZXRjaERJQml0cyhkY05ldy5nZXQoKSwgMCwgMCwgY29w
eVdpZHRoLCBjb3B5SGVpZ2h0LCByZWN0LngoKSwgcmVjdC55KCksIGNvcHlXaWR0aCwgY29weUhl
aWdodCwKLSAgICAgICAgYnl0ZXMoKSwgJmJpdG1hcEluZm8oKSwgRElCX1JHQl9DT0xPUlMsIFNS
Q0NPUFkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGRjTmV3LmdldCgpLCB0bXBOZXcpOwotICAgIHJl
dHVybiBuZXdCbXA7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBTaGFyZWRCaXRtYXA6
OmNsaXBCaXRtYXAoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSkKLXsKLSAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwotICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKLSAg
ICBpbnQgY29weVdpZHRoID0gc3RkOjptaW48aW50PihyZWN0LndpZHRoKCksIG9sZFdpZHRoIC0g
cmVjdC54KCkpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW48aW50PihyZWN0LmhlaWdo
dCgpLCBvbGRIZWlnaHQgLSByZWN0LnkoKSk7Ci0gICAgaWYgKCFjb3B5V2lkdGggfHwgIWNvcHlI
ZWlnaHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4gbmV3
Qm1wID0gY3JlYXRlKEludFNpemUoY29weVdpZHRoLCBjb3B5SGVpZ2h0KSwgdXNlQWxwaGEgJiYg
aXMzMmJpdCgpID8gQml0bWFwSW5mbzo6Qml0Q291bnQzMiA6IEJpdG1hcEluZm86OkJpdENvdW50
MTYsIGZhbHNlKTsKLQotICAgIGlmICghbmV3Qm1wIHx8ICFuZXdCbXAtPmJ5dGVzKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgRENIb2xkZXIgZGNOZXcobmV3Qm1wLmdldCgpKTsKLQotICAg
IFN0cmV0Y2hESUJpdHMoZGNOZXcuZ2V0KCksIDAsIDAsIGNvcHlXaWR0aCwgY29weUhlaWdodCwg
cmVjdC54KCksIHJlY3QueSgpLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQsCi0gICAgICAgIGJ5dGVz
KCksICZiaXRtYXBJbmZvKCksIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsKLQotICAgIHJldHVy
biBuZXdCbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuU2ltcGxlKEhEQyBoZGMsIGNv
bnN0IFJFQ1QmIGRlc3RSZWN0LCBIQklUTUFQIGhibXAsIGNvbnN0IFBPSU5UJiBwaGFzZSkKLXsK
LSAgICBhdXRvIGhCcnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUGF0dGVybkJydXNoKGhi
bXApKTsKLSAgICBpZiAoIWhCcnVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUE9JTlQgb2xk
T3JnOwotICAgIFNldEJydXNoT3JnRXgoaGRjLCBkZXN0UmVjdC5sZWZ0IC0gcGhhc2UueCwgZGVz
dFJlY3QudG9wIC0gcGhhc2UueSwgJm9sZE9yZyk7Ci0gICAgRmlsbFJlY3QoaGRjLCAmZGVzdFJl
Y3QsIGhCcnVzaC5nZXQoKSk7Ci0gICAgU2V0QnJ1c2hPcmdFeChoZGMsIG9sZE9yZy54LCBvbGRP
cmcueSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuU2ltcGxlKEhEQyBoZGMsIGNv
bnN0IFJFQ1QmIGRlc3RSZWN0LCBjb25zdCBTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgU0laRSYg
Ym1wU2l6ZSwgY29uc3QgUE9JTlQmIHBoYXNlKQotewotICAgIGludCBkc3RZID0gZGVzdFJlY3Qu
dG9wOwotICAgIGZvciAoaW50IHNvdXJjZVkgPSBwaGFzZS55OyBkc3RZIDwgZGVzdFJlY3QuYm90
dG9tOyApIHsKLSAgICAgICAgaW50IHNvdXJjZUggPSBzdGQ6Om1pbjxpbnQ+KGJtcFNpemUuY3kg
LSBzb3VyY2VZLCBkZXN0UmVjdC5ib3R0b20gLSBkc3RZKTsKLSAgICAgICAgaW50IGRzdFggPSBk
ZXN0UmVjdC5sZWZ0OwotICAgICAgICBmb3IgKGludCBzb3VyY2VYID0gcGhhc2UueDsgZHN0WCA8
IGRlc3RSZWN0LnJpZ2h0OyApIHsKLSAgICAgICAgICAgIGludCBzb3VyY2VXID0gc3RkOjptaW48
aW50PihibXBTaXplLmN4IC0gc291cmNlWCwgZGVzdFJlY3QucmlnaHQgLSBkc3RYKTsKLQotICAg
ICAgICAgICAgU3RyZXRjaERJQml0cyhoZGMsIGRzdFgsIGRzdFksIHNvdXJjZVcsIHNvdXJjZUgs
IHNvdXJjZVgsIHNvdXJjZVksIHNvdXJjZVcsIHNvdXJjZUgsCi0gICAgICAgICAgICAgICAgYm1w
LT5ieXRlcygpLCAmYm1wLT5iaXRtYXBJbmZvKCksIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsK
LQotICAgICAgICAgICAgZHN0WCArPSBzb3VyY2VXOwotICAgICAgICAgICAgc291cmNlWCA9IDA7
Ci0gICAgICAgIH0KLQotICAgICAgICBkc3RZICs9IHNvdXJjZUg7Ci0gICAgICAgIHNvdXJjZVkg
PSAwOwotICAgIH0KLX0KLQotc3RhdGljIExPTkcgbm9ybWFsaXplUGhhc2UoTE9ORyBwaGFzZSwg
aW50IGxpbWl0KQotewotICAgIGlmICghcGhhc2UgfHwgbGltaXQgPCAyKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChsaW1pdCA9PSAyKQotICAgICAgICByZXR1cm4gcGhhc2UgJiAxOwot
Ci0gICAgaWYgKHBoYXNlIDwgMCkgewotICAgICAgICBwaGFzZSA9IC1waGFzZTsKLSAgICAgICAg
aWYgKHBoYXNlID4gbGltaXQpCi0gICAgICAgICAgICBwaGFzZSA9IHN0YXRpY19jYXN0PExPTkc+
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwaGFzZSkgJSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGlt
aXQpKTsKLSAgICAgICAgaWYgKHBoYXNlKQotICAgICAgICAgICAgcGhhc2UgPSBsaW1pdCAtIHBo
YXNlOwotICAgICAgICByZXR1cm4gcGhhc2U7Ci0gICAgfQotCi0gICAgaWYgKHBoYXNlIDwgbGlt
aXQpCi0gICAgICAgIHJldHVybiBwaGFzZTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxMT05H
PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGhhc2UpICUgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxp
bWl0KSk7Ci19Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1Nv
dXJjZVNpemUpCi17Ci0gICAgaWYgKCFtX3BpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGN0
eHQtPmRyYXdCaXRtYXBQYXR0ZXJuKHRoaXMsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgb3JpZ1NvdXJjZVNpemUpOwot
fQotCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oSERDIGhkYywgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50
U2l6ZSYgb3JpZ1NvdXJjZVNpemUpCi17Ci0gICAgaWYgKCFtX3BpeGVscykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHRpbGVSZWN0SW4ud2lkdGgoKSA8PSAwIHx8IHRpbGVSZWN0SW4uaGVp
Z2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCB1c2VBbHBoYSA9IG9wID09
IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgaGFzQWxwaGEoKSAmJiBpczMyYml0KCk7Ci0KLSAgICBp
bnQgYm1wV2lkdGggPSB3aWR0aCgpOwotICAgIGludCBibXBIZWlnaHQgPSBoZWlnaHQoKTsKLQot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh0aWxlUmVjdEluKTsKLSAgICBpZiAoYm1wV2lkdGggIT0g
b3JpZ1NvdXJjZVNpemUud2lkdGgoKSkgewotICAgICAgICBkb3VibGUgcmF0ZSA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oYm1wV2lkdGgpIC8gb3JpZ1NvdXJjZVNpemUud2lkdGgoKTsKLSAgICAgICAg
ZG91YmxlIHRlbXAgPSB0aWxlUmVjdC53aWR0aCgpICogcmF0ZTsKLSAgICAgICAgdGlsZVJlY3Qu
c2V0WCh0aWxlUmVjdC54KCkgKiByYXRlKTsKLSAgICAgICAgdGlsZVJlY3Quc2V0V2lkdGgodGVt
cCk7Ci0gICAgICAgIHRlbXAgPSB0aWxlUmVjdC5oZWlnaHQoKSAqIHJhdGU7Ci0gICAgICAgIHRp
bGVSZWN0LnNldFkodGlsZVJlY3QueSgpICogcmF0ZSk7Ci0gICAgICAgIHRpbGVSZWN0LnNldEhl
aWdodCh0ZW1wKTsKLSAgICB9Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gY2xpcHBlZEJtcDsK
LQotICAgIGlmICh0aWxlUmVjdC54KCkgfHwgdGlsZVJlY3QueSgpIHx8IHRpbGVSZWN0LndpZHRo
KCkgIT0gYm1wV2lkdGggfHwgdGlsZVJlY3QuaGVpZ2h0KCkgIT0gYm1wSGVpZ2h0KSB7Ci0gICAg
ICAgIEJpdG1hcEluZm8gcGF0dGVybkJtcEluZm87Ci0gICAgICAgIHZvaWQqIHBhdHRlcm5QaXhl
bHM7Ci0gICAgICAgIGNsaXBwZWRCbXAgPSBjbGlwQml0bWFwKEludFJlY3QodGlsZVJlY3QpLCB1
c2VBbHBoYSwgcGF0dGVybkJtcEluZm8sIHBhdHRlcm5QaXhlbHMpOwotICAgICAgICBpZiAoIWNs
aXBwZWRCbXApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYm1wV2lkdGggPSB0aWxl
UmVjdC53aWR0aCgpOwotICAgICAgICBibXBIZWlnaHQgPSB0aWxlUmVjdC5oZWlnaHQoKTsKLSAg
ICB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdGYgPSBwYXR0ZXJuVHJhbnNmb3JtICogdHJhbnNm
b3JtOwotCi0gICAgRmxvYXRSZWN0IHRyUmVjdCA9IHRmLm1hcFJlY3QoZGVzdFJlY3QpOwotCi0g
ICAgUkVDVCBjbGlwQm94OwotICAgIGludCBjbGlwVHlwZSA9IEdldENsaXBCb3goaGRjLCAmY2xp
cEJveCk7Ci0gICAgaWYgKGNsaXBUeXBlID09IFNJTVBMRVJFR0lPTikKLSAgICAgICAgdHJSZWN0
LmludGVyc2VjdChGbG9hdFJlY3QoY2xpcEJveC5sZWZ0LCBjbGlwQm94LnRvcCwgY2xpcEJveC5y
aWdodCAtIGNsaXBCb3gubGVmdCwgY2xpcEJveC5ib3R0b20gLSBjbGlwQm94LnRvcCkpOwotICAg
IGVsc2UgaWYgKGNsaXBUeXBlID09IENPTVBMRVhSRUdJT04pIHsKLSAgICAgICAgYXV0byBjbGlw
UmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICAg
ICAgaWYgKEdldENsaXBSZ24oaGRjLCBjbGlwUmduLmdldCgpKSA+IDApIHsKLSAgICAgICAgICAg
IERXT1JEIHJlZ2lvbkRhdGFTaXplID0gR2V0UmVnaW9uRGF0YShjbGlwUmduLmdldCgpLCBzaXpl
b2YoUkdOREFUQSksIDApOwotICAgICAgICAgICAgaWYgKHJlZ2lvbkRhdGFTaXplKSB7Ci0gICAg
ICAgICAgICAgICAgVmVjdG9yPFJHTkRBVEE+IHJlZ2lvbkRhdGEocmVnaW9uRGF0YVNpemUpOwot
ICAgICAgICAgICAgICAgIEdldFJlZ2lvbkRhdGEoY2xpcFJnbi5nZXQoKSwgcmVnaW9uRGF0YVNp
emUsIHJlZ2lvbkRhdGEuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBSRUNUKiByZWN0ID0gcmVp
bnRlcnByZXRfY2FzdDxSRUNUKj4ocmVnaW9uRGF0YVswXS5CdWZmZXIpOwotICAgICAgICAgICAg
ICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCByZWdpb25EYXRhWzBdLnJkaC5uQ291bnQ7ICsraSwg
KytyZWN0KQotICAgICAgICAgICAgICAgICAgICB0clJlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChy
ZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90
dG9tIC0gcmVjdC0+dG9wKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAodHJSZWN0LndpZHRoKCkgPD0gMCB8fCB0clJlY3QuaGVpZ2h0KCkgPD0gMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdHJSZWN0LmluZmxhdGUoMSk7Ci0gICAgSW50UmVjdCB2aXNpYmxl
RHN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGYuaW52ZXJzZSgpLm1hcFJlY3QodHJSZWN0KSk7
Ci0gICAgdmlzaWJsZURzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoZGVzdFJlY3QpKTsKLQotICAg
IGlmICh2aXNpYmxlRHN0UmVjdC53aWR0aCgpIDw9IDAgfHwgdmlzaWJsZURzdFJlY3QuaGVpZ2h0
KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJSZWN0ID0gdGYubWFwUmVjdCh2aXNp
YmxlRHN0UmVjdCk7Ci0gICAgUkVDVCBkc3RSZWN0V2luID0gewotICAgICAgICBzdGFibGVSb3Vu
ZCh0clJlY3QueCgpKSwKLSAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0LnkoKSksCi0gICAgICAg
IHN0YWJsZVJvdW5kKHRyUmVjdC5tYXhYKCkpLAotICAgICAgICBzdGFibGVSb3VuZCh0clJlY3Qu
bWF4WSgpKSwKLSAgICB9OwotICAgIGlmIChkc3RSZWN0V2luLnJpZ2h0IDw9IGRzdFJlY3RXaW4u
bGVmdCB8fCBkc3RSZWN0V2luLmJvdHRvbSA8PSBkc3RSZWN0V2luLnRvcCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgU0laRSBibXBTaXplID0geyBibXBXaWR0aCwgYm1wSGVpZ2h0IH07Ci0KLSAg
ICAvLyBSZWxhdGl2ZSB0byBkZXN0aW5hdGlvbiwgaW4gYml0bWFwIHBpeGVscwotICAgIFBPSU5U
IHBoYXNlV2luID0geyBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC54KCkgLSBwaGFzZS54KCkp
LCBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC55KCkgLSBwaGFzZS55KCkpIH07Ci0gICAgcGhh
c2VXaW4ueCA9IG5vcm1hbGl6ZVBoYXNlKHBoYXNlV2luLngsIGJtcFNpemUuY3gpOwotICAgIHBo
YXNlV2luLnkgPSBub3JtYWxpemVQaGFzZShwaGFzZVdpbi55LCBibXBTaXplLmN5KTsKLQotICAg
IFJFQ1Qgc3JjUmVjdFdpbiA9IHsKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAgc3Rh
YmxlUm91bmQodmlzaWJsZURzdFJlY3QubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHZpc2libGVEc3RS
ZWN0LngoKSksCi0gICAgICAgIHN0YWJsZVJvdW5kKHZpc2libGVEc3RSZWN0Lm1heFkoKSkgLSBz
dGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC55KCkpCi0gICAgfTsKLSAgICBpZiAoc3JjUmVjdFdp
bi5yaWdodCA8PSAwIHx8IHNyY1JlY3RXaW4uYm90dG9tIDw9IDApCi0gICAgICAgIHJldHVybjsK
LQotICAgIEJpdG1hcEluZm8gYm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKElu
dFNpemUoc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20pLCB1c2VBbHBoYSA/IEJp
dG1hcEluZm86OkJpdENvdW50MzIgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDE2KTsKLSAgICB2b2lk
KiBwaXhlbHM7Ci0gICAgYXV0byBoYm1wVGVtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElC
U2VjdGlvbigwLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApKTsKLQot
ICAgIGlmICghaGJtcFRlbXApCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaG1lbWRjID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoaGRjKSk7Ci0gICAgSEdESU9CSiBv
bGRCbXAgPSBTZWxlY3RPYmplY3QoaG1lbWRjLmdldCgpLCBoYm1wVGVtcC5nZXQoKSk7Ci0gICAg
aWYgKGNsaXBwZWRCbXApCi0gICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwg
c3JjUmVjdFdpbiwgY2xpcHBlZEJtcC5nZXQoKSwgcGhhc2VXaW4pOwotICAgIGVsc2UgaWYgKChv
cCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyIHx8IGNhblVzZURJQml0cygpKSAmJiBzcmNSZWN0V2lu
LnJpZ2h0IDw9IGJtcFNpemUuY3ggKiAyICYmIHNyY1JlY3RXaW4uYm90dG9tIDw9IGJtcFNpemUu
Y3kgKiAyKQotICAgICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RX
aW4sIHRoaXMsIGJtcFNpemUsIHBoYXNlV2luKTsKLSAgICBlbHNlIGlmIChlbnN1cmVIYW5kbGUo
KSkKLSAgICAgICAgZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCBn
ZXRIYW5kbGUoKSwgcGhhc2VXaW4pOwotICAgIGVsc2UgewotICAgICAgICB2b2lkKiBwaXhlbHM7
Ci0gICAgICAgIEJpdG1hcEluZm8gYm1wSW5mbzsKLSAgICAgICAgYXV0byBoYm1wID0gY3JlYXRl
SGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgZmFsc2UpOwotICAgICAgICBpZiAoaGJtcCkK
LSAgICAgICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwg
aGJtcC5nZXQoKSwgcGhhc2VXaW4pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFNlbGVj
dE9iamVjdChobWVtZGMuZ2V0KCksIG9sZEJtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodXNlQWxwaGEgJiYgaGFzQWxwaGFCbGVuZFN1cHBvcnQo
KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgQkxFTkRGVU5DVElPTiBibGVuZCA9IHsgQUNfU1JD
X09WRVIsIDAsIDI1NSwgQUNfU1JDX0FMUEhBIH07Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGFs
cGhhQmxlbmRJZlN1cHBvcnRlZChoZGMsIGRzdFJlY3RXaW4ubGVmdCwgZHN0UmVjdFdpbi50b3As
IGRzdFJlY3RXaW4ucmlnaHQgLSBkc3RSZWN0V2luLmxlZnQsIGRzdFJlY3RXaW4uYm90dG9tIC0g
ZHN0UmVjdFdpbi50b3AsCi0gICAgICAgICAgICBobWVtZGMuZ2V0KCksIDAsIDAsIHNyY1JlY3RX
aW4ucmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tLCBibGVuZCk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgfSBlbHNlIGlmICh1c2VBbHBoYSAmJiAhaGFzQWxw
aGFCbGVuZFN1cHBvcnQoKSB8fCBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIHVzZXNUcmFu
c3BhcmVudENvbG9yKCkpIHsKLSAgICAgICAgVHJhbnNwYXJlbnRCbHQoaGRjLCBkc3RSZWN0V2lu
LmxlZnQsIGRzdFJlY3RXaW4udG9wLCBkc3RSZWN0V2luLnJpZ2h0IC0gZHN0UmVjdFdpbi5sZWZ0
LAotICAgICAgICAgICAgZHN0UmVjdFdpbi5ib3R0b20gLSBkc3RSZWN0V2luLnRvcCwgaG1lbWRj
LmdldCgpLCAwLCAwLCBzcmNSZWN0V2luLnJpZ2h0LCBzcmNSZWN0V2luLmJvdHRvbSwgdHJhbnNw
YXJlbnRDb2xvcigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBEV09SRCBibXBPcCA9IG9wID09
IENvbXBvc2l0ZUNvcHkgPyBTUkNDT1BZCi0gICAgICAgICAgICAgICAgICAgIDogb3AgPT0gQ29t
cG9zaXRlU291cmNlT3ZlciA/IFNSQ0NPUFkKLSAgICAgICAgICAgICAgICAgICAgOiBvcCA9PSBD
b21wb3NpdGVYT1IgPyBQQVRJTlZFUlQKLSAgICAgICAgICAgICAgICAgICAgOiBvcCA9PSBDb21w
b3NpdGVDbGVhciA/IFdISVRFTkVTUwotICAgICAgICAgICAgICAgICAgICA6IFNSQ0NPUFk7IC8v
IEZJWEVNRTogb3RoZXIgdHlwZXM/Ci0KLSAgICAgICAgU3RyZXRjaERJQml0cyhoZGMsIGRzdFJl
Y3RXaW4ubGVmdCwgZHN0UmVjdFdpbi50b3AsIGRzdFJlY3RXaW4ucmlnaHQgLSBkc3RSZWN0V2lu
LmxlZnQsCi0gICAgICAgICAgICBkc3RSZWN0V2luLmJvdHRvbSAtIGRzdFJlY3RXaW4udG9wLCAw
LCAwLCBzcmNSZWN0V2luLnJpZ2h0LCBzcmNSZWN0V2luLmJvdHRvbSwKLSAgICAgICAgICAgIHBp
eGVscywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCBibXBPcCk7Ci0gICAgfQotICAgIFNlbGVj
dE9iamVjdChobWVtZGMuZ2V0KCksIG9sZEJtcCk7Ci19Ci0KLVNoYXJlZEJpdG1hcDo6RENQcm92
aWRlciogU2hhcmVkQml0bWFwOjpzX2RjUHJvdmlkZXIgPSBuZXcgU2hhcmVkQml0bWFwOjpEQ1By
b3ZpZGVyOwotCi1IREMgU2hhcmVkQml0bWFwOjpEQ1Byb3ZpZGVyOjpnZXREQyhTaGFyZWRCaXRt
YXAqIGJtcCwgdW5zaWduZWQqIGtleSkKLXsKLSAgICBpZiAoIWJtcCB8fCAhYm1wLT5lbnN1cmVI
YW5kbGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIREMgaGRjID0gQ3JlYXRlQ29tcGF0
aWJsZURDKDApOwotICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgICprZXkg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihTZWxlY3RPYmplY3QoaGRjLCBibXAtPmdldEhh
bmRsZSgpKSk7Ci0gICAgUkVDVCByZWN0ID0geyAwLCAwLCBibXAtPndpZHRoKCksIGJtcC0+aGVp
Z2h0KCkgfTsKLSAgICBhdXRvIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RS
Z25JbmRpcmVjdCgmcmVjdCkpOwotICAgIFNlbGVjdENsaXBSZ24oaGRjLCBjbGlwUmduLmdldCgp
KTsKLQotICAgIHJldHVybiBoZGM7Ci19Ci0KLXZvaWQgU2hhcmVkQml0bWFwOjpEQ1Byb3ZpZGVy
OjpyZWxlYXNlREMoU2hhcmVkQml0bWFwKiwgSERDIGhkYywgdW5zaWduZWQga2V5MSkKLXsKLSAg
ICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYywgcmVp
bnRlcnByZXRfY2FzdDxIR0RJT0JKPihrZXkxKSk7Ci0gICAgRGVsZXRlREMoaGRjKTsKLX0KLQot
dm9pZCBTaGFyZWRCaXRtYXA6OmNsZWFyUGl4ZWxzKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKCFtX3BpeGVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBibXBSZWN0
KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICBibXBSZWN0LmludGVyc2VjdChyZWN0KTsK
LSAgICBpZiAoaXMxNmJpdCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHcgPSBtX2JtcEluZm8ucGFk
ZGVkV2lkdGgoKTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0Kj4obV9waXhlbHMpOwotICAgICAgICBkc3QgKz0gYm1wUmVjdC55KCkgKiB3
ICsgYm1wUmVjdC54KCk7Ci0gICAgICAgIGludCB3b3Jkc1RvU2V0ID0gYm1wUmVjdC53aWR0aCgp
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogZHN0RW5kID0gZHN0ICsgYm1wUmVjdC5o
ZWlnaHQoKSAqIHc7Ci0gICAgICAgIHdoaWxlIChkc3QgPCBkc3RFbmQpIHsKLSAgICAgICAgICAg
IHdtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oZHN0KSwgMCwgd29yZHNUb1NldCk7
Ci0gICAgICAgICAgICBkc3QgKz0gdzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgdyA9IHdpZHRoKCk7Ci0gICAgdW5zaWduZWQqIGRzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkKj4obV9waXhlbHMpOwotICAgIGRzdCArPSBibXBSZWN0LnkoKSAqIHcg
KyBibXBSZWN0LngoKTsKLSAgICBpbnQgd29yZHNUb1NldCA9IGJtcFJlY3Qud2lkdGgoKSAqIDI7
Ci0gICAgY29uc3QgdW5zaWduZWQqIGRzdEVuZCA9IGRzdCArIGJtcFJlY3QuaGVpZ2h0KCkgKiB3
OwotICAgIHdoaWxlIChkc3QgPCBkc3RFbmQpIHsKLSAgICAgICAgd21lbXNldChyZWludGVycHJl
dF9jYXN0PHdjaGFyX3QqPihkc3QpLCAwLCB3b3Jkc1RvU2V0KTsKLSAgICAgICAgZHN0ICs9IHc7
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiNjg5NWIzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIFBh
dHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBT
aGFyZWRCaXRtYXBfaAotI2RlZmluZSBTaGFyZWRCaXRtYXBfaAotCi0jaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1j
bGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwotCi1jbGFzcyBTaGFyZWRCaXRtYXA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEJpdG1hcD4g
ewotcHVibGljOgotICAgIH5TaGFyZWRCaXRtYXAoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRCaXRtYXA+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgQml0bWFwSW5mbzo6Qml0Q291bnQg
PSBCaXRtYXBJbmZvOjpCaXRDb3VudDMyLCBib29sIGluaXRQaXhlbHMgPSB0cnVlKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IGNyZWF0ZShjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgaGFzQWxwaGEgPSB0cnVlKTsKLQotICAgIGNvbnN0
IEJpdG1hcEluZm8mIGJpdG1hcEluZm8oKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm87IH0KLSAg
ICB2b2lkKiBieXRlcygpIHsgcmV0dXJuIG1fcGl4ZWxzOyB9Ci0gICAgY29uc3Qgdm9pZCogYnl0
ZXMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsczsgfQotICAgIHVuc2lnbmVkIHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9ibXBJbmZvLndpZHRoKCk7IH0KLSAgICB1bnNpZ25lZCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2JtcEluZm8uaGVpZ2h0KCk7IH0KLSAgICB1bnNpZ25lZCB2YWxpZEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRIZWlnaHQ7IH0KLSAgICB2b2lkIHNldFZhbGlk
SGVpZ2h0KHVuc2lnbmVkIHZhbGlkSGVpZ2h0KSB7IG1fdmFsaWRIZWlnaHQgPSB2YWxpZEhlaWdo
dDsgfQotICAgIHZvaWQgcmVzZXRQaXhlbHMoYm9vbCBibGFjayA9IGZhbHNlKTsKLSAgICB2b2lk
IGNsZWFyUGl4ZWxzKGNvbnN0IEludFJlY3QmIHIpOwotICAgIGJvb2wgbG9ja2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NrZWQ7IH0KLSAgICB2b2lkIGxvY2soKSB7IG1fbG9ja2VkID0gdHJ1ZTsg
fQotICAgIHZvaWQgdW5sb2NrKCkgeyBtX2xvY2tlZCA9IGZhbHNlOyB9Ci0gICAgYm9vbCBmcmVl
TWVtb3J5KCk7Ci0gICAgYm9vbCBpczE2Yml0KCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvLmlz
MTZiaXQoKTsgfQotICAgIGJvb2wgaXMzMmJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mby5p
czMyYml0KCk7IH0KLSAgICBib29sIHRvMTZiaXQoKTsKLSAgICBib29sIGhhc0FscGhhKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQotICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBo
YSkgeyBtX2hhc0FscGhhID0gYWxwaGE7IH0KLSAgICBib29sIGVuc3VyZUhhbmRsZSgpOwotICAg
IEhCSVRNQVAgZ2V0SGFuZGxlKCkgeyByZXR1cm4gbV9oYml0bWFwLmdldCgpOyB9Ci0gICAgR0RJ
T2JqZWN0PEhCSVRNQVA+IGNyZWF0ZUhhbmRsZSh2b2lkKiogcGl4ZWxzLCBCaXRtYXBJbmZvKiBi
bXBJbmZvLCBpbnQgaCA9IC0xLCBib29sIHVzZTE2Yml0ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgYm9v
bCB1c2VzVHJhbnNwYXJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1RyYW5zcGFyZW50
Q29sb3I7IH0KLSAgICBDT0xPUlJFRiB0cmFuc3BhcmVudENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc3BhcmVudENvbG9yOyB9Ci0gICAgdm9pZCBzZXRUcmFuc3BhcmVudENvbG9yKENPTE9S
UkVGIGMpCi0gICAgewotICAgICAgICBtX3VzZXNUcmFuc3BhcmVudENvbG9yID0gdHJ1ZTsKLSAg
ICAgICAgbV90cmFuc3BhcmVudENvbG9yID0gYzsKLSAgICB9Ci0gICAgYm9vbCBjYW5Vc2VESUJp
dHMoKSBjb25zdCB7IHJldHVybiAhaGFzQWxwaGEoKSAmJiAhdXNlc1RyYW5zcGFyZW50Q29sb3Io
KTsgfQotCi0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGNsaXBCaXRtYXAoY29uc3QgSW50UmVjdCYs
IGJvb2wgdXNlQWxwaGEsIEJpdG1hcEluZm8mLCB2b2lkKiYgcGl4ZWxzKTsKLQotICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQml0bWFwPiBjbGlwQml0bWFwKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wg
dXNlQWxwaGEpOwotCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
SW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKLSAgICB2
b2lkIGRyYXcoSERDLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSk7
Ci0gICAgdm9pZCBkcmF3UGF0dGVybihIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7Ci0KLSAgICBj
bGFzcyBEQ1Byb3ZpZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgSERDIGdldERD
KFNoYXJlZEJpdG1hcCosIHVuc2lnbmVkKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
REMoU2hhcmVkQml0bWFwKiwgSERDLCB1bnNpZ25lZCk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBE
Q1Byb3ZpZGVyKiBzX2RjUHJvdmlkZXI7Ci0KLSAgICBIREMgZ2V0REModW5zaWduZWQqIGtleTEp
IHsgcmV0dXJuIHNfZGNQcm92aWRlci0+Z2V0REModGhpcywga2V5MSk7IH0KLSAgICB2b2lkIHJl
bGVhc2VEQyhIREMgaGRjLCB1bnNpZ25lZCBrZXkxKSB7IHNfZGNQcm92aWRlci0+cmVsZWFzZURD
KHRoaXMsIGhkYywga2V5MSk7IH0KLQotICAgIGNsYXNzIERDSG9sZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIERDSG9sZGVyKFNoYXJlZEJpdG1hcCogYm1wID0gMCkgeyBzZXRJbnRlcm5hbChi
bXApOyB9Ci0gICAgICAgIH5EQ0hvbGRlcigpIHsgY2xlYXJJbnRlcm5hbCgpOyB9Ci0gICAgICAg
IHZvaWQgc2V0KFNoYXJlZEJpdG1hcCogYm1wID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y2xlYXJJbnRlcm5hbCgpOwotICAgICAgICAgICAgc2V0SW50ZXJuYWwoYm1wKTsKLSAgICAgICAg
fQotICAgICAgICBIREMgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KLSAgICBwcml2YXRl
OgotICAgICAgICBEQ0hvbGRlciYgb3BlcmF0b3I9KGNvbnN0IERDSG9sZGVyJik7Ci0gICAgICAg
IERDSG9sZGVyKGNvbnN0IERDSG9sZGVyJik7Ci0gICAgICAgIHZvaWQgY2xlYXJJbnRlcm5hbCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2hkYykKLSAgICAgICAgICAgICAgICBtX2Jp
dG1hcC0+cmVsZWFzZURDKG1faGRjLCBtX2tleSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBz
ZXRJbnRlcm5hbChTaGFyZWRCaXRtYXAqIGJtcCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9i
aXRtYXAgPSBibXA7Ci0gICAgICAgICAgICBtX2hkYyA9IGJtcCA/IGJtcC0+Z2V0REMoJm1fa2V5
KSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgU2hhcmVkQml0bWFwKiBtX2JpdG1hcDsKLSAgICAg
ICAgSERDIG1faGRjOwotICAgICAgICB1bnNpZ25lZCBtX2tleTsKLSAgICB9OwotCi1wcml2YXRl
OgotICAgIFNoYXJlZEJpdG1hcChjb25zdCBJbnRTaXplJiwgQml0bWFwSW5mbzo6Qml0Q291bnQs
IGJvb2wgaW5pdFBpeGVscyk7Ci0gICAgQml0bWFwSW5mbyBtX2JtcEluZm87Ci0gICAgR0RJT2Jq
ZWN0PEhCSVRNQVA+IG1faGJpdG1hcDsKLSAgICB2b2lkKiBtX3BpeGVsczsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8dW5zaWduZWRbXT4gbV9waXhlbERhdGE7Ci0gICAgQ09MT1JSRUYgbV90cmFuc3Bh
cmVudENvbG9yOwotICAgIGludCBtX3ZhbGlkSGVpZ2h0OwotICAgIGJvb2wgbV9sb2NrZWQ7Ci0g
ICAgYm9vbCBtX3VzZXNUcmFuc3BhcmVudENvbG9yOwotICAgIGJvb2wgbV9oYXNBbHBoYTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNoYXJlZEJpdG1hcF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVG
b250RGF0YVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
Y2I4ZjhjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0j
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWV4dGVybiBIREMg
Z19zY3JlZW5EQzsKLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAg
ICBpZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgVEVYVE1FVFJJQyYgdG0gPSBtX3BsYXRmb3JtRGF0YS5tZXRyaWNzKCk7Ci0gICAgbV9p
c1N5c3RlbUZvbnQgPSBtX3BsYXRmb3JtRGF0YS5pc1N5c3RlbUZvbnQoKTsKLQotICAgIGZsb2F0
IGFzY2VudCA9ICh0bS50bUFzY2VudCAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDM2KSAvIDcy
LjBmOwotICAgIGZsb2F0IGRlc2NlbnQgPSAodG0udG1EZXNjZW50ICogbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpICsgMzYpIC8gNzIuMGY7Ci0gICAgZmxvYXQgbGluZUdhcCA9ICh0bS50bUV4dGVybmFs
TGVhZGluZyAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDM2KSAvIDcyLjBmOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVz
Y2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQo
YXNjZW50ICogMC41NmYpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgZm9udERlc2Muc2V0Q29tcHV0ZWRT
aXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVzYy5jb21wdXRlZFNpemUoKSkpOwotICAg
IGZvbnREZXNjLnNldFNwZWNpZmllZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNj
LnNwZWNpZmllZFNpemUoKSkpOwotICAgIGZvbnREZXNjLnNldEtleXdvcmRTaXplKGxyb3VuZGYo
c2NhbGVGYWN0b3IgKiBmb250RGVzYy5rZXl3b3JkU2l6ZSgpKSk7Ci0gICAgRm9udFBsYXRmb3Jt
RGF0YSogcmVzdWx0ID0gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzYywgbV9wbGF0Zm9ybURhdGEuZmFtaWx5KCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZSgqcmVzdWx0KTsK
LX0KLQotRFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7
Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEu
aXNEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEZJWE1FOiBNaWNy
b3NvZnQgZG9jdW1lbnRhdGlvbiBzZWVtcyB0byBpbXBseSB0aGF0IGNoYXJhY3RlcnMgY2FuIGJl
IG91dHB1dCB1c2luZyBhIGdpdmVuIGZvbnQgYW5kIERDCi0gICAgLy8gbWVyZWx5IGJ5IHRlc3Rp
bmcgY29kZSBwYWdlIGludGVyc2VjdGlvbi4gIFRoaXMgc2VlbXMgc3VzcGVjdCB0aG91Z2guICBD
YW4ndCBhIGZvbnQgb25seSBwYXJ0aWFsbHkKLSAgICAvLyBjb3ZlciBhIGdpdmVuIGNvZGUgcGFn
ZT8KLQotICAgIC8vIEZJWE1FOiBpbiB0aGUgY2FzZSB0aGF0IHdlIGZhaWxlZCB0byBnZXQgdGhl
IGludGVyZmFjZSwgc3RpbGwgdXNlIHRoZSBmb250LgotICAgIElNTGFuZ0ZvbnRMaW5rVHlwZSog
bGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCkuZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKLSAgICBp
ZiAoIWxhbmdGb250TGluaykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBEV09SRCBmb250
Q29kZVBhZ2VzID0gbV9wbGF0Zm9ybURhdGEuY29kZVBhZ2VzKCk7Ci0gICAgaWYgKCFmb250Q29k
ZVBhZ2VzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEV09SRCBhY3BDb2RlUGFnZXMg
PSAwOwotICAgIGxhbmdGb250TGluay0+Q29kZVBhZ2VUb0NvZGVQYWdlcyhDUF9BQ1AsICZhY3BD
b2RlUGFnZXMpOwotCi0gICAgRFdPUkQgYWN0dWFsQ29kZVBhZ2VzOwotICAgIGxvbmcgbnVtQ2hh
cmFjdGVyc1Byb2Nlc3NlZDsKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIGxhbmdGb250
TGluay0+R2V0U3RyQ29kZVBhZ2VzKGNoYXJhY3RlcnMsIGxlbmd0aCwgYWNwQ29kZVBhZ2VzLCAm
YWN0dWFsQ29kZVBhZ2VzLCAmbnVtQ2hhcmFjdGVyc1Byb2Nlc3NlZCk7Ci0gICAgICAgIGlmIChh
Y3R1YWxDb2RlUGFnZXMgJiYgIShhY3R1YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBsZW5ndGggLT0gbnVtQ2hhcmFjdGVy
c1Byb2Nlc3NlZDsKLSAgICAgICAgY2hhcmFjdGVycyArPSBudW1DaGFyYWN0ZXJzUHJvY2Vzc2Vk
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpk
ZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFRFWFRNRVRSSUMmIHRtID0gbV9wbGF0Zm9ybURh
dGEubWV0cmljcygpOwotCi0gICAgLy8gWWVzLCB0aGlzIGxvb2tzIGJhY2t3YXJkcywgYnV0IHRo
ZSBmaXhlZCBwaXRjaCBiaXQgaXMgYWN0dWFsbHkgc2V0IGlmIHRoZSBmb250Ci0gICAgLy8gaXMg
Km5vdCogZml4ZWQgcGl0Y2guICBVbmJlbGlldmFibGUgYnV0IHRydWUuCi0gICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9ICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfRklYRURfUElUQ0gpOwot
fQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5
cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotICAgIAotZmxvYXQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsK
LSAgICBpZiAobV9wbGF0Zm9ybURhdGEuaXNEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIEhHRElPQkogaE9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgbV9wbGF0
Zm9ybURhdGEuaGZvbnQoKSk7Ci0KLSAgICBTSVpFIGZvbnRTaXplOwotICAgIHdjaGFyX3QgYyA9
IGdseXBoOwotICAgIEdldFRleHRFeHRlbnRQb2ludDMyKGdfc2NyZWVuREMsICZjLCAxLCAmZm9u
dFNpemUpOwotCi0gICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhPbGRGb250KTsKLQotICAg
IHJldHVybiAoZmxvYXQpZm9udFNpemUuY3ggKiAoZmxvYXQpbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
IC8gNzIuZjsKLX0KLQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRhLm1ldHJpY3Mo
KTsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9ICh0bS50bUF2ZUNoYXJXaWR0aCAqIG1fcGxhdGZvcm1E
YXRhLnNpemUoKSArIDM2KSAvIDcyOwotICAgIG1fbWF4Q2hhcldpZHRoID0gKHRtLnRtTWF4Q2hh
cldpZHRoICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGNhYjIxYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9XaW5DRUdyYXBoaWNzRXh0cmFzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdpbkNFR3JhcGhpY3NFeHRyYXNfaAotI2RlZmlu
ZSBXaW5DRUdyYXBoaWNzRXh0cmFzX2gKLQotLy8gVGhpcyBmaWxlIGlzIHVzZWQgdG8gY29udGFp
biBzbWFsbCB1dGlsaXRpZXMgdXNlZCBieSBXSU5DRSBncmFwaGljcyBjb2RlLgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgLy8gQWx3YXlzIHJvdW5kIHRvIHNhbWUgZGlyZWN0aW9uLiAwLjUg
aXMgcm91bmRlZCB0byAxLAotICAgIC8vIGFuZCAtMC41ICgwLjUgLSAxKSBpcyByb3VuZGVkIHRv
IDAgKDEgLSAxKSwgc28gdGhhdCBpdAotICAgIC8vIGlzIGNvbnNpc3RlbnQgd2hlbiB0cmFuc2Zv
cm1hdGlvbiBzaGlmdHMuCi0gICAgc3RhdGljIGlubGluZSBpbnQgc3RhYmxlUm91bmQoZG91Ymxl
IGQpCi0gICAgewotICAgICAgICBpZiAoZCA+IDApCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihkICsgMC41KTsKLQotICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4o
ZCk7Ci0gICAgICAgIHJldHVybiBpIC0gZCA+IDAuNSA/IGkgLSAxIDogaTsKLSAgICB9Ci19Ci0K
LSNlbmRpZiBXaW5DRUdyYXBoaWNzRXh0cmFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgK
aW5kZXggYTRmYTZkMS4uNWZjOGM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKQEAg
LTMxLDE1ICszMSw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4gLy8gTmVlZGVkIGJ5IGpwZWdsaWIu
aCBmb3IgRklMRS4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLSNpZiBPUyhXSU5DRSkKLS8v
IFJlbW92ZSB3YXJuaW5nOiAnRkFSJyBtYWNybyByZWRlZmluaXRpb24KLSN1bmRlZiBGQVIKLQot
Ly8gam1vcmVjZmcuaCBpbiBsaWJqcGVnIGNoZWNrcyBmb3IgWE1EX0ggd2l0aCB0aGUgY29tbWVu
dDogIlgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQzMiIKLS8vIGZpeCBJTlQzMiByZWRl
ZmluaXRpb24gZXJyb3IgYnkgcHJldGVuZGluZyB3ZSBhcmUgWDExL3htZC5oCi0jZGVmaW5lIFhN
RF9ICi0jZW5kaWYKLQogZXh0ZXJuICJDIiB7CiAjaW5jbHVkZSAianBlZ2xpYi5oIgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRl
Tm90aWZpZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vTmV0
d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwCmluZGV4IGRkZWRhYmYuLjBhNTFmMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlm
aWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3
b3JrU3RhdGVOb3RpZmllcldpbi5jcHAKQEAgLTEwNywxNCArMTA3LDExIEBAIE5ldHdvcmtTdGF0
ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcigpCiAKICAgICBtZW1zZXQoJm1fb3Zlcmxh
cHBlZCwgMCwgc2l6ZW9mKG1fb3ZlcmxhcHBlZCkpOwogCi0vLyBGSVhNRTogQ2hlY2sgbV9vdmVy
bGFwcGVkIG9uIFdpbkNFLgotI2lmICFPUyhXSU5DRSkKICAgICBtX292ZXJsYXBwZWQuaEV2ZW50
ID0gOjpDcmVhdGVFdmVudCgwLCBmYWxzZSwgZmFsc2UsIDApOwogCiAgICAgOjpSZWdpc3Rlcldh
aXRGb3JTaW5nbGVPYmplY3QoJm1fd2FpdEhhbmRsZSwgbV9vdmVybGFwcGVkLmhFdmVudCwgYWRk
ckNoYW5nZUNhbGxiYWNrLCB0aGlzLCBJTkZJTklURSwgMCk7CiAKICAgICByZWdpc3RlckZvckFk
ZHJlc3NDaGFuZ2UoKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgKaW5kZXggNzQwNDg1NC4uYzZiMmU5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIuaApAQCAtMzQsMTAgKzM0LDYgQEAKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAKLSNpZiAh
T1MoV0lOQ0UpCi0jaW5jbHVkZSA8Z3VpZGRlZi5oPgotI2VuZGlmCi0KIHR5cGVkZWYgbG9uZyBI
UkVTVUxUOwogCiAvLyBGSVhNRTogU2hvdWxkIHdlIHB1dCB0aGlzIGludG8gdGhlIFdlYkNvcmUg
bmFtZXNwYWNlIGFuZCB1c2UgInVzaW5nIiBvbiBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAppbmRleCAyYmNjZjFhLi43
ZmRjNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
VXRpbGl0aWVzV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcApAQCAtMzEsMTQgKzMxLDEyIEBACiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8c2hsb2JqLmg+CisjaW5j
bHVkZSA8c2hsd2FwaS5oPgogI2luY2x1ZGUgPHdpbmluZXQuaD4gLy8gZm9yIElOVEVSTkVUX01B
WF9VUkxfTEVOR1RICiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
LSNpZiAhT1MoV0lOQ0UpCi0jaW5jbHVkZSA8c2hsd2FwaS5oPgotI2VuZGlmCiAKICNpZiBVU0Uo
Q0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudUl0ZW1XaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51SXRlbVdpbi5jcHAKaW5kZXgg
NWY5NTViZi4uM2E2NGNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NvbnRleHRNZW51SXRlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NvbnRleHRNZW51SXRlbVdpbi5jcHAKQEAgLTI4LDE4ICsyOCw2IEBACiAKICNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgogCi0jaWYgT1MoV0lOQ0UpCi0jaWZuZGVmIE1GU19ESVNBQkxFRAotI2Rl
ZmluZSBNRlNfRElTQUJMRUQgTUZfR1JBWUVECi0jZW5kaWYKLSNpZm5kZWYgTUlJTV9GVFlQRQot
I2RlZmluZSBNSUlNX0ZUWVBFIE1JSU1fVFlQRQotI2VuZGlmCi0jaWZuZGVmIE1JSU1fU1RSSU5H
Ci0jZGVmaW5lIE1JSU1fU1RSSU5HIDAKLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oY29uc3QgTUVOVUlURU1J
TkZPJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRl
eHRNZW51V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdp
bi5jcHAKaW5kZXggMzc1NWYyNC4uNDUwNDdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCkBAIC01Miw5ICs1Miw2IEBAIENvbnRleHRNZW51
OjpDb250ZXh0TWVudShITUVOVSBtZW51KQogCiB2b2lkIENvbnRleHRNZW51OjpnZXRDb250ZXh0
TWVudUl0ZW1zKEhNRU5VIG1lbnUsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBpdGVtcykKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKICAgICBpbnQgY291
bnQgPSA6OkdldE1lbnVJdGVtQ291bnQobWVudSk7CiAgICAgaWYgKGNvdW50IDw9IDApCiAgICAg
ICAgIHJldHVybjsKQEAgLTgwLDcgKzc3LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6Z2V0Q29udGV4
dE1lbnVJdGVtcyhITUVOVSBtZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMKICAg
ICAgICAgaWYgKDo6R2V0TWVudUl0ZW1JbmZvKG1lbnUsIGksIFRSVUUsICZpbmZvKSkKICAgICAg
ICAgICAgaXRlbXMuYXBwZW5kKENvbnRleHRNZW51SXRlbShpbmZvKSk7CiAgICAgfQotI2VuZGlm
CiB9CiAKIEhNRU5VIENvbnRleHRNZW51OjpjcmVhdGVQbGF0Zm9ybUNvbnRleHRNZW51RnJvbUl0
ZW1zKGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBpdGVtcykKQEAgLTkyLDMxICs4OCw2
IEBAIEhNRU5VIENvbnRleHRNZW51OjpjcmVhdGVQbGF0Zm9ybUNvbnRleHRNZW51RnJvbUl0ZW1z
KGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0CiAKICAgICAgICAgTUVOVUlURU1JTkZPIG1lbnVJ
dGVtID0gaXRlbS5wbGF0Zm9ybUNvbnRleHRNZW51SXRlbSgpOwogCi0jaWYgT1MoV0lOQ0UpCi0g
ICAgICAgIFVJTlQgZmxhZ3MgPSBNRl9CWVBPU0lUSU9OOwotICAgICAgICBVSU5UIG5ld0l0ZW0g
PSAwOwotICAgICAgICBMUENXU1RSIHRpdGxlID0gMDsKLQotICAgICAgICBpZiAoaXRlbS50eXBl
KCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgICAgIGZsYWdzIHw9IE1GX1NFUEFSQVRPUjsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBNRl9TVFJJTkc7Ci0gICAgICAg
ICAgICBmbGFncyB8PSBpdGVtLmNoZWNrZWQoKSA/IE1GX0NIRUNLRUQgOiBNRl9VTkNIRUNLRUQ7
Ci0gICAgICAgICAgICBmbGFncyB8PSBpdGVtLmVuYWJsZWQoKSA/IE1GX0VOQUJMRUQgOiBNRl9H
UkFZRUQ7Ci0KLSAgICAgICAgICAgIHRpdGxlID0gbWVudUl0ZW0uZHdUeXBlRGF0YTsKLSAgICAg
ICAgICAgIG1lbnVJdGVtLmR3VHlwZURhdGEgPSAwOwotCi0gICAgICAgICAgICBpZiAobWVudUl0
ZW0uaFN1Yk1lbnUpIHsKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBNRl9QT1BVUDsKLSAgICAg
ICAgICAgICAgICBuZXdJdGVtID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UPihtZW51SXRlbS5oU3Vi
TWVudSk7Ci0gICAgICAgICAgICAgICAgbWVudUl0ZW0uaFN1Yk1lbnUgPSAwOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmV3SXRlbSA9IG1lbnVJdGVtLndJRDsKLSAgICAg
ICAgfQotCi0gICAgICAgIDo6SW5zZXJ0TWVudVcobWVudSwgaSwgZmxhZ3MsIG5ld0l0ZW0sIHRp
dGxlKTsKLSNlbHNlCiAgICAgICAgIC8vIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1Db250ZXh0
TWVudUl0ZW0gZG9lc24ndCBzZXQgdGhlIHRpdGxlIG9mIHRoZSBNRU5VSVRFTUlORk8gdG8gbWFr
ZSB0aGUKICAgICAgICAgLy8gbGlmZXRpbWUgaGFuZGxpbmcgZWFzaWVyIGZvciBjYWxsZXJzLgog
ICAgICAgICBWZWN0b3I8VUNoYXI+IHdpZGVDaGFyVGl0bGU7IC8vIFJldGFpbiBidWZmZXIgZm9y
IGxvbmcgZW5vdWdoIHRvIG1ha2UgdGhlIEluc2VydE1lbnVJdGVtIGNhbGwKQEAgLTEzMCw3ICsx
MDEsNiBAQCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21J
dGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogICAgICAgICB9CiAKICAgICAgICAgOjpJ
bnNlcnRNZW51SXRlbShtZW51LCBpLCBUUlVFLCAmbWVudUl0ZW0pOwotI2VuZGlmCiAgICAgfQog
CiAgICAgcmV0dXJuIG1lbnU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VXaW4uY3BwCmluZGV4IDBkOGQ0NDEuLmI1YTgwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCkBAIC0xMDUsNyArMTA1LDYgQEAgY29uc3QgZmxv
YXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEwOwogc3RhdGljIEZvbnQgZHJhZ0xhYmVsRm9udChp
bnQgc2l6ZSwgYm9vbCBib2xkLCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewog
ICAgIEZvbnQgcmVzdWx0OwotI2lmICFPUyhXSU5DRSkKICAgICBOT05DTElFTlRNRVRSSUNTIG1l
dHJpY3M7CiAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7CiAgICAgU3lzdGVt
UGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAm
bWV0cmljcywgMCk7CkBAIC0xMTgsNyArMTE3LDYgQEAgc3RhdGljIEZvbnQgZHJhZ0xhYmVsRm9u
dChpbnQgc2l6ZSwgYm9vbCBib2xkLCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQog
ICAgIGRlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CiAgICAgcmVz
dWx0ID0gRm9udChkZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgcmVzdWx0LnVwZGF0ZSgwKTsKLSNl
bmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBjNjUyOTNkLi41ZDQ5YjQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0xNTYsMTkgKzE1
Niw2IEBAIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogCiBT
dHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBjb21wb25lbnQpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotCi0gICAgYnVpbGRlci5hcHBlbmQocGF0aCk7Ci0KLSAgICBVQ2hhciBsYXN0UGF0
aENoYXJhY3RlciA9IHBhdGhbcGF0aC5sZW5ndGgoKSAtIDFdOwotICAgIGlmIChsYXN0UGF0aENo
YXJhY3RlciAhPSBMJ1xcJyAmJiBsYXN0UGF0aENoYXJhY3RlciAhPSBMJy8nICYmIGNvbXBvbmVu
dFswXSAhPSBMJ1xcJyAmJiBjb21wb25lbnRbMF0gIT0gTCcvJykKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoUGxhdGZvcm1GaWxlUGF0aFNlcGFyYXRvcik7Ci0KLSAgICBidWlsZGVyLmFwcGVuZChj
b21wb25lbnQpOwotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSNlbHNlCiAgICAg
VmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwogCiAgICAgaWYgKHBhdGgubGVuZ3RoKCkg
KyAxID4gYnVmZmVyLnNpemUoKSkKQEAgLTE4Myw3ICsxNzAsNiBAQCBTdHJpbmcgcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25l
bnQpCiAgICAgYnVmZmVyLnNocmluayh3Y3NsZW4oYnVmZmVyLmRhdGEoKSkpOwogCiAgICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKLSNlbmRpZgogfQogCiAjaWYgIVVTRShDRikKQEAg
LTIyNiwyNCArMjEyLDcgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIAogU3RyaW5nIHBh
dGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAg
c2l6ZV90IHBvc2l0aW9uU2xhc2ggPSBwYXRoLnJldmVyc2VGaW5kKCcvJyk7Ci0gICAgc2l6ZV90
IHBvc2l0aW9uQmFja3NsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgnXFwnKTsKLQotICAgIHNpemVf
dCBwb3NpdGlvbjsKLSAgICBpZiAocG9zaXRpb25TbGFzaCA9PSBub3RGb3VuZCkKLSAgICAgICAg
cG9zaXRpb24gPSBwb3NpdGlvbkJhY2tzbGFzaDsKLSAgICBlbHNlIGlmIChwb3NpdGlvbkJhY2tz
bGFzaCA9PSBub3RGb3VuZCkKLSAgICAgICAgcG9zaXRpb24gPSAgcG9zaXRpb25TbGFzaDsKLSAg
ICBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gc3RkOjptYXgocG9zaXRpb25TbGFzaCwgcG9zaXRp
b25CYWNrc2xhc2gpOwotCi0gICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQotICAgICAgICBy
ZXR1cm4gcGF0aDsKLSAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocG9zaXRpb24gKyAxKTsKLSNl
bHNlCiAgICAgcmV0dXJuIFN0cmluZyg6OlBhdGhGaW5kRmlsZU5hbWUoU3RyaW5nKHBhdGgpLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSk7Ci0jZW5kaWYKIH0KIAogU3Ry
aW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQpAQCAtMjc4LDkgKzI0Nyw2IEBA
IHN0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCiAKIHN0YXRpYyBTdHJpbmcgc3RvcmFnZURpcmVj
dG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci0jZWxzZQogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKICAg
ICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVyUGF0aFcoMCwgcGF0aElkZW50aWZpZXIgfCBDU0lETF9G
TEFHX0NSRUFURSwgMCwgMCwgYnVmZmVyLmRhdGEoKSkpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CkBAIC0yOTMsNyArMjU5LDYgQEAgc3RhdGljIFN0cmluZyBzdG9yYWdlRGlyZWN0b3J5KERX
T1JEIHBhdGhJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICByZXR1
cm4gZGlyZWN0b3J5OwotI2VuZGlmCiB9CiAKIHN0YXRpYyBTdHJpbmcgY2FjaGVkU3RvcmFnZURp
cmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9Mb2dnaW5nV2luLmNwcAppbmRleCAyZmFlNzc4Li5mMzZhMTQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCkBAIC0zOCw5ICszOCw2IEBAIHN0YXRpYyBj
aGFyICogY29uc3QgbG9nZ2luZ0Vudmlyb25tZW50VmFyaWFibGUgPSAiV2ViQ29yZUxvZ2dpbmci
OwogCiBTdHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotI2Vsc2UKICAgICBEV09SRCBsZW5ndGggPSBHZXRFbnZpcm9ubWVu
dFZhcmlhYmxlQShsb2dnaW5nRW52aXJvbm1lbnRWYXJpYWJsZSwgMCwgMCk7CiAgICAgaWYgKCFs
ZW5ndGgpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpAQCAtNTEsNyArNDgsNiBAQCBT
dHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmdldCgpKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFz
dGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAKaW5kZXggY2U1YTdlMi4uYzJhMDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtNzksMTIgKzc5LDEwIEBAIHN0YXRpYyBMUkVT
VUxUIENBTExCQUNLIFBhc3RlYm9hcmRPd25lclduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fREVTVFJPWToKICAgICAg
ICAgYnJlYWs7Ci0jaWYgIU9TKFdJTkNFKQogICAgIGNhc2UgV01fRFJBV0NMSVBCT0FSRDoKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXTV9DSEFOR0VDQkNIQUlOOgogICAgICAgICBicmVhazsK
LSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIGxyZXN1bHQgPSBEZWZXaW5kb3dQcm9jKGhX
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKICAgICAgICAgYnJlYWs7CkBAIC05NiwxMCAr
OTQsOCBAQCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpCiB7CiAgICAgT3duUHRyPFBhc3RlYm9hcmQ+IHBhc3RlYm9hcmQgPSBhZG9wdFB0
cihuZXcgUGFzdGVib2FyZCk7CiAgICAgQ09NUHRyPElEYXRhT2JqZWN0PiBjbGlwYm9hcmREYXRh
OwotI2lmICFPUyhXSU5DRSkKICAgICBpZiAoIVNVQ0NFRURFRChPbGVHZXRDbGlwYm9hcmQoJmNs
aXBib2FyZERhdGEpKSkKICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IDA7Ci0jZW5kaWYKICAgICBw
YXN0ZWJvYXJkLT5zZXRFeHRlcm5hbERhdGFPYmplY3QoY2xpcGJvYXJkRGF0YS5nZXQoKSk7CiAg
ICAgcmV0dXJuIHBhc3RlYm9hcmQucmVsZWFzZSgpOwogfQpAQCAtNTI1LDcgKzUyMSw2IEBAIHZv
aWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJl
cGxhY2VPcHRpb24gc21hcnRSZXBsCiAgICAgd3JpdGVQbGFpblRleHRUb0RhdGFPYmplY3QodGV4
dCwgc21hcnRSZXBsYWNlT3B0aW9uKTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIHN0YXRpYyBpbmxp
bmUgdm9pZCBwYXRoUmVtb3ZlQmFkRlNDaGFyYWN0ZXJzKFBXU1RSIHBzeiwgc2l6ZV90IGxlbmd0
aCkKIHsKICAgICBzaXplX3Qgd3JpdGVUbyA9IDA7CkBAIC01MzksMTQgKzUzNCw5IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBwYXRoUmVtb3ZlQmFkRlNDaGFyYWN0ZXJzKFBXU1RSIHBzeiwgc2l6ZV90
IGxlbmd0aCkKICAgICB9CiAgICAgcHN6W3dyaXRlVG9dID0gMDsKIH0KLSNlbmRpZgogCiBzdGF0
aWMgU3RyaW5nIGZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFVDaGFyKiBleHRlbnNpb24sIGJvb2wgaXNMaW5r
KQogewotI2lmIE9TKFdJTkNFKQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotI2Vsc2UKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGZzUGF0aE1heExlbmd0aEV4
Y2x1ZGluZ051bGxUZXJtaW5hdG9yID0gTUFYX1BBVEggLSAxOwogICAgIGJvb2wgdXNlZFVSTCA9
IGZhbHNlOwogICAgIFdDSEFSIGZzUGF0aEJ1ZmZlcltNQVhfUEFUSF07CkBAIC01ODksNyArNTc5
LDYgQEAgc3RhdGljIFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxlKGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGwKICAgICB9CiAKICAgICByZXR1cm4gbWFrZVN0
cmluZyhzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KGZzUGF0aEJ1ZmZlciksIGV4dGVuc2lvbik7
Ci0jZW5kaWYKIH0KIAogLy8gd3JpdGVGaWxlVG9EYXRhT2JqZWN0IHRha2VzIG93bmVyc2hpcCBv
ZiBmaWxlRGVzY3JpcHRvciBhbmQgZmlsZUNvbnRlbnQKQEAgLTk2NiwxMCArOTU1LDYgQEAgc3Rh
dGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KGNvbnN0IFVSTCYgdXJsLCBTdHJp
bmcmIGZpbGVOYW1lLCBTaGFyZWQKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfSBlbHNlIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQogICAgICAgICBXQ0hBUiB0ZW1wUGF0aFtNQVhfUEFU
SF07CiAgICAgICAgIFdDSEFSIGV4dGVuc2lvbltNQVhfUEFUSF07CiAgICAgICAgIGlmICghOjpH
ZXRUZW1wUGF0aChXVEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSwgdGVtcFBhdGgpKQpAQCAtMTAw
MSw3ICs5ODYsNiBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9iYWxIRHJvcENvbnRlbnQoY29u
c3QgVVJMJiB1cmwsIFN0cmluZyYgZmlsZU5hbWUsIFNoYXJlZAogICAgICAgICBDbG9zZUhhbmRs
ZSh0ZW1wRmlsZUhhbmRsZSk7CiAgICAgICAgIGlmICghdGVtcFdyaXRlU3VjY2VlZGVkKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKICAgICB9CiAKICAgICBTSVpFX1QgZHJvcEZpbGVz
U2l6ZSA9IHNpemVvZihEUk9QRklMRVMpICsgKHNpemVvZihXQ0hBUikgKiAod2NzbGVuKGZpbGVQ
YXRoKSArIDIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0
Zm9ybU1vdXNlRXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRm
b3JtTW91c2VFdmVudFdpbi5jcHAKaW5kZXggMTQzYmJhYS4uZjE5NTMwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAK
QEAgLTY2LDkgKzY2LDcgQEAgc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgbWVzc2FnZVRvRXZl
bnRUeXBlKFVJTlQgbWVzc2FnZSkKICAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CiAgICAgICAg
ICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKIAotI2lmICFPUyhXSU5D
RSkKICAgICAgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgotI2VuZGlmCiAgICAgICAgIGNhc2UgV01f
TU9VU0VNT1ZFOgogICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7
CiAKQEAgLTEwNCw5ICsxMDIsNyBAQCBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VF
dmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTAogICAgICAgICAg
ICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBXTV9NT1VTRU1PVkU6Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBjYXNlIFdNX01PVVNF
TEVBVkU6Ci0jZW5kaWYKICAgICAgICAgICAgIGlmICh3UGFyYW0gJiBNS19MQlVUVE9OKQogICAg
ICAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKICAgICAgICAgICAgIGVsc2UgaWYg
KHdQYXJhbSAmIE1LX01CVVRUT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BsYXRmb3JtU2NyZWVuV2luLmNwcAppbmRleCBjYzlhMDIzLi5kZWE5NTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVlbldpbi5jcHAKQEAgLTU1
LDEzICs1NSw4IEBAIHN0YXRpYyBERVZNT0RFIGRldmljZUluZm9Gb3JXaWRnZXQoV2lkZ2V0KiB3
aWRnZXQpCiAgICAgREVWTU9ERSBkZXZpY2VJbmZvOwogICAgIGRldmljZUluZm8uZG1TaXplID0g
c2l6ZW9mKERFVk1PREUpOwogICAgIGRldmljZUluZm8uZG1Ecml2ZXJFeHRyYSA9IDA7Ci0jaWYg
T1MoV0lOQ0UpCi0gICAgaWYgKCFFbnVtRGlzcGxheVNldHRpbmdzKDAsIEVOVU1fQ1VSUkVOVF9T
RVRUSU5HUywgJmRldmljZUluZm8pKQotICAgICAgICBkZXZpY2VJbmZvLmRtQml0c1BlclBlbCA9
IDE2OwotI2Vsc2UKICAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJbmZvID0gbW9uaXRvckluZm9G
b3JXaWRnZXQod2lkZ2V0KTsKICAgICBFbnVtRGlzcGxheVNldHRpbmdzKG1vbml0b3JJbmZvLnN6
RGV2aWNlLCBFTlVNX0NVUlJFTlRfU0VUVElOR1MsICZkZXZpY2VJbmZvKTsKLSNlbmRpZgogCiAg
ICAgcmV0dXJuIGRldmljZUluZm87CiB9CkBAIC04NSwxMyArODAsOCBAQCBpbnQgc2NyZWVuRGVw
dGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiAKIGJvb2wgc2NyZWVuSXNNb25vY2hyb21l
KFdpZGdldCogd2lkZ2V0KQogewotI2lmIE9TKFdJTkNFKQotICAgIC8vIEVudW1EaXNwbGF5U2V0
dGluZ3MgZG9lc24ndCBzZXQgZG1Db2xvciBpbiBERVZNT0RFLgotICAgIHJldHVybiBmYWxzZTsK
LSNlbHNlCiAgICAgREVWTU9ERSBkZXZpY2VJbmZvID0gZGV2aWNlSW5mb0ZvcldpZGdldCh3aWRn
ZXQpOwogICAgIHJldHVybiBkZXZpY2VJbmZvLmRtQ29sb3IgPT0gRE1DT0xPUl9NT05PQ0hST01F
OwotI2VuZGlmCiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAppbmRleCA1ZjEyZTdl
Li41NTQ2YmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmNwcApAQCAtNDksMTAgKzQ5LDYgQEAKIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRl
IDx3aW5kb3dzeC5oPgotI2lmIE9TKFdJTkNFKQotI2luY2x1ZGUgPFJlc0RlZkNFLmg+Ci0jZGVm
aW5lIE1BS0VQT0lOVFMobCkgKCooKFBPSU5UUyBGQVIgKikmKGwpKSkKLSNlbmRpZgogCiAjZGVm
aW5lIEhJR0hfQklUX01BU0tfU0hPUlQgMHg4MDAwCiAKQEAgLTE2NCw3ICsxNjAsNiBAQCB2b2lk
IFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGlu
dCBpbmRleCkKICAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChpbmRleCk7CiAgICAgfQogCi0j
aWYgIU9TKFdJTkNFKQogICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVENPTUJPQk9Y
QU5JTUFUSU9OLCAwLCAmc2hvdWxkQW5pbWF0ZSwgMCk7CiAKICAgICBpZiAoc2hvdWxkQW5pbWF0
ZSkgewpAQCAtMTczLDkgKzE2OCw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpzaG93KGNvbnN0IElu
dFJlY3QmIHIsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogICAgICAgICBpZiAoITo6SXNS
ZWN0RW1wdHkoJnZpZXdSZWN0KSkKICAgICAgICAgICAgIDo6QW5pbWF0ZVdpbmRvdyhtX3BvcHVw
LCBkZWZhdWx0QW5pbWF0aW9uRHVyYXRpb24sIEFXX0JMRU5EKTsKICAgICB9IGVsc2UKLSNlbmRp
ZgotCi0gICAgOjpTaG93V2luZG93KG1fcG9wdXAsIFNXX1NIT1dOT0FDVElWQVRFKTsKKyAgICAg
ICAgOjpTaG93V2luZG93KG1fcG9wdXAsIFNXX1NIT1dOT0FDVElWQVRFKTsKIAogICAgIG1fc2hv
d1BvcHVwID0gdHJ1ZTsKIApAQCAtMTk5LDcgKzE5Miw2IEBAIHZvaWQgUG9wdXBNZW51V2luOjpz
aG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvLyBTdGVhbCBtb3VzZSBtZXNzYWdlcy4K
LSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgICAgICBjYXNlIFdNX05DTU9VU0VNT1ZFOgogICAgICAg
ICAgICAgY2FzZSBXTV9OQ0xCVVRUT05ET1dOOgogICAgICAgICAgICAgY2FzZSBXTV9OQ0xCVVRU
T05VUDoKQEAgLTIxMCw3ICsyMDIsNiBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJ
bnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAgICAgIGNhc2Ug
V01fTkNNQlVUVE9ORE9XTjoKICAgICAgICAgICAgIGNhc2UgV01fTkNNQlVUVE9OVVA6CiAgICAg
ICAgICAgICBjYXNlIFdNX05DTUJVVFRPTkRCTENMSzoKLSNlbmRpZgogICAgICAgICAgICAgY2Fz
ZSBXTV9NT1VTRVdIRUVMOgogICAgICAgICAgICAgICAgIG1zZy5od25kID0gbV9wb3B1cDsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTYwMSwxMSArNTkyLDcgQEAgdm9pZCBQb3B1cE1lbnVX
aW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgICAg
ICBtX2JtcC5jbGVhcigpOwogICAgIH0KICAgICBpZiAoIW1fYm1wKSB7Ci0jaWYgT1MoV0lOQ0Up
Ci0gICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRv
bVVwKGNsaWVudFJlY3QoKS5zaXplKCksIEJpdG1hcEluZm86OkJpdENvdW50MTYpOwotI2Vsc2UK
ICAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9t
VXAoY2xpZW50UmVjdCgpLnNpemUoKSk7Ci0jZW5kaWYKICAgICAgICAgdm9pZCogcGl4ZWxzID0g
MDsKICAgICAgICAgbV9ibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24obV9E
Qy5nZXQoKSwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7CiAg
ICAgICAgIGlmICghbV9ibXApCkBAIC03NjcsMTQgKzc1NCwxMCBAQCB2b2lkIFBvcHVwTWVudVdp
bjo6cmVnaXN0ZXJDbGFzcygpCiAgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCiAg
ICAgICAgIHJldHVybjsKIAotI2lmIE9TKFdJTkNFKQotICAgIFdORENMQVNTIHdjZXg7Ci0jZWxz
ZQogICAgIFdORENMQVNTRVggd2NleDsKICAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFT
U0VYKTsKICAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKICAgICB3Y2V4LnN0eWxlICAgICAg
ICAgID0gQ1NfRFJPUFNIQURPVzsKLSNlbmRpZgogCiAgICAgd2NleC5scGZuV25kUHJvYyAgICA9
IFBvcHVwTWVudVduZFByb2M7CiAgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CkBAIC03ODgs
MTEgKzc3MSw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpyZWdpc3RlckNsYXNzKCkKIAogICAgIGhh
dmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgUmVn
aXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAgIFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci0j
ZW5kaWYKIH0KIAogCkBAIC04MTksMTAgKzc5OCw4IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3
bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
CiAgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKIAogICAgIHN3aXRjaCAobWVzc2FnZSkgewotI2lm
ICFPUyhXSU5DRSkKICAgICAgICAgY2FzZSBXTV9NT1VTRUFDVElWQVRFOgogICAgICAgICAgICAg
cmV0dXJuIE1BX05PQUNUSVZBVEU7Ci0jZW5kaWYKICAgICAgICAgY2FzZSBXTV9TSVpFOiB7CiAg
ICAgICAgICAgICBpZiAoIXNjcm9sbGJhcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTY2LDkgKzk0Myw3IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIEJPT0wgc2hvdWxkSG90VHJhY2sgPSBGQUxTRTsKLSNpZiAhT1MoV0lOQ0Up
CiAgICAgICAgICAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRIT1RUUkFDS0lORywg
MCwgJnNob3VsZEhvdFRyYWNrLCAwKTsKLSNlbmRpZgogCiAgICAgICAgICAgICBSRUNUIGJvdW5k
czsKICAgICAgICAgICAgIEdldENsaWVudFJlY3QocG9wdXBIYW5kbGUoKSwgJmJvdW5kcyk7CkBA
IC0xMDcwLDExICsxMDQ1LDkgQEAgTFJFU1VMVCBQb3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGEKICAgICAgICAgICAg
IGxSZXN1bHQgPSAwOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSNpZiAhT1MoV0lO
Q0UpCiAgICAgICAgIGNhc2UgV01fUFJJTlRDTElFTlQ6CiAgICAgICAgICAgICBwYWludChjbGll
bnRSZWN0KCksIChIREMpd1BhcmFtKTsKICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYyhoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKaW5kZXggZGRhNTllMS4uYzQ2Yzg0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4u
Y3BwCkBAIC0yOTQsOSArMjk0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRCdXR0
b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWUKICAgICAgICAg
aWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkp
IHsKICAgICAgICAgICAgIHhwU3RhdGUgKz0gVFNfQUNUSVZFOwogICAgICAgICAgICAgY2xhc3Np
Y1N0YXRlIHw9IERGQ1NfUFVTSEVEOwotI2lmICFPUyhXSU5DRSkKICAgICAgICAgICAgIGNsYXNz
aWNTdGF0ZSB8PSBERkNTX0ZMQVQ7Ci0jZW5kaWYKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICB4cFN0YXRlICs9IFRTX0hPVkVSOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3BwCmluZGV4IDhhODM3ZDYuLmY1ZGQyMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRCdWZmZXJXaW4uY3Bw
CkBAIC0zMSwxMSArMzEsNiBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotLy8gSU5WQUxJRF9GSUxFX1NJWkUgaXMgbm90IGRlZmlu
ZWQgb24gV2luQ0UuCi0jaWZuZGVmIElOVkFMSURfRklMRV9TSVpFCi0jZGVmaW5lIElOVkFMSURf
RklMRV9TSVpFIDB4ZmZmZmZmZmYKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09m
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1NoYXJlZFRpbWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9TaGFyZWRUaW1lcldpbi5jcHAKaW5kZXggY2Y5MjRiNC4uMzI3YzJlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVyV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJXaW4uY3BwCkBAIC02Myw3ICs2
Myw2IEBAIHN0YXRpYyBIQU5ETEUgdGltZXI7CiBzdGF0aWMgSFdORCB0aW1lcldpbmRvd0hhbmRs
ZSA9IDA7CiBjb25zdCBMUENXU1RSIGtUaW1lcldpbmRvd0NsYXNzTmFtZSA9IEwiVGltZXJXaW5k
b3dDbGFzcyI7CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgVUlOVCB0aW1lckZpcmVkTWVzc2Fn
ZSA9IDA7CiBzdGF0aWMgSEFORExFIHRpbWVyUXVldWU7CiBzdGF0aWMgYm9vbCBoaWdoUmVzVGlt
ZXJBY3RpdmU7CkBAIC03Myw3ICs3Miw2IEBAIHN0YXRpYyBMT05HIHBlbmRpbmdUaW1lcnM7CiBj
b25zdCBpbnQgdGltZXJSZXNvbHV0aW9uID0gMTsgLy8gVG8gaW1wcm92ZSB0aW1lciByZXNvbHV0
aW9uLCB3ZSBjYWxsIHRpbWVCZWdpblBlcmlvZC90aW1lRW5kUGVyaW9kIHdpdGggdGhpcyB2YWx1
ZSB0byBpbmNyZWFzZSB0aW1lciByZXNvbHV0aW9uIHRvIDFtcy4KIGNvbnN0IGludCBoaWdoUmVz
b2x1dGlvblRocmVzaG9sZE1zZWMgPSAxNjsgLy8gT25seSBhY3RpdmF0ZSBoaWdoLXJlcyB0aW1l
ciBmb3Igc3ViLTE2bXMgdGltZXJzIChXaW5kb3dzIGNhbiBmaXJlIHRpbWVycyBhdCAxNm1zIGlu
dGVydmFscyB3aXRob3V0IGNoYW5naW5nIHRoZSBzeXN0ZW0gcmVzb2x1dGlvbikuCiBjb25zdCBp
bnQgc3RvcEhpZ2hSZXNUaW1lckluTXNlYyA9IDMwMDsgLy8gU3RvcCBoaWdoLXJlcyB0aW1lciBh
ZnRlciAwLjMgc2Vjb25kcyB0byBsZXNzZW4gcG93ZXIgY29uc3VtcHRpb24gKHdlIGRvbid0IHVz
ZSBhIHNtYWxsZXIgdGltZSBzaW5jZSBvc2NpbGxhdGluZyBiZXR3ZWVuIGhpZ2ggYW5kIGxvdyBy
ZXNvbHV0aW9uIGJyZWFrcyB0aW1lciBhY2N1cmFjeSBvbiBYUCkuCi0jZW5kaWYKIAogZW51bSB7
CiAgICAgc2hhcmVkVGltZXJJRCA9IDEwMDAsCkBAIC05OCw3ICs5Niw2IEBAIExSRVNVTFQgQ0FM
TEJBQ0sgVGltZXJXaW5kb3dXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSCiAgICAgICAgICAgICBLaWxsVGltZXIodGltZXJXaW5kb3dIYW5kbGUsIHNo
YXJlZFRpbWVySUQpOwogICAgICAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7CiAg
ICAgICAgIH0KLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIGVsc2UgaWYgKHdQYXJhbSA9PSBlbmRI
aWdoUmVzVGltZXJJRCkgewogICAgICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxl
LCBlbmRIaWdoUmVzVGltZXJJRCk7CiAgICAgICAgICAgICBoaWdoUmVzVGltZXJBY3RpdmUgPSBm
YWxzZTsKQEAgLTEwOSw3ICsxMDYsNiBAQCBMUkVTVUxUIENBTExCQUNLIFRpbWVyV2luZG93V25k
UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUgogICAgICAg
ICBwcm9jZXNzaW5nQ3VzdG9tVGltZXJNZXNzYWdlID0gdHJ1ZTsKICAgICAgICAgc2hhcmVkVGlt
ZXJGaXJlZEZ1bmN0aW9uKCk7CiAgICAgICAgIHByb2Nlc3NpbmdDdXN0b21UaW1lck1lc3NhZ2Ug
PSBmYWxzZTsKLSNlbmRpZgogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gRGVmV2luZG93UHJv
YyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAKQEAgLTEyMSwzMCArMTE3LDE5IEBA
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPZmZTY3JlZW5UaW1lcldpbmRvdygpCiAgICAgaWYgKHRp
bWVyV2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBX
TkRDTEFTUyB3Y2V4OwotICAgIG1lbXNldCgmd2NleCwgMCwgc2l6ZW9mKFdORENMQVNTKSk7Ci0j
ZWxzZQogICAgIFdORENMQVNTRVggd2NleDsKICAgICBtZW1zZXQoJndjZXgsIDAsIHNpemVvZihX
TkRDTEFTU0VYKSk7CiAgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0jZW5k
aWYKIAogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBUaW1lcldpbmRvd1duZFByb2M7CiAgICAg
d2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7CiAgICAgd2Nl
eC5scHN6Q2xhc3NOYW1lICA9IGtUaW1lcldpbmRvd0NsYXNzTmFtZTsKLSNpZiBPUyhXSU5DRSkK
LSAgICBSZWdpc3RlckNsYXNzKCZ3Y2V4KTsKLSNlbHNlCiAgICAgUmVnaXN0ZXJDbGFzc0V4KCZ3
Y2V4KTsKLSNlbmRpZgogCiAgICAgdGltZXJXaW5kb3dIYW5kbGUgPSBDcmVhdGVXaW5kb3coa1Rp
bWVyV2luZG93Q2xhc3NOYW1lLCAwLCAwLAogICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VT
RURFRkFVTFQsIDAsIEhXTkRfTUVTU0FHRSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwg
MCk7CiAKLSNpZiAhT1MoV0lOQ0UpCiAgICAgdGltZXJGaXJlZE1lc3NhZ2UgPSBSZWdpc3Rlcldp
bmRvd01lc3NhZ2UoTCJjb20uYXBwbGUuV2ViS2l0LlRpbWVyRmlyZWQiKTsKLSNlbmRpZgogfQog
CiB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKQEAgLTE1Miwx
MyArMTM3LDExIEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgp
KQogICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7CiB9CiAKLSNpZiAhT1MoV0lOQ0Up
CiBzdGF0aWMgdm9pZCBOVEFQSSBxdWV1ZVRpbWVyUHJvYyhQVk9JRCwgQk9PTEVBTikKIHsKICAg
ICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBlbmRpbmdUaW1lcnMpID09IDEpCiAgICAgICAg
IFBvc3RNZXNzYWdlKHRpbWVyV2luZG93SGFuZGxlLCB0aW1lckZpcmVkTWVzc2FnZSwgMCwgMCk7
CiB9Ci0jZW5kaWYKIAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50
ZXJ2YWwpCiB7CkBAIC0xNzQsNyArMTU3LDYgQEAgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRl
cnZhbChkb3VibGUgaW50ZXJ2YWwpCiAgICAgaW5pdGlhbGl6ZU9mZlNjcmVlblRpbWVyV2luZG93
KCk7CiAgICAgYm9vbCB0aW1lclNldCA9IGZhbHNlOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlm
IChTZXR0aW5nczo6c2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoKSkgewogICAgICAgICBp
ZiAoaW50ZXJ2YWwgPCBoaWdoUmVzb2x1dGlvblRocmVzaG9sZE1zZWMpIHsKICAgICAgICAgICAg
IGlmICghaGlnaFJlc1RpbWVyQWN0aXZlKSB7CkBAIC0yMDYsNyArMTg4LDYgQEAgdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0jZW5kaWYgLy8gIU9TKFdJTkNFKQogCiAgICAgaWYgKHRpbWVyU2V0
KSB7CiAgICAgICAgIGlmICh0aW1lcklEKSB7CkBAIC0yMjEsMTIgKzIwMiwxMCBAQCB2b2lkIHNl
dFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKIAogdm9pZCBzdG9wU2hh
cmVkVGltZXIoKQogewotI2lmICFPUyhXSU5DRSkKICAgICBpZiAodGltZXJRdWV1ZSAmJiB0aW1l
cikgewogICAgICAgICBEZWxldGVUaW1lclF1ZXVlVGltZXIodGltZXJRdWV1ZSwgdGltZXIsIDAp
OwogICAgICAgICB0aW1lciA9IDA7CiAgICAgfQotI2VuZGlmCiAKICAgICBpZiAodGltZXJJRCkg
ewogICAgICAgICBLaWxsVGltZXIodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVySUQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU29mdExpbmtpbmcuaAppbmRleCAwNzlmMDVhLi5jZDBkNmQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU29mdExpbmtpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU29mdExpbmtpbmcuaApAQCAtMzksMTIg
KzM5LDcgQEAKICAgICAgICAgcmV0dXJuIGxpYnJhcnk7IFwKICAgICB9CiAKLSNpZiBPUyhXSU5D
RSkKLSNkZWZpbmUgU09GVF9MSU5LX0dFVFBST0NBRERSRVNTIEdldFByb2NBZGRyZXNzQQotI2Vs
c2UKICNkZWZpbmUgU09GVF9MSU5LX0dFVFBST0NBRERSRVNTIEdldFByb2NBZGRyZXNzCi0jZW5k
aWYKLQogI2RlZmluZSBTT0ZUX0xJTktfTElCUkFSWShsaWIpIFNPRlRfTElOS19MSUJSQVJZX0hF
TFBFUihsaWIsIEwiLmRsbCIpCiAjZGVmaW5lIFNPRlRfTElOS19ERUJVR19MSUJSQVJZKGxpYikg
U09GVF9MSU5LX0xJQlJBUllfSEVMUEVSKGxpYiwgTCJfZGVidWcuZGxsIikKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwCmluZGV4IGM5ZWRjYTAuLjQ0Mzk4ZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKQEAgLTM5LDIz
ICszOSwxMyBAQCBXaW5kb3dzVmVyc2lvbiB3aW5kb3dzVmVyc2lvbihpbnQqIG1ham9yLCBpbnQq
IG1pbm9yKQogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBpbml0aWFsaXplZCA9
IHRydWU7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIE9TVkVSU0lPTklORk8gdmVyc2lvbkluZm87
Ci0jZWxzZQogICAgICAgICBPU1ZFUlNJT05JTkZPRVggdmVyc2lvbkluZm87Ci0jZW5kaWYKICAg
ICAgICAgWmVyb01lbW9yeSgmdmVyc2lvbkluZm8sIHNpemVvZih2ZXJzaW9uSW5mbykpOwogICAg
ICAgICB2ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZlcnNpb25JbmZv
KTsKICAgICAgICAgR2V0VmVyc2lvbkV4KHJlaW50ZXJwcmV0X2Nhc3Q8T1NWRVJTSU9OSU5GTyo+
KCZ2ZXJzaW9uSW5mbykpOwogICAgICAgICBtYWpvclZlcnNpb24gPSB2ZXJzaW9uSW5mby5kd01h
am9yVmVyc2lvbjsKICAgICAgICAgbWlub3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNaW5vclZl
cnNpb247CiAKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgaWYgKG1ham9yVmVyc2lvbiA+PSAxICYm
IG1ham9yVmVyc2lvbiA8PSA3KQotICAgICAgICAgICAgdmVyc2lvbiA9IHN0YXRpY19jYXN0PFdp
bmRvd3NWZXJzaW9uPihXaW5kb3dzQ0UxICsgKG1ham9yVmVyc2lvbiAtIDEpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNpb24gPCAxKSA/IFdpbmRvd3ND
RTEgOiBXaW5kb3dzQ0U3OwotI2Vsc2UKICAgICAgICAgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZv
cm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJzKQogICAgICAgICAgICAgdmVyc2lvbiA9IFdpbmRv
d3MzXzE7CiAgICAgICAgIGVsc2UgaWYgKHZlcnNpb25JbmZvLmR3UGxhdGZvcm1JZCA9PSBWRVJf
UExBVEZPUk1fV0lOMzJfV0lORE9XUykgewpAQCAtNzcsNyArNjcsNiBAQCBXaW5kb3dzVmVyc2lv
biB3aW5kb3dzVmVyc2lvbihpbnQqIG1ham9yLCBpbnQqIG1pbm9yKQogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IChtYWpvclZlcnNpb24gPT0gNCkgPyBXaW5k
b3dzTlQ0IDogV2luZG93c05UMzsKICAgICAgICAgfQotI2VuZGlmCiAgICAgfQogCiAgICAgaWYg
KG1ham9yKQpAQCAtMTE0LDcgKzEwMyw2IEBAIHN0YXRpYyBTdHJpbmcgb3NWZXJzaW9uRm9yVUFT
dHJpbmcoKQogICAgIHJldHVybiBmYW1pbHlOYW1lICsgU3RyaW5nOjpudW1iZXIobWFqb3IpICsg
Jy4nICsgU3RyaW5nOjpudW1iZXIobWlub3IpOwogfQogCi0jaWYgIU9TKFdJTkNFKQogc3RhdGlj
IGJvb2wgaXNXT1c2NCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsK
QEAgLTE1OCwxOCArMTQ2LDE1IEBAIHN0YXRpYyBXT1JEIHByb2Nlc3NvckFyY2hpdGVjdHVyZSgp
CiAKICAgICByZXR1cm4gYXJjaGl0ZWN0dXJlOwogfQotI2VuZGlmCiAKIHN0YXRpYyBTdHJpbmcg
YXJjaGl0ZWN0dXJlVG9rZW5Gb3JVQVN0cmluZygpCiB7Ci0jaWYgIU9TKFdJTkNFKQogICAgIGlm
IChpc1dPVzY0KCkpCiAgICAgICAgIHJldHVybiAiOyBXT1c2NCI7CiAgICAgaWYgKHByb2Nlc3Nv
ckFyY2hpdGVjdHVyZSgpID09IFBST0NFU1NPUl9BUkNISVRFQ1RVUkVfQU1ENjQpCiAgICAgICAg
IHJldHVybiAiOyBXaW42NDsgeDY0IjsKICAgICBpZiAocHJvY2Vzc29yQXJjaGl0ZWN0dXJlKCkg
PT0gUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRV9JQTY0KQogICAgICAgICByZXR1cm4gIjsgV2luNjQ7
IElBNjQiOwotI2VuZGlmCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCmluZGV4IGM3OTM3YjguLjk0NjkzZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCkBAIC0y
NzksNyArMjc5LDYgQEAgdm9pZCBXQ0RhdGFPYmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBw
TWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMKIHsKICAgICBzd2l0Y2gocE1l
ZFNyYy0+dHltZWQpCiAgICAgewotI2lmICFPUyhXSU5DRSkKICAgICBjYXNlIFRZTUVEX0hHTE9C
QUw6CiAgICAgICAgIHBNZWREZXN0LT5oR2xvYmFsID0gKEhHTE9CQUwpT2xlRHVwbGljYXRlRGF0
YShwTWVkU3JjLT5oR2xvYmFsLHBGbXRTcmMtPmNmRm9ybWF0LCAwKTsKICAgICAgICAgYnJlYWs7
CkBAIC0yOTUsNyArMjk0LDYgQEAgdm9pZCBXQ0RhdGFPYmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVE
SVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMKICAgICBjYXNlIFRZ
TUVEX0ZJTEU6CiAgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IChMUE9MRVNUUilPbGVE
dXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSxwRm10U3JjLT5jZkZvcm1hdCwgMCk7
CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBUWU1FRF9JU1RSRUFNOgogICAgICAg
ICBwTWVkRGVzdC0+cHN0bSA9IHBNZWRTcmMtPnBzdG07CiAgICAgICAgIHBNZWRTcmMtPnBzdG0t
PkFkZFJlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRl
eCA5OGQwYTk3Li5mYmEyY2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcApAQCAtMzc1LDcgKzM3NSw3IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZERpc2Fi
bGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIHJldHVybiBtX2Rpc2Fi
bGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5pc05ld0VudHJ5OwogfQogCi0jaWYgKCFPUyhX
SU5DRSkpICYmICghT1MoV0lORE9XUykgfHwgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSkK
KyNpZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCiAvLyBG
b3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
CiAvLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUg
Y29uc3RydWN0cwogLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhl
cmUgdW5kZXIgWFBfV0lOPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXgg
YTg4YWRmOS4uZTFjYzJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBA
IC0zNDAsMTcgKzM0MCwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogI2lmIGRlZmluZWQo
WFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwog
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgV05EUFJPQyBj
dXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgR1dMX1dORFBST0MpOwotCi0gICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVn
aW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgIFNldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKW1fcGx1Z2luV25kUHJvYyk7Ci0jZWxzZQogICAg
ICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwogCiAgICAgICAgIGlmIChjdXJy
ZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykKICAgICAgICAgICAgIFNldFdpbmRvd0xv
bmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpbV9w
bHVnaW5XbmRQcm9jKTsKLSNlbmRpZgogICAgIH0KICNlbmRpZiAvLyAhZGVmaW5lZChYUF9XSU4p
IHx8IFBMQVRGT1JNKEdUSykKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKaW5kZXggZGY3OWRjOS4u
YTk3MmE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKQEAg
LTEzMiw3ICsxMzIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQog
Ly8gcG9ydHMgdXNpbmcgUGx1Z2luVmlldywgYnV0IHVudGlsIHRoZW4sIGlmIG5ldyBmdW5jdGlv
bnMgbGlrZSB0aGlzIGFyZSAKIC8vIGFkZGVkLCBwbGVhc2UgbWFrZSBzdXJlIHRoZXkgaGF2ZSB0
aGUgcHJvcGVyIHBsYXRmb3JtICNpZnMgc28gdGhhdCBjaGFuZ2VzCiAvLyBkbyBub3QgYnJlYWsg
cG9ydHMgd2hvIGNvbXBpbGUgYm90aCB0aGlzIGZpbGUgYW5kIFBsdWdpblZpZXcuY3BwLiAgIAot
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwg
T1MoV0lOQ0UpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oR1RLKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogdm9pZCBQbHVnaW5WaWV3
OjprZWVwQWxpdmUoTlBQKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luRGF0YWJhc2VXaW4uY3BwCmluZGV4IGUyNTBlMTMuLmNkYzZjZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKQEAgLTMzLDM4ICsz
Myw2IEBACiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgPHd0Zi9XaW5kb3dz
RXh0cmFzLmg+CiAKLSNpZiBPUyhXSU5DRSkKLS8vIFdJTkNFIGRvZXNuJ3Qgc3VwcG9ydCBSZWdp
c3RyeSBLZXkgQWNjZXNzIFJpZ2h0cy4gVGhlIHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGJlIDAK
LSNpZm5kZWYgS0VZX0VOVU1FUkFURV9TVUJfS0VZUwotI2RlZmluZSBLRVlfRU5VTUVSQVRFX1NV
Ql9LRVlTIDAKLSNlbmRpZgotCi1CT09MIFBhdGhSZW1vdmVGaWxlU3BlYyhMUFdTVFIgbW9kdWxl
RmlsZU5hbWVTdHIpCi17Ci0gICAgaWYgKCEqbW9kdWxlRmlsZU5hbWVTdHIpCi0gICAgICAgIHJl
dHVybiBGQUxTRTsKLQotICAgIExQV1NUUiBsYXN0UG9zID0gMDsKLSAgICBMUFdTVFIgY3VyUG9z
ID0gbW9kdWxlRmlsZU5hbWVTdHI7Ci0gICAgZG8gewotICAgICAgICBpZiAoKmN1clBvcyA9PSBM
Jy8nIHx8ICpjdXJQb3MgPT0gTCdcXCcpCi0gICAgICAgICAgICBsYXN0UG9zID0gY3VyUG9zOwot
ICAgIH0gd2hpbGUgKCorK2N1clBvcyk7Ci0KLSAgICBpZiAobGFzdFBvcyA9PSBjdXJQb3MgLSAx
KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAobGFzdFBvcykKLSAgICAgICAgKmxh
c3RQb3MgPSAwOwotICAgIGVsc2UgewotICAgICAgICBtb2R1bGVGaWxlTmFtZVN0clswXSA9IEwn
XFwnOwotICAgICAgICBtb2R1bGVGaWxlTmFtZVN0clsxXSA9IDA7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNoU2V0
PFN0cmluZz4mIHBhdGhzKQpAQCAtMjM4LDE0ICsyMDYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lk
IGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMp
CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3Rv
cnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogewotI2lmICFPUyhXSU5DRSkKICAgICAv
LyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVn
aW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKICAgICBXQ0hBUiBwbHVn
aW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07CiAgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5
U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQ
RmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBs
dWdpbkRpcmVjdG9yeVN0cikpOwogCiAgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYm
IHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlT
dHIpKQogICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0
ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsKLSNlbmRpZgogCiAgICAgRFdPUkQgdHlwZTsK
ICAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKQEAgLTM3Nyw3
ICszNDMsNiBAQCBleGl0OgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdp
bkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKLSNpZiAhT1MoV0lO
Q0UpCiAgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKIAogICAgIGlmICgh
R2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChz
eXN0ZW1EaXJlY3RvcnlTdHIpKSkKQEAgLTM5MCw3ICszNTUsNiBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3Rv
cmllcykKIAogICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURp
cmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsKICAgICBkaXJlY3Rv
cmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci0jZW5kaWYKIH0KIAogVmVjdG9y
PFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IDY3
Y2M3NjQuLmE4NTI1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblBhY2thZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blBhY2thZ2VXaW4uY3BwCkBAIC0yMzcsOSArMjM3LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjps
b2FkKCkKICAgICAgICAgbV9sb2FkQ291bnQrKzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fSBlbHNlIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5
VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwotI2Vsc2UK
ICAgICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwogCiAgICAgICAgIGlmICghOjpH
ZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQpAQCAtMjU4LDcgKzI1
NSw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgICAgICAgICAgICAgOjpGcmVl
TGlicmFyeShtX21vZHVsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LSNlbmRpZgogICAgIH0KIAogICAgIGlmICghbV9tb2R1bGUpCkBAIC0yNzAsMTUgKzI2Niw5IEBA
IGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBf
SW5pdGlhbGl6ZSA9IDA7CiAgICAgTlBFcnJvciBucEVycjsKIAotI2lmIE9TKFdJTkNFKQotICAg
IE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9t
b2R1bGUsIEwiTlBfSW5pdGlhbGl6ZSIpOwotICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dl
dEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgTCJOUF9HZXRFbnRy
eVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0
UHJvY0FkZHJlc3MobV9tb2R1bGUsIEwiTlBfU2h1dGRvd24iKTsKLSNlbHNlCiAgICAgTlBfSW5p
dGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwg
Ik5QX0luaXRpYWxpemUiKTsKICAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBv
aW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIp
OwogICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotI2VuZGlmCiAKICAgICBpZiAoIU5QX0luaXRp
YWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKICAgICAgICAg
Z290byBhYm9ydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAKaW5kZXggNmIyOWQzYi4uZTAwNjVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHAKQEAgLTczLDEzICs3Myw2IEBACiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotI2lmIE9T
KFdJTkNFKQotI3VuZGVmIExPR19OUEVSUk9SCi0jZGVmaW5lIExPR19OUEVSUk9SKHgpCi0jdW5k
ZWYgTE9HX1BMVUdJTl9ORVRfRVJST1IKLSNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKQot
I2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtMTE4LDcgKzExMSw2IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBjb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NO
YW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKIGNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9w
ZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKIAotI2lmICFPUyhXSU5DRSkKIC8vIFRo
ZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBm
cm9tCiAvLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+Lgog
Ly8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCkBA
IC0yNzAsNyArMjYyLDYgQEAgc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tz
KEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU4KICAgICBob29rKCJ1c2Vy
MzIuZGxsIiwgIkVuZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRF
bmRQYWludCkpKTsKIAogfQotI2VuZGlmCiAKIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmll
dygpCiB7CkBAIC0yODYsMTggKzI3NywxMCBAQCBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZp
ZXcoKQogCiAgICAgQVNTRVJUKFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCkpOwogCi0jaWYgT1Mo
V0lOQ0UpCi0gICAgV05EQ0xBU1Mgd2NleCA9IHsgMCB9OwotI2Vsc2UKICAgICBXTkRDTEFTU0VY
IHdjZXg7CiAgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CiAgICAgd2NleC5o
SWNvblNtICAgICAgICA9IDA7Ci0jZW5kaWYKLQogICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBD
U19EQkxDTEtTOwotI2lmIE9TKFdJTkNFKQotICAgIHdjZXguc3R5bGUgICAgICAgICAgfD0gQ1Nf
UEFSRU5UREM7Ci0jZW5kaWYKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJv
YzsKICAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKICAgICB3Y2V4LmNiV25kRXh0cmEgICAg
ID0gMDsKQEAgLTMwOCwxMSArMjkxLDcgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3
KCkKICAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUg
ID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1
cm4gISFSZWdpc3RlckNsYXNzKCZ3Y2V4KTsKLSNlbHNlCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJD
bGFzc0V4KCZ3Y2V4KTsKLSNlbmRpZgogfQogCiBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6
OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKQpAQCAtMzk0LDcgKzM3Myw2IEBAIFBsdWdpblZpZXc6OnduZFByb2Mo
SFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAg
ICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogCi0j
aWYgIU9TKFdJTkNFKQogICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CiAgICAg
ICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9Q
UklOVENMSUVOVCwgc28gd2UKICAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BB
SU5UIGFuZCByZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKQEAgLTQwMiw3ICszODAsNiBA
QCBQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBtZXNzYWdlID0gV01fUEFJTlQ7CiAgICAgICAg
IG1fd21QcmludEhEQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SERDPih3UGFyYW0pOwogICAgIH0KLSNl
bmRpZgogCiAgICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgogICAgIExSRVNV
TFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKQEAgLTQyNSwxMSArNDAyLDcgQEAgdm9pZCBQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2lu
ZG93UmVjdDsKICAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKIAotI2lmIE9T
KFdJTkNFKQotICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhm
cmFtZVJlY3QoKSk7Ci0jZWxzZQogICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3
LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5z
aXplKCkpOwotI2VuZGlmCiAgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CiAgICAg
bV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAK
QEAgLTUyOSw5ICs1MDIsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2
ZW50JiBucEV2ZW50KQogdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRl
eHQoSERDIGhkYykKIHsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0jaWYgIU9TKFdJTkNFKQog
ICAgICAgICBTZW5kTWVzc2FnZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENMSUVO
VCwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJTERS
RU4gfCBQUkZfT1dORUQpOwotI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY0
MSw3ICs2MTIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUg
cGx1Z2luIGV4cGVjdHMgdGhhdCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0
ZXMuCiAgICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgYWx3YXlzIGRyYXcgaW4gYW4g
b2Zmc2NyZWVuIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIG5lZWQKICAgICAvLyB0byBwcmVzZXJ2ZSB0
aGUgdHJhbnNsYXRpb24gc2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgotI2lmICFQTEFURk9STShH
VEspICYmICFPUyhXSU5DRSkKKyNpZiAhUExBVEZPUk0oR1RLKQogICAgIGlmICghY29udGV4dC0+
aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwogICAg
ICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7
CkBAIC02NzksOSArNjUwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIGV4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7
Ci0jZW5kaWYKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQogewpAQCAtNzQ5LDcgKzcxOCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIAotI2lmICFQTEFURk9S
TShHVEspICYmICFPUyhXSU5DRSkKKyNpZiAhUExBVEZPUk0oR1RLKQogICAgIC8vIEN1cnJlbnRs
eSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9u
IGluIEV2ZW50SGFuZGxlci5jcHAKICAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0
IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQu
CiAgICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7CkBAIC03NjIsMTUgKzczMSw2IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKIHsKICAgICBXaWRn
ZXQ6OnNldFBhcmVudChwYXJlbnQpOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKHBhcmVudCkg
ewotICAgICAgICBpbml0KCk7Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzVmlzaWJsZSgpKQotICAg
ICAgICAgICAgc2hvdygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWRlKCk7Ci0gICAg
fQotI2Vsc2UKICAgICBpZiAocGFyZW50KQogICAgICAgICBpbml0KCk7CiAgICAgZWxzZSB7CkBA
IC03ODQsNyArNzQ0LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
cGFyZW50KQogICAgICAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBmb2N1c2VkV2lu
ZG93IHx8IDo6SXNDaGlsZChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBmb2N1c2VkV2luZG93KSkK
ICAgICAgICAgICAgIDo6U2V0Rm9jdXMoMCk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGx1
Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC04MDcsMTggKzc2Niw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiAgICAgaWYgKCFtX2lzU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lOQ0Up
Ci0gICAgSW50UmVjdCByID0gdG9GcmFtZVZpZXcocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93
KHJlY3QpOwotICAgIG1fbnBXaW5kb3cueCA9IHIueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IHIu
eSgpOwotCi0gICAgbV9ucFdpbmRvdy53aWR0aCA9IHIud2lkdGgoKTsKLSAgICBtX25wV2luZG93
LmhlaWdodCA9IHIuaGVpZ2h0KCk7Ci0KLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0g
ci53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gci5oZWlnaHQoKTsK
LSNlbHNlCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZz
Y3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gSW4g
dGhlIEdUSyBwb3J0IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2Fu
dCB0byB1c2UgdGhlIHdpbmRvdwogICAgIC8vIGNvb3JkaW5hdGVzLgogIyBpZiBQTEFURk9STShH
VEspCiAgICAgSW50UG9pbnQgcCA9IHJlY3QubG9jYXRpb24oKTsKQEAgLTgzMyw3ICs3ODEsNiBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQog
CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7Ci0jZW5kaWYKICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
MDsKIApAQCAtODUwLDE3ICs3OTcsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKTsKIAotI2lmIE9TKFdJTkNFKQotICAgICAgICBpZiAoIW1fcGx1Z2luV25kUHJvYykg
ewotICAgICAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRv
d0xvbmcocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MpOwotICAgICAgICAgICAg
aWYgKGN1cnJlbnRXbmRQcm9jICE9IFBsdWdpblZpZXdXbmRQcm9jKQotICAgICAgICAgICAgICAg
IG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmcocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKVBsdWdpblZpZXdXbmRQcm9jKTsKLSAgICAgICAg
fQotI2Vsc2UKICAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdp
bmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKICAgICAg
ICAgaWYgKGN1cnJlbnRXbmRQcm9jICE9IFBsdWdpblZpZXdXbmRQcm9jKQogICAgICAgICAgICAg
bV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilQbHVnaW5WaWV3V25kUHJvYyk7Ci0j
ZW5kaWYKICAgICB9CiB9CiAKQEAgLTk4OCw5ICs5MjcsNyBAQCBib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQoKQogCiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewogICAgICAgICByZWdpc3Rl
clBsdWdpblZpZXcoKTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFp
bnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7Ci0jZW5kaWYKIAog
ICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOwogICAgICAgICBpZiAoaXNTZWxmVmlzaWJs
ZSgpKQpAQCAtMTAxMCw4ICs5NDcsNiBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQo
KQogICAgICAgICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4uCiAjaWYgT1MoV0lO
RE9XUykgJiYgQ1BVKFg4Nl82NCkKICAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7
Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICAgICAgOjpTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jKTsKICNlbHNlCiAgICAg
ICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBS
T0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMjUxOThmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5MiArMCwwIEBACi0vKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJU
aGVtZVdpbkNFLmgiCi0KLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udE1l
dHJpY3MuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpZiBFTkFCTEUoVklERU8p
Ci0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLQotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLQotLyogCi0gKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgdXNlZCB0byBkZXRlcm1p
bmUgaG93IGEgd2lkZ2V0IGlzIGRyYXduIHVzaW5nCi0gKiBXaW5kb3dzJyBUaGVtZSBBUEkuIEZv
ciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW1lIHBhcnRzIGFuZCBzdGF0ZXMgc2VlCi0gKiBodHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2Vu
LXVzL3NoZWxsY2MvcGxhdGZvcm0vY29tbWN0bHMvdXNlcmV4L3RvcGljcy9wYXJ0c2FuZHN0YXRl
cy5hc3AKLSAqLwotI2RlZmluZSBUSEVNRV9DT0xPUiAyMDQKLSNkZWZpbmUgVEhFTUVfRk9OVCAg
MjEwCi0KLS8vIEdlbmVyaWMgc3RhdGUgY29uc3RhbnRzCi0jZGVmaW5lIFRTX05PUk1BTCAgICAx
Ci0jZGVmaW5lIFRTX0hPVkVSICAgICAyCi0jZGVmaW5lIFRTX0FDVElWRSAgICAzCi0jZGVmaW5l
IFRTX0RJU0FCTEVEICA0Ci0jZGVmaW5lIFRTX0ZPQ1VTRUQgICA1Ci0KLS8vIEJ1dHRvbiBjb25z
dGFudHMKLSNkZWZpbmUgQlBfQlVUVE9OICAgIDEKLSNkZWZpbmUgQlBfUkFESU8gICAgIDIKLSNk
ZWZpbmUgQlBfQ0hFQ0tCT1ggIDMKLQotLy8gVGV4dGZpZWxkIGNvbnN0YW50cwotI2RlZmluZSBU
RlBfVEVYVEZJRUxEIDEKLSNkZWZpbmUgVEZTX1JFQURPTkxZICA2Ci0KLXR5cGVkZWYgSEFORExF
IChXSU5BUEkqb3BlblRoZW1lRGF0YVB0cikoSFdORCBod25kLCBMUENXU1RSIHBzekNsYXNzTGlz
dCk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpjbG9zZVRoZW1lRGF0YVB0cikoSEFORExFIGhU
aGVtZSk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpkcmF3VGhlbWVCYWNrZ3JvdW5kUHRyKShI
QU5ETEUgaFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgY29uc3QgUkVDVCAqcFJlY3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUNUKiBwQ2xp
cFJlY3QpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZHJhd1RoZW1lRWRnZVB0cikoSEFORExF
IGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGNvbnN0IFJFQ1QgKnBSZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdUVkZ2UsIHVuc2ln
bmVkIHVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQ1QqIHBDbGlwUmVjdCk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZUNv
bnRlbnRSZWN0UHRyKShIQU5ETEUgaFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgY29uc3Qg
UkVDVCogcFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUNUKiBwQ29udGVudFJlY3QpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZ2V0VGhlbWVQYXJ0
U2l6ZVB0cikoSEFORExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIFJFQ1QqIHByYywgaW50
IHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSogcHN6KTsK
LXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lU3lzRm9udFB0cikoSEFORExFIGhUaGVt
ZSwgaW50IGlGb250SWQsIE9VVCBMT0dGT05UKiBwRm9udCk7Ci10eXBlZGVmIEhSRVNVTFQgKFdJ
TkFQSSpnZXRUaGVtZUNvbG9yUHRyKShIQU5ETEUgaFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJ
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBpbnQg
aVByb3BJZCwgT1VUIENPTE9SUkVGKiBwRm9udCk7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIGNvbnN0IGludCBkcm9wRG93bkJ1dHRvbldpZHRoID0gMTc7Ci1zdGF0aWMgY29uc3Qg
aW50IHRyYWNrV2lkdGggPSA0OwotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZVdpbkNFOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVX
aW5DRSk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZv
clBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHdpbmNlVGhlbWUg
PSBSZW5kZXJUaGVtZVdpbkNFOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHdpbmNl
VGhlbWU7Ci19Ci0KLVJlbmRlclRoZW1lV2luQ0U6OlJlbmRlclRoZW1lV2luQ0UoKQotewotfQot
Ci1SZW5kZXJUaGVtZVdpbkNFOjp+UmVuZGVyVGhlbWVXaW5DRSgpCi17Ci19Ci0KLUNvbG9yIFJl
bmRlclRoZW1lV2luQ0U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKLXsKLSAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdI
VCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciks
IEdldEJWYWx1ZShjb2xvciksIDI1NSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lV2luQ0U6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIENP
TE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfR1JBWVRFWFQpOwotICAgIHJldHVybiBD
b2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3Ip
LCAyNTUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVdpbkNFOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgQ09MT1JSRUYgY29sb3IgPSBHZXRT
eXNDb2xvcihDT0xPUl9ISUdITElHSFRURVhUKTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVl
KGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwgMjU1KTsKLX0KLQot
Q29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yOjp3aGl0ZTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBUZXh0RmllbGRQYXJ0OgotICAgIGNh
c2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlclRoZW1lV2luQ0U6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlICpz
dHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5j
ZSgpKTsKLX0KLQotdW5zaWduZWQgUmVuZGVyVGhlbWVXaW5DRTo6ZGV0ZXJtaW5lQ2xhc3NpY1N0
YXRlKFJlbmRlck9iamVjdCogbykKLXsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgIGlm
ICghaXNFbmFibGVkKG8pIHx8IGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICByZXN1bHQg
PSBERkNTX0lOQUNUSVZFOwotICAgIGVsc2UgaWYgKGlzUHJlc3NlZChvKSkgLy8gQWN0aXZlIHN1
cGVyc2VkZXMgaG92ZXIKLSAgICAgICAgcmVzdWx0ID0gREZDU19QVVNIRUQ7Ci0KLSAgICBpZiAo
aXNDaGVja2VkKG8pKQotICAgICAgICByZXN1bHQgfD0gREZDU19DSEVDS0VEOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVRoZW1lRGF0YSBSZW5kZXJUaGVtZVdpbkNFOjpnZXRUaGVtZURhdGEo
UmVuZGVyT2JqZWN0KiBvKQotewotICAgIFRoZW1lRGF0YSByZXN1bHQ7Ci0gICAgc3dpdGNoIChv
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOwotICAg
ICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JVVFRPTlBVU0g7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBf
Q0hFQ0tCT1g7Ci0gICAgICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSA9IERGQ1NfQlVUVE9OQ0hF
Q0s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXN1bHQu
bV9wYXJ0ID0gQlBfUkFESU87Ci0gICAgICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSA9IERGQ1Nf
QlVUVE9OUkFESU87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlzdGJveFBhcnQ6Ci0gICAg
Y2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgY2FzZSBUZXh0RmllbGRQYXJ0OgotICAgIGNhc2UgVGV4
dEFyZWFQYXJ0OgotICAgICAgICByZXN1bHQubV9wYXJ0ID0gVEZQX1RFWFRGSUVMRDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlIHw9IGRldGVybWlu
ZUNsYXNzaWNTdGF0ZShvKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVXaW5DRTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRh
dGEgZm9yIGEgYnV0dG9uCi0gICAgVGhlbWVEYXRhIHRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShv
KTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgYnV0dG9uLgotICAgIGkuY29udGV4dC0+ZHJhd0Zy
YW1lQ29udHJvbChyLCBERkNfQlVUVE9OLCB0aGVtZURhdGEubV9jbGFzc2ljU3RhdGUpOwotICAg
IGlmIChpc0ZvY3VzZWQobykpIHsKLSAgICAgICAgaWYgKHRoZW1lRGF0YS5tX3BhcnQgPT0gQlBf
QlVUVE9OKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdChyKTsKLSAgICAgICAgICAg
IGZvY3VzUmVjdC5pbmZsYXRlKC0yKTsKLSAgICAgICAgICAgIGkuY29udGV4dC0+ZHJhd0ZvY3Vz
UmVjdChmb2N1c1JlY3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGkuY29udGV4dC0+
ZHJhd0ZvY3VzUmVjdChyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVXaW5DRTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKLXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQu
ICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZv
eC4KLSAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5n
IHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvcgotICAg
IC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJ
IHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncwotICAg
IC8vIG1ldHJpY3MuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoMTMsIEZpeGVkKSk7Ci0gICAgaWYgKHN0
eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
MTMsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dGZpZWxkCi0gICAg
VGhlbWVEYXRhIHRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShvKTsKLQotICAgIC8vIE5vdyBwYWlu
dCB0aGUgdGV4dCBmaWVsZC4KLSAgICBpLmNvbnRleHQtPnBhaW50VGV4dEZpZWxkKHIsIHRoZW1l
RGF0YS5tX2NsYXNzaWNTdGF0ZSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWludFRleHRGaWVsZChyZW5kZXJlciwgcGFp
bnRJbmZvLCByZWN0KTsKLSAgICBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMocmVuZGVy
ZXIsIHBhaW50SW5mbywgcmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVXaW5DRTo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0Lm1heFgoKSAtIGRyb3BEb3duQnV0dG9u
V2lkdGggLSAxLCByZWN0LnkoKSwgZHJvcERvd25CdXR0b25XaWR0aCwgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWSgtMSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdGcmFtZUNvbnRyb2woYnV0dG9uUmVjdCwgREZDX1NDUk9MTCwgREZDU19TQ1JPTExDT01CT0JP
WCB8IGRldGVybWluZUNsYXNzaWNTdGF0ZShyZW5kZXJlcikpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OnN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjp0aGVtZUNoYW5nZWQoKQotewotfQotCi1T
dHJpbmcgUmVuZGVyVGhlbWVXaW5DRTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBSZW5k
ZXJUaGVtZVdpbkNFOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6
OnN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotLy8gTWFwIGEgQ1NTVmFsdWUqIHN5c3RlbSBjb2xvciB0byBhbiBpbmRleCB1
bmRlcnN0b29kIGJ5IEdldFN5c0NvbG9yCi1zdGF0aWMgaW50IGNzc1ZhbHVlSWRUb1N5c0NvbG9y
SW5kZXgoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKQotewotICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkg
ewotICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVib3JkZXI6IHJldHVybiBDT0xPUl9BQ1RJVkVCT1JE
RVI7Ci0gICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWNhcHRpb246IHJldHVybiBDT0xPUl9BQ1RJVkVD
QVBUSU9OOwotICAgIGNhc2UgQ1NTVmFsdWVBcHB3b3Jrc3BhY2U6IHJldHVybiBDT0xPUl9BUFBX
T1JLU1BBQ0U7Ci0gICAgY2FzZSBDU1NWYWx1ZUJhY2tncm91bmQ6IHJldHVybiBDT0xPUl9CQUNL
R1JPVU5EOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25mYWNlOiByZXR1cm4gQ09MT1JfQlRORkFD
RTsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uaGlnaGxpZ2h0OiByZXR1cm4gQ09MT1JfQlROSElH
SExJR0hUOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25zaGFkb3c6IHJldHVybiBDT0xPUl9CVE5T
SEFET1c7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6IHJldHVybiBDT0xPUl9CVE5URVhU
OwotICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDogcmV0dXJuIENPTE9SX0NBUFRJT05URVhU
OwotICAgIGNhc2UgQ1NTVmFsdWVHcmF5dGV4dDogcmV0dXJuIENPTE9SX0dSQVlURVhUOwotICAg
IGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6IHJldHVybiBDT0xPUl9ISUdITElHSFQ7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ6IHJldHVybiBDT0xPUl9ISUdITElHSFRURVhUOwotICAg
IGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWJvcmRlcjogcmV0dXJuIENPTE9SX0lOQUNUSVZFQk9SREVS
OwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb246IHJldHVybiBDT0xPUl9JTkFDVElW
RUNBUFRJT047Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlY2FwdGlvbnRleHQ6IHJldHVybiBD
T0xPUl9JTkFDVElWRUNBUFRJT05URVhUOwotICAgIGNhc2UgQ1NTVmFsdWVJbmZvYmFja2dyb3Vu
ZDogcmV0dXJuIENPTE9SX0lORk9CSzsKLSAgICBjYXNlIENTU1ZhbHVlSW5mb3RleHQ6IHJldHVy
biBDT0xPUl9JTkZPVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlTWVudTogcmV0dXJuIENPTE9SX01F
TlU7Ci0gICAgY2FzZSBDU1NWYWx1ZU1lbnV0ZXh0OiByZXR1cm4gQ09MT1JfTUVOVVRFWFQ7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVNjcm9sbGJhcjogcmV0dXJuIENPTE9SX1NDUk9MTEJBUjsKLSAgICBj
YXNlIENTU1ZhbHVlVGhyZWVkZGFya3NoYWRvdzogcmV0dXJuIENPTE9SXzNEREtTSEFET1c7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVRocmVlZGZhY2U6IHJldHVybiBDT0xPUl8zREZBQ0U7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVRocmVlZGhpZ2hsaWdodDogcmV0dXJuIENPTE9SXzNESElHSExJR0hUOwotICAg
IGNhc2UgQ1NTVmFsdWVUaHJlZWRsaWdodHNoYWRvdzogcmV0dXJuIENPTE9SXzNETElHSFQ7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVRocmVlZHNoYWRvdzogcmV0dXJuIENPTE9SXzNEU0hBRE9XOwotICAg
IGNhc2UgQ1NTVmFsdWVXaW5kb3c6IHJldHVybiBDT0xPUl9XSU5ET1c7Ci0gICAgY2FzZSBDU1NW
YWx1ZVdpbmRvd2ZyYW1lOiByZXR1cm4gQ09MT1JfV0lORE9XRlJBTUU7Ci0gICAgY2FzZSBDU1NW
YWx1ZVdpbmRvd3RleHQ6IHJldHVybiBDT0xPUl9XSU5ET1dURVhUOwotICAgIGRlZmF1bHQ6IHJl
dHVybiAtMTsgLy8gVW5zdXBwb3J0ZWQgQ1NTVmFsdWUKLSAgICB9Ci19Ci0KLUNvbG9yIFJlbmRl
clRoZW1lV2luQ0U6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCkgY29uc3QKLXsK
LSAgICBpbnQgc3lzQ29sb3JJbmRleCA9IGNzc1ZhbHVlSWRUb1N5c0NvbG9ySW5kZXgoY3NzVmFs
dWVJZCk7Ci0gICAgaWYgKHN5c0NvbG9ySW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci0KLSAgICBDT0xPUlJFRiBjb2xvciA9
IEdldFN5c0NvbG9yKHN5c0NvbG9ySW5kZXgpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUo
Y29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKLX0KLQotY29uc3Qg
aW50IHNsaWRlclRodW1iV2lkdGggPSA3OwotY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0g
MTU7Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICB9IGVsc2UgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAg
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkp
OwotICAgIH0KLX0KLQotI2lmIDAKLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0QnV0dG9u
SW5uZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBpbm5l
ciBwYWRkaW5nIG1hdGNoZXMgRmlyZWZveC4KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5n
dGgoMSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aCgzLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgxLCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoMywgRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAv
LyBPdmVycmlkZSBwYWRkaW5nIHNpemUgdG8gbWF0Y2ggQXBwS2l0IHRleHQgcG9zaXRpb25pbmcu
Ci0gICAgY29uc3QgaW50IHBhZGRpbmcgPSAxOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5n
LCBGaXhlZCkpOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIENvbG9yIGJ1dHRvbkNvbG9yID0gKG8tPm5vZGUoKSAmJiBvLT5ub2RlKCktPmlzRWxlbWVu
dE5vZGUoKSAmJiB0b0VsZW1lbnQoby0+bm9kZSgpKS0+YWN0aXZlKCkpID8gQ29sb3IoMTM4LCAx
MzgsIDEzOCkgOiBDb2xvcigxODYsIDE4NiwgMTg2KTsKLQotICAgIEludFNpemUgY2FuY2VsU2l6
ZSgxMCwgMTApOwotICAgIEludFNpemUgY2FuY2VsUmFkaXVzKGNhbmNlbFNpemUud2lkdGgoKSAv
IDIsIGNhbmNlbFNpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICBpbnQgeCA9IHIueCgpICsgKHIud2lk
dGgoKSAtIGNhbmNlbFNpemUud2lkdGgoKSkgLyAyOwotICAgIGludCB5ID0gci55KCkgKyAoci5o
ZWlnaHQoKSAtIGNhbmNlbFNpemUuaGVpZ2h0KCkpIC8gMiArIDE7Ci0gICAgSW50UmVjdCBjYW5j
ZWxCb3VuZHMoSW50UG9pbnQoeCwgeSksIGNhbmNlbFNpemUpOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXBSb3VuZGVkUmVjdChSb3Vu
ZGVkUmVjdChjYW5jZWxCb3VuZHMsIGNhbmNlbFJhZGl1cywgY2FuY2VsUmFkaXVzLCBjYW5jZWxS
YWRpdXMsIGNhbmNlbFJhZGl1cykpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChj
YW5jZWxCb3VuZHMsIGJ1dHRvbkNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgIC8v
IERyYXcgdGhlICd4JwotICAgIEludFNpemUgeFNpemUoMywgMyk7Ci0gICAgSW50UmVjdCB4Qm91
bmRzKGNhbmNlbEJvdW5kcy5sb2NhdGlvbigpICsgSW50U2l6ZSgzLCAzKSwgeFNpemUpOwotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZSh4Qm91bmRzLmxv
Y2F0aW9uKCksICB4Qm91bmRzLmxvY2F0aW9uKCkgKyB4Qm91bmRzLnNpemUoKSk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHhCb3VuZHMubWF4WCgpLCB4Qm91bmRz
LnkoKSksICBJbnRQb2ludCh4Qm91bmRzLngoKSwgeEJvdW5kcy5tYXhZKCkpKTsKLQotICAgIHBh
aW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAg
SW50U2l6ZSBjYW5jZWxTaXplKDEzLCAxMSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChj
YW5jZWxTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
Y2FuY2VsU2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNF
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBlbXB0eVNp
emUoMSwgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRoKCks
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgp
LCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBtYWduaWZpZXJTaXplKDE1LCAx
MSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLndpZHRoKCksIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBtYWduaWZpZXJTaXplKDE1LCAxMSk7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLndpZHRoKCksIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnQobywgcGFpbnRJbmZvLCByKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBUaGVzZSBhcmUg
dGhlIHBhZGRpbmdzIG5lZWRlZCB0byBwbGFjZSB0aGUgdGV4dCBjb3JyZWN0bHkgaW4gdGhlIDxz
ZWxlY3Q+IGJveAotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdUb3AgICAgPSAyOwot
ICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdSaWdodCAgPSBzdHlsZS0+ZGlyZWN0aW9u
KCkgPT0gTFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OwotICAgIGNvbnN0IGludCBk
cm9wRG93bkJveFBhZGRpbmdCb3R0b20gPSAyOwotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBh
ZGRpbmdMZWZ0ICAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCA6IDQgKyBkcm9wRG93
bkJ1dHRvbldpZHRoOwotICAgIC8vIFRoZSA8c2VsZWN0PiBib3ggbXVzdCBiZSBhdCBsZWFzdCAx
MnB4IGhpZ2ggZm9yIHRoZSBidXR0b24gdG8gcmVuZGVyIG5pY2VseSBvbiBXaW5kb3dzCi0gICAg
Y29uc3QgaW50IGRyb3BEb3duQm94TWluSGVpZ2h0ID0gMTI7Ci0KLSAgICAvLyBQb3NpdGlvbiB0
aGUgdGV4dCBjb3JyZWN0bHkgd2l0aGluIHRoZSBzZWxlY3QgYm94IGFuZCBtYWtlIHRoZSBib3gg
d2lkZSBlbm91Z2ggdG8gZml0IHRoZSBkcm9wZG93biBidXR0b24KLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChkcm9wRG93
bkJveFBhZGRpbmdMZWZ0LCBGaXhlZCkpOwotCi0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBh
dXRvCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotCi0gICAgLy8gQ2FsY3Vs
YXRlIG91ciBtaW4taGVpZ2h0Ci0gICAgaW50IG1pbkhlaWdodCA9IHN0eWxlLT5mb250TWV0cmlj
cygpLmhlaWdodCgpOwotICAgIG1pbkhlaWdodCA9IHN0ZDo6bWF4KG1pbkhlaWdodCwgZHJvcERv
d25Cb3hNaW5IZWlnaHQpOwotCi0gICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVp
Z2h0LCBGaXhlZCkpOwotCi0gICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICBEV09SRCBjb2xvck1lbnUgPSBHZXRT
eXNDb2xvcihDT0xPUl9NRU5VKTsKLSAgICBEV09SRCBjb2xvck1lbnVUZXh0ID0gR2V0U3lzQ29s
b3IoQ09MT1JfTUVOVVRFWFQpOwotICAgIENvbG9yIGJnQ29sb3IoR2V0UlZhbHVlKGNvbG9yTWVu
dSksIEdldEdWYWx1ZShjb2xvck1lbnUpLCBHZXRCVmFsdWUoY29sb3JNZW51KSwgMjU1KTsKLSAg
ICBDb2xvciB0ZXh0Q29sb3IoR2V0UlZhbHVlKGNvbG9yTWVudVRleHQpLCBHZXRHVmFsdWUoY29s
b3JNZW51VGV4dCksIEdldEJWYWx1ZShjb2xvck1lbnVUZXh0KSwgMjU1KTsKLSAgICBpZiAoYmdD
b2xvciA9PSB0ZXh0Q29sb3IpCi0gICAgICAgIHRleHRDb2xvci5zZXRSR0IoKH5iZ0NvbG9yLnJn
YigpKSB8IDB4RkYwMDAwMDApOwotICAgIHN0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsK
LSAgICBzdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpLT5zZXRDbGlwKENvbnRlbnRGaWxs
Qm94KTsKLSAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKGJnQ29sb3IpOwotICAgIHN0eWxl
LT5zZXRDb2xvcih0ZXh0Q29sb3IpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotLy8gQXR0ZW1w
dCB0byByZXRyaWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgMCBp
ZiBvbmUgY2Fubm90IGJlIGZvdW5kLgotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudFBhcmVudChOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93SG9zdCgpOwotICAgIGlmICgh
bWVkaWFOb2RlKQotICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwotICAgIGlmICghbWVkaWFOb2Rl
IHx8ICFtZWRpYU5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhdG9FbGVtZW50KG1lZGlhTm9kZSkt
PmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHRvSFRN
TE1lZGlhRWxlbWVudChtZWRpYU5vZGUpOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVX
aW5DRTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJjID0gUmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVHJhY2sobywgaSwgcik7Ci0gICAgSW50UG9pbnQgbGVmdCA9IEludFBvaW50KHIueCgp
ICsgMiwgKHIueSgpICsgci5tYXhZKCkpIC8gMik7Ci0gICAgaS5jb250ZXh0LT5zYXZlKCk7Ci0g
ICAgaS5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6Z3JheSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgaS5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmdyYXksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgIGkuY29udGV4dC0+ZmlsbFJlY3Qocik7Ci0jaWYgRU5BQkxFKFZJ
REVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBh
cmVudChvLT5ub2RlKCkpOwotICAgIGlmIChtZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgaS5jb250
ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAweGZmLCAwKSk7Ci0gICAgICAgIEludFBvaW50
IHJpZ2h0ID0gSW50UG9pbnQobGVmdC54KCkgKyBtZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQo
KSAqIChyLm1heFgoKSAtIHIueCgpIC0gNCksIChyLnkoKSArIHIubWF4WSgpKSAvIDIpOwotICAg
ICAgICBpLmNvbnRleHQtPmRyYXdMaW5lKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgbGVmdCA9IHJp
Z2h0OwotICAgIH0KLSNlbmRpZgotICAgIGkuY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6
OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBpLmNvbnRleHQtPmRyYXdMaW5lKGxl
ZnQsIEludFBvaW50KHIubWF4WCgpIC0gMiwgbGVmdC55KCkpKTsKLSAgICBpLmNvbnRleHQtPnJl
c3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6
cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJjID0gUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVy
VGh1bWIobywgaSwgcik7Ci0gICAgaS5jb250ZXh0LT5zYXZlKCk7Ci0gICAgaS5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGku
Y29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7
Ci0gICAgaS5jb250ZXh0LT5maWxsUmVjdChyKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUo
KSk7Ci0gICAgaWYgKG1lZGlhRWxlbWVudCkgewotICAgICAgICBmbG9hdCBwdCA9IG1lZGlhRWxl
bWVudC0+Y3VycmVudFRpbWUoKSAvIG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICAgICAg
RmxvYXRSZWN0IGludFJlY3QgPSByOwotICAgICAgICBpbnRSZWN0LnNldFgoaW50UmVjdC54KCkg
KyBpbnRSZWN0LndpZHRoKCkgKiBwdCAtIDIpOwotICAgICAgICBpbnRSZWN0LnNldFdpZHRoKDUp
OwotICAgICAgICBpLmNvbnRleHQtPmZpbGxSZWN0KGludFJlY3QpOwotICAgIH0KLSNlbmRpZgot
ICAgIGkuY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGNvbnN0IGludCBwYWRk
aW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLX0KLQotI2lm
IEVOQUJMRShWSURFTykKLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhRnVsbHNj
cmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludElu
Zm8sIHIpOwotICAgIEZsb2F0UmVjdCBpbVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0y
KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0
LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmdyYXkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVj
dChpbVJlY3QpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJu
IHJjOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5v
ZGUoKSk7Ci0gICAgYm9vbCBtdXRlZCA9ICFtZWRpYUVsZW1lbnQgfHwgbWVkaWFFbGVtZW50LT5t
dXRlZCgpOwotICAgIEZsb2F0UmVjdCBpbVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0y
KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0
LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBGbG9hdFBvaW50IHB0c1s2XSA9IHsKLSAg
ICAgICAgRmxvYXRQb2ludChpbVJlY3QueCgpICsgMSwgaW1SZWN0LnkoKSArIGltUmVjdC5oZWln
aHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0LngoKSArIDEgKyBpbVJlY3Qu
d2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAg
ICAgIEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSAtIDEsIGltUmVjdC55KCkpLAotICAgICAgICBG
bG9hdFBvaW50KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3QubWF4WSgpKSwKLSAgICAgICAgRmxv
YXRQb2ludChpbVJlY3QueCgpICsgMSArIGltUmVjdC53aWR0aCgpIC8gMi4wLCBpbVJlY3QueSgp
ICsgMi4wICogaW1SZWN0LmhlaWdodCgpIC8gMy4wKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJl
Y3QueCgpICsgMSwgaW1SZWN0LnkoKSArIDIuMCAqIGltUmVjdC5oZWlnaHQoKSAvIDMuMCkKLSAg
ICB9OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbig2LCBwdHMpOwot
ICAgIGlmIChtdXRlZCkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBv
aW50KGltUmVjdC5tYXhYKCksIGltUmVjdC55KCkpLCBJbnRQb2ludChpbVJlY3QueCgpLCBpbVJl
Y3QubWF4WSgpKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1
cm4gcmM7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVBsYXlCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAg
ICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjpibGFjayk7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVk
aWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0gICAgYm9vbCBwYXVzZWQgPSAhbWVkaWFFbGVt
ZW50IHx8IG1lZGlhRWxlbWVudC0+cGF1c2VkKCk7Ci0gICAgaWYgKHBhdXNlZCkgewotICAgICAg
ICBmbG9hdCB3aWR0aCA9IGltUmVjdC53aWR0aCgpOwotICAgICAgICBpbVJlY3Quc2V0V2lkdGgo
d2lkdGggLyAzLjApOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoaW1SZWN0
KTsKLSAgICAgICAgaW1SZWN0Lm1vdmUoMi4wICogd2lkdGggLyAzLjAsIDApOwotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoaW1SZWN0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBGbG9hdFBvaW50IHB0c1szXSA9IHsgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgp
KSwgRmxvYXRQb2ludChpbVJlY3QubWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkp
IC8gMi4wKSwgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OwotICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzKTsKLSAgICB9Ci0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0
IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9pbnQgcHRz
WzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIGlt
UmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC54KCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1h
eFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAy
LjAsIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2ludCBwdHMyWzNdID0geyBGbG9hdFBv
aW50KGltUmVjdC5tYXhYKCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsg
aW1SZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjAp
LCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMs
IHB0cyk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0czIp
OwotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJjOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZs
b2F0UmVjdCBpbVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0zKTsKLSAgICBGbG9hdFBv
aW50IHB0c1szXSA9IHsgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQ
b2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCAoaW1SZWN0LnkoKSArIGlt
UmVjdC5tYXhZKCkpIC8gMi4wKSwgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgp
KSB9OwotICAgIEZsb2F0UG9pbnQgcHRzMlszXSA9IHsgRmxvYXRQb2ludCgoaW1SZWN0LngoKSAr
IGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludChpbVJlY3QubWF4
WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgRmxvYXRQb2ludCgoaW1S
ZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJlY3QubWF4WSgpKSB9OwotICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdv
bigzLCBwdHMpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBw
dHMyKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICByZXR1cm4gcGFpbnRTbGlkZXJUcmFjayhvLCBwYWludEluZm8sIHIpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IHJldHVybiBwYWludFNsaWRlclRodW1iKG8sIHBhaW50SW5mbywgcik7Ci19Ci0jZW5kaWYKLQot
dm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBpbnQg
d2lkdGggPSA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKLSAgICBpZiAod2lkdGgg
PD0gMCkKLSAgICAgICAgd2lkdGggPSAxNzsgLy8gVmlzdGEncyBkZWZhdWx0LgotICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRo
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWlu
dElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIC8vIFdlIHNwbGl0IHRoZSBzcGVjaWZpZWQg
cmVjdGFuZ2xlIGludG8gdHdvIHZlcnRpY2FsbHkuIFdlIGNhbid0IGRyYXcgYQotICAgIC8vIHNw
aW4gYnV0dG9uIG9mIHdoaWNoIGhlaWdodCBpcyBsZXNzIHRoYW4gMnB4LgotICAgIGlmIChyLmhl
aWdodCgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEludFJlY3QgdXBSZWN0KHIp
OwotICAgIHVwUmVjdC5zZXRIZWlnaHQoci5oZWlnaHQoKSAvIDIpOwotICAgIEludFJlY3QgZG93
blJlY3Qocik7Ci0gICAgZG93blJlY3Quc2V0WSh1cFJlY3QubWF4WSgpKTsKLSAgICBkb3duUmVj
dC5zZXRIZWlnaHQoci5oZWlnaHQoKSAtIHVwUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICB1bnNpZ25l
ZCBzdGF0ZVVwID0gREZDU19TQ1JPTExVUDsKLSAgICB1bnNpZ25lZCBzdGF0ZURvd24gPSBERkNT
X1NDUk9MTERPV047Ci0KLSAgICBpZiAoIWlzRW5hYmxlZChvKSB8fCBpc1JlYWRPbmx5Q29udHJv
bChvKSkgewotICAgICAgICBzdGF0ZVVwIHw9IERGQ1NfSU5BQ1RJVkU7Ci0gICAgICAgIHN0YXRl
RG93biB8PSBERkNTX0lOQUNUSVZFOwotICAgIH0gZWxzZSBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0g
ICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAgICAgICAgc3Rh
dGVVcCB8PSBERkNTX1BVU0hFRDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGVEb3du
IHw9IERGQ1NfUFVTSEVEOwotICAgIH0KLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3RnJh
bWVDb250cm9sKHVwUmVjdCwgREZDX1NDUk9MTCwgc3RhdGVVcCk7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdGcmFtZUNvbnRyb2woZG93blJlY3QsIERGQ19TQ1JPTEwsIHN0YXRlRG93bik7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMGQ2MWRjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAot
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJUaGVtZVdpbkNFX2gKLSNkZWZp
bmUgUmVuZGVyVGhlbWVXaW5DRV9oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotCi10eXBl
ZGVmIHZvaWQqIEhBTkRMRTsKLXR5cGVkZWYgc3RydWN0IEhJTlNUQU5DRV9fKiBISU5TVEFOQ0U7
Ci10eXBlZGVmIEhJTlNUQU5DRSBITU9EVUxFOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAg
ICBzdHJ1Y3QgVGhlbWVEYXRhIHsKLSAgICAgICAgVGhlbWVEYXRhKCkgOm1fcGFydCgwKSwgbV9z
dGF0ZSgwKSwgbV9jbGFzc2ljU3RhdGUoMCkge30KLSAgICAgICAgVGhlbWVEYXRhKGludCBwYXJ0
LCBpbnQgc3RhdGUpCi0gICAgICAgICAgICA6IG1fcGFydChwYXJ0KQotICAgICAgICAgICAgLCBt
X3N0YXRlKHN0YXRlKQotICAgICAgICAgICAgLCBtX2NsYXNzaWNTdGF0ZSgwKQotICAgICAgICB7
IH0KLQotICAgICAgICB1bnNpZ25lZCBtX3BhcnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhdGU7
Ci0gICAgICAgIHVuc2lnbmVkIG1fY2xhc3NpY1N0YXRlOwotICAgIH07Ci0KLSAgICBjbGFzcyBS
ZW5kZXJUaGVtZVdpbkNFIDogcHVibGljIFJlbmRlclRoZW1lIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKLSAgICAgICAgflJl
bmRlclRoZW1lV2luQ0UoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRT
dHlsZVNoZWV0KCk7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVl
dCgpOwotCi0gICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9s
cyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAg
ICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
LQotICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1G
b250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQotICAgICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsg
fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0gICAgICAgIHsgcmV0dXJuIHBh
aW50QnV0dG9uKG8sIGksIHIpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotICAgICAgICB7IHJldHVybiBzZXRDaGVja2JveFNp
emUoc3R5bGUpOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotICAg
ICAgICB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QgeyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5l
clNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYktpdElzQmVpbmdVbmxvYWRlZCgpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSopIGNvbnN0OwotCi0gICAgI2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0Zv
cndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgI2VuZGlmCi0KLSAgICBwcml2YXRlOgotICAgICAg
ICBSZW5kZXJUaGVtZVdpbkNFKCk7Ci0KLSAgICAgICAgdW5zaWduZWQgZGV0ZXJtaW5lQ2xhc3Np
Y1N0YXRlKFJlbmRlck9iamVjdCopOwotICAgICAgICBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJv
bFBhcnQpIGNvbnN0OwotCi0gICAgICAgIFRoZW1lRGF0YSBnZXRUaGVtZURhdGEoUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgfTsKLQotfTsKLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lV2luQ0VfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MTE0NWQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRocmVh
ZC5oIgotCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQo
KQotOiBtX3RpbWVyKHRoaXMsICZEYXRhYmFzZVRocmVhZDo6dGltZXJGaXJlZCkKLXsKLX0KLQot
RGF0YWJhc2VUaHJlYWQ6On5EYXRhYmFzZVRocmVhZCgpCi17Ci19Ci0KLXZvaWQgRGF0YWJhc2VU
aHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlvbigpCi17Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQot
Ci1ib29sIERhdGFiYXNlVGhyZWFkOjp0ZXJtaW5hdGlvblJlcXVlc3RlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjp0
aW1lckZpcmVkKFRpbWVyPERhdGFiYXNlVGhyZWFkPiopCi17Ci0gICAgaWYgKCFtX3F1ZXVlLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrID0gbV9xdWV1ZS5m
aXJzdCgpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwotICAgICAgICBtX3F1ZXVlLnJl
bW92ZUZpcnN0KCk7Ci0gICAgICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnNjaGVkdWxlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKLXsKLSAgICBt
X3F1ZXVlLmFwcGVuZCh0YXNrKTsKLSAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNj
aGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKLXsKLSAg
ICB0YXNrLT5wZXJmb3JtVGFzaygpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjp1bnNjaGVk
dWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgRGVxdWU8UmVmUHRy
PERhdGFiYXNlVGFzaz4gPiByZXNlcnZlZFRhc2tzOwotICAgIGZvciAoRGVxdWU8UmVmUHRyPERh
dGFiYXNlVGFzaz4gPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fcXVldWUuYmVnaW4oKTsgaSAhPSBt
X3F1ZXVlLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCgqaSktPmRhdGFiYXNlKCkgIT0gZGF0
YWJhc2UpCi0gICAgICAgICAgICByZXNlcnZlZFRhc2tzLmFwcGVuZCgqaSk7Ci0gICAgfQotCi0g
ICAgbV9xdWV1ZS5zd2FwKHJlc2VydmVkVGFza3MpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFk
OjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2Vk
KERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dp
bmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2Uv
RGF0YWJhc2VUaHJlYWRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTIx
Y2MxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VU
aHJlYWRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaSB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBEYXRhYmFzZVRocmVhZFdpbkNF
X2gKLSNkZWZpbmUgRGF0YWJhc2VUaHJlYWRXaW5DRV9oCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBEYXRhYmFzZTsKLSAgICBjbGFzcyBEYXRhYmFzZVRhc2s7Ci0KLSAgICBjbGFz
cyBEYXRhYmFzZVRocmVhZDogcHVibGljIFdURjo6UmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4g
ewotCi0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRocmVh
ZD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVGhyZWFkKTsgfQotICAg
ICAgICB+RGF0YWJhc2VUaHJlYWQoKTsKLQotICAgICAgICBib29sIHN0YXJ0KCkgeyByZXR1cm4g
dHJ1ZTsgfQotICAgICAgICB2b2lkIHJlcXVlc3RUZXJtaW5hdGlvbigpOwotICAgICAgICBib29s
IHRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzY2hlZHVsZVRh
c2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+KTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZUltbWVk
aWF0ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+KTsKLSAgICAgICAgdm9pZCB1bnNjaGVk
dWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNl
T3BlbihEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFi
YXNlKik7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVh
ZElEKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFRocmVhZCgpOyB9Ci0jZW5kaWYKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIERhdGFiYXNlVGhyZWFkKCk7Ci0KLSAgICAgICAgdm9pZCB0aW1lckZp
cmVkKFRpbWVyPERhdGFiYXNlVGhyZWFkPiopOwotCi0gICAgICAgIERlcXVlPFJlZlB0cjxEYXRh
YmFzZVRhc2s+ID4gbV9xdWV1ZTsKLSAgICAgICAgVGltZXI8RGF0YWJhc2VUaHJlYWQ+IG1fdGlt
ZXI7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YWJh
c2VUaHJlYWRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNl
L1N0b3JhZ2VUaHJlYWRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0
b3JhZ2VUaHJlYWRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZTg5
NmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9TdG9yYWdlVGhy
ZWFkV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaSB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlN0b3JhZ2VUaHJlYWQuaCIKLQotI2luY2x1ZGUgIlN0b3JhZ2VUYXNrLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RvcmFnZVRo
cmVhZDo6U3RvcmFnZVRocmVhZCgpCi06IG1fdGltZXIodGhpcywgJlN0b3JhZ2VUaHJlYWQ6OnRp
bWVyRmlyZWQpCi17Ci19Ci0KLVN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKLXsKLX0K
LQotYm9vbCBTdG9yYWdlVGhyZWFkOjpzdGFydCgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgU3RvcmFnZVRocmVhZDo6dGltZXJGaXJlZChUaW1lcjxTdG9yYWdlVGhyZWFkPiopCi17
Ci0gICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8U3RvcmFnZVRh
c2s+IHRhc2sgPSBtX3F1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7
Ci0gICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgaWYgKCFtX3F1ZXVlLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIH0KLX0K
LQotdm9pZCBTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhU3luYz4gYXJlYSkKLXsKLSAgICBtX3F1ZXVlLmFwcGVuZChTdG9yYWdlVGFzazo6Y3JlYXRl
SW1wb3J0KGFyZWEpKTsKLSAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90
aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQotewotICAgIG1fcXVldWUuYXBw
ZW5kKFN0b3JhZ2VUYXNrOjpjcmVhdGVTeW5jKGFyZWEpKTsKLSAgICBpZiAoIW1fdGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgU3Rv
cmFnZVRocmVhZDo6dGVybWluYXRlKCkKLXsKLSAgICBtX3F1ZXVlLmNsZWFyKCk7Ci0gICAgbV90
aW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6cGVyZm9ybVRlcm1pbmF0ZSgp
Ci17Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotICAgIG1fdGltZXIuc3RvcCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dp
bmNlL1N0b3JhZ2VUaHJlYWRXaW5DRS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9T
dG9yYWdlVGhyZWFkV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc1NzNh
ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJl
YWRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aSB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIFN0b3JhZ2VUaHJlYWRXaW5DRV9o
Ci0jZGVmaW5lIFN0b3JhZ2VUaHJlYWRXaW5DRV9oCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAg
ICBjbGFzcyBTdG9yYWdlQXJlYVN5bmM7Ci0gICAgY2xhc3MgU3RvcmFnZVRhc2s7Ci0KLSAgICBj
bGFzcyBTdG9yYWdlVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZVRocmVhZD4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZVRocmVhZD4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VUaHJlYWQpOyB9Ci0KLSAgICAgICAg
flN0b3JhZ2VUaHJlYWQoKTsKLSAgICAgICAgYm9vbCBzdGFydCgpOwotICAgICAgICB2b2lkIHNj
aGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7Ci0gICAgICAgIHZvaWQg
c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7Ci0gICAgICAgIHZvaWQg
dGVybWluYXRlKCk7Ci0gICAgICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgpOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgU3RvcmFnZVRocmVhZCgpOwotCi0gICAgICAgIHZvaWQgdGltZXJGaXJl
ZChUaW1lcjxTdG9yYWdlVGhyZWFkPiopOwotCi0gICAgICAgIERlcXVlPFJlZlB0cjxTdG9yYWdl
VGFzaz4gPiBtX3F1ZXVlOwotICAgICAgICBUaW1lcjxTdG9yYWdlVGhyZWFkPiBtX3RpbWVyOwot
ICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VUaHJl
YWRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYxNDQ2M2YuLmVjMGQ5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzAgQEAKKzIwMTQtMDktMjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ0UuY21ha2U6
IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvQ29u
dGV4dE1lbnVDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdp
bmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmg6IFJlbW92
ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0Uu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFdpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2luY2UvV2ViVmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2luY2UvV2ViVmlldy5oOiBS
ZW1vdmVkLgorCiAyMDE0LTA5LTE1ICBwZWF2b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2su
Y29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gTWFrZSBpdCBlYXNpZXIgdG8gZW5hYmxlL2Rpc2Fi
bGUgR1N0cmVhbWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbkNFLmNt
YWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbkNFLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2OTRjMDFiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm1XaW5DRS5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLWxpc3QoQVBQRU5E
IFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2li
aWxpdHkvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wYWdlL3dpbiIKLSAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93
aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLQotICAgIHdpbmNlCi0gICAg
d2luY2UvV2ViQ29yZVN1cHBvcnQKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKLSAg
ICB3aW5jZS9XZWJWaWV3LmNwcAotICAgIHdpbmNlL1dlYlZpZXcuaAotCi0gICAgd2luY2UvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9E
cmFnQ2xpZW50V2luQ0UuY3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuY3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2lu
Q0UuY3BwCi0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3Bw
Ci0gICAgd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCi0p
Ci0KLXNldChXZWJLaXRfTElCUkFSWV9UWVBFIFNUQVRJQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2YvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jZi9DaGFuZ2VMb2cKaW5kZXggYmQ4
YzY3Ny4uMWRkOThjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jZi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jZi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNC0wOS0y
MSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92
ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3Bw
OgorCiAyMDE0LTAyLTE3ICBTZXJnaW8gQ29ycmVpYSAgPHNlcmdpby5jb3JyZWlhQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgUmVwbGFjZSB1c2VzIG9mIFBhc3NPd25QdHIvT3duUHRyIHdpdGgg
c3RkOjp1bmlxdWVfcHRyIGluIFdlYkNvcmUvaW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2NmL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudENGLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCmluZGV4
IDYyMzMzZDkuLjA0ZmU3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2YvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2YvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJ
TkNFKQorI2lmIFBMQVRGT1JNKFdJTikKICNpZm5kZWYgV1RGX1VTRV9DRwogI2RlZmluZSBXVEZf
VVNFX0NHIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMGVkOGUxZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5n
ZUxvZworKysgL2Rldi9udWxsCkBAIC0xLDIyODMgKzAsMCBAQAotMjAxNC0wMy0xMiAgU2VyZ2lv
IFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KLQotICAgICAgICBSZW5hbWUgREVG
SU5FX1NUQVRJQ19MT0NBTCB0byBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTYxMgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIEZvciBuZXcgY29kZSB1c2Ug
c3RhdGljIE5ldmVyRGVzdHJveWVkPFQ+IGluc3RlYWQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6dXNlckFnZW50KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6aW5pdGlhbGl6ZSk6Ci0KLTIwMTQtMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KLQotICAgICAgICBXZWIgSW5zcGVjdG9yOiBFeHBvc2UgdGhlIGNvbnNv
bGUgb2JqZWN0IGluIEpTQ29udGV4dHMgdG8gaW50ZXJhY3Qgd2l0aCBXZWIgSW5zcGVjdG9yCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5NDQKLQot
ICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIFVwZGF0ZSBuYW1lc3BhY2VzLgot
Ci0yMDE0LTAyLTI0ICBSZW5hdGEgSG9kb3ZhbiAgPHJob2RvdmFuLnUtc3plZ2VkQHBhcnRuZXIu
c2Ftc3VuZy5jb20+Ci0KLSAgICAgICAgR2V0IHJpZCBvZiB0aGUgdW51c2VkICdpbW1lZGlhdGUn
IHBhcmFtZXRlcnMgZnJvbSByZXBhaW50IHJlbGF0ZWQgZnVuY3Rpb25zCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMTEKLQotICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBGcmFzZXIuCi0KLSAgICAgICAgUmVtb3ZpbmcgdGhlICdpbW1lZGlhdGUn
IHBhcmFtZXRlcnMgZnJvbSByZXBhaW50IHJlbGF0ZWQgZnVuY3Rpb25zIC0gYWNjb3JpbmcKLSAg
ICAgICAgdG8gdGhlIEZJWE1FIGluIFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKCkg
LSBzaW5jZSB0aGV5IGhhdmUgbm8gZWZmZWN0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6aW52YWxpZGF0ZVJvb3RWaWV3KToKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KToKLSAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50V2luQ0U6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwpOgotICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAyLTA4ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KLQotICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9yIHRvIHVzZSBT
dHJpbmdWaWV3LCBwcmVwYXJpbmcgdG8gd2VhbiBpdCBmcm9tIGRlcHJlY2F0ZWRDaGFyYWN0ZXJz
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgyMzMK
LQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudFdpbkNFOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOiBVc2UgU3RyaW5nVmlldy4KLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNoZWNrR3JhbW1hck9mU3RyaW5nKTog
RGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDogRGl0
dG8uCi0KLTIwMTQtMDItMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
LQotICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgQ29uc29sZSBzdXBwb3J0IHRvIEpTQ29udGV4
dCBJbnNwZWN0aW9uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjc5NDEKLQotICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMzAg
IEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIHRoZSBB
Q0NFTEVSQVRFRF9DT01QT1NJVElORyBmbGFnCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4MzMKLQotICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBL
b2l2aXN0by4KLQotICAgICAgICBSZW1vdmUgdGhlIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgY29uZGl0aW9uYWxzIGZyb20gdGhlIGNvZGUgYmFzZSBhbmQgbWFrZSBBQwotICAgICAgICBt
YW5kYXRvcnkuCi0KLSAgICAgICAgQW5vdGhlciBwYXRjaCB3aWxsIGJlIHJlcXVpcmVkIHRvIHJl
bW92ZSB0aGUgZmxhZyBzdXBwb3J0IGZyb20gdGhlIFdpbkNFIGJ1aWxkIHN5c3RlbS4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKToK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAx
LTI1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVt
b3ZlIGFuIHVudXNlZCBGcmFtZUxvYWRlckNsaWVudCBmdW5jdGlvbgotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI4Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0xNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZSBhbm90aGVyIHVudXNlZCBGcmFtZUxvYWRlckNs
aWVudCBjYWxsYmFjawotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI3MTkyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0x
NyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92
ZSBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uIGZyb20gYWxsIEZyYW1lTG9hZGVyQ2xpZW50IHN1
YmNsYXNzZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNzE5MAotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMTYgIFBl
dGVyIE1vbG5hciAgPHBtb2xuYXIudS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotICAg
ICAgICBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgY29tcGlsZXJzIG5vdCBzdXBwb3J0aW5nIGV4cGxp
Y2l0IG92ZXJyaWRlIGNvbnRyb2wKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNzExMQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nv
bi4KLQotICAgICAgICBOb3cgYWxsIGNvbXBpbGVycyBzdXBwb3J0IGV4cGxpY2l0IG92ZXJyaWRl
IGNvbnRyb2wsIHRoaXMgd29ya2Fyb3VuZCBjYW4gYmUgcmVtb3ZlZC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5o
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5o
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMy0x
Mi0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgotCi0gICAgICAgIFdl
YiBJbnNwZWN0b3I6IFB1c2ggUmVtb3RlIEluc3BlY3RvciBkZWJ1Z2dpbmcgY29ubmVjdGlvbiBt
YW5hZ2VtZW50IGludG8gSmF2YVNjcmlwdENvcmUKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDYxMwotCi0gICAgICAgIFJldmlld2VkIGJ5IFRpbW90
aHkgSGF0Y2hlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdp
bkNFLmg6Ci0KLTIwMTMtMTEtMDQgIFpodWFuZyBaaGlnYW5nICA8emh1YW5nemdAY24uZnVqaXRz
dS5jb20+Ci0KLSAgICAgICAgQ2hhbmdlIHN0cnVjdHVyZSBvZiBmcmFtZSB0cmVlIGluIFdJTkNF
IHBvcnQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjEwNzkKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgICogV2ViVmll
dy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgICogV2ViVmll
dy5oOgotCi0yMDEzLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFtXSU5DRV0gUmVwbGFjZSBPd25QdHIgd2l0aCBHRElPYmplY3QKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3MAotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICAqIFdlYlZpZXcuY3Bw
OgotICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgotICAgICAgICAoV2ViVmlldzo6aGFuZGxlUGFp
bnQpOgotICAgICAgICAqIFdlYlZpZXcuaDoKLQotMjAxMy0xMS0wMiAgUGF0cmljayBHYW5zdGVy
ZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBBZGQgT1ZFUlJJREUga2V5d29yZCB0
byBXZWJDb3JlU3VwcG9ydCBjbGFzc2VzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjM2NzIKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KLQotICAgICAgICBBbHNvIGFsaWduIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIHdpdGggdGhl
IGJhc2UgY2xhc3NlcwotICAgICAgICBhbmQgcmVtb3ZlIHVzZWxlc3MgZnVuY3Rpb25zLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRXaW5DRTo6d2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xp
ZW50V2luQ0U6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6
OkRyYWdDbGllbnRXaW5DRTo6YWN0aW9uTWFza0ZvckRyYWcpOgotICAgICAgICAoV2ViS2l0OjpE
cmFnQ2xpZW50V2luQ0U6OnN0YXJ0RHJhZyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2lu
Q0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JSZXNwb25zZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0
d29ya2luZ0NvbnRleHRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLmg6Ci0KLTIwMTMtMTEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgVmFyaW91cyBzbWFsbCBXaW5DRSBidWlsZCBmaXhlcwotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UpOgotICAgICAgICAqIFdlYlZpZXcuY3BwOgotCi0yMDEzLTEwLTAzICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIHNob3VsZFJ1YmJlckJhbmRJbkRp
cmVjdGlvbiBmcm9tIHRoZSBXS0J1bmRsZVBhZ2VVSUNsaWVudAotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMzA5Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTMtMTAtMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQot
ICAgICAgICBDVFRFOiBET01XcmFwcGVyV29ybGRzIHNob3VsZCBiZSBwYXNzZWQgYXJvdW5kIGJ5
IHJlZmVyZW5jZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyMjA2Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotCi0yMDEzLTA5LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNTM5Mjcu
Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OldlYlZpZXcpOgot
Ci0yMDEzLTA5LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNTUyODkuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hX
aWxsU3VibWl0Rm9ybSk6Ci0KLTIwMTMtMDktMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIg
cjE1NDE3OC4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6d25k
UHJvYyk6Ci0KLTIwMTMtMDktMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgotCi0g
ICAgICAgIHJlbmFtZSBLVVJMIHRvIFVSTAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTQKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEts
aW5nLgotCi0gICAgICAgICogbWFueSBmaWxlczogUmVuYW1lZCwgdXNpbmcgc2NyaXB0LgotCi0y
MDEzLTA5LTE2ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+Ci0KLSAgICAgICAg
UmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQg
ZnJvbSBFZGl0b3JDbGllbnQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjE0NjQKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDEzLTA4LTI0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KLQotICAgICAgICBGcmFtZTo6dHJlZSBzaG91bGQg
cmV0dXJuIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAyNTkKLQotICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChX
ZWJWaWV3OjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgIFVzZSB0cmVlKCkuIGluc3RlYWQgb2YgdHJl
ZSgpLT4uCi0KLTIwMTMtMDgtMTkgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29t
PgotCi0gICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMTk5MTg+IEZyYW1lOjpzZWxlY3Rp
b24oKSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCi0KLSAgICAgICAgbV9zZWxlY3Rpb24gaXMgbmV2ZXIgTlVMTCBzbyByZXR1cm4g
YSByZWZlcmVuY2UgZnJvbSBGcmFtZTo6c2VsZWN0aW9uKCkuIEFsc28gcmVtb3ZlZCBzb21lCi0g
ICAgICAgIHVubmVjZXNzYXJ5IG51bGwgY2hlY2tzIGFuZCBhc3NlcnQgZGlmZiB0cyBleHBvc2Vk
IGFzIGEgcmVzdWx0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2lu
Q0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlRWRpdGlu
Z0tleWJvYXJkRXZlbnQpOgotCi0yMDEzLTA4LTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+Ci0KLSAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTg1OT4gRnJh
bWU6OmxvYWRlcigpIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UKLQotICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgotICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHA6Ci0gICAgICAgIChX
ZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6cmVmZXJyZXIpOgotICAgICAgICAq
IFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6Y3JlYXRlRnJhbWUpOgotICAgICAgICAo
V2ViVmlldzo6bG9hZCk6Ci0gICAgICAgIChXZWJWaWV3OjpyZWxvYWQpOgotICAgICAgICAoV2Vi
Vmlldzo6c3RvcCk6Ci0KLTIwMTMtMDctMjUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUu
Y29tPgotCi0gICAgICAgIENocm9tZUNsaWVudDo6Zm9jdXNlZE5vZGVDaGFuZ2VkKCkgc2hvdWxk
IGJlIGZvY3VzZWRFbGVtZW50Q2hhbmdlZCgpLgotICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xMTkxMTA+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDEzLTA2LTI2ICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQg
V2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNTIwNjUuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjpBWFN0YXJ0RnJhbWVMb2FkKToKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OkFYRmluaXNoRnJhbWVMb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5oOgotCi0yMDEzLTA1LTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIENocm9tZUNsaWVudDo6d2ViVmlldygpCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYwNTQKLQotICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBUaGlzIGJsYXRhbnRseSBo
b3JyaWJsZSBsYXllciB2aW9sYXRpb24gd2FzIG9ubHkgdXNlZCB0byBrbm93IGlmIGEgQ2hyb21l
Q2xpZW50IGlzIGFuIGVtcHR5Ci0gICAgICAgIGNsaWVudCBvciBub3QuIFdlIGFscmVhZHkgaGF2
ZSBhIChzbGlnaHRseSBsZXNzIGhvcnJpYmxlKSB3YXkgdG8gZG8gdGhhdC4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGll
bnRXaW5DRSk6Ci0KLTIwMTMtMDUtMTMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KLQotICAgICAgICBGcmFtZTo6ZWRpdG9yKCkgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5j
ZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MDM3
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTMtMDQtMjkgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCBidWlsZCBmaXguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDogQWRkZWQgbWlzc2luZyBoZWFkZXIuCi0gICAgICAgICogV2ViVmlldy5oOiBE
aXR0by4KLQotMjAxMy0wNC0yNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnNvbGVNZXNzYWdlIHNob3VsZCBpbmNsdWRl
IGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgd2hlcmUgcG9zc2libGUKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDkyOQotCi0gICAgICAgIFJldmlld2Vk
IGJ5IFRpbW90aHkgSGF0Y2hlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmFkZE1l
c3NhZ2VUb0NvbnNvbGUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6Ci0KLTIwMTMtMDQtMTggIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE0ODU0NS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAg
ICAgKiBXZWJWaWV3LmNwcDoKLQotMjAxMy0wNC0xNSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRl
ciByMTQ4MzczLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
Y3BwOgotCi0yMDEzLTA0LTA2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNDU4NDkuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0KLTIwMTMt
MDMtMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KLQotICAgICAgICBIaWRl
IE1haW5SZXNvdXJjZUxvYWRlciBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5NzEKLQotICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCk6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAoRnJhbWVMb2FkZXJD
bGllbnRXaW5DRSk6Ci0KLTIwMTMtMDMtMTUgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9t
aXVtLm9yZz4KLQotICAgICAgICBSZXBsYWNlIHN0YXRpY19jYXN0cyB3aXRoIHRvKiBoZWxwZXIg
ZnVuY3Rpb25zLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEyNDAxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU3RlcGhlbiBDaGVubmV5LgotCi0gICAg
ICAgIHRvKiBoZWxwZXIgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgb3ZlciBzdGF0aWNfY2FzdCBj
YWxscyBzaW5jZSB0aGV5Ci0gICAgICAgIGhlbHAgdG8gY2F0Y2ggYmFkIGNhc3RzIGVhc2lseSBv
biB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpyZWRpcmVjdERhdGFUb1BsdWdpbik6Ci0KLTIwMTMtMDMtMTQgIE1hbnVl
bCBSZWdvIENhc2Fzbm92YXMgIDxyZWdvQGlnYWxpYS5jb20+Ci0KLSAgICAgICAgQWRkIHNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQgc2V0dGluZyB0byBXZWJDb3JlOjpQYWdlCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk0MDQKLQotICAg
ICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgotCi0gICAgICAgIFVzZSBuZXcgc2V0dGluZ3Mg
Zm9yIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCBhbmQKLSAgICAgICAgc2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpp
c1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgotCi0yMDEzLTAyLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIERpc2FibGUgZGVsZXRlIGJ1dHRv
biBjb250cm9sbGVyIG9uIG5vbi1NYWMgcG9ydHMgYW5kIGRlbGV0ZSBFZGl0b3JDbGllbnQ6OnNo
b3VsZFNob3dEZWxldGVJbnRlcmZhY2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTUzNAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKEVkaXRvckNsaWVudFdpbkNFKToKLQotMjAxMy0wMi0wMyAgS3dh
bmdZb25nIENob2kgIDxreTAuY2hvaUBzYW1zdW5nLmNvbT4KLQotICAgICAgICBGaXggYnVpbGQg
d2FybmluZyBhZnRlciByMTQxNDczCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDg3ODIKLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50YXJvIEhhcmEu
Ci0KLSAgICAgICAgRml4IC1XdW51c2VkLXBhcmFtZXRlciBidWlsZCB3YXJuaW5nLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZSk6
Ci0KLTIwMTMtMDEtMzEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KLQotICAg
ICAgICBXZWJLaXQyOiBwcm92aWRlIG5ldyBidW5kbGUgQVBJcyB0byBhbGxvdyBidW5kbGUgY2xp
ZW50cyB0byBiZSBub3RpZmllZCBvZiBwYXN0ZWJvYXJkIGFjY2Vzcy4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODM5Ni4KLSAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzEyOTIwNDYxPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3Vy
eWFrb3YuCi0KLSAgICAgICAgQWRkcyBzdHViIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQgb2Yg
dGhlIG5ldyBFZGl0b3JDbGllbnQgbWV0aG9kcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2lu
Q0U6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudFdpbkNFOjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDEzLTAxLTI0ICBQ
YXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3
ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxMzkwNzguCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgot
Ci0yMDEzLTAxLTIyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAg
ICAgICAgVXNlIGEgcGxhdGZvcm9tIHN0cmF0ZWd5IGZvciBsb2NhbCBzdG9yYWdlCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2MDAKLQotICAgICAg
ICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgIFVwZGF0ZSBmb3IgbmV3IHN0
b3JhZ2Ugc3RyYXRlZ3kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRl
U3RvcmFnZVN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UpOgotCi0yMDEz
LTAxLTE4ICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KLQotICAgICAgICBB
ZGQgZXhwbGljaXQga2V5d29yZCB0byBjb25zdHJ1Y3RvcnMgaW4gcGxhdGZvcm0tc3BlY2lmaWMg
SW5zcGVjdG9yQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDcyNTUKLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50YXJvIEhhcmEuCi0KLSAg
ICAgICAgQWRkIGV4cGxpY2l0IGtleXdvcmQgdG8gY29uc3RydWN0b3JzIHRoYXQgdGFrZSBvbmUg
YXJndW1lbnQKLSAgICAgICAgaW4gcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
SW5zcGVjdG9yQ2xpZW50LgotICAgICAgICBBbmQgZml4IHNvbWUgY29kaW5nIHN0eWxlLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAg
KEluc3BlY3RvckNsaWVudFdpbkNFKToKLQotMjAxMy0wMS0wOCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlZCB0aGUgbmVlZCBmb3IgdGhlIFByb3Bvc2Vk
RGF0YWJhc2UgbWVjaGFuaXNtLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2MjkyLgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJv
bWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMTItMjMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+Ci0KLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODA4Mzc3PiBOZXR3b3JrIHBy
b2Nlc3Mgc2hvdWxkIHJlc3BlY3QgY29va2llIGFjY2VwdCBwb2xpY3kKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTY4NAotCi0gICAgICAgIFJldmll
d2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UuaDoKLSAgICAgICAgQ29va2llc1N0cmF0ZWd5IG5vIGxvbmdlciBoYXMgbm90
aWZ5Q29va2llc0NoYW5nZWQoKS4gVGhpcyBwb3J0IGRpZG4ndCB1c2UgaXQgYW55d2F5LgotCi0y
MDEyLTEyLTIyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAg
IEFkZCBhIHNlcGFyYXRlIGNsYXNzIGZvciBuZXR3b3JraW5nIHJlbGF0ZWQgc3RvcmFnZQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Njc2Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpjb29raWVzRm9yRE9NKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
OjpzZXRDb29raWVzRnJvbURPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Y29va2llc0VuYWJsZWQpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjpnZXRSYXdDb29raWVzKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpk
ZWxldGVDb29raWUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmg6Ci0gICAgICAgIENvb2tpZSBmdW5jdGlvbnMgbm93IHRha2UgYSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24sIG5vdCBhIE5ldHdvcmtpbmdDb250ZXh0LgotCi0yMDEyLTEyLTE4ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZSB1bm5lY2Vz
c2FyeSBmdW5jdGlvbnMgZnJvbSBDb29raWVzU3RyYXRlZ3kKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTM2OQotCi0gICAgICAgIFJldmlld2VkIGJ5
IEJyYWR5IEVpZHNvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5oOgotCi0yMDEyLTEyLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+Ci0KLSAgICAgICAgUmVuYW1lIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZCB0byBj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTEyMgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgVXBkYXRlIGZvciBXZWJDb3JlIGNoYW5nZXMuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y29udmVydE1haW5SZXNvdXJjZUxv
YWRUb0Rvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgIChGcmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAxMi0xMi0x
NSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmUtbGFuZGluZyBw
YXRjaCBmb3IgIkludHJvZHVjaW5nIHRoZSBEYXRhYmFzZVN0cmF0ZWd5IGFuZCBkYXRhYmFzZSBz
ZXJ2ZXJzIi4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNDkzNC4KLQotICAgICAgICBOb3QgcmV2aWV3ZWQuCi0KLSAgICAgICAgTWVyZ2VkIGZyb20g
cjEzNzc2Ny4gUHJldmlvdXNseSByZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZURhdGFiYXNlU3RyYXRlZ3kpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAgICAgIChQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTItMTItMTQgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMzc3NjcuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzNzc2
NwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDYy
Ci0KLSAgICAgICAgQnJva2UgTWFjIGJ1aWxkcy4gKFJlcXVlc3RlZCBieSBtbGFtIG9uICN3ZWJr
aXQpLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0Uu
Y3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6
Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTItMTItMTQgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgotCi0gICAgICAgIEludHJvZHVjaW5nIHRoZSBEYXRh
YmFzZVN0cmF0ZWd5IGFuZCBkYXRhYmFzZSBzZXJ2ZXJzLgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTM0LgotCi0gICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCi0KLSAgICAgICAgVGhlIGRhdGFiYXNlIHNlcnZlciBpcyBjdXJyZW50bHkg
YSBwbGFjZWhvbGRlciB0aGF0IGRvZXMgbm90aGluZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UpOgotCi0yMDEyLTEyLTExICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+
Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogQ29uc29sZVR5cGVzIHNob3VsZCBub3QgZXhwb3Nl
IE1lc3NhZ2VUeXBlIC0gaXQgc2hvdWxkIGJlIHByaXZhdGUgdG8gaW5zcGVjdG9yLgotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNzEKLQotICAgICAg
ICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgotCi0gICAgICAgIERyb3BzIFdlYkNvcmU6Ok1l
c3NhZ2VUeXBlIGZyb20gdGhlIGFkZE1lc3NhZ2VUb0NvbnNvbGUgbWV0aG9kLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnRXaW5DRTo6YWRkTWVzc2FnZVRvQ29uc29sZSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdp
bkNFKToKLQotMjAxMi0xMS0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
LQotICAgICAgICBbV0syXSBGb3J3YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nl
c3MKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1
NwotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNGb3JET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpjb29raWVzRW5hYmxlZCk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OmdldFJhd0Nvb2tpZXMpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmRlbGV0ZUNvb2tpZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6ZGVsZXRlQWxsQ29va2llcyk6Ci0KLTIwMTItMTEtMjcgIEphbWVzIFNpbW9uc2Vu
ICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIENvbnNvbGlkYXRlIEZyYW1lTG9h
ZGVyOjpsb2FkKCkgaW50byBvbmUgZnVuY3Rpb24gdGFraW5nIGEgRnJhbWVMb2FkUmVxdWVzdAot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTUxCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYlZpZXcuY3Bw
OgotICAgICAgICAoV2ViVmlldzo6bG9hZCk6Ci0KLTIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMzU3ODYuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzEzNTc4NgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAzMzc5Ci0KLSAgICAgICAgSXQgbWFkZSAzIHBsdWdpbiB0ZXN0cyB0aW1lb3V0IG9uIHNldmVy
YWwgcGxhdGZvcm1zIChSZXF1ZXN0ZWQKLSAgICAgICAgYnkgT3NzeSBvbiAjd2Via2l0KS4KLQot
ICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6bG9hZCk6Ci0KLTIwMTIt
MTEtMjYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgotCi0gICAgICAg
IENvbnNvbGlkYXRlIEZyYW1lTG9hZGVyOjpsb2FkKCkgaW50byBvbmUgZnVuY3Rpb24gdGFraW5n
IGEgRnJhbWVMb2FkUmVxdWVzdAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAyMTUxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQot
ICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6bG9hZCk6Ci0KLTIwMTIt
MTEtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzUyOTUuCi0gICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzNTI5NQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODM0Ci0KLSAgICAgICAgVGhpcyBwYXRjaCBjYXVzZXMg
YXNzZXJ0aW9uIHRvIHNvbWUgbGF5b3V0IHRlc3RzIG9uIGNocm9taXVtCi0gICAgICAgIChSZXF1
ZXN0ZWQgYnkgamlhbmxpIG9uICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0g
ICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yMCAgSmFtZXMgU2ltb25zZW4gIDxz
aW1vbmphbUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6
OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0Ci0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEKLQotICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0g
ICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMC0yNCAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgQWRkIGEgc3RyYXRlZ3kgZm9yIGxvYWRlciBjdXN0
b21pemF0aW9uLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwMjc4Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVMb2FkZXJTdHJhdGVneSk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAg
ICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKToKLQotMjAxMi0xMC0yMyAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3Igc2hh
cmVkIHdvcmtlcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDE2NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAg
KFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgotICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVNoYXJlZFdvcmtlclN0cmF0ZWd5
KToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVWaXNpdGVkTGlua1N0
cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5oOgotCi0yMDEyLTEwLTEwICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KLQotICAgICAg
ICBbV0syXSBBY3RpdmF0ZSBwbHVnaW5zIHdoZW4gdXNlciBjbGlja3Mgb24gc25hcHNob3QKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MzI4Ci0gICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMjQyNjY4MT4KLQotICAgICAgICBSZXZpZXdlZCBieSBCcmFk
eSBFaWRzb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlY3JlYXRl
UGx1Z2luKTogU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiByZWNyZWF0ZVBsdWdpbigpLgotCi0yMDEy
LTEwLTA3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0g
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTIt
MTAtMDQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+Ci0KLSAgICAgICAg
U3RhbmRhcmRpemUgb24gImZsdXNoIiB0ZXJtaW5vbG9neSBmb3IgY29tcG9zaXRpbmcgbGF5ZXIg
Zmx1c2hpbmcvc3luY2luZwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTgzMjEKLQotICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCi0KLSAg
ICAgICAgUmVuYW1lIGNvbXBvc2l0aW5nLXJlbGF0ZWQgbWV0aG9kcyB0aGF0IHJlZmVyIHRvICJz
eW5jaW5nIiB0byBpbnN0ZWFkCi0gICAgICAgIHJlZmVyIHRvICJmbHVzaGluZyIuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENo
cm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wOS0yOCAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KLQotICAgICAgICBDb2RlIGluc2lkZSBGcmFtZUxv
YWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeXBlKCkgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBzaGFy
ZWQgYW1vbmcgZGlmZmVyZW50IFdLIHBvcnRzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzU0NwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCi0KLSAgICAgICAgTmV3bHkgYWRkZWQgV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Y2Fu
U2hvd01JTUVUeXBlKCkgZnVuY3Rpb24gaXMgdXNlZAotICAgICAgICBpbnNpZGUgV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5TaG93TUlNRVR5cGUoKS4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5TaG93TUlNRVR5cGUpOgotCi0yMDEyLTA5LTI1
ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KLQotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUzOTcKLSAgICAgICAgTmVlZCB0byBtZXJnZSBk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgYW5kIAotICAgICAgICBkaWROZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQKLSAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQotICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTA3OTE2ODA+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KLQotICAgICAgICBSZW1vdmUgZGlzcGF0Y2hEaWRGaXJzdExheW91dCwgCi0gICAgICAg
IGRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0LCBhbmQgCi0gICAgICAgIGRp
c3BhdGNoRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0LiBUaGVpciBmdW5jdGlvbmFs
aXR5IAotICAgICAgICBpcyBub3cgcmVwbGFjZWQgYnkgZGlzcGF0Y2hEaWRMYXlvdXQoTGF5b3V0
TWlsZXN0b25lcykKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0
Y2hEaWRMYXlvdXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA4LTI4
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTI2OTE0LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2NoYW5nZXNldC8xMjY5MTQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk1MjM5Ci0KLSAgICAgICAgaXQgYnJlYWtzIGV2ZXJ5dGhpbmcgYW5k
IGZpeGVzIG5vdGhpbmcgKFJlcXVlc3RlZCBieSBwaXpsbyBvbgotICAgICAgICAjd2Via2l0KS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoK
LSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAx
Mi0wOC0yOCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBv
cGVuYm9zc2Eub3JnPgotCi0gICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVl
IGluIEhhc2hNYXAgaXRlcmF0b3JzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mjc4NAotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgot
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEy
LTA4LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI2ODM2LgotICAgICAgICBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC8xMjY4MzYKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MTYzCi0KLSAgICAgICAgQnJva2UgYWxsIEFwcGxlIHBv
cnRzLCBFRkwsIGFuZCBRdC4gKFJlcXVlc3RlZCBieSB0a2VudCBvbgotICAgICAgICAjd2Via2l0
KS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNw
cDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQot
MjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWly
YUBvcGVuYm9zc2Eub3JnPgotCi0gICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3Zh
bHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04Mjc4NAotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3Bw
OgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0y
MDEyLTA4LTEzICBUb20gU2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFtj
aHJvbWl1bV0gcmVsZWFzZSBGcmFtZUxvYWRlckNsaWVudEltcGw6Om1fcGx1Z2luV2lkZ2V0IHJl
ZnB0ciB1cG9uIFBsdWdpbiBEb2N1bWVudCBkZXRhY2guCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzI4MwotCi0gICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgotCi0gICAgICAgIENoYW5nZSB0aGUgY2xpZW50IHJlZGlyZWN0RGF0YVRvUGx1
Z2luIG1ldGhvZChzKSB0byBleHBlY3QgdGhlIHBvc3NpYmlsaXR5IG9mCi0gICAgICAgIGEgTlVM
TCBhcmd1bWVudCwga2VlcGluZyBleGlzdGluZyBiZWhhdmlvdXIgb3RoZXJ3aXNlLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKToK
LQotMjAxMi0wNy0yMyAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KLQot
ICAgICAgICBVbmlmeSBudW1Ub3VjaEV2ZW50SGFuZGxlcnNDaGFuZ2VkIGFuZCBuZWVkVG91Y2hF
dmVudHMgaW4gdGhlIGNocm9tZSBjbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxMDA2Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBO
aXdhLgotCi0gICAgICAgIFJlbW92ZSBudW1Ub3VjaEV2ZW50SGFuZGxlcnNDaGFuZ2VkIHN0dWIu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDEy
LTA3LTE3ICBWaXZlayBHYWxhdGFnZSAgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgotCi0gICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RG
cm9udGVuZCgpIHRvIGFjY2VwdCBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTE5NgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCi0KLSAgICAgICAgUmVmYWN0b3JpbmcgSW5zcGVjdG9y
Q2xpZW50cy4gSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQKLSAgICAgICAg
bm93IHJldHVybmluZyB0aGUgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpJbnNwZWN0b3JDbGllbnRXaW5DRTo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoSW5zcGVj
dG9yQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA1LTMxICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFA
Y2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJFR1JFU1NJT04ocjExNzU3Mik6IGVkaXRpbmcvc3Bl
bGxpbmcvc3BlbGxjaGVjay1hc3luYy1yZW1vdmUtZnJhbWUuaHRtbCBjcmFzaGVzIG9uIE1hYwot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY4NTkKLQot
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRX
aW5DRTo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgotCi0yMDEyLTA1LTMwICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0Ug
YnVpbGQgZml4IGFmdGVyIHIxMTU5MjYuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLQotMjAx
Mi0wNS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAg
ICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTE3NDcwLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEVkaXRvckNsaWVu
dFdpbkNFKToKLQotMjAxMi0wNS0xOCAgTU9SSVRBIEhhamltZSA8bW9ycml0YUBnb29nbGUuY29t
PgotCi0gICAgICAgIEFub3RoZXIgdW5yZXZpZXdlZCBhdHRlbXB0IHRvIGZpeCBidWlsZCBicmVh
a2FnZSBvbiByMTE3NTcyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmZyYW1lV2lsbERl
dGFjaFBhZ2UpOgotCi0yMDEyLTA1LTE4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUu
Y29tPgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NTUxNQotICAgICAgICBTdGFsZSBmcmFtZSBpbiBXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRpZENo
ZWNrU3VjY2VlZGVkCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50V2luQ0U6OmZyYW1lV2lsbERldGFjaFBhZ2UpOgotCi0yMDEyLTA1LTE3
ICBIaXJvbm9yaSBCb25vICA8aGJvbm9AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFtSZWZhY3Rv
cmluZ10gTW92ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIGluIEVkaXRvcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbiB0byB0aGUgV2ViS2l0IGxheWVyCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjU5MQotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5
b3N1a2UgTml3YS4KLQotICAgICAgICBUaGlzIGNoYW5nZSBhZGRzIGEgVGV4dENoZWNrZXJDbGll
bnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uCi0gICAgICAgIGZ1bmN0
aW9uIHRvIHJlbW92ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIGZyb20gRWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uCi0gICAgICAgIGZ1bmN0aW9uLgotCi0gICAgICAgIE5vIG5ldyB0
ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5D
RTo6c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24pOgotICAgICAgICAoV2Vi
S2l0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAg
ICAgICAoRWRpdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA1LTA0ICBOYXRlIENoYXBpbiAgPGph
cGhldEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgRG9uJ3QgcmVxdWlyZSBGcmFtZUxvYWRlckNs
aWVudCB0byBtYW51ZmFjdHVyZSBhIGNvbW1pdERhdGEoKSBjYWxsIGZvciBlbXB0eSBkb2N1bWVu
dHMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTUz
MwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKToKLQotMjAxMi0w
NC0xOCAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgotCi0gICAgICAgIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQoKSBzaG91bGQgYmUg
Z2l2ZW4gbW9yZQotICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybSBiZWluZyBzdWJt
aXR0ZWQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0
Mjk3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5keSBFc3Rlcy4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsU2VuZFN1Ym1pdEV2ZW50KToKLSAgICAg
ICAgVXBkYXRlZCBtZXRob2QgZGVjbGFyYXRpb24uCi0KLTIwMTItMDMtMzAgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dpbkNFXSBDb3JyZWN0IDx3
dGYvKi5oPiBpbmNsdWRlIHBhdGhzLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3MTMKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
LQotICAgICAgICBNb2RpZnkgdGhlICNpbmNsdWRlIGRlY2xhcmF0aW9ucyBmb3Igc2V2ZXJhbCBX
aW5DRS1yZWxhdGVkIGZpbGVzCi0gICAgICAgIHNvIHRoYXQgdGhlIHd0ZiB0eXBlcyBhcmUgaW5j
bHVkZWQgdXNpbmcgdGhlIGZ1bGwgcGF0aC4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAg
ICAgICAqIFdlYlZpZXcuaDoKLQotMjAxMi0wMy0yOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgotCi0gICAgICAgIFJlbW92ZSBkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2Ug
Y2FsbGJhY2ssIHNpbmNlIG5vCi0gICAgICAgIHBvcnQgaW1wbGVtZW50cyBpdC4KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTM5Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0KToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChG
cmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAxMi0wMy0xOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgotCi0gICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciAibWFnaWMiIGlmcmFt
ZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE1OTAK
LQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICBSZW1vdmUgRnJh
bWVMb2FkZXJDbGllbnQgbWV0aG9kcyB0aGF0IG5vIGxvbmdlciBleGlzdC4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
Ci0gICAgICAgIChGcmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAxMi0wMy0xMyAgSm9uIExl
ZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0KLSAgICAgICAgU2VwYXJhdGUgTk9USUZJQ0FUSU9OUyBh
bmQgTEVHQUNZX05PVElGSUNBVElPTlMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwOTIyCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAzNTA4Mj4K
LQotICAgICAgICBSZXZpZXdlZCBieSBKaWFuIExpLgotCi0gICAgICAgIFlvdSBjYW4gaW5jbHVk
ZSBlaXRoZXIgTk9USUZJQ0FUSU9OUyBvciBMRUdBQ1lfTk9USUZJQ0FUSU9OUyBhbmQgaGF2ZSBh
IGNvbXBsZXRlIEFQSS4KLSAgICAgICAgTEVHQUNZX05PVElGSUNBVElPTlMgc2hvdWxkIGNvdmVy
IGFsbCBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb25hbGl0eSwgYW5kIE5PVElGSUNBVElPTlMgd2ls
bCBjb3ZlciB0aGUKLSAgICAgICAgbmV3IEFQSS4gVGhlcmVmb3JlLCBBUElzIHRoYXQgYXJlIGNv
bW1vbiBiZXR3ZWVuIHRoZSB0d28gd2lsbCBoYXZlOgotICAgICAgICAjaWYgRU5BQkxFKE5PVElG
SUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLQotICAgICAgICBUaGlz
IHBhdGNoIGluaXRpYWxseSBzZXRzIGJvdGggdG8gYmUgZXhhY3RseSB0aGUgc2FtZS4gQXMgb3Ro
ZXIgYnVncyB3aXRoIHBhdGNoZXMgYmVnaW4gdG8gbWlncmF0ZSB0bwotICAgICAgICB0aGUgbmV3
IEFQSSwgdGhlIGRlZmluZXMgd2lsbCBiZWdpbiB0byBzcGxpdC4gVGhpcyBhbGxvd3MgcG9ydHMg
dG8gZGVjaWRlIHdoaWNoIHNldCBvZiBBUElzIHRvIGluY2x1ZGUuCi0KLSAgICAgICAgVXBkYXRl
IGV2ZXJ5dGhpbmcgdG8gYmUgI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVH
QUNZX05PVElGSUNBVElPTlMpCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wMy0xMyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPiAmJiBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxh
aW5AYXBwbGUuY29tPgotCi0gICAgICAgIEFsd2F5cyBlbmFibGUgRU5BQkxFKENMSUVOVF9CQVNF
RF9HRU9MT0NBVElPTikKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4ODUzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2lu
Q0UpOgotCi0yMDEyLTAzLTA5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KLQotICAgICAg
ICBSZW5hbWUgTm90aWZpY2F0aW9uUHJlc2VudGVyIHRvIE5vdGlmaWNhdGlvbkNsaWVudAotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA0ODgKLSAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzEwOTY1NTU4PgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbnRh
cm8gSGFyYS4KLQotICAgICAgICBSZWZhY3RvciB0byB1c2UgcmVuYW1lZCBXZWJDb3JlOjpOb3Rp
ZmljYXRpb25DbGllbnQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wMi0yNiAgSGFqaW1l
IE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KLQotICAgICAgICBNb3ZlIENocm9tZUNs
aWVudDo6c2hvd0NvbnRleHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NDI3Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDItMjQg
IFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFNwZWxs
Q2hlY2tSZXF1ZXN0IG5lZWRzIHRvIGtub3cgdGhlIGNvbnRleHQgd2hlcmUgdGhlIHNwZWxsY2hl
Y2sgaGFwcGVuZWQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTMyMAotCi0gICAgICAgIFJldmlld2VkIGJ5IEhhamltZSBNb3JpdGEuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0
OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgotCi0yMDEyLTAy
LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVu
cmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxMDg0NjIuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoRWRpdG9yQ2xpZW50V2lu
Q0UpOgotCi0yMDEyLTAyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFJlbW92ZSB0aGUgcmVtYWluaW5nIHVzZXMgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBp
biBFZGl0b3IKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc4OTM5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRW5yaWNhIENhc3VjY2kuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRBcHBseVN0eWxlKToKLQotMjAxMi0wMi0yMiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZW1vdmUgdGhlIHJlbWFp
bmluZyB1c2VzIG9mIENTU1N0eWxlRGVjbGFyYXRpb24gaW4gRWRpdG9yCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODkzOQotCi0gICAgICAgIFJldmll
d2VkIGJ5IEVucmljYSBDYXN1Y2NpLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6c2hv
dWxkQXBwbHlTdHlsZSk6Ci0KLTIwMTItMDItMjAgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1p
bkB3ZWJraXQub3JnPgotCi0gICAgICAgIEdldCByaWQgb2YgdGhlIExvY2FsaXphdGlvblN0cmF0
ZWd5Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODMy
NAotCi0gICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgUmVtb3ZlIGEg
dXNlbGVzcyAjaW5jbHVkZSBvZiBMb2NhbGl6YXRpb25TdHJhdGVneS5oLgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMi0wMi0xNSAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmll
d2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTA3NjA2LgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFKToKLQotMjAxMi0wMi0xNSAgU2FkcnVsIEhhYmliIENob3dkaHVyeSAgPHNh
ZHJ1bEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCB3aGVuIHRv
dWNoLWV2ZW50IGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQvcmVtb3ZlZC4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NDQwCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gRmlzaGVyIGFuZCBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnRXaW5DRTo6bnVtVG91Y2hFdmVudEhhbmRsZXJzQ2hhbmdlZCk6Ci0KLTIwMTEtMTItMTkgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBNb3JlIFBsYXRmb3JtRXZlbnQg
Y2xlYW51cAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQ4MzEKLQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICog
V2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKLSAgICAg
ICAgVXBkYXRlIHRvIHVzZSBuZXcgbmFtZXMsIGFjY2VzcyBzdHlsZS4KLQotMjAxMS0xMi0xNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZW5hbWUgcmVnaXN0
ZXJDb21tYW5kRm9yKFVuZG98UmVkbykgdG8gcmVnaXN0ZXIoVW5kb3xSZWRvKVN0ZXAKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ4Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
OjpyZWdpc3RlclVuZG9TdGVwKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6
OnJlZ2lzdGVyUmVkb1N0ZXApOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMTItMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQot
ICAgICAgICBHaXZlIFBsYXRmb3JtRXZlbnRzIGEgYmFzZSBjbGFzcwotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODUKLQotICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgQWRkIGEgYmFzZSBjbGFzcyBmb3IgUGxh
dGZvcm1Nb3VzZUV2ZW50LCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQsIFBsYXRmb3JtV2hlZWxFdmVu
dAotICAgICAgICBhbmQgUGxhdGZvcm1HZXN0dXJlRXZlbnQgYW5kIG1vdmUgVHlwZSBlbnVtZXJh
dGlvbiBhbmQgbW9kaWZpZXJzIGRvd24gdG8gaXQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdp
bkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0gICAgICAgICogV2ViVmlldy5jcHA6
Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVLZXlEb3duKToKLSAgICAgICAgKFdlYlZpZXc6Omhh
bmRsZUtleVByZXNzKToKLSAgICAgICAgKFdlYlZpZXc6OmhhbmRsZUtleVVwKToKLQotMjAxMS0x
Mi0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBPbmx5IEVk
aXRDb21tYW5kQ29tcG9zaXRpb24gc2hvdWxkIGltcGxlbWVudCB1bmFwcGx5IGFuZCByZWFwcGx5
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ5MAot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRXaW5DRTo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudFdpbkNFOjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTEyLTE0ICBKaW5nIFpoYW8gIDxq
aW5nemhhb0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgT3BlbmluZyB0d28gcG9wdXAgbWVudXMg
YnkgZGlzcGF0Y2hFdmVudCgpIG1ha2VzIHByb2JsZW1zLgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMDQKLQotICAgICAgICBSZXZpZXdlZCBieSBS
eW9zdWtlIE5pd2EuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpoYXNPcGVuZWRQb3B1
cCk6IE5vdCBpbXBsZW1lbnRlZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOiBPdmVycmlkZXMgaGFzT3BlbmVkUG9wdXAoKS4KLQotMjAxMS0xMS0zMCAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgYW4gdW5u
ZWVkZWQgYXJndW1lbnQgZnJvbSBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQKLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNDg2Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpkb3dubG9hZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5oOgotICAgICAgICBVcGRhdGVkIGZvciB0aGUgY2hhbmdlLgotCi0yMDEx
LTExLTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxMTkzLgotICAgICAgICBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC8xMDExOTMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczMTU4Ci0KLSAgICAgICAgQnJlYWtzIFdpbmRvd3MgYW5k
IFF0IG1pbmltYWwuIChSZXF1ZXN0ZWQgYnkgcGZlbGRtYW4gb24KLSAgICAgICAgI3dlYmtpdCku
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0x
MS0yMiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgV2Vi
IEluc3BlY3RvcjogcmVtb3ZlIEluc3BlY3Rvcjo6YnJpbmdUb0Zyb250IGZyb20gdGhlIHByb3Rv
Y29sLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5
MzcKLQotICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpJbnNwZWN0b3JDbGllbnRXaW5DRTo6YnJpbmdGcm9udGVuZFRvRnJvbnQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEtMjEgIEFu
ZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2lu
Q0UgYnVpbGQgZml4IGFmdGVyIHIxMDA4NzQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24pOgotCi0gICAgICAgICAgICBBZGQgV2ViQ29yZTo6RnJhbWUqIHBh
cmFtZXRlciB0byByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCkuCi0KLTIwMTEtMTEtMTUgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBIb3N0V2luZG93
IHNjcmVlblRvV2luZG93L3dpbmRvd1RvU2NyZWVuIHNob3VsZCBiZSBzY3JlZW5Ub1Jvb3RWaWV3
L3Jvb3RWaWV3VG9TY3JlZW4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyMzk3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnJvb3RWaWV3VG9TY3JlZW4pOgotICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2NyZWVuVG9Sb290Vmlldyk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0xNCAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIEhvc3RXaW5kb3cgaW52
YWxpZGF0aW9uIGZ1bmN0aW9ucyBzaG91bGQgdXNlIHJvb3QgdmlldyBjb29yZGluYXRlcwotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMzgKLQotICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6aW52YWxpZGF0ZVJvb3RWaWV3KToKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
V2luQ0U6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KToKLSAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50V2luQ0U6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwpOgotICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsKToKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTA0ICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFtXSU5DRV0gVXNlIGRlZmF1
bHQgTG9jYWxpemF0aW9uU3RyYXRlZ3kKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxNDk1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4K
LQotICAgICAgICBVc2UgTG9jYWxpemF0aW9uU3RyYXRlZ3kgZnJvbSBXZWJDb3JlIGluc3RlYWQg
b2YgdXNpbmcgYSBjb3B5IG9mIHRoZSBzdHJpbmdzIGluIFdlYktpdC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTExLTAyICBUb20g
U2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFhTU0F1ZGl0b3IgaXMgc2ls
ZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk3
MwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkRGV0ZWN0WFNTKToKLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMTEtMDIgIEpvbiBMZWUgIDxq
b25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIDxpbnB1dD1maWxlIG11bHRpcGxlPiBkZWZhdWx0
IHRleHQgdXNlcyBzaW5ndWxhciBpbnN0ZWFkIG9mIHBsdXJhbAotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTkKLSAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzEwMzc5MDIxPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAg
ICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJl
bCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoK
LQotMjAxMS0xMC0yOCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KLQot
ICAgICAgICBSZW5hbWUgYSBudW1iZXIgb2YgbWV0aG9kcyBtZW50aW9uaW5nIEphdmFTY3JpcHQg
dG8ganVzdCBTY3JpcHQgaW5zdGVhZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzExMDUKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgot
Ci0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpXZWJWaWV3KToKLQot
MjAxMS0xMC0wNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAg
ICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRlciByOTU2MDQuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6aXNMaW5rVmlzaXRlZCk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6YWRkVmlzaXRlZExpbmspOgotCi0yMDExLTA5LTI0ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Njg3NjcKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0K
LTIwMTEtMDktMjEgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+Ci0KLSAg
ICAgICAgW1F0XSBSZW1vdmUgUXQgc3BlY2lmaWMgY29kZSBmcm9tIGNzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NzcwMgotCi0gICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAg
KFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjphZGRWaXNpdGVkTGluayk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMS0wOS0xNyAgTWlo
YWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KLQotICAgICAgICBGcmFtZUxvYWRl
ckNsaWVudCBCYWNrRm9yd2FyZExpc3QtcmVsYXRlZCBtZXRob2RzIGFyZSB1bnN1ZWQKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjkzCi0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgUmVtb3ZlIEZyYW1lTG9hZGVy
Q2xpZW50IG1ldGhvZHMgdGhhdCB3ZXJlIGFkZGVkIGJ5IHI1MTYyOSwgc2luY2Ugb25seSAgICAg
ICAgCi0gICAgICAgIHRoZSBvbGQgKHNpbmNlLWRlbGV0ZWQpIEFuZHJvaWQgcG9ydCBuZWVkZWQg
dGhlbS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0Uu
Y3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoK
LQotMjAxMS0wOS0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgotCi0gICAgICAg
IFJlbmFtZSBFTkFCTEUoREFUQUJBU0UpIHRvIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODIwNQotCi0gICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMDgtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgV2luQ0UgYnVpbGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjk0MDgwLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsUmVjdEludG9WaWV3KToKLQotMjAxMS0wOC0z
MCAgS2F1c3R1YmggQXRyYXdhbGthciAgPGthdXN0dWJoQG1vdG9yb2xhLmNvbT4KLQotICAgICAg
ICBUaGUgdW51c2VkIFNjcm9sbFZpZXcqIGFyZ3VtZW50IGNhbiBhbmQgc2hvdWxkIGJlIHJlbW92
ZWQgZnJvbQotICAgICAgICBzY3JvbGxSZWN0SW50b1ZpZXcuCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzExNwotCi0gICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMS0wOC0xNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+Ci0KLSAg
ICAgICAgTWFrZSBXZWJDb3JlIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGV2aWNlIHNjYWxl
IGZhY3RvcgotCi0gICAgICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY2NDEzPiBXZWJD
b3JlIHJlcXVpcmVzIGV2ZXJ5IFdlYktpdCBwb3J0IHRvIGtlZXAgdHJhY2sgb2YgdGhlCi0gICAg
ICAgIGRldmljZSBzY2FsZSBmYWN0b3IKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICBSZW1v
dmVkIGRldmljZVNjYWxlRmFjdG9yLgotCi0yMDExLTA4LTE1ICBEbWl0cnkgVGl0b3YgIDxkaW1p
Y2hAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2Zlckxv
YWRpbmdSZXNvdXJjZUZyb21QYWdlIGRvZXMgbm90IGhhdmUgZW5vdWdoIHBhcmFtZXRlcnMKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTY1Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBhZ2UpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wOC0x
MCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgQ2xlYXIgdXAgc2Nh
bGUgZmFjdG9yIHRlcm1pbm9sb2d5Ci0KLSAgICAgICAgV2ViS2l0IGJ5IGFuZCBsYXJnZSBkZWFs
cyB3aXRoIHR3byBzY2FsZSBmYWN0b3JzOiBvbmUgaW50cmluc2ljIHRvIHRoZSBkZXZpY2Ugb24g
d2hpY2ggdGhlCi0gICAgICAgIHNvZnR3YXJlIGlzIHJ1bm5pbmcsIGFuZCBvbmUgdGhhdCBpcyBw
ZXItUGFnZSBhbmQgY2FuIGJlIGNvbnRyb2xsZWQgdmlhIEFQSSBjYWxscy4gVGhpcwotICAgICAg
ICBwYXRjaCBuYW1lcyB0aGUgZm9ybWVyICJkZXZpY2VTY2FsZUZhY3RvciIgYW5kIHRoZSBsYXR0
ZXIgInBhZ2VTY2FsZUZhY3RvciIsIGFuZCBtYWtlcyB0aGUKLSAgICAgICAgY29kZSB1c2UgdGhv
c2UgbmFtZXMuIEl0IHNob3VsZCBpbnRyb2R1Y2Ugbm8gYmVoYXZpb3IgY2hhbmdlcy4KLQotICAg
ICAgICBGaXhlcyA8aHR0cDovL3dlYmtpdC5vcmcvYi81NTc4Nz4gV2ViS2l0IHVzZXMgbXVsdGlw
bGUgY29uZmxpY3RpbmcgbmFtZXMgdG8gcmVmZXIgdG8gdGhlCi0gICAgICAgIGRldmljZSBzY2Fs
ZSBmYWN0b3IKLQotICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wOC0wMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KLQotICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1v
dmUgTm9kZSBwYXJhbWV0ZXIgZnJvbSB0aGUgSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQKLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTQ5Ci0KLSAg
ICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yQ2xpZW50V2luQ0U6OmhpZ2hsaWdodCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNy0yNiAgU2FkcnVsIEhhYmliIENob3dkaHVy
eSAgPHNhZHJ1bEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGRvd25s
b2FkPSdmaWxlbmFtZScgYXR0cmlidXRlIGluIGFuY2hvcnMuCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDU4MAotCi0gICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c3Rh
cnREb3dubG9hZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5oOgotCi0yMDExLTA3LTE1ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+Ci0K
LSAgICAgICAgUkVHUkVTU0lPTjogTW91c2UgY3Vyc29yIGRvZXNu4oCZdCBoaWRlIHdoZW4gZnVs
bCBzY3JlZW4gdmlkZW8gSFVEIGhpZGVzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDYxNQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyk6IEFkZGVkIHRoaXMgc3R1Yi4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA3LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2Vw
ZWNrQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgQXBwbGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxk
IG5vdCBpbW1lZGlhdGVseSBmYWlsIHdoZW4gcmVhY2hpbmcgcGVyLW9yaWdpbiBxdW90YQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxNzcKLQotICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNi0zMCAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBnb29nbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtl
bnQgVGFtdXJhLgotCi0gICAgICAgIENoYW5nZSB0aGUgbGFiZWwgb2YgYW4gSFRNTDUgZmlsZSBj
aG9vc2VyIGJ1dHRvbiB0byAiQ2hvb3NlIEZpbGVzIgotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkyNDUKLQotICAgICAgICBXZSBzaG91bGQgbm90aWZ5
IGNhcGFiaWxpdHkgb2YgbXVsdGlwbGUgZmlsZXMgdG8gdXNlcnMuCi0KLSAgICAgICAgVGVzdDog
ZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWxhYmVsLmh0bWwKLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKTogVXBkYXRlZCB0aGUgZGVzY3Jp
cHRpb24gZm9yICJDaG9vc2UgRmlsZSIuCi0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6ZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlRmlsZXNMYWJlbCk6IFJldHVybnMgYSAiQ2hvb3Nl
IEZpbGVzIiBsYWJlbC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5oOgotCi0yMDExLTA2LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByODkyOTMuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTEtMDYt
MTggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBTZXBhcmF0ZSBjb25jZXJucyBvZiBs
b2FkaW5nIGZpbGUgaWNvbnMgYW5kIGNob29zaW5nIGZpbGVzLgotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5MzEKLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50V2luQ0U6OmxvYWRJY29uRm9yRmlsZXMpOiBSZW5hbWVkLgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDYtMTIgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgotCi0gICAgICAgIFJlbmFtZSBGcmFtZUxvYWRlckNsaWVudDo6aW50ZXJydXB0Rm9yUG9s
aWN5Q2hhbmdlRXJyb3IgdG8gdXNlIHRoZSBwYXN0IHRlbnNlCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUxNgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0w
NS0xMyAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gRnJhc2VyLgotCi0gICAgICAgIENhbid0IGhvcml6b250YWxseSBzY3JvbGwgaWZyYW1l
cyBhbmQgb3ZlcmZsb3cgYmVjYXVzZSB3aGVlbCBldmVudHMgYXJlIGFsd2F5cyBhY2NlcHRlZAot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3NzkKLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24pOiBE
ZWZhdWx0IGltcGwgb2YgbmV3IENocm9tZUNsaWVudCBtZXRob2QKLSAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50V2luQ0U6Om51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQpOiBEZWZhdWx0
IGltcGwgb2YgbmV3IENocm9tZUNsaWVudCBtZXRob2QKLQotMjAxMS0wNS0wNSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KLQotICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlv
bgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQK
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50
KToKLQotMjAxMS0wNS0wNCAgQ3JpcyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgRXhwb3NlIFdlYlZpZXcgZGly
ZWN0bHkgdGhyb3VnaCBDaHJvbWVDbGllbnQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTkwMgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6Ondl
YlZpZXcpOgotCi0yMDExLTA1LTA0ICBUYW8gQmFpICA8bWljaGFlbGJhaUBjaHJvbWl1bS5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgotCi0gICAgICAgIFBvcHVsYXRl
IHRvdWNoLWljb24gdXJsIHRvIEZyYW1lTG9hZGVyQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTE0MwotCi0gICAgICAgIFJlc3BlY3QgdGhl
IGludGVyZmFjZSBjaGFuZ2UgaW4gRnJhbWVMb2FkZXJDbGllbnQuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDaGFuZ2VJY29ucyk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA1LTAx
ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFtXSU5d
IFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjg1NDM0LgotCi0gICAgICAgICogV2ViVmlldy5j
cHA6Ci0gICAgICAgIChXZWJWaWV3OjpwYWludCk6Ci0KLTIwMTEtMDQtMjEgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHI4
NDU3NC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlDdXQpOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6Y2FuUGFzdGUpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDQtMTkgIFZzZXZvbG9kIFZs
YXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwg
RmVsZG1hbi4KLQotICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW5hbWUgbGVuZ3RoUmVjZWl2ZWQg
dG8gZW5jb2RlZERhdGFMZW5ndGgvZGF0YUxlbmd0aAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4ODMKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wNC0wNCAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2Eu
Ci0KLSAgICAgICAgW1JlZmFjdG9yaW5nXSBTcGVsbENoZWNraW5nUmVzdWx0IHNob3VsZCBiZSBy
ZXBsYWNlZCB3aXRoIFRleHRDaGVja2luZ1Jlc3VsdAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYwODUKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6Ci0KLTIwMTEtMDQtMDQgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVp
bi4KLQotICAgICAgICBSRUdSRVNTSU9OIChXZWJLaXQyKTogQ2Fwcy1Mb2NrIGluZGljYXRvciBz
b21ldGltZXMgZG9lc24ndCBhcHBlYXIgaW4gV2ViS2l0MgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyMzAKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzg3ODA5ODk+Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDogKFdlYlZpZXc6OmhhbmRsZUtleURv
d24pOiBNb3ZlZCBDYXBzIExvY2sgaGFuZGxpbmcgZnJvbSBXZWJLaXRzIHRvIFdlYkNvcmUsCi0g
ICAgICAgIGJlY2F1c2UgV2ViS2l0IHNob3VsZG4ndCBiZSBzbWFydC4KLQotMjAxMS0wMy0zMSAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmll
d2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3IgcjgyNTgwLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOiBTdHJpbmdXaXRoRGlyZWN0aW9uIGlzIGluIFdl
YkNvcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFuZCBub3QgaW4gV1RGIG5hbWVzcGFjZS4KLQotMjAxMS0wMy0zMSAgRXZhbiBNYXJ0aW4gIDxl
dmFuQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQot
ICAgICAgICA8dGl0bGU+IHNob3VsZCBzdXBwb3J0IGRpciBhdHRyaWJ1dGUKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTYxCi0KLSAgICAgICAgVXBk
YXRlIHRvIG5ldyBGcmFtZUxvYWRlckNsaWVudCBpbnRlcmZhY2UuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgotICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRUaXRsZSk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTAzLTI3ICBQ
YXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgW1dJTkNFXSBVc2UgYSBhcHByb3ByaWF0ZSB1
c2VyIGFnZW50IHN0cmluZwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTcxNzUKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp1
c2VyQWdlbnQpOgotCi0yMDExLTAzLTI2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJr
aXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4LgotCi0gICAgICAg
ICogQ01ha2VMaXN0c1dpbkNFLnR4dDogQWRkZWQgbWlzc2luZyBpbmNsdWRlIGRpcmVjdG9yeS4K
LQotMjAxMS0wMy0yNSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCi0KLSAgICAgICAgUkVHUkVTU0lPTiAocjcwNzQ4
KTogbGF0ZXN0IG5pZ2h0bHkgYnVpbGRzIGtpbGxzIEFDX1F1aWNrVGltZS5qcwotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkwMTYKLQotICAgICAgICBV
cGRhdGUgb2JqZWN0Q29udGVudFR5cGUoKSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgdGhlCi0g
ICAgICAgIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMgZmxhZy4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvYmplY3RDb250ZW50VHlwZSk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTAzLTI0ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByODE5MTYgYW5kIHI4MTkxNy4KLSAgICAgICAgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvODE5MTYKLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvODE5MTcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU3MDcxCi0KLSAgICAgICAgYnJva2UgYSB0ZXN0IG9uIHBsYXRmb3JtcyB0
aGF0IGRvIG5vdCBoYXZlIFF1aWNrVGltZSBpbnN0YWxsZWQKLSAgICAgICAgKFJlcXVlc3RlZCBi
eSBlc3RlcyBvbiAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpvYmplY3RDb250ZW50VHlwZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTAzLTI0ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFw
cGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBS
RUdSRVNTSU9OIChyNzA3NDgpOiBsYXRlc3QgbmlnaHRseSBidWlsZHMga2lsbHMgQUNfUXVpY2tU
aW1lLmpzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
OTAxNgotCi0gICAgICAgIFVwZGF0ZSBvYmplY3RDb250ZW50VHlwZSgpIGltcGxlbWVudGF0aW9u
IHRvIGhhbmRsZSB0aGUKLSAgICAgICAgc2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcyBmbGFn
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om9iamVjdENvbnRlbnRU
eXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
Ci0KLTIwMTEtMDMtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgUmVwbGFjZSBXZWJLaXQyJ3Mg
ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUgd2l0aCBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4MjcKLQotICAg
ICAgICBSZW5hbWVkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1J
TUVUeXBlIHRvIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UKLSAgICAgICAgYW5kIHBh
c3MgdGhlIGVudGlyZSByZXNwb25zZSwgaW5zdGVhZCBvZiBqdXN0IHRoZSBNSU1FVHlwZS4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvclJlc3BvbnNlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMDMtMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+Ci0KLSAgICAgICAgUmVtb3ZpbmcgYW4gaW5jbHVkZSBvZiBXZWJDb3JlS2V5Ym9hcmRVSU1v
ZGUuaCB0aGF0IEl2ZSBqdXN0IGFkZGVkLiBJdCdzIGFscmVhZHkgaW5jbHVkZWQKLSAgICAgICAg
dmlhIENocm9tZUNsaWVudC5oCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotCi0yMDExLTAzLTAyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJFR1JF
U1NJT04gKFdlYktpdDIpOiBUYWIga2V5cyBubyBsb25nZXIgb2JzZXJ2ZSBGdWxsIEtleWJvYXJk
IEFjY2VzcwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTU2MzMKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5NjMwMjM+Ci0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6IChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjprZXlib2FyZFVJTW9kZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLSAgICAgICAgSW1wbGVtZW50IGtleWJvYXJkVUlNb2RlKCkgaW5zdGVhZCBv
ZiB0YWJzVG9MaW5rcygpLiBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eSwgc2luY2UKLSAgICAg
ICAgdGhpcyBwbGF0Zm9ybSBkb2Vzbid0IG9ic2VydmUgb3IgaGF2ZSBmdWxsIGtleWJvYXJkIGFj
Y2VzcyBzdGF0ZS4KLQotMjAxMS0wMy0wMiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+Ci0KLSAgICAgICAgV2luQ0UgYnVpbGQgZml4LgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDogQWRkIGEgbmVlZGVkIGluY2x1ZGUu
Ci0KLTIwMTEtMDMtMDIgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgot
Ci0gICAgICAgIFdpbkNFIGJ1aWxkIGZpeC4gSGF2ZSBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSBp
bmhlcml0IGZyb20gQ29va2llc1N0cmF0ZWd5LAotICAgICAgICBhbmQgaW1wbGVtZW50IHRoZSBu
ZWVkZWQgbWV0aG9kcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVD
b29raWVzU3RyYXRlZ3kpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6Om5vdGlm
eUNvb2tpZXNDaGFuZ2VkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5oOgotCi0yMDExLTAyLTI4ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAgICAgIFJlbW92ZSB0
aGUgc3VwcG9ydCBvZiBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUgYW5kIGl0cyBkZXBlbmRlbmNp
ZXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5
MgotCi0gICAgICAgIFJlbW92ZSB0aGUgV2ViS2l0IHNpZGUgaW1wbGVtZW50YXRpb24uCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0xOSAgQ2hhcmxp
ZSBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IE1paGFp
IFBhcnBhcml0YS4KLQotICAgICAgICBFbnN1cmUgbG9hZGluZyBoYXMgc3RvcHBlZCBpbiBIaXN0
b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0NTE3Ci0KLSAgICAgICAgQWRkIGEgRnJhbWVMb2FkZXJDbGllbnQg
Y2FsbGJhY2sgZm9yIHdoZXRoZXIgdG8gc3RvcCBsb2FkaW5nIGJlZm9yZSBnb1RvSXRlbS4KLQot
ICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL25hdmlnYXRpb24vZm9yd2FyZC10by1mcmFnbWVudC1m
aXJlcy1vbmxvYWQuaHRtbAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0pOiBBZGRlZC4KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDItMTAgIEx1aXog
QWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBIVE1MNSA8ZGV0YWlscz4gYW5kIDxzdW1tYXJ5
PjogbG9jYWxpemVkIHRleHQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0MjYwCi0KLSAgICAgICAgVGhlIG1ldGhvZCBkZWZhdWx0RGV0YWlsc1N1bW1h
cnlUZXh0IHdhcyBhZGRlZCB0byBMb2NhbGl6YXRpb25TdHJhdGVneSBjbGFzcy4gSXQgaXMgdXNl
ZCB0bwotICAgICAgICBwcm92aWRlIHRoZSBkZWZhdWx0IGxhYmVsIHRvIGJlIHVzZWQgYnkgYSA8
ZGV0YWlscz4gdGFnIHRoYXQgaGFzIG5vIDxzdW1tYXJ5PiBjaGlsZC4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTAxLTI2
ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBSZWZhY3RvcmluZzogRXh0cmFjdCBUZXh0Q2hl
Y2tlckNsaWVudCBmcm9tIEVkaXRvckNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMTMKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjp0
ZXh0Q2hlY2tlcik6Ci0KLTIwMTEtMDItMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICBBZGQgRWRp
dG9yQ2xpZW50IGNhbGxiYWNrcyB0byBvdmVycmlkZSBpc0RPTVBhc3RlQWxsb3dlZCBhbmQgamF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTI0MTcKLQotICAgICAgICBBZGRlZCB0d28gY2FsbGJhY2sgZnVu
Y3Rpb25zLCBjYW5Db3B5Q3V0IGFuZCBjYW5QYXN0ZSB0byBFZGl0b3JDbGllbnQuIFRoZXkgYXJl
IGN1cnJlbnRseQotICAgICAgICBub3QgaW1wbGVtZW50ZWQuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudFdpbkNFOjpjYW5Db3B5Q3V0KTogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudFdpbkNFOjpjYW5QYXN0ZSk6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDItMTAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNo
cm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAg
IFVwZGF0ZSBjYWxscyB0byBEb2N1bWVudFdyaXRlci4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKToKLQotMjAxMS0wMi0wOCAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgotCi0gICAgICAgIFJlbW92ZSBvcnBoYW4gY29kZSBmcm9tIG9sZCBwYXJzZXIKLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTg0Ci0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0wNyAgRW5yaWNhIENhc3Vj
Y2kgIDxlbnJpY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIEFkYW0gUm9iZW4gYW5k
IERhcmluIEFkbGVyLgotCi0gICAgICAgIFdlYktpdDI6IGRyYWcgYW5kIGRyb3Agc3VwcG9ydCBv
biBXaW5kb3dzLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTI3NzUKLQotICAgICAgICBSZW1vdmVkIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsgZnJvbSBE
cmFnQ2xpZW50LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0w
Mi0wNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCi0KLSAgICAgICAgW1dJTkNFXSBGcmFtZUxvYWRl
ckNsaWVudCBjYWxscyBsb2FkVVJMSW5DaGlsZEZyYW1lIG9uIHRoZSBjaGlsZCdzIGZyYW1lIGxv
YWRlcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM4
OTYKLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6Y3JlYXRlRnJh
bWUpOiBVc2UgY29yZUZyYW1lIGluc3RlYWQgb2YgY2hpbGRGcmFtZS4KLQotMjAxMS0wMi0wMyAg
QWRhbSBMYW5nbGV5ICA8YWdsQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgotCi0gICAgICAgIFBsdW1iIG1peGVkIHNjcmlwdCBVUkwgdG8gRnJhbWVMb2Fk
ZXJDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyMzg0Ci0KLSAgICAgICAgUmVncmVzc2lvbnMgY292ZXJlZCBieSBodHRwL3Rlc3RzL3NlY3Vy
aXR5L21peGVkQ29udGVudC8qCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDItMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXgg
Zm9yIHI3NzM5OC4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotICAgICAgICAoV2ViVmlldzo6
cGFpbnQpOgotCi0yMDExLTAxLTI4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+Ci0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICA8c2VsZWN0PiBjYW4n
dCBkaXNwbGF5IHJpZ2h0LXRvLWxlZnQgKHJ0bCkgbGFuZ3VhZ2VzCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc4NQotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnRXaW5DRTo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlv
bik6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6
Ci0KLTIwMTEtMDEtMjUgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBbV0lOQ0VdIEVuc3Vy
ZSBsYXlvdXRlZCBmcmFtZSB3aGVuIHBhaW50aW5nCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzEwOAotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0g
ICAgICAgIChXZWJWaWV3OjpwYWludCk6Ci0KLTIwMTEtMDEtMDQgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBm
aXguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpleGNlZWRlZERhdGFiYXNlUXVvdGEp
OiBBZGRlZCBtaXNzaW5nIHNlbWljb2xvbi4KLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
V2luQ0U6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTItMjkgIFBhdHJpY2sg
R2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBidWls
ZCBmaXggZm9yIFdpbkNFIGFmdGVyIHI3MzgwMi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVu
dUNsaWVudFdpbkNFOjpjdXN0b21pemVNZW51KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
b250ZXh0TWVudUNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTItMjIgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAg
ICBXZWJLaXQyIG5lZWRzIHRvIG1pcnJvciB0aGUgZnJhbWUgdHJlZSBpbiB0aGUgVUlQcm9jZXNz
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTU0Ngot
Ci0gICAgICAgIC0gQWRkIGNsaWVudCBmdW5jdGlvbnMgdG8gbm90aWZ5IHRoYXQgYSBmcmFtZSBo
YXMgYmVlbiBhZGRlZCBvcgotICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgcGFnZSBjYWNoZS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRTYXZlVG9QYWdlQ2Fj
aGUpOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRSZXN0b3Jl
RnJvbVBhZ2VDYWNoZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXaW5DRS5oOgotCi0yMDEwLTEyLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIEVkaXRvci5o
IGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIFNlbGVjdGlvbkNvbnRyb2xsZXIuaAotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NDEKLQotICAgICAgICBS
ZW5hbWVkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVEaXJlY3Rpb24gdG8gU2VsZWN0aW9uRGlyZWN0
aW9uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJk
RXZlbnQpOgotCi0yMDEwLTEwLTI4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29t
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCi0KLSAgICAgICAgc3BlbGxjaGVj
ayBkb2VzIG5vdCBjaGVjayBwYXN0ZWQgdGV4dAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwOTIKLQotICAgICAgICBBZGRlZCBhIHN0dWIgaW1wbGVt
ZW1udGF0aW9uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
aDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
Zyk6Ci0KLTIwMTAtMTItMDcgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MzM5Mi4KLSAgICAgICAgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNzMzOTIKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5Ci0KLSAgICAgICAgVGhpcyBjb21taXQg
Y2F1c2VkIGNyYXNoZXMgb24gdGhlIEdUSysgYm90cwotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyk6Ci0KLTIwMTAtMTItMDYgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoLgotCi0gICAgICAgIFVwZGF0ZSBjYWxscyB0byBEb2N1bWVudFdyaXRlci4KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5Ci0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKToKLQotMjAxMC0x
Mi0wNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgIFtXSU5DRV0gQWRkIGJ1aWxkIHN5
c3RlbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1
MjIKLQotICAgICAgICAqIENNYWtlTGlzdHNXaW5DRS50eHQ6IEFkZGVkLgotCi0yMDEwLTEyLTAx
ICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgotCi0gICAgICAgIFN1cHBvcnQgbXVsdGlwbGUgY29ycmVjdGlvbiBjYW5kaWRhdGVzIHBh
bmVsIGZvciBtaXNzcGVsbGVkIHdvcmQgb24gTWFjIE9TIFguCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDEzNwotICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODU2ODA1OT4KLQotICAgICAgICBBZG9wdGVkIG5ldyBmdW5jdGlvbiBzaWduYXR1cmUgZGVm
aW5lZCBpbiBiYXNlIGNsYXNzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNF
Lmg6Ci0KLTIwMTAtMTEtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBbV0lOQ0VdIEFk
ZCBXZWJWaWV3Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDIxNgotCi0gICAgICAgICogV2ViVmlldy5jcHA6IEFkZGVkLgotICAgICAgICAqIFdlYlZp
ZXcuaDogQWRkZWQuCi0KLTIwMTAtMTEtMTMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHI3MTU0MS4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTAt
MTEtMDggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ4Njg1Ci0gICAgICAgIE5vdGlmeSBVSSBwcm9jZXNzIGFib3V0IGZv
Y3VzZWQgZnJhbWUKLQotICAgICAgICBBZGRlZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgbmV3IENocm9tZUNsaWVudCBtZXRob2QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5oOgotCi0yMDEwLTExLTAyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBhZnRlciByNzEwNDEu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6c2hvd0NvbnRleHRNZW51KToKLQotMjAxMC0x
MC0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBV
bnJldmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjcwNTc0LgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBhZ2UpOgotCi0y
MDEwLTEwLTI5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODU3NgotICAgICAgICBMZXQgV2ViS2l0MiBjbGllbnQga25v
dyB3aGVuIGEgZnJhbWUgaXMgYSBmcmFtZXNldAotCi0gICAgICAgIEFkZGVkIGEgYmxhbmsgaW1w
bGVtZW50YXRpb24gb2YgdGhlIG5ldyBGcmFtZUxvYWRlckNsaWVudCBtZXRob2QuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQpOgot
Ci0yMDEwLTEwLTI2ICBKZW5uIEJyYWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KLQotICAgICAgICBSZXNvdXJjZSB0cmFj
a2luZyBmYWlsdXJlIHdoZW4gdHJ5aW5nIHRvIG1vdmUgYSBmcmFtZSBiZXR3ZWVuIGRvY3VtZW50
cwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MTMK
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgot
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp0cmFuc2ZlckxvYWRpbmdS
ZXNvdXJjZUZyb21QYWdlKToKLSAgICAgICAgRW1wdHkgbWV0aG9kLgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMC0yNSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBE
YXZpZCBLaWx6ZXIuCi0KLSAgICAgICAgUmVwbGFjZSBfY291bnRvZiB3aXRoIFdURl9BUlJBWV9M
RU5HVEgKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
MjI5Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjppbnRlcnByZXRLZXlFdmVudCk6Ci0K
LTIwMTAtMTAtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgV2ViS2l0MiBuZWVkcyB0byBwYXNz
IHRoZSBjdXJyZW50IGV2ZW50IG1vZGlmaWVyIGZsYWdzIHdoZW4gcmVxdWVzdGluZyBhIG5ldyB3
aW5kb3cKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
MTQwCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpjcmVhdGVXaW5kb3cpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoQ3JlYXRlUGFnZSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICBBZGQgTmF2aWdh
dGlvbkFjdGlvbiBwYXJhbWV0ZXIuCi0KLTIwMTAtMTAtMjIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQot
ICAgICAgICBbV0lOQ0VdIEltcGxlbWVudCBFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZl
bnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MTE4
Ci0KLSAgICAgICAgQ29weSB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgRUZMIHBvcnQuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjppbnRlcnByZXRLZXlFdmVudCk6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVLZXlib2FyZEV2ZW50
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotCi0yMDEw
LTEwLTE1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgotCi0gICAg
ICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KLQotICAgICAgICBSZXBsYWNlIHNvbWUgU3Ry
aW5nOjpmb3JtYXQoKSB1c2FnZXMgYnkgU3RyaW5nQ29uY2F0ZW5hdGUgaW4gV2ViS2l0Ci0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzcxNAotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAg
ICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmltYWdlVGl0bGUpOgotICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6Om11bHRpcGxlRmlsZVVwbG9hZFRleHQpOgotCi0yMDEwLTA5LTI4
ICBKZW5uIEJyYWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmll
d2VkIGJ5IERtaXRyeSBUaXRvdi4KLQotICAgICAgICBBZGRlZCBvbGRQYWdlIHBhcmFtIHRvIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaWRUcmFuc2ZlckNoaWxkRnJhbWVUb05ld0RvY3VtZW50LgotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2NjMKLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRUcmFuc2ZlckNoaWxkRnJhbWVU
b05ld0RvY3VtZW50KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTAtMDktMjMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQg
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ2MzcxCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5jcHA6IENvcGllZCBmcm9tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oLgotCi0yMDEwLTA5LTIzICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
Um9iZW4uCi0KLSAgICAgICAgQWRkIENocm9tZUNsaWVudFdpbkNFCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjI5NAotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOiBBZGRlZC4KLQotMjAxMC0wOS0yMyAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkLgot
Ci0gICAgICAgIEJ1aWxkIGZpeCBmb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5TaG93TUlNRVR5cGVBc0hUTUwpOiBB
ZGQgbWlzc2luZyBtZXRob2QuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5oOgotCi0yMDEwLTA5LTIxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAg
QWRkICJXaW5DRSIgdG8gY2xhc3NuYW1lIGZvciBhbGwgV2ViQ29yZVN1cHBvcnQgY2xhc3NlcyB0
byBtYXRjaCBmaWxlbmFtZS4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ2MTc1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNs
aWVudFdpbkNFLmNwcDogUmVuYW1lIENvbnRleHRNZW51Q2xpZW50IHRvIENvbnRleHRNZW51Q2xp
ZW50V2luQ0UuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5D
RS5oOiBEaXR0by4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3Bw
OiBSZW5hbWUgRHJhZ0NsaWVudCB0byBEcmFnQ2xpZW50V2luQ0UuCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6IERpdHRvLgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDogUmVuYW1lIEVkaXRvckNsaWVudCB0byBFZGl0b3JD
bGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5o
OiBEaXR0by4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5j
cHA6IFJlbmFtZSBJbnNwZWN0b3JDbGllbnQgdG8gSW5zcGVjdG9yQ2xpZW50V2luQ0UuCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDogRGl0dG8uCi0KLTIw
MTAtMDktMjAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDU2ODIKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0Uu
Y3BwOiBBZGRlZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6IEFkZGVkLgotCi0yMDEwLTA5LTE2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBw
YXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAgICAg
W1dJTkNFXSBBZGQgbWlzc2luZyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmJsb2NrZWRF
cnJvcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2
ODAKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6Ymxv
Y2tlZEVycm9yKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250
ZXh0V2luQ0UuaDoKLQotMjAxMC0wOS0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KLQotICAgICAgICBBZGQgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ3NAotCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDogQWRkZWQuCi0g
ICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4
dFdpbkNFOjp1c2VyQWdlbnQpOgotICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250
ZXh0V2luQ0U6OnJlZmVycmVyKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdv
cmtpbmdDb250ZXh0V2luQ0UuaDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRTo6Y3JlYXRlKToKLQotMjAxMC0wOC0zMSAgUGF0cmljayBHYW5zdGVy
ZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KLQotICAgICAgICBBZGQgRWRpdG9yQ2xpZW50V2luQ0UKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0ODIyCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudCk6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudDo6fkVkaXRvckNsaWVudCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6c2hvdWxkRGVsZXRlUmFuZ2UpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNo
b3VsZFNob3dEZWxldGVJbnRlcmZhY2UpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKToKLSAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OnNob3VsZEluc2VydFRleHQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OnNob3VsZEFwcGx5U3R5bGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3Vs
ZE1vdmVSYW5nZUFmdGVyRGVsZXRlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojpk
aWRCZWdpbkVkaXRpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlk
RW5kRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRpZFNl
dFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6aXNFZGl0YWJsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVnaXN0
ZXJDb21tYW5kRm9yVW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVnaXN0
ZXJDb21tYW5kRm9yUmVkbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2xlYXJV
bmRvUmVkb09wZXJhdGlvbnMpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmNhblVu
ZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmNhblJlZG8pOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OnVuZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OnJlZG8pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5v
ZGUpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnBhZ2VEZXN0cm95ZWQpOgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0b2dnbGVDb250aW51b3Vz
U3BlbGxDaGVja2luZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dG9nZ2xlR3Jh
bW1hckNoZWNraW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5kbGVLZXli
b2FyZEV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1l
dGhvZEtleWRvd24pOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dEZpZWxk
RGlkRW5kRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEZpZWxkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojpkb1RleHRG
aWVsZENvbW1hbmRGcm9tRXZlbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50OjpsZWFybldvcmQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Z2V0QXV0
b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQp
OgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3dTcGVsbGluZ1VJKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKToKLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6Ci0gICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA4LTMxICBQ
YXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBEcmFnQ2xpZW50
V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
ODIxCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwOiBBZGRl
ZC4KLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9y
RHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNr
Rm9yUG9pbnQpOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpzdGFydERyYWcpOgotICAg
ICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKToKLSAgICAg
ICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOiBBZGRlZC4KLQotMjAxMC0wOC0z
MSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KLQotICAgICAgICBBZGQgQ29udGV4
dE1lbnVDbGllbnRXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQ4MjAKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xp
ZW50V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6
OkNvbnRleHRNZW51Q2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6
OmNvbnRleHRNZW51RGVzdHJveWVkKToKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGll
bnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKLSAgICAgICAgKFdlYktpdDo6Q29u
dGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKLSAgICAgICAgKFdlYktp
dDo6Q29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKToKLSAgICAgICAgKFdlYktpdDo6Q29u
dGV4dE1lbnVDbGllbnQ6OmNvcHlJbWFnZVRvQ2xpcGJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6
Q29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb29nbGUpOgotICAgICAgICAoV2ViS2l0OjpD
b250ZXh0TWVudUNsaWVudDo6bG9va1VwSW5EaWN0aW9uYXJ5KToKLSAgICAgICAgKFdlYktpdDo6
Q29udGV4dE1lbnVDbGllbnQ6OnNwZWFrKToKLSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVD
bGllbnQ6OnN0b3BTcGVha2luZyk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50
Ojppc1NwZWFraW5nKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA4LTI4ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCi0KLSAgICAg
ICAgQWRkIEluc3BlY3RvckNsaWVudFdpbkNFCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NDgxOQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9y
Q2xpZW50OjpJbnNwZWN0b3JDbGllbnQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGll
bnQ6On5JbnNwZWN0b3JDbGllbnQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RvckRlc3Ryb3llZCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6
b3Blbkluc3BlY3RvckZyb250ZW5kKToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50
OjpyZWxlYXNlRnJvbnRlbmRQYWdlKToKLSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50
OjpoaWdobGlnaHQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdo
bGlnaHQpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGlu
Zyk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKToKLSAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6IEFkZGVkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxYjFmNy4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIkZp
bGVDaG9vc2VyLmgiCi0jaW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIKLSNpbmNsdWRlICJJY29u
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJOYXZpZ2F0aW9uQWN0
aW9uLmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51V2luLmgiCi0jaW5jbHVkZSAiU2VhcmNoUG9wdXBN
ZW51V2luLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1DaHJvbWVDbGllbnRXaW5DRTo6Q2hyb21lQ2xpZW50V2luQ0UoV2ViVmlldyogd2ViVmlldykK
LSAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotewotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotfQot
Ci12b2lkIENocm9tZUNsaWVudFdpbkNFOjpjaHJvbWVEZXN0cm95ZWQoKQotewotICAgIGRlbGV0
ZSB0aGlzOwotfQotCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OndpbmRvd1JlY3QoKQot
ewotICAgIGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICBSRUNUIHJlY3Q7Ci0gICAgbV93ZWJWaWV3LT5mcmFtZVJlY3QoJnJlY3QpOwotICAgIHJldHVy
biByZWN0OwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRXaW5kb3dSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRmxvYXRSZWN0IENo
cm9tZUNsaWVudFdpbkNFOjpwYWdlUmVjdCgpCi17Ci0gICAgcmV0dXJuIHdpbmRvd1JlY3QoKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6Zm9jdXMoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnVuZm9jdXMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhZ2UqIENocm9tZUNsaWVudFdpbkNFOjpjcmVhdGVXaW5k
b3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMm
LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzaG93KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpjYW5SdW5Nb2Rh
bCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bk1vZGFsKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjp0
b29sYmFyc1Zpc2libGUoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVD
bGllbnRXaW5DRTo6c2V0U3RhdHVzYmFyVmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnN0YXR1c2JhclZpc2libGUoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENo
cm9tZUNsaWVudFdpbkNFOjpzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNjcm9sbGJhcnNWaXNp
YmxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0TWVudWJhclZpc2libGUoYm9vbCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjptZW51YmFyVmlz
aWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFJlc2l6YWJsZShib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmNsb3NlV2luZG93U29v
bigpCi17Ci0gICAgUG9zdE1lc3NhZ2VXKG1fd2ViVmlldy0+d2luZG93SGFuZGxlKCksIFdNX0NM
T1NFLCAwLCAwKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6Y2FuVGFrZUZvY3VzKEZv
Y3VzRGlyZWN0aW9uKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENocm9tZUNsaWVu
dFdpbkNFOjp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCi17Ci0gICAgdW5mb2N1cygpOwotfQot
Ci12b2lkIENocm9tZUNsaWVudFdpbkNFOjpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6
Zm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSopCi17Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2lu
Q0U6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gcnVu
SmF2YVNjcmlwdENvbmZpcm0oZnJhbWUsIG1lc3NhZ2UpOwotfQotCi12b2lkIENocm9tZUNsaWVu
dFdpbkNFOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bkphdmFT
Y3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3dlYlZp
ZXctPnJ1bkphdmFTY3JpcHRBbGVydChtZXNzYWdlKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRX
aW5DRTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+cnVuSmF2YVNjcmlwdENvbmZpcm0obWVzc2FnZSk7
Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUq
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJp
bmcmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3LT5ydW5KYXZhU2NyaXB0UHJvbXB0
KG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRX
aW5DRTo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNob3VsZEludGVycnVwdEphdmFT
Y3JpcHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1LZXlib2FyZFVJTW9kZSBDaHJvbWVDbGllbnRXaW5DRTo6a2V5Ym9hcmRVSU1vZGUoKQotewot
ICAgIHJldHVybiBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzOwotfQotCi1JbnRSZWN0IENocm9t
ZUNsaWVudFdpbkNFOjp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gSW50UmVjdCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdp
bkNFOjppbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRz
QW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKLXsKLSAgICBSRUNUIHJlY3Qg
PSB1cGRhdGVSZWN0OwotICAgIEludmFsaWRhdGVSZWN0KG1fd2ViVmlldy0+d2luZG93SGFuZGxl
KCksICZyZWN0LCBGQUxTRSk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmludmFsaWRh
dGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKLXsKLSAg
ICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRhdGVSZWN0KTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiBy
ZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmKQotewotICAgIGludmFsaWRhdGVDb250ZW50c0Fu
ZFJvb3RWaWV3KHJlY3RUb1Njcm9sbCk7Ci19Ci0KLUludFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6
OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBDaHJvbWVDbGll
bnRXaW5DRTo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLVBsYXRmb3Jt
UGFnZUNsaWVudCBDaHJvbWVDbGllbnRXaW5DRTo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIENocm9t
ZUNsaWVudFdpbkNFOjpjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRX
aW5DRTo6c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRUb29sVGlwKGNvbnN0IFN0cmlu
ZyYsIFRleHREaXJlY3Rpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBD
aHJvbWVDbGllbnRXaW5DRTo6cHJpbnQoRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6
ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgRGF0YWJhc2VEZXRh
aWxzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDaHJvbWVD
bGllbnRXaW5DRTo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90KQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJlYWNoZWRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qLCBpbnQ2NF90KQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjphdHRhY2hSb290R3Jh
cGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpydW5PcGVuUGFu
ZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxlQ2hvb3NlcikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpsb2FkSWNv
bkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIEZpbGVJY29uTG9hZGVy
KiBsb2FkZXIpCi17Ci0gICAgbG9hZGVyLT5ub3RpZnlGaW5pc2hlZChJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMoZmlsZW5hbWVzKSk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50V2luQ0U6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNl
dExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OkFYU3RhcnRGcmFtZUxvYWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OkFYRmluaXNo
RnJhbWVMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNs
aWVudFdpbkNFOjpzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpzZWxlY3RJdGVtQWxp
Z25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6Omhhc09wZW5lZFBvcHVwKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUGFzc1JlZlB0
cjxQb3B1cE1lbnU+IENocm9tZUNsaWVudFdpbkNFOjpjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51
Q2xpZW50KiBjbGllbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3B1cE1l
bnVXaW4oY2xpZW50KSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBDaHJvbWVD
bGllbnRXaW5DRTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50
KSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VhcmNoUG9wdXBNZW51V2luKGNs
aWVudCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmM1NjhhNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaHJvbWVDbGllbnRXaW5DRV9oCi0jZGVmaW5l
IENocm9tZUNsaWVudFdpbkNFX2gKLQotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotCi1jbGFz
cyBXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ2hyb21lQ2xpZW50V2lu
Q0UgOiBwdWJsaWMgV2ViQ29yZTo6Q2hyb21lQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBDaHJvbWVD
bGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVE
ZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IHdpbmRvd1JlY3QoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IHBhZ2VSZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXMo
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCBib29sIGNhblRha2VGb2N1cyhXZWJDb3JlOjpGb2N1c0RpcmVjdGlvbikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhXZWJDb3JlOjpGb2N1c0RpcmVjdGlvbikg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZEVsZW1lbnRDaGFuZ2VkKFdlYkNv
cmU6OkVsZW1lbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZEZyYW1lQ2hh
bmdlZChXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotCi0gICAgLy8gVGhlIEZyYW1lIHBvaW50
ZXIgcHJvdmlkZXMgdGhlIENocm9tZUNsaWVudCB3aXRoIGNvbnRleHQgYWJvdXQgd2hpY2gKLSAg
ICAvLyBGcmFtZSB3YW50cyB0byBjcmVhdGUgdGhlIG5ldyBQYWdlLiAgQWxzbywgdGhlIG5ld2x5
IGNyZWF0ZWQgd2luZG93Ci0gICAgLy8gc2hvdWxkIG5vdCBiZSBzaG93biB0byB0aGUgdXNlciB1
bnRpbCB0aGUgQ2hyb21lQ2xpZW50IG9mIHRoZSBuZXdseQotICAgIC8vIGNyZWF0ZWQgUGFnZSBo
YXMgaXRzIHNob3cgbWV0aG9kIGNhbGxlZC4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNy
ZWF0ZVdpbmRvdyhXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IFdlYkNvcmU6Ok5hdmln
YXRpb25BY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvdygpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHJ1bk1vZGFsKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJh
cnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCB0b29sYmFyc1Zpc2li
bGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJv
b2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIG1lbnViYXJWaXNpYmxlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoSlNDOjpNZXNzYWdlU291cmNlLCBKU0M6Ok1lc3NhZ2VMZXZlbCwgY29uc3Qg
V1RGOjpTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUlEKSBvdmVycmlkZTsKLQotICAgIHZp
cnR1YWwgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFdURjo6U3Ry
aW5nJiBtZXNzYWdlLCBXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93U29vbigpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJ1bkph
dmFTY3JpcHRBbGVydChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2
YVNjcmlwdFByb21wdChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXVEY6OlN0cmluZyYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBXVEY6OlN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2Ny
aXB0KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSBrZXli
b2FyZFVJTW9kZSgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdp
bmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXRob2RzIHVzZWQg
YnkgSG9zdFdpbmRvdy4KLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Ny
ZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNs
aWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29udGVudHNTaXplQ2hhbmdlZChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVE
aWRDaGFuZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNv
bnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgLy8gRW5kIG1ldGhv
ZHMgdXNlZCBieSBIb3N0V2luZG93LgotCi0gICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmll
ckZsYWdzKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdU
Rjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0gICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJD
b3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJiBkYXRhYmFzZU5hbWUsIFdlYkNvcmU6OkRh
dGFiYXNlRGV0YWlscykgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIC8vIENhbGxiYWNrIGludm9r
ZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gY2FjaGUgZmFpbHMgdG8gc2F2ZSBhIGNhY2hlIG9iamVj
dAotICAgIC8vIGJlY2F1c2Ugc3RvcmluZyBpdCB3b3VsZCBncm93IHRoZSBkYXRhYmFzZSBmaWxl
IHBhc3QgaXRzIGRlZmluZWQgbWF4aW11bQotICAgIC8vIHNpemUgb3IgcGFzdCB0aGUgYW1vdW50
IG9mIGZyZWUgc3BhY2Ugb24gdGhlIGRldmljZS4KLSAgICAvLyBUaGUgY2hyb21lIGNsaWVudCB3
b3VsZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lCi0gICAg
Ly8gb2xkIGNhY2hlcy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShp
bnQ2NF90IHNwYWNlTmVlZGVkKSBvdmVycmlkZTsKLQotICAgIC8vIENhbGxiYWNrIGludm9rZWQg
d2hlbiB0aGUgYXBwbGljYXRpb24gY2FjaGUgb3JpZ2luIHF1b3RhIGlzIHJlYWNoZWQuIFRoaXMK
LSAgICAvLyBtZWFucyB0aGF0IHRoZSByZXNvdXJjZXMgYXR0ZW1wdGluZyB0byBiZSBjYWNoZWQg
dmlhIHRoZSBtYW5pZmVzdCBhcmUKLSAgICAvLyBtb3JlIHRoYW4gYWxsb3dlZCBvbiB0aGlzIG9y
aWdpbi4gVGhpcyBjYWxsYmFjayBhbGxvd3MgdGhlIGNocm9tZSBjbGllbnQKLSAgICAvLyB0byB0
YWtlIGFjdGlvbiwgc3VjaCBhcyBwcm9tcHRpbmcgdGhlIHVzZXIgdG8gYXNrIHRvIGluY3JlYXNl
IHRoZSBxdW90YQotICAgIC8vIGZvciB0aGlzIG9yaWdpbi4KLSAgICB2aXJ0dWFsIHZvaWQgcmVh
Y2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbios
IGludDY0X3QgdG90YWxTcGFjZU5lZWRlZCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hv
b3Nlcj4pIG92ZXJyaWRlOwotICAgIC8vIEFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIGxvYWQgYW4g
aWNvbiBmb3Igc3BlY2lmaWVkIGZpbGVuYW1lcy4KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUljb25Mb2Fk
ZXIqKSBvdmVycmlkZTsKLQotICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBk
ZXRhdGNoIHRoZSByb290IGxheWVyLgotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlk
ZTsKLSAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIG5leHQgdGltZSBjb250
ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCi0gICAgLy8gdGhlIGNoYW5nZXMgYXBwZWFyIG9u
IHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0byBHcmFwaGljc0xheWVycy4K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
IG92ZXJyaWRlOwotICAgIC8vIFNldHMgYSBmbGFnIHRvIHNwZWNpZnkgdGhhdCB0aGUgdmlldyBu
ZWVkcyB0byBiZSB1cGRhdGVkLCBzbyB3ZSBuZWVkCi0gICAgLy8gdG8gZG8gYW4gZWFnZXIgbGF5
b3V0IGJlZm9yZSB0aGUgZHJhd2luZy4KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0
Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIEFYU3Rh
cnRGcmFtZUxvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgQVhGaW5pc2hGcmFtZUxv
YWQoKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCB2
b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdmlydHVh
bCBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJl
Y3Rpb24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UG9wdXBNZW51PiBj
cmVhdGVQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gY3JlYXRl
U2VhcmNoUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWdu
ZWQpIG92ZXJyaWRlIHsgfQotCi1wcml2YXRlOgotICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gQ2hyb21lQ2xpZW50V2luQ0Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRmY2U3ZjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBw
YXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudFdp
bkNFLmgiCi0KLSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6Q29udGV4dE1lbnVDbGllbnRXaW5DRShXZWJWaWV3
ICp3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCi17Ci19Ci0KLXZvaWQgQ29udGV4
dE1lbnVDbGllbnRXaW5DRTo6Y29udGV4dE1lbnVEZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0
aGlzOwotfQotCi1QYXNzT3duUHRyPENvbnRleHRNZW51PiBDb250ZXh0TWVudUNsaWVudFdpbkNF
OjpjdXN0b21pemVNZW51KFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IG1lbnUpCi17Ci0gICAgcmV0
dXJuIG1lbnU7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6Y29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6ZG93
bmxvYWRVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1l
KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50
V2luQ0U6Omxvb2tVcEluRGljdGlvbmFyeShGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpzcGVhayhjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRX
aW5DRTo6c3RvcFNwZWFraW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29s
IENvbnRleHRNZW51Q2xpZW50V2luQ0U6OmlzU3BlYWtpbmcoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNTU1ZTYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0
TWVudUNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIENvbnRleHRNZW51Q2xpZW50V2luQ0VfaAotI2RlZmluZSBDb250ZXh0TWVudUNsaWVudFdp
bkNFX2gKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCi0KLWNsYXNzIFdlYlZpZXc7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDb250ZXh0TWVudUNsaWVudFdpbkNFIDog
cHVibGljIFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBDb250ZXh0
TWVudUNsaWVudFdpbkNFKFdlYlZpZXcqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVu
dURlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkNvbnRleHRNZW51PiBjdXN0b21pemVNZW51KFBhc3NPd25QdHI8V2ViQ29yZTo6Q29udGV4dE1l
bnU+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKiwgY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnUqKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFVSTChjb25zdCBXZWJDb3JlOjpV
UkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoV2l0aEdvb2dsZShjb25zdCBX
ZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb29rVXBJbkRpY3Rp
b25hcnkoV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3BlYWso
Y29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFr
aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzU3BlYWtpbmcoKSBvdmVycmlkZTsK
LQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIENvbnRleHRNZW51Q2xpZW50V2luQ0VfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3Bw
IGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjQzOTE4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEcmFnQ2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBE
cmFnQ2xpZW50V2luQ0U6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0
aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRHJhZ0NsaWVudFdpbkNFOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1Nv
dXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLURyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50V2luQ0U6OmFj
dGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7Ci19Ci0KLURyYWdTb3VyY2VBY3Rpb24g
RHJhZ0NsaWVudFdpbkNFOjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBv
aW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBEcmFnU291cmNlQWN0
aW9uQW55OwotfQotCi12b2lkIERyYWdDbGllbnRXaW5DRTo6c3RhcnREcmFnKERyYWdJbWFnZVJl
ZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYsIEZyYW1lJiwg
Ym9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERyYWdDbGllbnRXaW5D
RTo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2Vi
Q29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4YmExYzQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIERyYWdDbGllbnRXaW5DRV9oCi0jZGVmaW5lIERyYWdDbGllbnRXaW5DRV9oCi0KLSNp
bmNsdWRlICJEcmFnQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEcmFn
Q2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6RHJhZ0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRy
YWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3Vy
Y2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0
aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYsIFdlYkNvcmU6
OkZyYW1lJiwgYm9vbCA9IGZhbHNlKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmFn
Q29udHJvbGxlckRlc3Ryb3llZCgpIG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBEcmFnQ2xpZW50V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViYzgyZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgot
ICogIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9n
aWEKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVt
cwotICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudFdpbkNFLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiVW5kb1N0ZXAuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotRWRpdG9yQ2xpZW50V2lu
Q0U6OkVkaXRvckNsaWVudFdpbkNFKFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgOiBtX3dlYlZpZXco
d2ViVmlldykKLXsKLX0KLQotRWRpdG9yQ2xpZW50V2luQ0U6On5FZGl0b3JDbGllbnRXaW5DRSgp
Ci17Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnNldElucHV0TWV0aG9kU3RhdGUoYm9v
bCBhY3RpdmUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGll
bnRXaW5DRTo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6aXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotaW50IEVkaXRvckNsaWVudFdpbkNFOjpzcGVsbENoZWNrZXJEb2N1bWVudFRh
ZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBF
ZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRv
ckNsaWVudFdpbkNFOjpzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNsaWVu
dFdpbkNFOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5z
ZXJ0QWN0aW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFu
Z2UqLCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRBcHBs
eVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQqLCBXZWJDb3JlOjpSYW5nZSopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JD
bGllbnRXaW5DRTo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBX
ZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6ZGlkQmVnaW5FZGl0aW5nKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpyZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RWRpdG9yQ2xpZW50V2luQ0U6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oV2ViQ29yZTo6RnJh
bWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2lu
Q0U6OmRpZEVuZEVkaXRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RWRpdG9yQ2xpZW50V2luQ0U6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiA+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpyZWdpc3RlclVuZG9TdGVwKFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVnaXN0ZXJSZWRvU3RlcChXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6VW5kb1N0ZXA+KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRWRpdG9yQ2xpZW50V2luQ0U6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5Db3B5Q3V0
KFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGRlZmF1bHRWYWx1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6Y2FuUGFzdGUoV2Vi
Q29yZTo6RnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZGVm
YXVsdFZhbHVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5VbmRvKCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBF
ZGl0b3JDbGllbnRXaW5DRTo6Y2FuUmVkbygpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnVuZG8o
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6
OnJlZG8oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50
V2luQ0U6OnNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9u
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
RWRpdG9yQ2xpZW50V2luQ0U6OnBhZ2VEZXN0cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwot
fQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQot
ewotICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXctPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5zbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6aXNTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV93ZWJW
aWV3LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHBhZ2UtPnNldHRpbmdzKCkuc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgp
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVj
a2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRX
aW5DRTo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBBbHRLZXkgPSAxIDw8IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgU2hpZnRL
ZXkgPSAxIDw8IDI7Ci0KLXN0cnVjdCBLZXlEb3duRW50cnkgewotICAgIHVuc2lnbmVkIHZpcnR1
YWxLZXk7Ci0gICAgdW5zaWduZWQgbW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19
OwotCi1zdHJ1Y3QgS2V5UHJlc3NFbnRyeSB7Ci0gICAgdW5zaWduZWQgY2hhckNvZGU7Ci0gICAg
dW5zaWduZWQgbW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19OwotCi1zdGF0aWMg
Y29uc3QgS2V5RG93bkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7Ci0gICAgeyBWS19MRUZULCAg
IDAsICAgICAgICAgICAgICAgICAgIk1vdmVMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVM
ZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZU
LCAgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVXb3JkTGVmdCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIk1v
dmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19S
SUdIVCwgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgIFNoaWZ0S2V5LCAgICAgICAgICAg
Ik1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBW
S19SSUdIVCwgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVXb3JkUmlnaHQiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgIEN0cmxLZXkgfCBTaGlmdEtl
eSwgIk1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19VUCwgICAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVVcCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19VUCwgICAgIFNoaWZ0S2V5LCAgICAg
ICAgICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19QUklPUiwgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ET1dOLCAgIDAsICAgICAgICAg
ICAgICAgICAgIk1vdmVEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyBWS19ET1dOLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ORVhULCAgIFNoaWZ0S2V5
LCAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19QUklPUiwgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXAiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ORVhULCAgIDAsICAg
ICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19IT01FLCAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lu
bmluZ09mTGluZSIgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19IT01FLCAgIFNo
aWZ0S2V5LCAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlv
biIgICAgIH0sCi0gICAgeyBWS19IT01FLCAgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVUb0Jl
Z2lubmluZ09mRG9jdW1lbnQiICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19IT01FLCAg
IEN0cmxLZXkgfCBTaGlmdEtleSwgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlT
ZWxlY3Rpb24iIH0sCi0KLSAgICB7IFZLX0VORCwgICAgMCwgICAgICAgICAgICAgICAgICAiTW92
ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0VO
RCwgICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgfSwKLSAgICB7IFZLX0VORCwgICAgQ3RybEtleSwgICAgICAgICAgICAi
TW92ZVRvRW5kT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0VORCwgICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlm
eVNlbGVjdGlvbiIgICAgICAgfSwKLQotICAgIHsgVktfQkFDSywgICAwLCAgICAgICAgICAgICAg
ICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfQkFDSywgICBTaGlmdEtleSwgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCAwLCAgICAgICAgICAg
ICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfQkFDSywgICBDdHJsS2V5LCAgICAgICAgICAgICJEZWxldGVXb3JkQmFja3dhcmQi
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCBDdHJsS2V5LCAg
ICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotCi0gICAgeyAnQicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnSScsICAgICAgIEN0cmxL
ZXksICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICB7IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAgICAiQ2FuY2VsIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwgICAg
MCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwgICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0
QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVS
TiwgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQ3RybEtleSwgICAgICAgICAgICAiSW5z
ZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JF
VFVSTiwgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5IHwgU2hpZnRLZXksICAi
SW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgIC8v
IEl0J3Mgbm90IHF1aXRlIGNsZWFyIHdoZXRoZXIgY2xpcGJvYXJkIHNob3J0Y3V0cyBhbmQgVW5k
by9SZWRvIHNob3VsZCBiZSBoYW5kbGVkCi0gICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGlu
IFdlYktpdC4gV2UgY2hvc2UgV2ViS2l0IGZvciBub3cuCi0gICAgeyAnQycsICAgICAgIEN0cmxL
ZXksICAgICAgICAgICAgIkNvcHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyAnVicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlBhc3RlIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnWCcsICAgICAgIEN0
cmxLZXksICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgeyAnQScsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlNlbGVjdEFs
bCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19JTlNFUlQs
IEN0cmxLZXksICAgICAgICAgICAgIkNvcHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIFNoaWZ0S2V5LCAgICAgICAgICAgIkN1dCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19JTlNF
UlQsIFNoaWZ0S2V5LCAgICAgICAgICAgIlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyAnWicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlVu
ZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnWics
ICAgICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIlJlZG8iICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVBy
ZXNzRW50cmllc1tdID0gewotICAgIHsgJ1x0JywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNl
cnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1x0Jywg
ICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRO
ZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBD
dHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgJ1xyJywgICBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXds
aW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBBbHRL
ZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci19OwotCi1jb25zdCBjaGFyKiBFZGl0b3JDbGllbnRXaW5DRTo6aW50ZXJwcmV0S2V5
RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKLQotICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29u
c3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNNYXAgPSAwOwotICAgIHN0YXRpYyBIYXNoTWFwPGlu
dCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsKLQotICAgIGlmICgha2V5
RG93bkNvbW1hbmRzTWFwKSB7Ci0gICAgICAgIGtleURvd25Db21tYW5kc01hcCA9IG5ldyBIYXNo
TWFwPGludCwgY29uc3QgY2hhcio+OwotICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwID0gbmV3
IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGtleURvd25FbnRyaWVzKTsgKytpKQotICAgICAgICAgICAg
a2V5RG93bkNvbW1hbmRzTWFwLT5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2
IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7
Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGtleVBy
ZXNzRW50cmllcyk7ICsraSkKLSAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAtPnNldChr
ZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmNo
YXJDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCi0gICAgICAgIG1vZGlm
aWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQotICAgICAgICBtb2Rp
ZmllcnMgfD0gQWx0S2V5OwotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQotICAgICAgICBtb2Rp
ZmllcnMgfD0gQ3RybEtleTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaW50IG1hcEtleSA9IG1vZGlmaWVycyA8PCAxNiB8
IGV2ZW50LT5rZXlDb2RlKCk7Ci0gICAgICAgIHJldHVybiBtYXBLZXkgPyBrZXlEb3duQ29tbWFu
ZHNNYXAtPmdldChtYXBLZXkpIDogMDsKLSAgICB9Ci0KLSAgICBpbnQgbWFwS2V5ID0gbW9kaWZp
ZXJzIDw8IDE2IHwgZXZlbnQtPmNoYXJDb2RlKCk7Ci0gICAgcmV0dXJuIG1hcEtleSA/IGtleVBy
ZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRX
aW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17
Ci0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Ci0gICAgQVNTRVJU
KG5vZGUpOwotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAg
ICBBU1NFUlQoZnJhbWUpOwotCi0gICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlF
dmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOwotICAgIGlmICgha2V5RXZlbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IGZyYW1lLT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKLSAgICAg
ICAgc3dpdGNoIChrZXlFdmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKLSAgICAgICAg
Y2FzZSBWS19MRUZUOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShrZXlF
dmVudC0+c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLAotICAgICAgICAgICAgICAgICAgICBEaXJlY3Rp
b25MZWZ0LAotICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gV29yZEdy
YW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgIFVz
ZXJUcmlnZ2VyZWQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgVktf
UklHSFQ6Ci0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2ZW50LT5z
aGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlvblJpZ2h0
LAotICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFy
aXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgIFVzZXJUcmln
Z2VyZWQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgVktfVVA6Ci0g
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgp
ID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbkJhY2t3YXJkLAotICAg
ICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJp
dHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgIFVzZXJUcmlnZ2VyZWQp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgVktfRE9XTjoKLSAgICAg
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uTW92ZSwKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uRm9yd2FyZCwKLSAgICAgICAg
ICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDog
TGluZUdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICBVc2VyVHJpZ2dlcmVkKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRWRpdG9yOjpD
b21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCkuY29tbWFuZChpbnRlcnByZXRLZXlFdmVu
dChldmVudCkpOwotCi0gICAgaWYgKGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6
UmF3S2V5RG93bikgewotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZv
cm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgY29tbWFuZHMgdGhhdCBqdXN0IGluc2Vy
dCB0ZXh0IGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3Igc2hvdWxkIGJlIHRyZWF0ZWQsCi0gICAgICAg
IC8vIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZSB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1t
ZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3Mg
ZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBU
YWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAgICAgIHJldHVybiAhY29tbWFuZC5pc1RleHRJ
bnNlcnRpb24oKSAmJiBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOwotICAgIH0KLQotICAgIGlmIChj
b21tYW5kLmV4ZWN1dGUoZXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERv
bid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQg
aW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICBpZiAoZXZlbnQtPmNoYXJDb2RlKCkgPCAnICcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IGluc2VydCBhbnl0aGluZyBp
ZiBhIG1vZGlmaWVyIGlzIHByZXNzZWQKLSAgICBpZiAoa2V5RXZlbnQtPmN0cmxLZXkoKSB8fCBr
ZXlFdmVudC0+YWx0S2V5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBm
cmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dChldmVudC0+a2V5RXZlbnQoKS0+dGV4dCgpLCBldmVu
dCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50
KGV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQg
RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50
KiBldmVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVu
dFdpbkNFOjp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopCi17Ci19Ci0KLXZvaWQg
RWRpdG9yQ2xpZW50V2luQ0U6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopCi17Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVt
ZW50KikKLXsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6ZG9UZXh0RmllbGRDb21tYW5k
RnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50KikKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0Rmll
bGQoRWxlbWVudCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JD
bGllbnRXaW5DRTo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkRXJhc2VN
YXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6aWdub3JlV29yZElu
U3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYg
dGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdp
bkNFOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLVN0cmluZyBFZGl0b3JDbGllbnRXaW5DRTo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dFdvcmQpCi17Ci0gICAgLy8gVGhp
cyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBm
b3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KLSAgICAvLyBDdXJyZW50bHksIGl0IGNvbXB1dGVz
IGFuIGVtcHR5IHN0cmluZy4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50V2luQ0U6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZJZXcsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpzaG93U3BlbGxpbmdVSShib29sKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNwZWxsaW5n
VUlJc1Nob3dpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBT
dHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3NlcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVu
dFdpbkNFOjp3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmggYi9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVkMTg0ZDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRWRpdG9yQ2xpZW50V2luQ0VfaAotI2RlZmluZSBFZGl0
b3JDbGllbnRXaW5DRV9oCi0KLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJU
ZXh0Q2hlY2tlckNsaWVudC5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgRWRpdG9yQ2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6RWRpdG9yQ2xp
ZW50LCBwdWJsaWMgV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnQgewotcHVibGljOgotICAgIEVk
aXRvckNsaWVudFdpbkNFKFdlYlZpZXcqKTsKLSAgICB+RWRpdG9yQ2xpZW50V2luQ0UoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvdmVycmlkZTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSop
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5v
ZGUqLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgV1RGOjpTdHJpbmcm
LCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFu
Z2UqLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCkgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3Bl
cnR5U2V0KiwgV2ViQ29yZTo6UmFuZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSop
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpGcmFt
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5nKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3Jl
OjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRDbGllbnRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+ID4mIHBhc3RlYm9h
cmREYXRhKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclVuZG9TdGVwKFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4p
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNhbkNvcHlDdXQoV2ViQ29yZTo6RnJhbWUqLCBi
b29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNhblBh
c3RlKFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGNhblJlZG8oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCB1bmRvKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlZG8oKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKFdlYkNvcmU6
OktleWJvYXJkRXZlbnQqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGRE
aWRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYkNvcmU6OkVsZW1lbnQqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKFdlYkNvcmU6OkVsZW1l
bnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KFdlYkNvcmU6OkVsZW1lbnQqLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoV2ViQ29yZTo6
RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0
QXJlYShXZWJDb3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dENoZWNraW5n
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxs
RG9jdW1lbnQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
bGVhcm5Xb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqLCBpbnQqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFdURjo6VmVjdG9yPFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWw+JiwgaW50KiwgaW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwgY29uc3Qg
V1RGOjpTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcykg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGUgeyB9Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSBvdmVycmlkZSB7
IHJldHVybiB0aGlzOyB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogaW50ZXJwcmV0S2V5
RXZlbnQoY29uc3QgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwotICAgIGJvb2wgaGFuZGxlRWRp
dGluZ0tleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwotCi0gICAgV2ViVmll
dyogbV93ZWJWaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
ZGl0b3JDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGM2MWRiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBH
YW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHRX
aW5DRS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVu
dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBvbGljeUNoZWNrZXIuaCIKLSNpbmNs
dWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCi0jaW5jbHVkZSAi
V2ViS2l0VmVyc2lvbi5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLUZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OkZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UoV2ViVmlldyogdmlldykKLSAgICA6IG1fd2ViVmlldyh2aWV3KQotICAgICwgbV9w
bHVnaW5WaWV3KDApCi17Ci0gICAgQVNTRVJUKG1fd2ViVmlldyk7Ci19Ci0KLUZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6On5GcmFtZUxvYWRlckNsaWVudFdpbkNFKCkKLXsKLX0KLQotU3RyaW5nIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OnVzZXJBZ2VudChjb25zdCBVUkwmKQotewotICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzZXJBZ2VudFN0cmluZywgKCkpOwot
Ci0gICAgaWYgKHVzZXJBZ2VudFN0cmluZy5pc051bGwoKSkgewotICAgICAgICBTdHJpbmcgd2Vi
S2l0VmVyc2lvbiA9IFN0cmluZzo6Zm9ybWF0KCIlZC4lZCIsIFdFQktJVF9NQUpPUl9WRVJTSU9O
LCBXRUJLSVRfTUlOT1JfVkVSU0lPTik7Ci0gICAgICAgIHVzZXJBZ2VudFN0cmluZyA9IG1ha2VT
dHJpbmcoIk1vemlsbGEvNS4wICgiLCB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCksICIpIEFw
cGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb24sICIgKEtIVE1MLCBsaWtlIEdlY2tvKSBNb2JpbGUg
U2FmYXJpLyIsIHdlYktpdFZlcnNpb24pOwotICAgIH0KLQotICAgIHJldHVybiB1c2VyQWdlbnRT
dHJpbmc7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQotewotICAg
IHJldHVybiBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjb21taXR0ZWRMb2FkKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYg
KG1fcGx1Z2luVmlldykgewotICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4p
IHsKLSAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+
cmVzcG9uc2UoKSk7Ci0gICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEs
IGxlbmd0aCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxvYWRlci0+Y29tbWl0RGF0YShkYXRhLCBs
ZW5ndGgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZywg
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cG9z
dFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNo
YW5nZWROb3RpZmljYXRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24o
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQotewotICAgIG1fd2ViVmlldyA9IDA7Ci0gICAg
bV9mcmFtZSA9IDA7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBtX3Jl
c3BvbnNlID0gcmVzcG9uc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWVQb2xp
Y3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbikKLXsKLSAgICBpZiAoY2FuU2hvd01JTUVUeXBlKHJl
c3BvbnNlLm1pbWVUeXBlKCkpKQotICAgICAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lVc2UpOwot
ICAgIGVsc2UKLSAgICAgICAgcG9saWN5RnVuY3Rpb24oUG9saWN5RG93bmxvYWQpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2lu
ZG93QWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYsIEZyYW1lUG9s
aWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24pCi17Ci0gICAgcG9saWN5RnVuY3Rpb24oUG9saWN5
VXNlKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgRnJhbWVQb2xp
Y3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbikKLXsKLSAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lV
c2UpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFN1Ym1p
dEZvcm0oUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1
bmN0aW9uKQotewotICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjcmVhdGVQbHVnaW4oY29uc3QgSW50
U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCi17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmNyZWF0ZUZyYW1lKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dz
U2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCi17Ci0gICAgcmV0
dXJuIG1fd2ViVmlldy0+Y3JlYXRlRnJhbWUodXJsLCBuYW1lLCBvd25lckVsZW1lbnQsIHJlZmVy
cmVyLCBhbGxvd3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5IZWlnaHQsIG1fZnJhbWUp
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlZGlyZWN0RGF0YVRvUGx1Z2lu
KFdpZGdldCogcGx1Z2luV2lkZ2V0KQotewotICAgIG1fcGx1Z2luVmlldyA9IHRvUGx1Z2luVmll
dyhwbHVnaW5XaWRnZXQpOwotICAgIGlmIChwbHVnaW5XaWRnZXQpCi0gICAgICAgIG1faGFzU2Vu
dFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKLX0KLQotUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYs
IEhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgc2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcykKLXsKLSAgICByZXR1cm4gRnJhbWVMb2Fk
ZXI6OmRlZmF1bHRPYmplY3RDb250ZW50VHlwZSh1cmwsIG1pbWVUeXBlLCBzaG91bGRQcmVmZXJQ
bHVnSW5zRm9ySW1hZ2VzKTsKLX0KLQotU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om92
ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVnaXN0
ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5
KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpoYXNXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZnJhbWVMb2FkQ29tcGxldGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0q
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6cmVzdG9yZVZpZXdTdGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9y
eUl0ZW0qIGl0ZW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRSdW5J
bnNlY3VyZUNvbnRlbnQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBVUkwmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkRGV0ZWN0
WFNTKGNvbnN0IFVSTCYsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjptYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2Fk
ZXIqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6Zm9yY2VMYXlvdXQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNl
dENvcGllc09uU2Nyb2xsKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRldGFjaGVkRnJvbVBhcmVudDIoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGV0YWNoZWRG
cm9tUGFyZW50MygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNw
YXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNw
YXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdChjb25zdCBVUkwmLCBkb3VibGUsIGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2hh
bmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFn
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hE
aWRQb3BTdGF0ZVdpdGhpblBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0
Y2hEaWRSZWNlaXZlSWNvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlzcGF0Y2hEaWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpJY29uVHlwZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
RGlkQ29tbWl0TG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpk
aXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hTaG93KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmNhbmNlbFBvbGljeUNoZWNrKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVu
dExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjp3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkQ2hh
bmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQotewotICAgIHNldFRpdGxl
KGRvY3VtZW50TG9hZGVyLT50aXRsZSgpLCBkb2N1bWVudExvYWRlci0+dXJsKCkpOwotfQotCi1i
b29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhblNob3dN
SU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChNSU1FVHlw
ZVJlZ2lzdHJ5OjpjYW5TaG93TUlNRVR5cGUodHlwZSkKLSAgICAgICAgICAgIHx8IFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKHR5cGUpKTsK
LX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5TaG93TUlNRVR5cGVBc0hUTUwo
Y29uc3QgU3RyaW5nJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZXByZXNlbnRhdGlv
bkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqKQotewotICAgIGlmICghbV9wbHVnaW5WaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKLSAgICBtX3BsdWdpblZpZXcgPSAwOwot
ICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZEZpbmlzaExv
YWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6cHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRUaXRsZShj
b25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVj
ZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcsIGNvbnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9t
TWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50KQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKLXsKLSAgICBkaXNwYXRjaERpZEZhaWxMb2FkKGVycm9yKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291
cmNlRXJyb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjYW5jZWxsZWRFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6YmxvY2tl
ZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsK
LSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQotCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwot
fQotCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbm5vdFNob3dNSU1F
VHlwZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQotewotICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3Ig
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigp
OwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNob3VsZEZhbGxCYWNrKGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIHJldHVybiAhKGVycm9yLmlzQ2FuY2VsbGF0
aW9uKCkpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbkNhY2hlUGFnZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZyYW1lKiBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291
cmNlRXJyb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBpZiAoIW1fcGx1Z2luVmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKLSAgICBtX3Bs
dWdpblZpZXcgPSAwOwotICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzdGFydERvd25sb2FkKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgLyogc3VnZ2VzdGVkTmFtZSAqLykK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0
TGlua3MoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCk7Ci0gICAgQVNTRVJUKHBhZ2UpOwotCi0gICAgYm9vbCBpc01haW5GcmFt
ZSA9IG1fZnJhbWUgPT0gcGFnZS0+bWFpbkZyYW1lKCk7Ci0KLSAgICBtX2ZyYW1lLT5zZXRWaWV3
KDApOwotCi0gICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVWaWV3OwotICAgIGlmIChpc01haW5G
cmFtZSkgewotICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgIG1fd2ViVmlldy0+ZnJhbWVSZWN0
KCZyZWN0KTsKLSAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUoKm1fZnJhbWUs
IEludFJlY3QocmVjdCkuc2l6ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZnJhbWVWaWV3ID0g
RnJhbWVWaWV3OjpjcmVhdGUoKm1fZnJhbWUpOwotCi0gICAgbV9mcmFtZS0+c2V0VmlldyhmcmFt
ZVZpZXcpOwotCi0gICAgaWYgKG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKSkKLSAgICAgICAgbV9m
cmFtZS0+b3duZXJSZW5kZXJlcigpLT5zZXRXaWRnZXQoZnJhbWVWaWV3KTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRTYXZlVG9QYWdlQ2FjaGUoKQotewotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkKLXsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0
KGJvb2wpCi17Ci19Ci0KLVBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4
dD4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKQotewot
ICAgIHJldHVybiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmNyZWF0ZShtX2ZyYW1lLCB1
c2VyQWdlbnQoVVJMKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmExNzM0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYW1l
TG9hZGVyQ2xpZW50V2luQ0VfaAotI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFdpbkNFX2gKLQot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLQotY2xhc3MgV2ViVmlldzsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0UgOiBwdWJsaWMgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnQgewotcHVibGljOgotICAgIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UoV2ViVmlldyopOwotICAgIHZpcnR1YWwgfkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAg
IFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbWFrZVJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lk
IHNldENvcGllc09uU2Nyb2xsKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
ZWRGcm9tUGFyZW50MigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21Q
YXJlbnQzKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRv
SW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVu
dExlbmd0aChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgaW50IGRhdGFMZW5ndGgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBp
ZGVudGlmaWVyKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9h
ZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRS
ZWRpcmVjdCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QoY29uc3QgV2ViQ29yZTo6VVJMJiwgZG91YmxlLCBkb3VibGUpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFn
ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhp
blBhZ2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZXBsYWNlU3Rh
dGVXaXRoaW5QYWdlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUG9w
U3RhdGVXaXRoaW5QYWdlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bENsb3NlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUlj
b24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lv
bmFsTG9hZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVU
aXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMoV2ViQ29yZTo6SWNvblR5cGUpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGYWlsTG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZCgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExheW91dChXZWJDb3JlOjpMYXlvdXRNaWxlc3Rv
bmVzKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RnJhbWUqIGRpc3BhdGNoQ3Jl
YXRlUGFnZShjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoU2hvdygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OkZyYW1l
UG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9u
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkZvcm1TdGF0ZT4sIGNvbnN0IFdURjo6U3RyaW5nJiBmcmFtZU5hbWUsIFdlYkNvcmU6OkZy
YW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFj
dGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpGb3JtU3RhdGU+LCBXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUG9saWN5Q2hlY2soKSBvdmVycmlkZTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFdpbGxTZW5kU3VibWl0RXZlbnQoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4p
IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+LCBXZWJDb3JlOjpGcmFtZVBvbGljeUZ1
bmN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCByZXZlcnRUb1Byb3Zpc2lvbmFs
U3RhdGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY3JlYXRlRnJhbWUo
Y29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhU
TUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlciwgYm9vbCBh
bGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlUGx1Z2lu
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCosIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0
IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlUGx1Z2luKFdlYkNvcmU6OldpZGdldCop
IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXZWJD
b3JlOjpXaWRnZXQqIHBsdWdpbldpZGdldCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBXZWJDb3JlOjpV
UkwmIGJhc2VVUkwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcykgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBXVEY6OlN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChX
ZWJDb3JlOjpET01XcmFwcGVyV29ybGQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IFdlYkNv
cmU6OlVSTCYsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBzaG91bGRQcmVmZXJQ
bHVnSW5zRm9ySW1hZ2VzKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJh
bWVEb2N1bWVudFJlYWR5KGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0
RG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWROYW1lID0gU3RyaW5nKCkpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHdp
bGxDaGFuZ2VUaXRsZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRHb1RvSGlzdG9yeUl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250
ZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudChX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWREZXRlY3RYU1MoY29uc3QgV2ViQ29yZTo6VVJMJiwgYm9vbCBk
aWRCbG9ja0VudGlyZVBhZ2UpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJy
b3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGZp
bGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5k
bGVMb2FkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEZhbGxCYWNrKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgV1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlQXNIVE1MKGNvbnN0IFdURjo6U3Ry
aW5nJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhp
c3RzRm9yVVJMU2NoZW1lKGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBXVEY6OlN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBX
VEY6OlN0cmluZyYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGZyYW1lTG9h
ZENvbXBsZXRlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9J
dGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJl
c3RvcmVWaWV3U3RhdGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1l
bnQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9u
JiwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdURjo6U3Ry
aW5nIHVzZXJBZ2VudChjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFt
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9t
Q2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIGRpZFNhdmVUb1BhZ2VDYWNoZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBzZXRGcmFtZShXZWJDb3JlOjpGcmFtZSAqZnJhbWUpIHsgbV9mcmFt
ZSA9IGZyYW1lOyB9Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lKCkgeyByZXR1cm4gbV9mcmFt
ZTsgfQotCi1wcml2YXRlOgotICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBXZWJDb3JlOjpG
cmFtZSogbV9mcmFtZTsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
Ci0KLSAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCi0gICAgV2ViQ29yZTo6
UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OwotICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYjZjYWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oIgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotRnJhbWVOZXR3b3JraW5nQ29u
dGV4dFdpbkNFOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UoRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCkKLSAgICA6IEZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUp
Ci0gICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQpCi17Ci19Ci0KLVN0cmluZyBGcmFtZU5ldHdv
cmtpbmdDb250ZXh0V2luQ0U6OnVzZXJBZ2VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXNl
ckFnZW50OwotfQotCi1TdHJpbmcgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpyZWZlcnJl
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLnJlZmVycmVyKCk7Ci19
Ci0KLVdlYkNvcmU6OlJlc291cmNlRXJyb3IgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpi
bG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNF
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Nzc1NWIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0
V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhbWVO
ZXR3b3JraW5nQ29udGV4dFdpbkNFX2gKLSNkZWZpbmUgRnJhbWVOZXR3b3JraW5nQ29udGV4dFdp
bkNFX2gKLQotI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRSA6IHB1YmxpYyBX
ZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U+IGNyZWF0ZShXZWJDb3JlOjpGcmFt
ZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiB1c2VyQWdlbnQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRShmcmFtZSwgdXNl
ckFnZW50KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBXVEY6OlN0cmluZyB1c2VyQWdlbnQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIHJlZmVycmVyKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lLCBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50KTsKLQotICAgIFdURjo6U3RyaW5nIG1f
dXNlckFnZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3MGI5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBH
YW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bnNwZWN0b3JDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1JbnNwZWN0
b3JDbGllbnRXaW5DRTo6SW5zcGVjdG9yQ2xpZW50V2luQ0UoV2ViVmlldyogd2ViVmlldykKLSAg
ICA6IG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3KQotewotfQotCi1JbnNwZWN0b3JDbGllbnRX
aW5DRTo6fkluc3BlY3RvckNsaWVudFdpbkNFKCkKLXsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGll
bnRXaW5DRTo6aW5zcGVjdG9yRGVzdHJveWVkKCkKLXsKLSAgICBkZWxldGUgdGhpczsKLX0KLQot
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBJbnNwZWN0b3JDbGllbnRXaW5DRTo6b3Blbkluc3Bl
Y3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRX
aW5DRTo6Y2xvc2VJbnNwZWN0b3JGcm9udGVuZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXaW5DRTo6YnJpbmdGcm9udGVuZFRvRnJvbnQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V2luQ0U6
OmhpZ2hsaWdodCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnRXaW5DRTo6aGlkZUhpZ2hsaWdodCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotYm9vbCBJbnNwZWN0b3JDbGllbnRXaW5DRTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NjQ2ZDYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbnNwZWN0b3JDbGllbnRXaW5D
RV9oCi0jZGVmaW5lIEluc3BlY3RvckNsaWVudFdpbkNFX2gKLQotI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZvcndhcmRpbmcuaCIKLQotY2xhc3MgV2Vi
VmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEluc3BlY3RvckNsaWVudFdpbkNF
IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yQ2xp
ZW50V2luQ0UoV2ViVmlldyopOwotICAgIH5JbnNwZWN0b3JDbGllbnRXaW5DRSgpOwotCi0gICAg
dmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG9wZW5JbnNwZWN0b3JGcm9udGVu
ZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGNsb3NlSW5zcGVjdG9yRnJvbnRlbmQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBoaWdo
bGlnaHQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXVEY6
OlN0cmluZyYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdlYlZpZXcqIG1faW5zcGVjdGVk
V2ViVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gSW5zcGVj
dG9yQ2xpZW50V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzY1MTkzOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgiCi0KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29v
a2llSmFyLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLXZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmluaXRpYWxpemUoKQot
ewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRSwgcGxhdGZvcm1TdHJhdGVnaWVzLCAoKSk7Ci19Ci0KLVBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjpQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSgpCi17Ci0gICAgc2V0UGxhdGZvcm1TdHJhdGVn
aWVzKHRoaXMpOwotfQotCi1Db29raWVzU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
OjpjcmVhdGVDb29raWVzU3RyYXRlZ3koKQotewotICAgIHJldHVybiB0aGlzOwotfQotCi1EYXRh
YmFzZVN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlRGF0YWJhc2VTdHJh
dGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLUxvYWRlclN0cmF0ZWd5KiBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQotewotICAgIHJldHVybiB0
aGlzOwotfQotCi1QYXN0ZWJvYXJkU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpj
cmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQotewotICAgIHJldHVybiAwOwotfQotCi1QbHVnaW5T
dHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkK
LXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotU2hhcmVkV29ya2VyU3RyYXRlZ3kqIFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVTaGFyZWRXb3JrZXJTdHJhdGVneSgpCi17Ci0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLVN0b3JhZ2VTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmNyZWF0ZVN0b3JhZ2VTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVZpc2l0
ZWRMaW5rU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVWaXNpdGVkTGlu
a1N0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOwot
fQotCi12b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpzZXRDb29raWVzRnJvbURPTShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQotewotICAgIFdlYkNv
cmU6OnNldENvb2tpZXNGcm9tRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCwgY29va2llU3Ry
aW5nKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llc0VuYWJsZWQo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxl
ZChzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVy
bCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
c2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQotewotICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVzKHNlc3Npb24s
IGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2Vi
Q29yZTo6ZGVsZXRlQ29va2llKHNlc3Npb24sIHVybCwgY29va2llTmFtZSk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnJlZnJlc2hQbHVnaW5zKCkKLXsKLSAgICBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVn
aW5JbmZvPiYgb3V0UGx1Z2lucykKLXsKLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+
JiBwbHVnaW5zID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygp
OwotCi0gICAgb3V0UGx1Z2lucy5yZXNpemUocGx1Z2lucy5zaXplKCkpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOwotCi0gICAgICAgIFBsdWdpbkluZm8gaW5mbzsK
LSAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+bmFtZSgpOwotICAgICAgICBpbmZvLmZpbGUg
PSBwYWNrYWdlLT5maWxlTmFtZSgpOwotICAgICAgICBpbmZvLmRlc2MgPSBwYWNrYWdlLT5kZXNj
cmlwdGlvbigpOwotCi0gICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRv
RGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7Ci0KLSAgICAgICAg
aW5mby5taW1lcy5yZXNlcnZlQ2FwYWNpdHkobWltZVRvRGVzY3JpcHRpb25zLnNpemUoKSk7Ci0K
LSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1l
VG9EZXNjcmlwdGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKLQotICAgICAgICAg
ICAgbWltZS50eXBlID0gaXQtPmtleTsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1
ZTsKLSAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5nZXQobWltZS50eXBlKTsKLQotICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWlt
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXRQbHVnaW5zW2ldID0gaW5mbzsKLSAgICB9Ci19
Ci0KLWJvb2wgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmlzTGlua1Zpc2l0ZWQoUGFnZSogcGFn
ZSwgTGlua0hhc2ggaGFzaCwgY29uc3QgVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJikKLXsKLSAg
ICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5pc0xpbmtWaXNpdGVkKGhhc2gpOwotfQotCi12b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFOjphZGRWaXNpdGVkTGluayhQYWdlKiBwYWdlLCBMaW5rSGFz
aCBoYXNoKQotewotICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmtIYXNoKGhhc2gpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MDc5ZTljLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0VfaAotI2RlZmluZSBQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRV9oCi0KLSNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKLSNpbmNsdWRl
ICJEYXRhYmFzZVN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5TdHJhdGVneS5oIgot
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiU3RvcmFnZVN0cmF0
ZWd5LmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtTdHJhdGVneS5oIgotCi1jbGFzcyBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHBy
aXZhdGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkRhdGFiYXNl
U3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6U2hhcmVkV29ya2VyU3RyYXRlZ3ks
IHByaXZhdGUgV2ViQ29yZTo6U3RvcmFnZVN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlZpc2l0
ZWRMaW5rU3RyYXRlZ3kgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsK
LQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSgpOwotCi0gICAgLy8gV2Vi
Q29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzCi0gICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVzU3Ry
YXRlZ3kqIGNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RGF0YWJhc2VTdHJhdGVneSogY3JlYXRlRGF0YWJhc2VTdHJhdGVneSgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0
ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kq
IGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpTaGFyZWRXb3JrZXJTdHJhdGVneSogY3JlYXRlU2hhcmVkV29ya2Vy
U3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0b3JhZ2VTdHJhdGVn
eSogY3JlYXRlU3RvcmFnZVN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpWaXNpdGVkTGlua1N0cmF0ZWd5KiBjcmVhdGVWaXNpdGVkTGlua1N0cmF0ZWd5KCkgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBjb29raWVzRm9yRE9NKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNv
bnN0IFdlYkNvcmU6OlVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
LCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJD
b3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkNvcmU6OkRh
dGFiYXNlU3RyYXRlZ3kKLSAgICAvLyAtIFVzaW5nIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0K
LSAgICAvLyBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneQotICAgIHZpcnR1YWwgdm9pZCByZWZyZXNo
UGx1Z2lucygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRQbHVnaW5JbmZvKGNvbnN0
IFdlYkNvcmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mKSBvdmVycmlkZTsK
LQotICAgIC8vIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRlZ3kKLSAgICB2aXJ0dWFsIGJvb2wg
aXNMaW5rVmlzaXRlZChXZWJDb3JlOjpQYWdlKiwgV2ViQ29yZTo6TGlua0hhc2gsIGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6OlBhZ2UqLCBXZWJDb3JlOjpMaW5rSGFz
aCkgb3ZlcnJpZGU7Ci19OwotCi0jZW5kaWYgLy8gUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0VfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViVmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmUw
MzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQ2hyb21l
Q2xpZW50V2luQ0UuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudFdpbkNFLmgiCi0jaW5j
bHVkZSAiRHJhZ0NsaWVudFdpbkNFLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50V2luQ0UuaCIK
LSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5n
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50V2luQ0UuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCBM
UENXU1RSIGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lID0gTCJXZWJWaWV3V2luZG93Q2xhc3MiOwot
Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlldzo6d2ViVmlld1duZFByb2MoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgaWYgKFdl
YlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZpZXcqPihHZXRXaW5kb3dMb25n
KGhXbmQsIDApKSkKLSAgICAgICAgcmV0dXJuIHdlYlZpZXctPnduZFByb2MoaFduZCwgbWVzc2Fn
ZSwgd1BhcmFtLCBsUGFyYW0pOwotCi0gICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9h
ZFJlc291cmNlSW50b0J1ZmZlcihjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotV2ViVmlldzo6V2ViVmlldyhIV05EIGh3bmQs
IHVuc2lnbmVkIGZlYXR1cmVzKQotICAgIDogbV9mcmFtZSgwKQotICAgICwgbV9wYWdlKDApCi0g
ICAgLCBtX3BhcmVudFdpbmRvd0hhbmRsZShod25kKQotICAgICwgbV9lbmFibGVEb3VibGVCdWZm
ZXIoZmVhdHVyZXMgJiBFbmFibGVEb3VibGVCdWZmZXJpbmcpCi17Ci0gICAgUkVDVCByY0NsaWVu
dDsKLSAgICBHZXRDbGllbnRSZWN0KGh3bmQsICZyY0NsaWVudCk7Ci0KLSAgICBtX3dpbmRvd0hh
bmRsZSA9IENyZWF0ZVdpbmRvdyhrV2ViVmlld1dpbmRvd0NsYXNzTmFtZSwgMCwgV1NfQ0hJTEQs
Ci0gICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIGh3bmQsIDAsIFdl
YkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOwotCi0gICAgU2V0V2luZG93TG9uZyhtX3dpbmRv
d0hhbmRsZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxMT05HPih0aGlzKSk7Ci0KLSAgICBNb3ZlV2lu
ZG93KG1fd2luZG93SGFuZGxlLCAwLCAwLCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9t
LCBUUlVFKTsKLSAgICBTaG93V2luZG93KG1fd2luZG93SGFuZGxlLCBTV19TSE9XKTsKLQotICAg
IFBhZ2U6OlBhZ2VDbGllbnRzIHBhZ2VDbGllbnRzOwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNs
aWVudCA9IG5ldyBXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFKHRoaXMpOwotICAgIHBhZ2VDbGll
bnRzLmNvbnRleHRNZW51Q2xpZW50ID0gbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRXaW5D
RSh0aGlzKTsKLSAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBuZXcgV2ViS2l0OjpFZGl0
b3JDbGllbnRXaW5DRSh0aGlzKTsKLSAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gbmV3IFdl
YktpdDo6RHJhZ0NsaWVudFdpbkNFKCk7Ci0gICAgcGFnZUNsaWVudHMuaW5zcGVjdG9yQ2xpZW50
ID0gbmV3IFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50V2luQ0UodGhpcyk7Ci0gICAgbV9wYWdlID0g
bmV3IFBhZ2UocGFnZUNsaWVudHMpOwotCi0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV9wYWdl
LT5zZXR0aW5ncygpOwotICAgIHNldHRpbmdzLnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsK
LSAgICBzZXR0aW5ncy5zZXREZWZhdWx0Rm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLnNldE1p
bmltdW1Gb250U2l6ZSg4KTsKLSAgICBzZXR0aW5ncy5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KDgpOwotICAgIHNldHRpbmdzLnNldFNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0gICAgc2V0dGluZ3Mu
c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwotCi0gICAgV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudFdpbkNFKiBsb2FkZXJDbGllbnQgPSBuZXcgV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFKHRoaXMpOwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBGcmFtZTo6Y3JlYXRl
KG1fcGFnZSwgMCwgbG9hZGVyQ2xpZW50KTsKLSAgICBtX2ZyYW1lID0gZnJhbWUuZ2V0KCk7Ci0g
ICAgbG9hZGVyQ2xpZW50LT5zZXRGcmFtZShtX2ZyYW1lKTsKLQotICAgIG1fcGFnZS0+bWFpbkZy
YW1lKCkuaW5pdCgpOwotCi0gICAgaWYgKHZpZXcoKSkgewotICAgICAgICBSRUNUIHdpbmRvd1Jl
Y3Q7Ci0gICAgICAgIGZyYW1lUmVjdCgmd2luZG93UmVjdCk7Ci0gICAgICAgIHZpZXcoKS0+cmVz
aXplKEludFJlY3Qod2luZG93UmVjdCkuc2l6ZSgpKTsKLSAgICB9Ci19Ci0KLVdlYlZpZXc6On5X
ZWJWaWV3KCkKLXsKLSAgICBkZWxldGUgbV9wYWdlOwotICAgIERlc3Ryb3lXaW5kb3cobV93aW5k
b3dIYW5kbGUpOwotfQotCi12b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoSElOU1RBTkNFIGluc3Rh
bmNlSGFuZGxlKQotewotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6
aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLSAgICBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aW5p
dGlhbGl6ZSgpOwotCi0gICAgV2ViQ29yZTo6c2V0SW5zdGFuY2VIYW5kbGUoaW5zdGFuY2VIYW5k
bGUpOwotCi0gICAgV05EQ0xBU1Mgd2M7Ci0gICAgd2Muc3R5bGUgICAgICAgICAgPSBDU19EQkxD
TEtTOwotICAgIHdjLmxwZm5XbmRQcm9jICAgID0gV2ViVmlldzo6d2ViVmlld1duZFByb2M7Ci0g
ICAgd2MuY2JDbHNFeHRyYSAgICAgPSAwOwotICAgIHdjLmNiV25kRXh0cmEgICAgID0gc2l6ZW9m
KHZvaWQgKik7Ci0gICAgd2MuaEluc3RhbmNlICAgICAgPSBpbnN0YW5jZUhhbmRsZTsKLSAgICB3
Yy5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2MuaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29y
KDAsIElEQ19BUlJPVyk7Ci0gICAgd2MuaGJyQmFja2dyb3VuZCAgPSAwOwotICAgIHdjLmxwc3pN
ZW51TmFtZSAgID0gMDsKLSAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtXZWJWaWV3V2luZG93Q2xh
c3NOYW1lOwotCi0gICAgUmVnaXN0ZXJDbGFzcygmd2MpOwotfQotCi12b2lkIFdlYlZpZXc6OmNs
ZWFudXAoKQotewotICAgIFVucmVnaXN0ZXJDbGFzcyhrV2ViVmlld1dpbmRvd0NsYXNzTmFtZSwg
V2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RnJhbWU+IFdlYlZp
ZXc6OmNyZWF0ZUZyYW1lKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLAot
ICAgIGJvb2wgLyphbGxvd3NTY3JvbGxpbmcqLywgaW50IC8qbWFyZ2luV2lkdGgqLywgaW50IC8q
bWFyZ2luSGVpZ2h0Ki8sIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UgKmxvYWRlckNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UodGhpcyk7Ci0gICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6
OmNyZWF0ZShtX3BhZ2UsIG93bmVyRWxlbWVudCwgbG9hZGVyQ2xpZW50KTsKLSAgICBsb2FkZXJD
bGllbnQtPnNldEZyYW1lKGNoaWxkRnJhbWUuZ2V0KCkpOwotCi0gICAgcGFyZW50RnJhbWUtPnRy
ZWUoKS5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKLSAgICBjaGlsZEZyYW1lLT50cmVlKCkuc2V0
TmFtZShuYW1lKTsKLSAgICBjaGlsZEZyYW1lLT5pbml0KCk7Ci0KLSAgICAvLyBUaGUgY3JlYXRp
b24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJl
bW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJlYWR5LgotICAgIGlmICghY2hpbGRGcmFtZS0+cGFn
ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS5sb2Fk
VVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY2hpbGRGcmFtZS5nZXQoKSk7Ci0KLSAg
ICAvLyBUaGUgZnJhbWUncyBvbmxvYWQgaGFuZGxlciBtYXkgaGF2ZSByZW1vdmVkIGl0IGZyb20g
dGhlIGRvY3VtZW50LgotICAgIGlmICghY2hpbGRGcmFtZS0+dHJlZSgpLnBhcmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjaGlsZEZyYW1lLnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBXZWJWaWV3OjpydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6cnVuSmF2YVNjcmlw
dENvbmZpcm0oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlZpZXc6OnJ1bkphdmFTY3JpcHRQcm9t
cHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3Ry
aW5nJiByZXN1bHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZnJhbWVSZWN0KFJFQ1QqIHJlY3QpIGNvbnN0Ci17Ci0gICAg
R2V0V2luZG93UmVjdChtX3dpbmRvd0hhbmRsZSwgcmVjdCk7Ci19Ci0KLUZyYW1lVmlldyogV2Vi
Vmlldzo6dmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT52aWV3
KCkgOiAwOwotfQotCi12b2lkIFdlYlZpZXc6OmxvYWQoTFBDV1NUUiB1cmwpCi17Ci0gICAgbG9h
ZChTdHJpbmcodXJsKSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6bG9hZChjb25zdCBTdHJpbmcgJnVy
bCkKLXsKLSAgICBsb2FkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCh1cmwpKTsKLX0KLQotdm9p
ZCBXZWJWaWV3Ojpsb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCAmcmVxdWVzdCkK
LXsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS5sb2FkKEZyYW1lTG9hZFJlcXVlc3QoZnJhbWUoKSwg
cmVxdWVzdCkpOwotfQotCi12b2lkIFdlYlZpZXc6OnJlbG9hZCgpCi17Ci0gICAgZnJhbWUoKS0+
bG9hZGVyKCkucmVsb2FkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c3RvcCgpCi17Ci0gICAgZnJh
bWUoKS0+bG9hZGVyKCkuc3RvcEFsbExvYWRlcnMoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWlu
dChIREMgaERDLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKGNsaXBS
ZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC5tYXhYKCksIGNsaXBSZWN0Lm1heFkoKSkp
OwotICAgIFNlbGVjdENsaXBSZ24oaERDLCBjbGlwUmduLmdldCgpKTsKLQotICAgIGZyYW1lVmll
dy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGdjKGhEQyk7Ci0gICAgZnJhbWVWaWV3LT5wYWludCgmZ2MsIGNsaXBSZWN0KTsK
LX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVQYWludChIV05EIGhXbmQpCi17Ci0gICAgUkVDVCB1
cGRhdGVSZWN0OwotICAgIGlmICghR2V0VXBkYXRlUmVjdChoV25kLCAmdXBkYXRlUmVjdCwgZmFs
c2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQQUlOVFNUUlVDVCBwczsKLSAgICBI
REMgaERDID0gQmVnaW5QYWludChtX3dpbmRvd0hhbmRsZSwgJnBzKTsKLQotICAgIEludFJlY3Qg
Y2xpcFJlY3QodXBkYXRlUmVjdCk7Ci0KLSAgICBpZiAobV9lbmFibGVEb3VibGVCdWZmZXIpIHsK
LSAgICAgICAgaWYgKCFtX2RvdWJsZUJ1ZmZlckRDKSB7Ci0gICAgICAgICAgICBSRUNUIHJjQ2xp
ZW50OwotICAgICAgICAgICAgR2V0Q2xpZW50UmVjdChtX3dpbmRvd0hhbmRsZSwgJnJjQ2xpZW50
KTsKLQotICAgICAgICAgICAgbV9kb3VibGVCdWZmZXJEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlQ29tcGF0aWJsZURDKGhEQykpOwotICAgICAgICAgICAgbV9kb3VibGVCdWZmZXJCaXRtYXAg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoaERDLCByY0NsaWVudC5y
aWdodCwgcmNDbGllbnQuYm90dG9tKSk7Ci0gICAgICAgICAgICBTZWxlY3RPYmplY3QobV9kb3Vi
bGVCdWZmZXJEQy5nZXQoKSwgbV9kb3VibGVCdWZmZXJCaXRtYXAuZ2V0KCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcGFpbnQobV9kb3VibGVCdWZmZXJEQy5nZXQoKSwgY2xpcFJlY3QpOwotCi0g
ICAgICAgIEJpdEJsdChoREMsIGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53
aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSwgbV9kb3VibGVCdWZmZXJEQy5nZXQoKSwgY2xpcFJl
Y3QueCgpLCBjbGlwUmVjdC55KCksIFNSQ0NPUFkpOwotICAgIH0gZWxzZQotICAgICAgICBwYWlu
dChoREMsIGNsaXBSZWN0KTsKLQotICAgIEVuZFBhaW50KG1fd2luZG93SGFuZGxlLCAmcHMpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0g
ICAgc3RhdGljIExPTkcgZ2xvYmFsQ2xpY2tDb3VudDsKLSAgICBzdGF0aWMgSW50UG9pbnQgZ2xv
YmFsUHJldlBvaW50OwotICAgIHN0YXRpYyBNb3VzZUJ1dHRvbiBnbG9iYWxQcmV2QnV0dG9uOwot
ICAgIHN0YXRpYyBMT05HIGdsb2JhbFByZXZNb3VzZURvd25UaW1lOwotCi0gICAgLy8gQ3JlYXRl
IG91ciBldmVudC4KLSAgICAvLyBPbiBXTV9NT1VTRUxFQVZFIHdlIG5lZWQgdG8gY3JlYXRlIGEg
bW91c2VvdXQgZXZlbnQsIHNvIHdlIGZvcmNlIHRoZSBwb3NpdGlvbgotICAgIC8vIG9mIHRoZSBl
dmVudCB0byBiZSBhdCAoTUlOU0hPUlQsIE1JTlNIT1JUKS4KLSAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgbW91c2VFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICBib29s
IGluc2lkZVRocmVzaG9sZCA9IGFicyhnbG9iYWxQcmV2UG9pbnQueCgpIC0gbW91c2VFdmVudC5w
b3NpdGlvbigpLngoKSkgPCA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1hET1VCTEVDTEspCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBhYnMoZ2xvYmFsUHJldlBvaW50LnkoKSAtIG1vdXNl
RXZlbnQucG9zaXRpb24oKS55KCkpIDwgOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZRE9VQkxFQ0xL
KTsKLSAgICBMT05HIG1lc3NhZ2VUaW1lID0gMDsKLQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNl
OwotICAgIGlmIChtZXNzYWdlID09IFdNX0xCVVRUT05ET1dOIHx8IG1lc3NhZ2UgPT0gV01fTUJV
VFRPTkRPV04gfHwgbWVzc2FnZSA9PSBXTV9SQlVUVE9ORE9XTikgewotICAgICAgICAvLyBGSVhN
RTogSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlICJyaWdodCIgd2F5IHRvIGRvIHRoaXMKLSAg
ICAgICAgLy8gYnV0IHdpdGhvdXQgdGhpcyBjYWxsLCB3ZSBuZXZlciBiZWNvbWUgZm9jdXNlZCBz
aW5jZSB3ZSBkb24ndCBhbGxvdwotICAgICAgICAvLyB0aGUgZGVmYXVsdCBoYW5kbGluZyBvZiBt
b3VzZSBldmVudHMuCi0gICAgICAgIFNldEZvY3VzKG1fd2luZG93SGFuZGxlKTsKLQotICAgICAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW92ZUV2ZW50KGhXbmQsIFdNX01PVVNFTU9WRSwgMCwgbFBh
cmFtLCBmYWxzZSk7Ci0gICAgICAgIG1vdmVFdmVudC5zZXRDbGlja0NvdW50KDApOwotICAgICAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhhbmRsZU1vdXNlTW92ZUV2ZW50
KG1vdmVFdmVudCk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHN0YXJ0IGNhcHR1cmluZyBldmVudHMg
d2hlbiB0aGUgbW91c2UgZ29lcyBkb3duIGluIG91ciBIV05ELgotICAgICAgICBTZXRDYXB0dXJl
KG1fd2luZG93SGFuZGxlKTsKLQotICAgICAgICBpZiAoaW5zaWRlVGhyZXNob2xkICYmIG1vdXNl
RXZlbnQuYnV0dG9uKCkgPT0gZ2xvYmFsUHJldkJ1dHRvbikKLSAgICAgICAgICAgIGdsb2JhbENs
aWNrQ291bnQrKzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGNsaWNr
IGNvdW50LgotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCA9IDE7Ci0gICAgICAgIGdsb2Jh
bFByZXZNb3VzZURvd25UaW1lID0gbWVzc2FnZVRpbWU7Ci0gICAgICAgIGdsb2JhbFByZXZCdXR0
b24gPSBtb3VzZUV2ZW50LmJ1dHRvbigpOwotICAgICAgICBnbG9iYWxQcmV2UG9pbnQgPSBtb3Vz
ZUV2ZW50LnBvc2l0aW9uKCk7Ci0KLSAgICAgICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGds
b2JhbENsaWNrQ291bnQpOwotICAgICAgICBoYW5kbGVkID0gbV9wYWdlLT5tYWluRnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZVByZXNzRXZlbnQobW91c2VFdmVudCk7Ci0gICAgfSBl
bHNlIGlmIChtZXNzYWdlID09IFdNX0xCVVRUT05EQkxDTEsgfHwgbWVzc2FnZSA9PSBXTV9NQlVU
VE9OREJMQ0xLIHx8IG1lc3NhZ2UgPT0gV01fUkJVVFRPTkRCTENMSykgewotICAgICAgICBnbG9i
YWxDbGlja0NvdW50Kys7Ci0gICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9iYWxD
bGlja0NvdW50KTsKLSAgICAgICAgaGFuZGxlZCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGFuZGxlTW91c2VQcmVzc0V2ZW50KG1vdXNlRXZlbnQpOwotICAgIH0gZWxzZSBp
ZiAobWVzc2FnZSA9PSBXTV9MQlVUVE9OVVAgfHwgbWVzc2FnZSA9PSBXTV9NQlVUVE9OVVAgfHwg
bWVzc2FnZSA9PSBXTV9SQlVUVE9OVVApIHsKLSAgICAgICAgLy8gUmVjb3JkIHRoZSBnbG9iYWwg
cG9zaXRpb24gYW5kIHRoZSBidXR0b24gb2YgdGhlIHVwLgotICAgICAgICBnbG9iYWxQcmV2QnV0
dG9uID0gbW91c2VFdmVudC5idXR0b24oKTsKLSAgICAgICAgZ2xvYmFsUHJldlBvaW50ID0gbW91
c2VFdmVudC5wb3NpdGlvbigpOwotICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xv
YmFsQ2xpY2tDb3VudCk7Ci0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQobW91c2VFdmVudCk7Ci0gICAgICAgIFJlbGVhc2VD
YXB0dXJlKCk7Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlID09IFdNX01PVVNFTU9WRSkgewotICAg
ICAgICBpZiAoIWluc2lkZVRocmVzaG9sZCkKLSAgICAgICAgICAgIGdsb2JhbENsaWNrQ291bnQg
PSAwOwotICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xvYmFsQ2xpY2tDb3VudCk7
Ci0gICAgICAgIGhhbmRsZWQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLm1v
dXNlTW92ZWQobW91c2VFdmVudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhbmRsZWQ7Ci19Ci0K
LWJvb2wgV2ViVmlldzo6aGFuZGxlTW91c2VXaGVlbChIV05EIGhXbmQsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0sIGJvb2wgaXNIb3Jpem9udGFsKQotewotICAgIFBsYXRmb3JtV2hlZWxF
dmVudCB3aGVlbEV2ZW50KGhXbmQsIHdQYXJhbSwgbFBhcmFtLCBpc0hvcml6b250YWwpOwotICAg
IHJldHVybiBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZl
bnQpOwotfQotCi1ib29sIFdlYlZpZXc6OmhhbmRsZUtleURvd24oV1BBUkFNIHZpcnR1YWxLZXlD
b2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQotewotICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0K
LSAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQobV93aW5kb3dIYW5kbGUsIHZpcnR1
YWxLZXlDb2RlLCBrZXlEYXRhLCBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duLCBzeXN0ZW1LZXlE
b3duKTsKLSAgICBib29sIGhhbmRsZWQgPSBmcmFtZS5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChr
ZXlFdmVudCk7Ci0KLSAgICAvLyBUaGVzZSBldmVudHMgY2Fubm90IGJlIGNhbmNlbGVkLCBhbmQg
d2UgaGF2ZSBubyBkZWZhdWx0IGhhbmRsaW5nIGZvciB0aGVtLgotICAgIC8vIEZJWE1FOiBtYXRj
aCBJRSBsaXN0IG1vcmUgY2xvc2VseSwgc2VlIDxodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9l
bi11cy9saWJyYXJ5L21zNTM2OTM4LmFzcHg+LgotICAgIGlmIChzeXN0ZW1LZXlEb3duICYmIHZp
cnR1YWxLZXlDb2RlICE9IFZLX1JFVFVSTikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGhhbmRsZWQpIHsKLSAgICAgICAgTVNHIG1zZzsKLSAgICAgICAgaWYgKCFzeXN0ZW1LZXlE
b3duKQotICAgICAgICAgICAgOjpQZWVrTWVzc2FnZSgmbXNnLCBtX3dpbmRvd0hhbmRsZSwgV01f
Q0hBUiwgV01fQ0hBUiwgUE1fUkVNT1ZFKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlS2V5UHJlc3Mo
V1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQotewot
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0KLSAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQobV93aW5kb3dI
YW5kbGUsIGNoYXJDb2RlLCBrZXlEYXRhLCBQbGF0Zm9ybUV2ZW50OjpDaGFyLCBzeXN0ZW1LZXlE
b3duKTsKLSAgICAvLyBJRSBkb2VzIG5vdCBkaXNwYXRjaCBrZXlwcmVzcyBldmVudCBmb3IgV01f
U1lTQ0hBUi4KLSAgICBpZiAoc3lzdGVtS2V5RG93bikKLSAgICAgICAgcmV0dXJuIGZyYW1lLmV2
ZW50SGFuZGxlcigpLmhhbmRsZUFjY2Vzc0tleShrZXlFdmVudCk7Ci0gICAgaWYgKGZyYW1lLmV2
ZW50SGFuZGxlcigpLmtleUV2ZW50KGtleUV2ZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aGFuZGxlS2V5VXAoV1BBUkFN
IHZpcnR1YWxLZXlDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQotewot
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgdmlydHVh
bEtleUNvZGUsIGtleURhdGEsIFBsYXRmb3JtRXZlbnQ6OktleVVwLCBzeXN0ZW1LZXlEb3duKTsK
LQotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgcmV0dXJuIGZyYW1lLmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGtl
eUV2ZW50KTsKLX0KLQotTFJFU1VMVCBXZWJWaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOwotCi0gICAgaWYgKHZpZXcoKSkgewotICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Up
IHsKLSAgICAgICAgY2FzZSBXTV9QQUlOVDoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVQ
YWludChoV25kKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fTU9VU0VN
T1ZFOgotICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX01CVVRU
T05ET1dOOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX0xC
VVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKLSAgICAgICAgY2Fz
ZSBXTV9SQlVUVE9OREJMQ0xLOgotICAgICAgICBjYXNlIFdNX0xCVVRUT05VUDoKLSAgICAgICAg
Y2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fUkJVVFRPTlVQOgotICAgICAgICAg
ICAgaWYgKHZpZXcoKS0+ZGlkRmlyc3RMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gaGFuZGxlTW91c2VFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX01PVVNFV0hFRUw6Ci0gICAgICAgICAg
ICBpZiAodmlldygpLT5kaWRGaXJzdExheW91dCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSBoYW5kbGVNb3VzZVdoZWVsKGhXbmQsIHdQYXJhbSwgbFBhcmFtLCB3UGFyYW0gJiBNS19TSElG
VCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX1NZU0tFWURPV046Ci0g
ICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5RG93bih3UGFyYW0sIGxQYXJhbSwgdHJ1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX0tFWURPV046Ci0gICAgICAg
ICAgICBoYW5kbGVkID0gaGFuZGxlS2V5RG93bih3UGFyYW0sIGxQYXJhbSwgZmFsc2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9TWVNLRVlVUDoKLSAgICAgICAgICAg
IGhhbmRsZWQgPSBoYW5kbGVLZXlVcCh3UGFyYW0sIGxQYXJhbSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX0tFWVVQOgotICAgICAgICAgICAgaGFuZGxlZCA9
IGhhbmRsZUtleVVwKHdQYXJhbSwgbFBhcmFtLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFdNX1NZU0NIQVI6Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxl
S2V5UHJlc3Mod1BhcmFtLCBsUGFyYW0sIHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBXTV9DSEFSOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUtleVByZXNz
KHdQYXJhbSwgbFBhcmFtLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIFdNX0NMT1NFOgotICAgICAgICAgICAgUG9zdE1lc3NhZ2UobV9wYXJlbnRXaW5kb3dIYW5k
bGUsIFdNX0NMT1NFLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChoYW5kbGVkKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5oIGIv
U291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVhZDY5NjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWaWV3X2gKLSNk
ZWZpbmUgV2ViVmlld19oCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3dpbi9HRElP
YmplY3QuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotY2xhc3MgUGFnZTsKLWNsYXNzIEZyYW1lVmlldzsK
LWNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKLWNsYXNzIFVSTDsKLWNsYXNzIFJlc291cmNl
UmVxdWVzdDsKLX0KLQotY2xhc3MgV2ViVmlldyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBGZWF0dXJl
cyB7Ci0gICAgICAgIE5vRmVhdHVyZSA9IDAsCi0gICAgICAgIEVuYWJsZURvdWJsZUJ1ZmZlcmlu
ZyA9IDEgPDwgMAotICAgIH07Ci0KLSAgICBXZWJWaWV3KEhXTkQgaHduZCwgdW5zaWduZWQgZmVh
dHVyZXMgPSBFbmFibGVEb3VibGVCdWZmZXJpbmcpOwotICAgIH5XZWJWaWV3KCk7Ci0KLSAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplKEhJTlNUQU5DRSBpbnN0YW5jZUhhbmRsZSk7Ci0gICAgc3Rh
dGljIHZvaWQgY2xlYW51cCgpOwotCi0gICAgSFdORCB3aW5kb3dIYW5kbGUoKSBjb25zdCB7IHJl
dHVybiBtX3dpbmRvd0hhbmRsZTsgfQotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWU7IH0KLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlOyB9Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGxvYWQoTFBDV1NUUiB1cmwpOwotICAgIHZvaWQgbG9hZChjb25zdCBXVEY6OlN0
cmluZyAmdXJsKTsKLSAgICB2b2lkIGxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
ICZyZXF1ZXN0KTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAgIHZvaWQgc3RvcCgpOwotCi0gICAg
dm9pZCBmcmFtZVJlY3QoUkVDVCogcmVjdCkgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OkZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiwgCi0gICAgICAgIGNv
bnN0IFdURjo6U3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd1Njcm9sbGluZywgaW50IG1hcmdp
bldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0LCBXZWJDb3JlOjpGcmFtZSogcGFyZW50RnJhbWUpOwot
Ci0gICAgLy8gSmF2YVNjcmlwdCBEaWFsb2cKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChj
b25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmly
bShjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBydW5KYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVs
dFZhbHVlLCBXVEY6OlN0cmluZyYgcmVzdWx0KTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyB3ZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci0gICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKLQotICAgIGJvb2wgaGFuZGxlUGFpbnQoSFdORCBoV25kKTsK
LSAgICBib29sIGhhbmRsZU1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgIGJvb2wgaGFuZGxlTW91c2VXaGVlbChIV05E
IGhXbmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgaXNIb3Jpem9udGFsKTsK
LSAgICBib29sIGhhbmRsZUtleURvd24oV1BBUkFNIHZpcnR1YWxLZXlDb2RlLCBMUEFSQU0ga2V5
RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKTsKLSAgICBib29sIGhhbmRsZUtleVByZXNzKFdQQVJB
TSBjaGFyQ29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bik7Ci0gICAgYm9v
bCBoYW5kbGVLZXlVcChXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29s
IHN5c3RlbUtleURvd24pOwotCi0gICAgdm9pZCBwYWludChIREMgaERDLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0KLSAgICBXZWJDb3JlOjpGcmFtZSogbV9mcmFtZTsKLSAg
ICBXZWJDb3JlOjpQYWdlKiBtX3BhZ2U7Ci0gICAgSFdORCBtX3BhcmVudFdpbmRvd0hhbmRsZTsK
LSAgICBIV05EIG1fd2luZG93SGFuZGxlOwotICAgIGJvb2wgbV9lbmFibGVEb3VibGVCdWZmZXI7
Ci0gICAgR0RJT2JqZWN0PEhEQz4gbV9kb3VibGVCdWZmZXJEQzsKLSAgICBHRElPYmplY3Q8SEJJ
VE1BUD4gbV9kb3VibGVCdWZmZXJCaXRtYXA7Ci19OwotCi0jZW5kaWYgLy8gV2ViVmlld19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNFLmNtYWtlIGIvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DRS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzN2E0
OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNFLmNtYWtlCisrKyAvZGV2
L251bGwKQEAgLTEsMzAgKzAsMCBAQAotaW5jbHVkZShPcHRpb25zV2luZG93cykKLQotc2V0KFBP
UlRfRkFMTEJBQ0sgV2luKQotCi1hZGRfZGVmaW5pdGlvbnMoLURfQ0VfQ1JUX0FMTE9XX1dJTl9N
SU5NQVgpCi1hZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0VYUE9SVF9NQUNST1M9MCkKLWFkZF9k
ZWZpbml0aW9ucygtRFdURl9VU0VfV0lOR0RJPTEpCi1hZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNF
X1dJTklORVQ9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdJTkNFQkFTSUMpCi1hZGRfZGVmaW5pdGlv
bnMoLURKU19OT19FWFBPUlQpCi1hZGRfZGVmaW5pdGlvbnMoLURIQVZFX0FDQ0VTU0lCSUxJVFk9
MCkKLWFkZF9kZWZpbml0aW9ucygtREpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9O
PTB4MjAwMDAwKQotCi1pZiAoTk9UIDNSRFBBUlRZX0RJUikKLSAgICBpZiAoRVhJU1RTICRFTlZ7
V0VCS0lUVEhJUkRQQVJUWURJUn0pCi0gICAgICAgIHNldCgzUkRQQVJUWV9ESVIgJEVOVntXRUJL
SVRUSElSRFBBUlRZRElSfSkKLSAgICBlbHNlICgpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJS
T1IgIllvdSBtdXN0IHByb3ZpZGUgYSB0aGlyZCBwYXJ0eSBkaXJlY3RvcnkgZm9yIFdpbkNFIHBv
cnQuIikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotaW5jbHVkZV9kaXJlY3RvcmllcygkezNS
RFBBUlRZX0RJUn0vY2UtY29tcGF0KQotYWRkX3N1YmRpcmVjdG9yeSgkezNSRFBBUlRZX0RJUn0g
IiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8zcmRwYXJ0eSIpCi0KLVdFQktJVF9PUFRJT05f
QkVHSU4oKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQ
UE9SVCBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlRQRElS
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTlNQRUNUT1Ig
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoVVNFX1NZU1RFTV9NQUxMT0Mg
T04pCi1XRUJLSVRfT1BUSU9OX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0
UGFja2FnaW5nLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFrZQppbmRl
eCA1ZjliMzE4Li45NjlkYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0UGFja2Fn
aW5nLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UKQEAgLTEx
OSw3ICsxMTksNiBAQCBpZiAoTk9UIERFRklORUQgQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFUykK
ICAgICAgICAgICAgICIvcXQvIiAiL1F0LyIgInF0XFxcXC4iICJRdFxcXFwuIgogICAgICAgICAg
ICAgIi9xdDQvIiAiL1F0NC8iICJxdDRcXFxcLiIgIlF0NFxcXFwuIgogICAgICAgICAgICAgIi93
aW4vIiAiL1dpbi8iICJ3aW5cXFxcLiIgIldpblxcXFwuIgotICAgICAgICAgICAgIi93aW5jZS8i
ICIvV2luY2UvIiAid2luY2VcXFxcLiIgIldpbmNlXFxcXC4iCiAgICAgICAgICAgICAiL3d4Y29k
ZS8iICIvV3hjb2RlLyIgInd4Y29kZVxcXFwuIiAiV3hjb2RlXFxcXC4iCiAgICAgICAgICAgICAi
L1dlYktpdExpYnJhcmllcy8iCiAgICAgICAgICAgICAiL0VuZ2xpc2hcXFxcLmxwcm9qLyIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3drYnVpbGQucHkgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy93a2J1aWxkLnB5CmluZGV4IDQ0MWZhMTkuLmQzY2E5MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQucHkKKysr
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWls
ZC5weQpAQCAtNTEsNyArNTEsNiBAQCBkZWYgX3Nob3VsZF9maWxlX3RyaWdnZXJfYnVpbGQodGFy
Z2V0X3BsYXRmb3JtLCBmaWxlKToKICAgICAgICAgKCJvcGVuZ2wiLCBbXSksCiAgICAgICAgICgi
b3BlbnR5cGUiLCBbXSksCiAgICAgICAgICgib3BlbnZnIiwgW10pLAotICAgICAgICAoIndpbmNl
IiwgW10pLAogICAgICAgICAoInd4IiwgW10pLAogCiAgICAgICAgICMgRGlyZWN0b3JpZXMgdGhh
dCBzaG91bGQgdHJpZ2dlciBidWlsZHMgb24gb25seSBzb21lIGJvdHMuCkBAIC04NCw3ICs4Myw2
IEBAIGRlZiBfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJnZXRfcGxhdGZvcm0sIGZpbGUp
OgogICAgICAgICAociIvTElDRU5TRVteL10rJCIsIFtdKSwKICAgICAgICAgKHIiQVJNKD86djcp
P1wuKD86Y3BwfGgpJCIsIFtdKSwKICAgICAgICAgKHIiTUlQU1wuKD86Y3BwfGgpJCIsIFtdKSwK
LSAgICAgICAgKHIiV2luQ0VcLig/OmNwcHxofG1tKSQiLCBbXSksCiAgICAgICAgIChyIlwuKD86
YmtsfG1rKSQiLCBbXSksCiAKICAgICAgICAgIyBQYXR0ZXJucyB0aGF0IHNob3VsZCB0cmlnZ2Vy
IGJ1aWxkcyBvbiBvbmx5IHNvbWUgYm90cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRlc3QucHkgYi9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0
ZXN0LnB5CmluZGV4IDUyNjNkM2MuLjk5ODc3YzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWls
ZF91bml0dGVzdC5weQpAQCAtNDksNyArNDksNiBAQCBjbGFzcyBTaG91bGRCdWlsZFRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAoWyJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZm9vIl0sIFsibWFjLWxlb3BhcmQiLCAibWFjLWxpb24iLCAgIm1hYy1tb3VudGFp
bmxpb24iLCAibWFjLXNub3dsZW9wYXJkIl0pLAogICAgICAgICAoWyJTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC93eGNvZGUvd2luL2ZvbyJdLCBbXSksCiAgICAgICAgIChbIlNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSIsICJTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMuaCJdLCBbIm1hYy1sZW9wYXJkIiwgIm1hYy1saW9uIiwgICJtYWMt
bW91bnRhaW5saW9uIiwgIm1hYy1zbm93bGVvcGFyZCJdKSwKLSAgICAgICAgKFsiU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaCJdLCBbXSksCiAgICAgICAgIChbIlRv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L0xlYWtzVmlld2VyL0xlYWtzVmlld2VyLmpzIl0sIFtdKSwKICAgICBdCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvQ01ha2VMaXN0cy50eHQKaW5kZXggNzNmYjA5
Ni4uNGQ0ZDU5NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMv
Q01ha2VMaXN0cy50eHQKQEAgLTE2LDggKzE2LDYgQEAgZWxzZWlmICgiJHtQT1JUfSIgU1RSRVFV
QUwgIkdUSyIpCiAgICAgaWYgKEVOQUJMRV9YMTFfVEFSR0VUKQogICAgICAgICBhZGRfc3ViZGly
ZWN0b3J5KER1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbikKICAgICBlbmRpZiAoKQot
ZWxzZWlmICgiJHtQT1JUfSIgU1RSRVFVQUwgIldpbkNFIikKLSAgICBhZGRfc3ViZGlyZWN0b3J5
KFdpbkNFTGF1bmNoZXIpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX1dFQktJVDIgQU5EIEVOQUJM
RV9BUElfVEVTVFMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggMjU5NjhiYS4uMDFiOGI3YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTA5LTIxICBDc2FiYSBP
c3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBv
cnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxk
LnB5OgorICAgICAgICAoX3Nob3VsZF9maWxlX3RyaWdnZXJfYnVpbGQpOgorICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChTaG91bGRCdWlsZFRlc3QpOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDoKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0pOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQt
d2Via2l0OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVjdG9yeToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAgIChhcmd1bWVudHNGb3JDb25maWd1
cmF0aW9uKToKKyAgICAgICAgKGJ1aWx0RHlsaWJQYXRoRm9yTmFtZSk6CisgICAgICAgIChpc0Fw
cGxlV2luV2ViS2l0KToKKyAgICAgICAgKGxhdW5jaGVyUGF0aCk6CisgICAgICAgIChsYXVuY2hl
ck5hbWUpOgorICAgICAgICAoc2hvdWxkUmVtb3ZlQ01ha2VDYWNoZSk6CisgICAgICAgIChjbWFr
ZUJhc2VkUG9ydEFyZ3VtZW50cyk6CisgICAgICAgIChjbWFrZUJhc2VkUG9ydE5hbWUpOgorICAg
ICAgICAoaXNDTWFrZUJ1aWxkKToKKyAgICAgICAgKGlzV2luQ0UpOiBEZWxldGVkLgorICAgICAg
ICAoZGV0ZXJtaW5lSXNXaW5DRSk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
ZXJsL0ZlYXR1cmVMaXN0LnBtOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0
X3Rlc3RjYXNlLnB5OgorICAgICAgICAodGVzdF9hcGFjaGVfY29uZmlnX2ZpbGVfbmFtZV9mb3Jf
cGxhdGZvcm0pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29uZmlnLmg6CisgICAgICAgICog
V2luQ0VMYXVuY2hlci9DTWFrZUxpc3RzLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBXaW5DRUxh
dW5jaGVyL21haW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGd0ay9tYW5pZmVzdC50eHQ6CisK
IDIwMTQtMDktMjEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4K
IAogICAgICAgICBydW4td2Via2l0LXRlc3RzIHNob3VsZCBjb3VudCB0ZXN0cyBzdWJtaXR0ZWQg
YXMgYWJzb2x1dGUgcGF0aHMgb25jZQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0RSVERhdGFPYmplY3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFP
YmplY3QuY3BwCmluZGV4IGEzMzAzNmIuLjIzNWQ0ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vRFJURGF0YU9iamVjdC5jcHAKQEAgLTI2OSw3ICsyNjksNiBAQCBTVERNRVRIT0RJTVAg
RFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRldGMsIFNUR01FRElVTSog
cG1lZGl1bSwgQgogdm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1l
ZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKQogewogICAgIHN3
aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgY2FzZSBUWU1FRF9I
R0xPQkFMOgogICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IHN0YXRpY19jYXN0PEhHTE9CQUw+
KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDAp
KTsKICAgICAgICAgYnJlYWs7CkBAIC0yODUsNyArMjg0LDYgQEAgdm9pZCBEUlREYXRhT2JqZWN0
OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9S
TUFURVQKICAgICBjYXNlIFRZTUVEX0ZJTEU6CiAgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFt
ZSA9IHN0YXRpY19jYXN0PExQT0xFU1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pG
aWxlTmFtZSwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKICAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
ICAgICBjYXNlIFRZTUVEX0lTVFJFQU06CiAgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNy
Yy0+cHN0bTsKICAgICAgICAgcE1lZFNyYy0+cHN0bS0+QWRkUmVmKCk7CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cmlu
ZGV4IGQ5NmQ5ODcuLmFiZWE2MTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC05Niw3ICs5Niw2IEBAIFVz
YWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdIFtvcHRpb25zIHRvIHBhc3MgdG8gYnVpbGQgc3lz
dGVtXQogICAtLWVmbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIEVGTCBw
b3J0CiAgIC0tZ3RrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgR1RLKyBw
b3J0CiAgIC0td2luY2Fpcm8gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB1c2luZyBDYWly
byAocmF0aGVyIHRoYW4gQ29yZUdyYXBoaWNzKSBvbiBXaW5kb3dzCi0gIC0td2luY2UgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgV2luQ0UgcG9ydAogCiAgIC0taW5zcGVjdG9y
LWZyb250ZW5kICAgICAgICAgICAgICBDb3B5IFdlYiBJbnNwZWN0b3IgdXNlciBpbnRlcmZhY2Ug
cmVzb3VyY2VzIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkKIApAQCAtMjQyLDExICsyNDEsOSBAQCBp
ZiAoaXNJbnNwZWN0b3JGcm9udGVuZCgpKSB7CiBpZiAoaXNDTWFrZUJ1aWxkKCkpIHsKIAogICAg
ICMgQnkgZGVmYXVsdCB3ZSBidWlsZCB1c2luZyBhbGwgb2YgdGhlIGF2YWlsYWJsZSBDUFVzLgot
ICAgIGlmICghaXNXaW5DRSgpKSB7Ci0gICAgICAgICRtYWtlQXJncyAuPSAoJG1ha2VBcmdzID8g
IiAiIDogIiIpIC4gIi1qIiAuIG51bWJlck9mQ1BVcygpIGlmICRtYWtlQXJncyAhfiAvLWpccypc
ZCsvOwotICAgICAgICBteSAkbWF4Q1BVTG9hZCA9IG1heENQVUxvYWQoKSBpZiAkbWFrZUFyZ3Mg
IX4gLy1sXHMqXGQrXC4/XGQqLzsKLSAgICAgICAgJG1ha2VBcmdzIC49ICIgLWwiIC4gbWF4Q1BV
TG9hZCgpIGlmIGRlZmluZWQgJG1heENQVUxvYWQ7Ci0gICAgfQorICAgICRtYWtlQXJncyAuPSAo
JG1ha2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAuIG51bWJlck9mQ1BVcygpIGlmICRtYWtlQXJn
cyAhfiAvLWpccypcZCsvOworICAgIG15ICRtYXhDUFVMb2FkID0gbWF4Q1BVTG9hZCgpIGlmICRt
YWtlQXJncyAhfiAvLWxccypcZCtcLj9cZCovOworICAgICRtYWtlQXJncyAuPSAiIC1sIiAuIG1h
eENQVUxvYWQoKSBpZiBkZWZpbmVkICRtYXhDUFVMb2FkOwogCiAgICAgIyBXZSByZW1vdmUgQ01h
a2VDYWNoZSB0byBhdm9pZCB0aGUgYm90cyB0byByZXVzZSBjYWNoZWQgZmxhZ3Mgd2hlbgogICAg
ICMgd2UgZW5hYmxlIG5ldyBmZWF0dXJlcy4gVGhpcyBmb3JjZXMgYSByZWNvbmZpZ3VyYXRpb24u
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkKaW5kZXggMGEyMDdmYy4uNzVhMDBmZmYg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVjdG9yeQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkKQEAgLTUwLDcgKzUwLDYgQEAgVXNh
Z2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10KICAgLS1lZmwgICAgICAgICAgICAgICAgIEZpbmQg
dGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIEVGTCBwb3J0CiAgIC0tZ3RrICAgICAgICAgICAg
ICAgICBGaW5kIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBHVEsrIHBvcnQKICAgLS13aW5j
YWlybyAgICAgICAgICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdXNpbmcgQ2Fpcm8g
KHJhdGhlciB0aGFuIENvcmVHcmFwaGljcykgb24gV2luZG93cwotICAtLXdpbmNlICAgICAgICAg
ICAgICAgRmluZCB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciB0aGUgV2luQ0UgcG9ydAogCiBFaXRo
ZXIgLS1jb25maWd1cmF0aW9uIG9yIC0tdG9wLWxldmVsIGlzIHJlcXVpcmVkLgogRU9GCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtp
dGRpcnMucG0KaW5kZXggODk4MGUzYi4uMjhiNGQ2MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMTA2
LDcgKzEwNiw2IEBAIG15ICRubVBhdGg7CiBteSAkb3NYVmVyc2lvbjsKIG15ICRnZW5lcmF0ZURz
eW07CiBteSAkaXNHdGs7Ci1teSAkaXNXaW5DRTsKIG15ICRpc1dpbkNhaXJvOwogbXkgJGlzV2lu
NjQ7CiBteSAkaXNFZmw7CkBAIC0zOTcsNyArMzk2LDYgQEAgc3ViIGFyZ3VtZW50c0ZvckNvbmZp
Z3VyYXRpb24oKQogICAgIHB1c2goQGFyZ3MsICctLWd0aycpIGlmIGlzR3RrKCk7CiAgICAgcHVz
aChAYXJncywgJy0tZWZsJykgaWYgaXNFZmwoKTsKICAgICBwdXNoKEBhcmdzLCAnLS13aW5jYWly
bycpIGlmIGlzV2luQ2Fpcm8oKTsKLSAgICBwdXNoKEBhcmdzLCAnLS13aW5jZScpIGlmIGlzV2lu
Q0UoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1pbnNwZWN0b3ItZnJvbnRlbmQnKSBpZiBpc0luc3Bl
Y3RvckZyb250ZW5kKCk7CiAgICAgcmV0dXJuIEBhcmdzOwogfQpAQCAtODExLDkgKzgwOSw2IEBA
IHN1YiBidWlsdER5bGliUGF0aEZvck5hbWUKICAgICBpZiAoaXNFZmwoKSkgewogICAgICAgICBy
ZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci9saWIvbGliZXdlYmtpdDIuc28iOwogICAg
IH0KLSAgICBpZiAoaXNXaW5DRSgpKSB7Ci0gICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Q
cm9kdWN0RGlyLyRsaWJyYXJ5TmFtZSI7Ci0gICAgfQogICAgIGlmIChpc0lPU1dlYktpdCgpKSB7
CiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLyRsaWJyYXJ5TmFtZS5m
cmFtZXdvcmsvJGxpYnJhcnlOYW1lIjsKICAgICB9CkBAIC05NjIsMTggKzk1Nyw2IEBAIHN1YiBp
c0d0aygpCiAgICAgcmV0dXJuICRpc0d0azsKIH0KIAotc3ViIGlzV2luQ0UoKQotewotICAgIGRl
dGVybWluZUlzV2luQ0UoKTsKLSAgICByZXR1cm4gJGlzV2luQ0U7Ci19Ci0KLXN1YiBkZXRlcm1p
bmVJc1dpbkNFKCkKLXsKLSAgICByZXR1cm4gaWYgZGVmaW5lZCgkaXNXaW5DRSk7Ci0gICAgJGlz
V2luQ0UgPSBjaGVja0ZvckFyZ3VtZW50QW5kUmVtb3ZlRnJvbUFSR1YoIi0td2luY2UiKTsKLX0K
LQogIyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBkZWJpYW4sIHVidW50dSwgbGluc3BpcmUsIG9yIHNv
bWV0aGluZyBzaW1pbGFyLgogc3ViIGlzRGViaWFuQmFzZWQoKQogewpAQCAtMTExMCw3ICsxMDkz
LDcgQEAgc3ViIGlzQXBwbGVNYWNXZWJLaXQoKQogCiBzdWIgaXNBcHBsZVdpbldlYktpdCgpCiB7
Ci0gICAgcmV0dXJuIChpc0N5Z3dpbigpIHx8IGlzV2luZG93cygpKSAmJiAhaXNXaW5DYWlybygp
ICYmICFpc0d0aygpICYmICFpc1dpbkNFKCk7CisgICAgcmV0dXJuIChpc0N5Z3dpbigpIHx8IGlz
V2luZG93cygpKSAmJiAhaXNXaW5DYWlybygpICYmICFpc0d0aygpOwogfQogCiBzdWIgaU9TU2lt
dWxhdG9yRGV2aWNlc1BhdGgKQEAgLTEzNDMsNyArMTMyNiw3IEBAIHN1YiByZWxhdGl2ZVNjcmlw
dHNEaXIoKQogc3ViIGxhdW5jaGVyUGF0aCgpCiB7CiAgICAgbXkgJHJlbGF0aXZlU2NyaXB0c1Bh
dGggPSByZWxhdGl2ZVNjcmlwdHNEaXIoKTsKLSAgICBpZiAoaXNHdGsoKSB8fCBpc0VmbCgpIHx8
IGlzV2luQ0UoKSkgeworICAgIGlmIChpc0d0aygpIHx8IGlzRWZsKCkpIHsKICAgICAgICAgcmV0
dXJuICIkcmVsYXRpdmVTY3JpcHRzUGF0aC9ydW4tbGF1bmNoZXIiOwogICAgIH0gZWxzaWYgKGlz
QXBwbGVXZWJLaXQoKSkgewogICAgICAgICByZXR1cm4gIiRyZWxhdGl2ZVNjcmlwdHNQYXRoL3J1
bi1zYWZhcmkiOwpAQCAtMTM1OCw4ICsxMzQxLDYgQEAgc3ViIGxhdW5jaGVyTmFtZSgpCiAgICAg
ICAgIHJldHVybiAiU2FmYXJpIjsKICAgICB9IGVsc2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsK
ICAgICAgICAgcmV0dXJuICJXaW5MYXVuY2hlciI7Ci0gICAgfSBlbHNpZiAoaXNXaW5DRSgpKSB7
Ci0gICAgICAgIHJldHVybiAiV2luQ0VMYXVuY2hlciI7CiAgICAgfQogfQogCkBAIC0xNzAwLDkg
KzE2ODEsNiBAQCBzdWIgY21ha2VDYWNoZVBhdGgoKQogc3ViIHNob3VsZFJlbW92ZUNNYWtlQ2Fj
aGUoQCkKIHsKICAgICBteSAoJGNhY2hlRmlsZVBhdGgsIEBidWlsZEFyZ3MpID0gQF87Ci0gICAg
aWYgKGlzV2luQ0UoKSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBpZiAoIWlz
R3RrKCkpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0xODk0LDIxICsxODcyLDE5IEBAIHN1YiBi
dWlsZENNYWtlUHJvamVjdE9yRXhpdCgkJCQkQCkKIAogc3ViIGNtYWtlQmFzZWRQb3J0QXJndW1l
bnRzKCkKIHsKLSAgICByZXR1cm4gKCctRyAiVmlzdWFsIFN0dWRpbyA4IDIwMDUgU1RBTkRBUkRT
REtfNTAwIChBUk1WNEkpIicpIGlmIGlzV2luQ0UoKTsKICAgICByZXR1cm4gKCk7CiB9CiAKIHN1
YiBjbWFrZUJhc2VkUG9ydE5hbWUoKQogewogICAgIHJldHVybiAiRWZsIiBpZiBpc0VmbCgpOwot
ICAgIHJldHVybiAiV2luQ0UiIGlmIGlzV2luQ0UoKTsKICAgICByZXR1cm4gIkdUSyIgaWYgaXNH
dGsoKTsKICAgICByZXR1cm4gIiI7CiB9CiAKIHN1YiBpc0NNYWtlQnVpbGQoKQogewotICAgIHJl
dHVybiBpc0VmbCgpIHx8IGlzV2luQ0UoKSB8fCBpc0d0aygpOworICAgIHJldHVybiBpc0VmbCgp
IHx8IGlzR3RrKCk7CiB9CiAKIHN1YiBwcm9tcHRVc2VyCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
RmVhdHVyZUxpc3QucG0KaW5kZXggMzdhMmE0ZS4uYTE0ZTY4MSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMjMxLDcgKzIzMSw3IEBAIG15IEBmZWF0dXJlcyA9
ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMiLCBkZWZhdWx0ID0+
IDAsIHZhbHVlID0+IFwkZm9udExvYWRFdmVudHNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9
PiAiZnRwZGlyIiwgZGVzYyA9PiAiVG9nZ2xlIEZUUCBEaXJlY3Rvcnkgc3VwcG9ydCIsCi0gICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9GVFBESVIiLCBkZWZhdWx0ID0+ICFpc1dpbkNFKCksIHZhbHVl
ID0+IFwkZnRwRGlyU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRlRQRElSIiwg
ZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGZ0cERpclN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9u
ID0+ICJmdWxsc2NyZWVuLWFwaSIsIGRlc2MgPT4gIlRvZ2dsZSBGdWxsc2NyZWVuIEFQSSBzdXBw
b3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZVTExTQ1JFRU5fQVBJIiwgZGVmYXVsdCA9
PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwk
ZnVsbHNjcmVlbkFQSVN1cHBvcnQgfSwKQEAgLTI3Niw3ICsyNzYsNyBAQCBteSBAZmVhdHVyZXMg
PSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9JTlBVVF9UWVBFX1dFRUsiLCBkZWZhdWx0ID0+
IDAsIHZhbHVlID0+IFwkaW5wdXRUeXBlV2Vla1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+
ICJpbnNwZWN0b3IiLCBkZXNjID0+ICJUb2dnbGUgSW5zcGVjdG9yIHN1cHBvcnQiLAotICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfSU5TUEVDVE9SIiwgZGVmYXVsdCA9PiAhaXNXaW5DRSgpLCB2YWx1
ZSA9PiBcJGluc3BlY3RvclN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0lOU1BF
Q1RPUiIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRpbnNwZWN0b3JTdXBwb3J0IH0sCiAKICAg
ICB7IG9wdGlvbiA9PiAibGVnYWN5LW5vdGlmaWNhdGlvbnMiLCBkZXNjID0+ICJUb2dnbGUgTGVn
YWN5IE5vdGlmaWNhdGlvbnMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9MRUdB
Q1lfTk9USUZJQ0FUSU9OUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRsZWdhY3lOb3RpZmlj
YXRpb25zU3VwcG9ydCB9LApAQCAtMzc4LDcgKzM3OCw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWR19GT05UUyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4g
XCRzdmdGb250c1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJzeXN0ZW0tbWFsbG9jIiwg
ZGVzYyA9PiAiVG9nZ2xlIHN5c3RlbSBhbGxvY2F0b3IgaW5zdGVhZCBvZiBUQ21hbGxvYyIsCi0g
ICAgICBkZWZpbmUgPT4gIlVTRV9TWVNURU1fTUFMTE9DIiwgZGVmYXVsdCA9PiBpc1dpbkNFKCks
IHZhbHVlID0+IFwkc3lzdGVtTWFsbG9jU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJVU0Vf
U1lTVEVNX01BTExPQyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzeXN0ZW1NYWxsb2NTdXBw
b3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAidGVtcGxhdGUtZWxlbWVudCIsIGRlc2MgPT4gIlRv
Z2dsZSBIVE1MVGVtcGxhdGVFbGVtZW50IHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFC
TEVfVEVNUExBVEVfRUxFTUVOVCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCR0ZW1wbGF0ZUVs
ZW1lbnRTdXBwb3J0IH0sCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
cG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3Rj
YXNlLnB5CmluZGV4IDY0Y2M3ZjIuLmVlMDI1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC01NzAsNyArNTcwLDcgQEAgTU9DSyBvdXRwdXQg
b2YgY2hpbGQgcHJvY2VzcwogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3Bs
YXRmb3JtKHBvcnQsICdsaW51eDInLCAnZGViaWFuLWh0dHBkLTIuMi5jb25mJykKIAogICAgICAg
ICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdtYWMnLCAnYXBh
Y2hlMi4yLWh0dHBkLmNvbmYnKQotICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9y
X3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdhcGFjaGUyLjItaHR0cGQuY29uZicpICAjIHdpbjMy
IGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0Zm9ybS4gIEFwcGxlV2luL1dpbkNhaXJvL1dpbkNF
IHBvcnRzIGFsbCB1c2UgY3lnd2luLgorICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVf
Zm9yX3BsYXRmb3JtKHBvcnQsICd3aW4zMicsICdhcGFjaGUyLjItaHR0cGQuY29uZicpICAjIHdp
bjMyIGlzbid0IGEgc3VwcG9ydGVkIHN5cy5wbGF0Zm9ybS4gIEFwcGxlV2luL1dpbkNhaXJvIHBv
cnRzIGFsbCB1c2UgY3lnd2luLgogICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9y
X3BsYXRmb3JtKHBvcnQsICdiYXJmJywgJ2FwYWNoZTIuMi1odHRwZC5jb25mJykKIAogICAgIGRl
ZiB0ZXN0X3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29uZmlnLmgK
aW5kZXggZTVmMTllZi4uNTc5MDlhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9j
b25maWcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oCkBAIC01Myw3ICs1Myw3
IEBACiAjaWZuZGVmIF9XSU5TT0NLQVBJXwogI2RlZmluZSBfV0lOU09DS0FQSV8gLy8gUHJldmVu
dCBpbmNsdXNpb24gb2Ygd2luc29jay5oIGluIHdpbmRvd3MuaAogI2VuZGlmCi0jZWxpZiAhT1Mo
V0lOQ0UpCisjZWxzZQogI2RlZmluZSBXVEZfVVNFX0NHIDEKICN1bmRlZiBXVEZfVVNFX0NBSVJP
CiAjdW5kZWYgV1RGX1VTRV9DVVJMCmRpZmYgLS1naXQgYS9Ub29scy9XaW5DRUxhdW5jaGVyL0NN
YWtlTGlzdHMudHh0IGIvVG9vbHMvV2luQ0VMYXVuY2hlci9DTWFrZUxpc3RzLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5ZmM2MS4uMDAwMDAwMAotLS0gYS9Ub29scy9XaW5D
RUxhdW5jaGVyL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAot
c2V0KFdpbkNFTGF1bmNoZXJfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9
L3dpbmNlIgotICAgICIke1dFQkNPUkVfRElSfSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90
ZXh0IgotICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgIiR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgIiR7V1RGX0RJUn0iCi0gICAgIiR7REVSSVZFRF9T
T1VSQ0VTX0RJUn0iCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0iCi0pCi0KLXNldChXaW5DRUxh
dW5jaGVyX1NPVVJDRVMKLSAgICAke1RPT0xTX0RJUn0vV2luQ0VMYXVuY2hlci9tYWluLmNwcAot
KQotCi1zZXQoV2luQ0VMYXVuY2hlcl9MSUJSQVJJRVMKLSAgICBXZWJLaXQKLSkKLQotaW5jbHVk
ZV9kaXJlY3Rvcmllcygke1dpbkNFTGF1bmNoZXJfSU5DTFVERV9ESVJFQ1RPUklFU30pCi1hZGRf
ZXhlY3V0YWJsZShXaW5DRUxhdW5jaGVyIFdJTjMyICR7V2luQ0VMYXVuY2hlcl9TT1VSQ0VTfSkK
LWFkZF9kZXBlbmRlbmNpZXMoV2luQ0VMYXVuY2hlciBXZWJLaXQpCi10YXJnZXRfbGlua19saWJy
YXJpZXMoV2luQ0VMYXVuY2hlciAke1dpbkNFTGF1bmNoZXJfTElCUkFSSUVTfSkKLXNldF90YXJn
ZXRfcHJvcGVydGllcyhXaW5DRUxhdW5jaGVyIFBST1BFUlRJRVMgRk9MREVSICJUb29scyIpCi1z
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoV2luQ0VMYXVuY2hlciBQUk9QRVJUSUVTIFJVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllfRElSfSIpCmRpZmYgLS1naXQgYS9Ub29scy9X
aW5DRUxhdW5jaGVyL21haW4uY3BwIGIvVG9vbHMvV2luQ0VMYXVuY2hlci9tYWluLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmMmE1MS4uMDAwMDAwMAotLS0gYS9Ub29scy9X
aW5DRUxhdW5jaGVyL21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLXN0YXRpYyBjb25zdCBMUENX
U1RSIGtNYWluV2luZG93VGl0bGUgPSBMIldlYktpdCBmb3IgV2luQ0UiOwotc3RhdGljIGNvbnN0
IExQQ1dTVFIga01haW5XaW5kb3dDbGFzc05hbWUgPSBMIk1haW5XaW5kb3dDbGFzcyI7Ci0KLQot
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsK
LSAgICBjYXNlIFdNX0RFU1RST1k6Ci0gICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBBUElFTlRSWSBfdFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNF
IGhQcmV2SW5zdGFuY2UsIExQVFNUUiBscENtZExpbmUsIGludCBuQ21kU2hvdykKLXsKLSAgICBV
TlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcmV2SW5zdGFuY2UpOwotCi0gICAgQ29Jbml0aWFsaXpl
RXgoMCwgQ09JTklUX01VTFRJVEhSRUFERUQpOwotICAgIFdlYlZpZXc6OmluaXRpYWxpemUoaElu
c3RhbmNlKTsKLQotICAgIExQQ1dTVFIgaG9tZVVybCA9IGxwQ21kTGluZTsKLSAgICBib29sIGVu
YWJsZURvdWJsZUJ1ZmZlciA9IHRydWU7Ci0gICAgYm9vbCBmdWxsc2NyZWVuID0gZmFsc2U7Ci0K
LSAgICBpZiAoaG9tZVVybFswXSA9PSAnLScpIHsKLSAgICAgICAgZm9yICg7ICpob21lVXJsICYm
ICpob21lVXJsICE9ICcgJzsgKytob21lVXJsKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCpob21l
VXJsKSB7Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBlbmFibGVEb3Vi
bGVCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ2YnOgotICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW4gPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoKmhvbWVVcmwpCi0gICAgICAg
ICAgICArK2hvbWVVcmw7Ci0gICAgfQotCi0gICAgRFdPUkQgc3R5bGVzID0gV1NfVklTSUJMRTsK
LQotICAgIGlmICghZnVsbHNjcmVlbikgewotICAgICAgICBzdHlsZXMgfD0gV1NfQ0FQVElPTgot
ICAgICAgICAgICAgfCBXU19NQVhJTUlaRUJPWAotICAgICAgICAgICAgfCBXU19NSU5JTUlaRUJP
WAotICAgICAgICAgICAgfCBXU19PVkVSTEFQUEVECi0gICAgICAgICAgICB8IFdTX1NZU01FTlUK
LSAgICAgICAgICAgIHwgV1NfVEhJQ0tGUkFNRTsKLSAgICB9Ci0KLSAgICBXTkRDTEFTU1cgd2M7
Ci0gICAgd2Muc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKLSAgICB3
Yy5scGZuV25kUHJvYyAgICA9IFduZFByb2M7Ci0gICAgd2MuY2JDbHNFeHRyYSAgICAgPSAwOwot
ICAgIHdjLmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Yy5oSW5zdGFuY2UgICAgICA9IGhJbnN0
YW5jZTsKLSAgICB3Yy5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2MuaEN1cnNvciAgICAgICAg
PSAwOwotICAgIHdjLmhickJhY2tncm91bmQgID0gc3RhdGljX2Nhc3Q8SEJSVVNIPihHZXRTdG9j
a09iamVjdChXSElURV9CUlVTSCkpOwotICAgIHdjLmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3
Yy5scHN6Q2xhc3NOYW1lICA9IGtNYWluV2luZG93Q2xhc3NOYW1lOwotICAgIFJlZ2lzdGVyQ2xh
c3MoJndjKTsKLQotICAgIEhXTkQgaE1haW5XaW5kb3cgPSBDcmVhdGVXaW5kb3dXKGtNYWluV2lu
ZG93Q2xhc3NOYW1lLCBrTWFpbldpbmRvd1RpdGxlLCBzdHlsZXMsCi0gICAgICAgIENXX1VTRURF
RkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0YW5jZSwgMCk7Ci0KLSAgICBp
ZiAoZnVsbHNjcmVlbikgewotICAgICAgICBTZXRXaW5kb3dQb3MoaE1haW5XaW5kb3csIEhXTkRf
VE9QTU9TVCwgMCwgMCwgR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTiksCi0gICAgICAgICAg
ICBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZU0NSRUVOKSwgU1dQX1NIT1dXSU5ET1cpOwotICAgIH0K
LQotICAgIFNob3dXaW5kb3coaE1haW5XaW5kb3csIG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5k
b3coaE1haW5XaW5kb3cpOwotCi0gICAgV1RGOjpPd25QdHI8V2ViVmlldz4gd2ViVmlldyA9IFdU
Rjo6YWRvcHRQdHIobmV3IFdlYlZpZXcoaE1haW5XaW5kb3csIGVuYWJsZURvdWJsZUJ1ZmZlciA/
IFdlYlZpZXc6OkVuYWJsZURvdWJsZUJ1ZmZlcmluZyA6IFdlYlZpZXc6Ok5vRmVhdHVyZSkpOwot
ICAgIHdlYlZpZXctPmxvYWQoaG9tZVVybCk7Ci0KLSAgICAvLyBNYWluIG1lc3NhZ2UgbG9vcDoK
LSAgICBNU0cgbXNnOwotICAgIEJPT0wgYlJldDsKLSAgICB3aGlsZSAoYlJldCA9IEdldE1lc3Nh
Z2UoJm1zZywgMCwgMCwgMCkpIHsKLSAgICAgICAgaWYgKGJSZXQgPT0gLTEpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGVycm9yIGFuZCBwb3NzaWJseSBleGl0LgotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAg
ICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdlYlZp
ZXcuY2xlYXIoKTsKLSAgICBEZXN0cm95V2luZG93KGhNYWluV2luZG93KTsKLQotICAgIFdlYlZp
ZXc6OmNsZWFudXAoKTsKLSAgICBDb1VuaW5pdGlhbGl6ZSgpOwotCi0gICAgcmV0dXJuIG1zZy53
UGFyYW07Ci19CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvbWFuaWZlc3QudHh0IGIvVG9vbHMvZ3Rr
L21hbmlmZXN0LnR4dAppbmRleCAxNmJkZWExLi43MGQzMzgyIDEwMDY0NAotLS0gYS9Ub29scy9n
dGsvbWFuaWZlc3QudHh0CisrKyBiL1Rvb2xzL2d0ay9tYW5pZmVzdC50eHQKQEAgLTQsNyArNCw2
IEBAIGV4Y2x1ZGUgQ2hhbmdlTG9nCiBleGNsdWRlIE1ha2VmaWxlCiBleGNsdWRlIFBsYXRmb3Jt
RWZsLmNtYWtlCiBleGNsdWRlIFBsYXRmb3JtV2luLmNtYWtlCi1leGNsdWRlIFBsYXRmb3JtV2lu
Q0UuY21ha2UKIGV4Y2x1ZGUgdGFncyQKIGV4Y2x1ZGUgfiQKIGV4Y2x1ZGUgXC4jJApAQCAtNDIs
NyArNDEsNyBAQCBleGNsdWRlIFwueGNjb25maWckCiBleGNsdWRlIFwueGNvZGVwcm9qJAogCiAj
IEV4Y2x1ZGUgZGlyZWN0b3JpZXMgZnJvbSBvdGhlciBwb3J0cwotZXhjbHVkZSAuKlwvKG1hY3xp
b3N8Y2Z8Y2d8Y29jb2F8Q29jb2F8b2JqY3xhdmZvdW5kYXRpb258Y2F8Y3VybHxlZmx8d2lufHdp
bmNlKVwvLiokCitleGNsdWRlIC4qXC8obWFjfGlvc3xjZnxjZ3xjb2NvYXxDb2NvYXxvYmpjfGF2
Zm91bmRhdGlvbnxjYXxjdXJsfGVmbHx3aW4pXC8uKiQKIAogZGlyZWN0b3J5IFNvdXJjZQogZXhj
bHVkZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMKQEAgLTU0LDcgKzUzLDYgQEAgZXhjbHVk
ZSBTb3VyY2UvYm1hbGxvYwogZXhjbHVkZSBTb3VyY2UvY21ha2UvRUZMSGVscGVycy5jbWFrZSQK
IGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSQKIGV4Y2x1ZGUgU291
cmNlL2NtYWtlL09wdGlvbnNXaW5kb3dzLmNtYWtlJAotZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0
aW9uc1dpbkNFLmNtYWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNt
YWtlJAogZXhjbHVkZSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSQKIGV4Y2x1ZGUgU291
cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyJAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238592</attachid>
            <date>2014-09-24 02:18:53 -0700</date>
            <delta_ts>2014-09-25 02:43:23 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>598533</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzZlMmY5Li4xNTFkYmY1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTQtMDktMjQgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ0UuY21h
a2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFr
ZToKKwogMjAxNC0wOS0xNyAgUmVuYXRvIE5hZ3kgIDxybmFneUBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgW0VGTF1bR1RLXSBSZW1vdmUgV2ViS2l0MSByZWxhdGVkIGNvZGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCAxMTYwNGU2Li43ZjQyODJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wOS0yNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8
b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmNhY2hlRmx1
c2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogY29uZmlnLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbU90aGVyVGhyZWFkKToKKyAgICAgICAgKEpTQzo6c3dhcElmQmFj
a3dhcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiB0ZXN0UmVnRXhwLmNw
cDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorCiAyMDE0LTA5
LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWJ1Z2dlckNh
bGxGcmFtZTo6aW52YWxpZGF0ZSgpIHNob3VsZCBpbnZhbGlkYXRlIGFsbCBEZWJ1Z2dlclNjb3Bl
IGNoYWlucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxl
ci5oCmluZGV4IDA4N2QzMWMuLjMyMjhhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMTExOSw4ICsxMTE5LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgbGludXhQYWdlRmx1c2goY3VycmVudCwgY3VycmVudCAr
IHBhZ2UpOwogCiAgICAgICAgICAgICBsaW51eFBhZ2VGbHVzaChjdXJyZW50LCBlbmQpOwotI2Vs
aWYgT1MoV0lOQ0UpCi0gICAgICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwgc2l6ZSwgQ0FD
SEVfU1lOQ19BTEwpOwogI2Vsc2UKICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBt
aXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKaW5kZXggZmZjMzA5MC4uNjQ3ZmViMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aApAQCAtMjQxMCw4ICsyNDEwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgbGludXhQYWdlRmx1
c2goY3VycmVudCwgY3VycmVudCArIHBhZ2UpOwogCiAgICAgICAgIGxpbnV4UGFnZUZsdXNoKGN1
cnJlbnQsIGVuZCk7Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNv
ZGUsIHNpemUsIENBQ0hFX1NZTkNfQUxMKTsKICNlbHNlCiAjZXJyb3IgIlRoZSBjYWNoZUZsdXNo
IHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2NvbmZpZy5oCmluZGV4IDI3NjE2MjQuLjQ1OTY5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9jb25maWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgK
QEAgLTM5LDEyICszOSwxMiBAQAogI2RlZmluZSBXSU5WRVIgMHgwNTAyCiAjZW5kaWYKIAotI2lm
ICFDT01QSUxFUihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2lmICFDT01QSUxFUihN
U1ZDN19PUl9MT1dFUikKIC8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgYmVmb3JlIHRoZSBmaXJz
dCAjaW5jbHVkZSBvZiBzdGRsaWIuaCBvciBpdCB3b24ndCBjb250YWluIHJhbmRfcy4KICNpZm5k
ZWYgX0NSVF9SQU5EX1MKICNkZWZpbmUgX0NSVF9SQU5EX1MKICNlbmRpZgotI2VuZGlmIC8vICFD
T01QSUxFUihNU1ZDN19PUl9MT1dFUikgJiYgIU9TKFdJTkNFKQorI2VuZGlmIC8vICFDT01QSUxF
UihNU1ZDN19PUl9MT1dFUgogCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggMDY1NGZm
ZS4uMTI2OWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCkBAIC02OSwxOCArNjksNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwog
CiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBJZkJhY2t3YXJkcyh2
b2lkKiYgYmVnaW4sIHZvaWQqJiBlbmQpCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgaWYgKGJlZ2lu
IDw9IGVuZCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0ZDo6c3dhcChiZWdpbiwgZW5kKTsKLSNl
bHNlCi1VTlVTRURfUEFSQU0oYmVnaW4pOwotVU5VU0VEX1BBUkFNKGVuZCk7Ci0jZW5kaWYKLX0K
LQogI2lmIE9TKERBUldJTikKIHR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7CiAj
ZWxpZiBPUyhXSU5ET1dTKQpAQCAtMjQ4LDEyICsyMzYsMTAgQEAgdm9pZCBNYWNoaW5lVGhyZWFk
czo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3QKIAogICAgIHZvaWQqIHJlZ2lzdGVyc0JlZ2luID0gJnJlZ2lzdGVyczsKICAgICB2b2lk
KiByZWdpc3RlcnNFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcmVnaXN0ZXJz
ICsgMSkpKTsKLSAgICBzd2FwSWZCYWNrd2FyZHMocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0Vu
ZCk7CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNF
bmQsIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAKICAgICB2b2lkKiBzdGFja0JlZ2lu
ID0gc3RhY2tDdXJyZW50OwogICAgIHZvaWQqIHN0YWNrRW5kID0gd3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkub3JpZ2luKCk7Ci0gICAgc3dhcElmQmFja3dhcmRzKHN0YWNrQmVnaW4sIHN0YWNrRW5k
KTsKICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tCZWdpbiwgc3RhY2tFbmQsIGppdFN0
dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiB9CiAKQEAgLTQ1Myw3ICs0MzksNiBAQCB2b2lkIE1h
Y2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tT3RoZXJUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmIGNv
bnNlcnZhdGl2ZVJvb3RzLAogCiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gb3RoZXJUaHJlYWRT
dGFja1BvaW50ZXIocmVncyk7CiAgICAgdm9pZCogc3RhY2tCYXNlID0gdGhyZWFkLT5zdGFja0Jh
c2U7Ci0gICAgc3dhcElmQmFja3dhcmRzKHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKICAgICBz
dGFja1BvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrUG9p
bnRlcikpKTsKICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoc3RhY2tQb2ludGVyLCBzdGFja0Jh
c2UsIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5kZXggNTVmOWU3Ny4uNjM2YzJmYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
QEAgLTU1LDEyICs1NSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotI2lmIE9T
KFdJTkNFKQotLy8gRnJvbSBwa2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZpbGUgZnJvbSB0aGUg
UGxhdGZvcm0gQnVpbGRlcikKLSNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgwN0YKLWV4dGVybiAi
QyIgX19kZWNsc3BlYyhkbGxpbXBvcnQpIHZvaWQgQ2FjaGVSYW5nZUZsdXNoKExQVk9JRCBwQWRk
ciwgRFdPUkQgZHdMZW5ndGgsIERXT1JEIGR3RmxhZ3MpOwotI2VuZGlmCi0KICNkZWZpbmUgSklU
X0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJM
RShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAwOTQ5M2Fh
Li42OTU4NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1
ZGUgPHNpZ25hbC5oPgogI2VuZGlmCiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0Up
CisjaWYgQ09NUElMRVIoTVNWQykKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNpbmNsdWRlIDxtbXN5
c3RlbS5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTExMDksNyArMTEwOSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSog
ZXhlYykKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2Nt
YWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdAogLy8gdW53aW5kaW5nLgogCi0jaWYgQ09NUElM
RVIoTVNWQykgJiYgIWRlZmluZWQoX0RFQlVHKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIo
TVNWQykgJiYgIWRlZmluZWQoX0RFQlVHKQogI2RlZmluZSBUUlkgICAgICAgX190cnkgewogI2Rl
ZmluZSBFWENFUFQoeCkgfSBfX2V4Y2VwdCAoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB4
OyB9CiAjZWxzZQpAQCAtMTE0MSw3ICsxMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogI2VuZGlmCiAKICNpZiBPUyhXSU5ET1dTKQotI2lmICFPUyhXSU5DRSkKICAgICAv
LyBDeWd3aW4gY2FsbHMgOjpTZXRFcnJvck1vZGUoU0VNX0ZBSUxDUklUSUNBTEVSUk9SUyksIHdo
aWNoIHdlIHdpbGwgaW5oZXJpdC4gVGhpcyBpcyBiYWQgZm9yCiAgICAgLy8gdGVzdGluZy9kZWJ1
Z2dpbmcsIGFzIGl0IGNhdXNlcyB0aGUgcG9zdC1tb3J0ZW0gZGVidWdnZXIgbm90IHRvIGJlIGlu
dm9rZWQuIFdlIHJlc2V0IHRoZQogICAgIC8vIGVycm9yIG1vZGUgaGVyZSB0byB3b3JrIGFyb3Vu
ZCBDeWd3aW4ncyBiZWhhdmlvci4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1MjIyPi4KQEAg
LTExNTUsNyArMTE1NCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBf
Q3J0U2V0UmVwb3J0RmlsZShfQ1JUX0FTU0VSVCwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAg
X0NydFNldFJlcG9ydE1vZGUoX0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9GSUxFKTsKICNlbmRp
ZgotI2VuZGlmCiAKICAgICB0aW1lQmVnaW5QZXJpb2QoMSk7CiAjZW5kaWYKQEAgLTExNzAsNyAr
MTE2OCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNlbmRpZgogICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogCi0jaWYgIU9TKFdJTkNFKQogICAgIGlmIChjaGFy
KiB0aW1lb3V0U3RyaW5nID0gZ2V0ZW52KCJKU0NfdGltZW91dCIpKSB7CiAgICAgICAgIGlmIChz
c2NhbmYodGltZW91dFN0cmluZywgIiVsZiIsICZzX2Rlc2lyZWRUaW1lb3V0KSAhPSAxKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKApAQCAtMTE3OSw3ICsxMTc2LDYgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNyZWF0ZVRocmVh
ZCh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KLSNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2Nh
dGVKSVRNZW1vcnkoKSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAppbmRleCA0OWExYzM2Li5hZjU3MGRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQw
LDEwICs0MCw2IEBACiAjaW5jbHVkZSAiSlNSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCi0jaWYg
T1MoV0lOQ0UpCi1leHRlcm4gIkMiIHRpbWVfdCB0aW1lKHRpbWVfdCogdGltZXIpOyAvLyBQcm92
aWRlZCBieSBsaWJjZS4KLSNlbmRpZgotCiAjaWYgSEFWRShTWVNfVElNRV9IKQogI2luY2x1ZGUg
PHN5cy90aW1lLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKaW5kZXggZjBkZGY5OC4uNDcxOGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTEwNSw3ICsxMDUsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZShj
b25zdCBjaGFyKiBzdHJpbmcsIEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIGJvb2wgb3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBj
b25zdCBjaGFyKiBuYW1lKQogewotI2lmICFPUyhXSU5DRSkKICAgICBjb25zdCBjaGFyKiBzdHJp
bmdWYWx1ZSA9IGdldGVudihuYW1lKTsKICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTEzLDYgQEAgYm9vbCBvdmVycmlkZU9wdGlvbldpdGhI
ZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIAogICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNl
ICVzPSVzXG4iLCBuYW1lLCBzdHJpbmdWYWx1ZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0OTE0MTk3Li4xMzk2
MzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yNjYsMTEgKzI2Niw5
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV9w
ZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhp
cykpOwogCiAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHBhdGhPdXQ7Ci0jaWYgIU9TKFdJTkNF
KQogICAgICAgICBjb25zdCBjaGFyKiBwcm9maWxlclBhdGggPSBnZXRlbnYoIkpTQ19QUk9GSUxF
Ul9QQVRIIik7CiAgICAgICAgIGlmIChwcm9maWxlclBhdGgpCiAgICAgICAgICAgICBwYXRoT3V0
LnByaW50KHByb2ZpbGVyUGF0aCwgIi8iKTsKLSNlbmRpZgogICAgICAgICBwYXRoT3V0LnByaW50
KCJKU0NQcm9maWxlLSIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIi0iLCBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmRhdGFiYXNlSUQoKSwgIi5qc29uIik7CiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+cmVnaXN0ZXJUb1NhdmVBdEV4aXQocGF0aE91dC50b0NTdHJpbmcoKS5kYXRhKCkp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAppbmRleCA5Mjg2Y2UxLi5h
YjhkMWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCkBAIC0zOSw3ICszOSw3
IEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jaWYgQ09NUElMRVIoTVNWQykg
JiYgIU9TKFdJTkNFKQorI2lmIENPTVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAj
aW5jbHVkZSA8bW1zeXN0ZW0uaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0xNTAsNyArMTUw
LDcgQEAgR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGEKIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBm
dW5jdGlvbiBiZWNhdXNlIHRoZSByZWFsTWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKIC8v
IHVud2luZGluZy4KIAotI2lmIENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykgJiYg
IU9TKFdJTkNFKQorI2lmIENPTVBJTEVSKE1TVkMpICYmICFkZWZpbmVkKF9ERUJVRykKICNkZWZp
bmUgVFJZICAgICAgIF9fdHJ5IHsKICNkZWZpbmUgRVhDRVBUKHgpIH0gX19leGNlcHQgKEVYQ0VQ
VElPTl9FWEVDVVRFX0hBTkRMRVIpIHsgeDsgfQogI2Vsc2UKQEAgLTE2MywxMiArMTYzLDEwIEBA
IGludCByZWFsTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpOwogaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogewogI2lmIE9TKFdJTkRPV1MpCi0jaWYgIU9TKFdJTkNFKQogICAgIC8v
IEN5Z3dpbiBjYWxscyA6OlNldEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKSwgd2hp
Y2ggd2Ugd2lsbCBpbmhlcml0LiBUaGlzIGlzIGJhZCBmb3IKICAgICAvLyB0ZXN0aW5nL2RlYnVn
Z2luZywgYXMgaXQgY2F1c2VzIHRoZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlciBub3QgdG8gYmUgaW52
b2tlZC4gV2UgcmVzZXQgdGhlCiAgICAgLy8gZXJyb3IgbW9kZSBoZXJlIHRvIHdvcmsgYXJvdW5k
IEN5Z3dpbidzIGJlaGF2aW9yLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUyMjI+LgogICAg
IDo6U2V0RXJyb3JNb2RlKDApOwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9ERUJVRykKICAgICBf
Q3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCmluZGV4IGM3NmE5YTgu
LjMwMmI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHAKQEAgLTkyLDcgKzkyLDYgQEAgdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCog
cGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCiAKIHZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxs
b2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogewotI2lmICFPUyhXSU5DRSkK
ICAgICAvLyBDaGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgogICAgIGNvbnN0IGNoYXIqIGNv
ZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKICAgICBpZiAo
IWNvZGVQcm9maWxpbmdNb2RlKQpAQCAtMTE5LDcgKzExOCw2IEBAIHZvaWQgQ29kZVByb2ZpbGlu
Zzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgIEFT
U0VSVCghc190cmFja2VyKTsKICAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9y
VHJhY2tlcigpOwogICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwot
I2VuZGlmCiB9CiAKIHZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCog
YWRkcmVzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggMDI5YTU2Yy4uNTNhODRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAx
NC0wOS0yNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Fzc2VydGlv
bnMuY3BwOgorICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmg6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYv
Q3VycmVudFRpbWUuY3BwOgorICAgICAgICAoV1RGOjpsb3dSZXNVVENUaW1lKToKKyAgICAgICAg
KiB3dGYvRGF0YUxvZy5jcHA6CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAg
KFdURjo6Z2V0TG9jYWxUaW1lKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToK
KyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZp
bmVzLmg6CisgICAgICAgICogd3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok9TQWxs
b2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgor
ICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiB3dGYvUkFNU2l6ZS5j
cHA6CisgICAgICAgIChXVEY6OmNvbXB1dGVSQU1TaXplKToKKyAgICAgICAgKiB3dGYvUmFuZG9t
TnVtYmVyU2VlZC5oOgorICAgICAgICAoV1RGOjppbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJh
dG9yKToKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFj
a0JvdW5kczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAg
ICAgIChXVEY6OlN0YWNrQm91bmRzOjppc0dyb3dpbmdEb3dud2FyZCk6CisgICAgICAgICogd3Rm
L1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAod3RmX2JzZWFyY2gpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9TdHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKHN0cm5pY21wKTogRGVsZXRlZC4KKyAg
ICAgICAgKHN0cmljbXApOiBEZWxldGVkLgorICAgICAgICAoc3RyZHVwKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2lu
LmNwcDoKKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAqIHd0
Zi9XaW5kb3dzRXh0cmFzLmg6CisgICAgICAgIChXVEY6OmdldFJlZ2lzdHJ5VmFsdWUpOgorICAg
ICAgICAoV1RGOjpnZXRXaW5kb3dQb2ludGVyKToKKyAgICAgICAgKFdURjo6c2V0V2luZG93UG9p
bnRlcik6CisgICAgICAgICogd3RmL2R0b2EvdXRpbHMuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9X
VEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZvcm1hdCk6CisKIDIwMTQtMDkt
MjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsZWQg
b3V0IHIxNzMzNDYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2NvbmZpZy5oIGIvU291cmNlL1dU
Ri9jb25maWcuaAppbmRleCA1YzIyMzE2Li4yOTAzY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XVEYvY29uZmlnLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNl
bmRpZgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIoTVNWQzdfT1JfTE9XRVIpICYmICFPUyhXSU5D
RSkKKyNpZiAhQ09NUElMRVIoTVNWQzdfT1JfTE9XRVIpCiAvLyBXZSBuZWVkIHRvIGRlZmluZSB0
aGlzIGJlZm9yZSB0aGUgZmlyc3QgI2luY2x1ZGUgb2Ygc3RkbGliLmggb3IgaXQgd29uJ3QgY29u
dGFpbiByYW5kX3MuCiAjaWZuZGVmIF9DUlRfUkFORF9TCiAjZGVmaW5lIF9DUlRfUkFORF9TCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L0Fzc2VydGlvbnMuY3BwCmluZGV4IGVhNWI5YjMuLjRlMTJjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMu
Y3BwCkBAIC01NSw3ICs1NSw3IEBACiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoQ0YpCiAKLSNpZiBD
T01QSUxFUihNU1ZDKSAmJiAhT1MoV0lOQ0UpCisjaWYgQ09NUElMRVIoTVNWQykKICNpbmNsdWRl
IDxjcnRkYmcuaD4KICNlbmRpZgogCkBAIC0xMjcsMjAgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIHZw
cmludGZfc3RkZXJyX2NvbW1vbihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKF92c25wcmludGYoYnVmZmVy
LCBzaXplLCBmb3JtYXQsIGFyZ3MpICE9IC0xKSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgICAg
ICAgICAgLy8gV2luQ0Ugb25seSBzdXBwb3J0cyB3aWRlIGNoYXJzCi0gICAgICAgICAgICAgICAg
d2NoYXJfdCogd2lkZUJ1ZmZlciA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZSAqIHNpemVvZih3Y2hh
cl90KSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZGVCdWZmZXIgPT0gTlVMTCkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEod2lkZUJ1ZmZl
cltpXSA9IGJ1ZmZlcltpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdXKHdpZGVCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIGZyZWUod2lkZUJ1ZmZlcik7Ci0jZWxzZQogICAgICAgICAg
ICAgICAgIE91dHB1dERlYnVnU3RyaW5nQShidWZmZXIpOwotI2VuZGlmCiAgICAgICAgICAgICAg
ICAgZnJlZShidWZmZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMjAxLDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIHByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKQogCiBzdGF0aWMgdm9pZCBwcmludENhbGxTaXRlKGNvbnN0IGNo
YXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbikKIHsKLSNpZiBPUyhXSU5E
T1dTKSAmJiAhT1MoV0lOQ0UpICYmIGRlZmluZWQoX0RFQlVHKQorI2lmIE9TKFdJTkRPV1MpICYm
IGRlZmluZWQoX0RFQlVHKQogICAgIF9DcnREYmdSZXBvcnQoX0NSVF9XQVJOLCBmaWxlLCBsaW5l
LCBOVUxMLCAiJXNcbiIsIGZ1bmN0aW9uKTsKICNlbHNlCiAgICAgLy8gQnkgdXNpbmcgdGhpcyBm
b3JtYXQsIHdoaWNoIG1hdGNoZXMgdGhlIGZvcm1hdCB1c2VkIGJ5IE1TVkMgZm9yIGNvbXBpbGVy
IGVycm9ycywgZGV2ZWxvcGVycwpAQCAtMjQwLDcgKzIyNyw3IEBAIHZvaWQgV1RGR2V0QmFja3Ry
YWNlKHZvaWQqKiBzdGFjaywgaW50KiBzaXplKQogewogI2lmIE9TKERBUldJTikgfHwgKE9TKExJ
TlVYKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSkKICAgICAqc2l6ZSA9IGJhY2t0cmFjZShzdGFj
aywgKnNpemUpOwotI2VsaWYgT1MoV0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2VsaWYgT1MoV0lO
RE9XUykKICAgICAvLyBUaGUgQ2FwdHVyZVN0YWNrQmFja1RyYWNlIGZ1bmN0aW9uIGlzIGF2YWls
YWJsZSBpbiBYUCwgYnV0IGl0IGlzIG5vdCBkZWZpbmVkCiAgICAgLy8gaW4gdGhlIFdpbmRvd3Mg
U2VydmVyIDIwMDMgUjIgUGxhdGZvcm0gU0RLLiBTbywgd2UnbGwgZ3JhYiB0aGUgZnVuY3Rpb24K
ICAgICAvLyB0aHJvdWdoIEdldFByb2NBZGRyZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCmluZGV4IDhiZTA5
NGMuLmE0MGJjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKQEAgLTE5OSwxNCArMTk5LDYgQEAgZXh0ZXJu
ICJDIiB7CiAgIEV4cHJlc3Npb25zIGluc2lkZSB0aGVtIGFyZSBldmFsdWF0ZWQgaW4gZGVidWcg
YnVpbGRzIG9ubHkuCiAqLwogCi0jaWYgT1MoV0lOQ0UpCi0vKiBGSVhNRTogV2UgaW5jbHVkZSB0
aGlzIGhlcmUgb25seSB0byBhdm9pZCBhIGNvbmZsaWN0IHdpdGggdGhlIEFTU0VSVCBtYWNyby4g
Ki8KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jdW5kZWYgbWluCi0jdW5kZWYgbWF4Ci0jdW5kZWYg
RVJST1IKLSNlbmRpZgotCiAjaWYgT1MoV0lORE9XUykKIC8qIEZJWE1FOiBDaGFuZ2UgdG8gdXNl
IHNvbWV0aGluZyBvdGhlciB0aGFuIEFTU0VSVCB0byBhdm9pZCB0aGlzIGNvbmZsaWN0IHdpdGgg
dGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gKi8KICN1bmRlZiBBU1NFUlQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaCBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAppbmRleCA0
ZTYzMGMyLi43ODc2ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKKysr
IGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCkBAIC03NCwxMSArNzQsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICNpZiBPUyhXSU5ET1dTKQogaW5saW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHZv
bGF0aWxlIHVuc2lnbmVkKiBsb2NhdGlvbiwgdW5zaWduZWQgZXhwZWN0ZWQsIHVuc2lnbmVkIG5l
d1ZhbHVlKQogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiBJbnRlcmxvY2tlZENvbXBhcmVF
eGNoYW5nZShyZWludGVycHJldF9jYXN0PExPTkcqPihjb25zdF9jYXN0PHVuc2lnbmVkKj4obG9j
YXRpb24pKSwgc3RhdGljX2Nhc3Q8TE9ORz4obmV3VmFsdWUpLCBzdGF0aWNfY2FzdDxMT05HPihl
eHBlY3RlZCkpID09IHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKTsKLSNlbHNlCiAgICAgcmV0
dXJuIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHJlaW50ZXJwcmV0X2Nhc3Q8TE9ORyB2b2xh
dGlsZSo+KGxvY2F0aW9uKSwgc3RhdGljX2Nhc3Q8TE9ORz4obmV3VmFsdWUpLCBzdGF0aWNfY2Fz
dDxMT05HPihleHBlY3RlZCkpID09IHN0YXRpY19jYXN0PExPTkc+KGV4cGVjdGVkKTsKLSNlbmRp
ZgogfQogCiBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9pZCp2b2xhdGlsZSogbG9j
YXRpb24sIHZvaWQqIGV4cGVjdGVkLCB2b2lkKiBuZXdWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNw
cAppbmRleCA5OTBjYWExLi40MTFlNjcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ3Vy
cmVudFRpbWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcApAQCAtNzIs
MTEgKzcyLDcgQEAgc3RhdGljIGRvdWJsZSBsb3dSZXNVVENUaW1lKCkKIHsKICAgICBGSUxFVElN
RSBmaWxlVGltZTsKIAotI2lmIE9TKFdJTkNFKQotICAgIEdldEN1cnJlbnRGVCgmZmlsZVRpbWUp
OwotI2Vsc2UKICAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZmlsZVRpbWUpOwotI2VuZGlm
CiAKICAgICAvLyBBcyBwZXIgV2luZG93cyBkb2N1bWVudGF0aW9uIGZvciBGSUxFVElNRSwgY29w
eSB0aGUgcmVzdWx0aW5nIEZJTEVUSU1FIHN0cnVjdHVyZSB0byBhCiAgICAgLy8gVUxBUkdFX0lO
VEVHRVIgc3RydWN0dXJlIHVzaW5nIG1lbWNweSAodXNpbmcgbWVtY3B5IGluc3RlYWQgb2YgZGly
ZWN0IGFzc2lnbm1lbnQgY2FuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCmluZGV4IDI5YmVkMTUuLmVhMDRmNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0RhdGFMb2cuY3BwCkBAIC0zNSwxMiArMzUsNiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2Vu
ZGlmCiAKLSNpZiBPUyhXSU5DRSkKLSNpZm5kZWYgX0lPTkJGCi0jZGVmaW5lIF9JT05CRiAweDAw
MDQKLSNlbmRpZgotI2VuZGlmCi0KICNkZWZpbmUgREFUQV9MT0dfVE9fRklMRSAwCiAKIC8vIFNl
dCB0byAxIHRvIHVzZSB0aGUgdGVtcCBkaXJlY3RvcnkgZnJvbSBjb25mc3RyIGluc3RlYWQgb2Yg
aGFyZGNvZGVkIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRo
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcAppbmRleCA2ZWUzNmQzLi4zN2NmMzVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvRGF0ZU1hdGguY3BwCkBAIC0xMjEsNyArMTIxLDYgQEAgc3RhdGljIGNvbnN0IGludCBm
aXJzdERheU9mTW9udGhbMl1bMTJdID0gewogICAgIHswLCAzMSwgNjAsIDkxLCAxMjEsIDE1Miwg
MTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNX0KIH07CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0
aWMgaW5saW5lIHZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1
Y3QgdG0qIGxvY2FsVE0pCiB7CiAjaWYgQ09NUElMRVIoTUlOR1cpCkBAIC0xMzIsNyArMTMxLDYg
QEAgc3RhdGljIGlubGluZSB2b2lkIGdldExvY2FsVGltZShjb25zdCB0aW1lX3QqIGxvY2FsVGlt
ZSwgc3RydWN0IHRtKiBsb2NhbFRNKQogICAgIGxvY2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxU
TSk7CiAjZW5kaWYKIH0KLSNlbmRpZgogCiBib29sIGlzTGVhcFllYXIoaW50IHllYXIpCiB7CkBA
IC00MjQsMTEgKzQyMiw3IEBAIHN0YXRpYyB2b2lkIFVuaXhUaW1lVG9GaWxlVGltZSh0aW1lX3Qg
dCwgTFBGSUxFVElNRSBwZnQpCiAgKi8KIHN0YXRpYyBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0
KHRpbWVfdCBsb2NhbFRpbWUsIGRvdWJsZSB1dGNPZmZzZXQpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0g
ICAgVU5VU0VEX1BBUkFNKGxvY2FsVGltZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHV0Y09mZnNldCk7
Ci0gICAgcmV0dXJuIDA7Ci0jZWxpZiBPUyhXSU5ET1dTKQorI2lmIE9TKFdJTkRPV1MpCiAgICAg
RklMRVRJTUUgdXRjRmlsZVRpbWU7CiAgICAgVW5peFRpbWVUb0ZpbGVUaW1lKGxvY2FsVGltZSwg
JnV0Y0ZpbGVUaW1lKTsKICAgICBTWVNURU1USU1FIHV0Y1N5c3RlbVRpbWUsIGxvY2FsU3lzdGVt
VGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5jcHAKaW5kZXggYjYyZjJmMi4uNmRhNTYxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5jcHAKQEAgLTExOCwxMSArMTE4LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiBP
UyhXSU5ET1dTKQogCi0vLyBUTFNfT1VUX09GX0lOREVYRVMgaXMgbm90IGRlZmluZWQgb24gV2lu
Q0UuCi0jaWZuZGVmIFRMU19PVVRfT0ZfSU5ERVhFUwotI2RlZmluZSBUTFNfT1VUX09GX0lOREVY
RVMgMHhmZmZmZmZmZgotI2VuZGlmCi0KIHN0YXRpYyBEV09SRCBpc0ZvcmliaWRkZW5UbHNJbmRl
eCA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKIHN0YXRpYyBjb25zdCBMUFZPSUQga1Rsc0FsbG93VmFs
dWUgPSByZWludGVycHJldF9jYXN0PExQVk9JRD4oMCk7IC8vIE11c3QgYmUgemVyby4KIHN0YXRp
YyBjb25zdCBMUFZPSUQga1Rsc0ZvcmJpZGRlblZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxMUFZP
SUQ+KDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKaW5kZXggZGY3NmE3YS4uNjAzMjg1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC0yMzksNyArMjM5LDcgQEAgdGhlIHB1YmxpYyBpT1Mg
U0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIEZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnIGZpbGUKICNlbmRpZiAvKiBQTEFURk9STShNQUMpICovCiAKIC8qIC0tLS0tLS0tLSBBcHBs
ZSBXaW5kb3dzIHBvcnQgLS0tLS0tLS0tICovCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lO
Q0UpICYmICFQTEFURk9STShXSU5fQ0FJUk8pCisjaWYgUExBVEZPUk0oV0lOKSAmJiAhUExBVEZP
Uk0oV0lOX0NBSVJPKQogCiAjaWYgIWRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKQogI2Rl
ZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMQpAQCAtMjUzLDI2ICsyNTMsNyBAQCB0aGUgcHVi
bGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmlu
ZXMueGNjb25maWcgZmlsZQogI2RlZmluZSBFTkFCTEVfV0VCR0wgMQogI2VuZGlmCiAKLSNlbmRp
ZiAvKiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykg
Ki8KLQotLyogLS0tLS0tLS0tIFdpbkNFIHBvcnQgLS0tLS0tLS0tICovCi0vKiBXaW5DRSBwb3J0
IGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgUExBVEZPUk0oV0lOKS4gKi8KLS8qIFBMQVRGT1JNKFdJ
TikgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiBidWlsZGluZyBmb3IgdGhlIFdpbkNFIHBvcnQuICov
Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiBPUyhXSU5DRSkKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9E
UkFHX1NVUFBPUlQpCi0jZGVmaW5lIEVOQUJMRV9EUkFHX1NVUFBPUlQgMAotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfRlRQRElSKQotI2RlZmluZSBFTkFCTEVfRlRQRElSIDAKLSNlbmRp
ZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0lOU1BFQ1RPUikKLSNkZWZpbmUgRU5BQkxFX0lOU1BF
Q1RPUiAwCi0jZW5kaWYKLQotI2VuZGlmIC8qIFBMQVRGT1JNKFdJTikgJiYgT1MoV0lOQ0UpICov
CisjZW5kaWYgLyogUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAqLwogCiAv
KiAtLS0tLS0tLS0gV2luZG93cyBDQUlSTyBwb3J0IC0tLS0tLS0tLSAqLwogLyogUExBVEZPUk0o
V0lOX0NBSVJPKSBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIFBMQVRGT1JNKFdJTikuICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oIGIvU291cmNlL1dURi93dGYvT1NB
bGxvY2F0b3IuaAppbmRleCBhNTc2NjcyLi45ODVjZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9PU0FsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKQEAg
LTYzLDcgKzYzLDYgQEAgcHVibGljOgogICAgIC8vIGNvbW1pdHRpbmcvZGVjb21taXR0aW5nIHRo
ZSBlbnRpcmUgcmVnaW9uIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhbGxvdyBhIHN1YnJlZ2lvbiB0
byBiZQogICAgIC8vIHNwZWNpZmllZC4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQqIHJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6
ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1
dGFibGUgPSBmYWxzZSk7Ci0gICAgc3RhdGljIHZvaWQgZGVjb21taXRBbmRSZWxlYXNlKHZvaWQq
IHJlbGVhc2VCYXNlLCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqIGRlY29tbWl0QmFzZSwgc2l6
ZV90IGRlY29tbWl0U2l6ZSk7CiAKICAgICAvLyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5nLCBjb21t
aXR0ZWQgYWxsb2NhdGlvbi4KICAgICAvLyBUaGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0IGJlIGZ1
bGx5IGNvbWl0dGVkLCBhbmQgdGhlIG5ldyBzaXplIHdpbGwgYWxzbyBiZSBmdWxseSBjb21taXR0
ZWQuCkBAIC03OSwyNSArNzgsMTEgQEAgaW5saW5lIHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZl
QW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwgc2l6ZV90IGNvbW1pdFNpemUKICAgICByZXR1
cm4gYmFzZTsKIH0KIAotaW5saW5lIHZvaWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFz
ZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90IHJlbGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJh
c2UsIHNpemVfdCBkZWNvbW1pdFNpemUpCitpbmxpbmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21t
aXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNlLCBzaXplX3QgcmVsZWFzZVNpemUpCiB7Ci0g
ICAgQVNTRVJUKGRlY29tbWl0QmFzZSA+PSByZWxlYXNlQmFzZSAmJiAoc3RhdGljX2Nhc3Q8Y2hh
cio+KGRlY29tbWl0QmFzZSkgKyBkZWNvbW1pdFNpemUpIDw9IChzdGF0aWNfY2FzdDxjaGFyKj4o
cmVsZWFzZUJhc2UpICsgcmVsZWFzZVNpemUpKTsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBPbiBt
b3N0IHBsYXRmb3JtcyB3ZSBjYW4gYWN0dWFsbHkgc2tpcCB0aGlzIGZpbmFsIGRlY29tbWl0OyBy
ZWxlYXNpbmcgdGhlIFZNIHdpbGwKLSAgICAvLyBpbXBsaWNpdGx5IGRlY29tbWl0IGFueSBwaHlz
aWNhbCBtZW1vcnkgaW4gdGhlIHJlZ2lvbi4gVGhpcyBpcyBub3QgdHJ1ZSBvbiBXSU5DRS4KLSAg
ICBkZWNvbW1pdChkZWNvbW1pdEJhc2UsIGRlY29tbWl0U2l6ZSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShkZWNvbW1pdEJhc2UpOwotICAgIFVOVVNFRF9QQVJBTShkZWNvbW1pdFNpemUpOwot
I2VuZGlmCiAgICAgcmVsZWFzZURlY29tbWl0dGVkKHJlbGVhc2VCYXNlLCByZWxlYXNlU2l6ZSk7
CiB9CiAKLWlubGluZSB2b2lkIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2Uodm9pZCog
YmFzZSwgc2l6ZV90IHNpemUpCi17Ci0gICAgZGVjb21taXRBbmRSZWxlYXNlKGJhc2UsIHNpemUs
IGJhc2UsIHNpemUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIE9TQWxs
b2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKFQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwCmluZGV4IGJkYjk3
NmIuLmFiNTc3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhZ2VBbGxvY2F0aW9uQWxp
Z25lZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcApA
QCAtNzgsNyArNzgsNyBAQCB2b2lkIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6ZGVhbGxvY2F0ZSgp
CiAgICAgdm1fZGVhbGxvY2F0ZShjdXJyZW50X3Rhc2soKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9h
ZGRyZXNzX3Q+KHRtcC5iYXNlKCkpLCB0bXAuc2l6ZSgpKTsKICNlbHNlCiAgICAgQVNTRVJUKHRt
cC5tX3Jlc2VydmF0aW9uLmNvbnRhaW5zKHRtcC5iYXNlKCksIHRtcC5zaXplKCkpKTsKLSAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHRtcC5tX3Jlc2VydmF0aW9uLmJhc2UoKSwg
dG1wLm1fcmVzZXJ2YXRpb24uc2l6ZSgpLCB0bXAuYmFzZSgpLCB0bXAuc2l6ZSgpKTsKKyAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHRtcC5tX3Jlc2VydmF0aW9uLmJhc2UoKSwg
dG1wLm1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA1
MzI3NzhlLi5iNjAwN2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTM5NCwxMSArMzk0LDYgQEAKICNkZWZp
bmUgV1RGX09TX1NPTEFSSVMgMQogI2VuZGlmCiAKLS8qIE9TKFdJTkNFKSAtIFdpbmRvd3MgQ0U7
IG5vdGUgdGhhdCBmb3IgdGhpcyBwbGF0Zm9ybSBPUyhXSU5ET1dTKSBpcyBhbHNvIGRlZmluZWQg
Ki8KLSNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0jZGVmaW5lIFdURl9PU19XSU5DRSAxCi0jZW5k
aWYKLQogLyogT1MoV0lORE9XUykgLSBBbnkgdmVyc2lvbiBvZiBXaW5kb3dzICovCiAjaWYgZGVm
aW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpCiAjZGVmaW5lIFdURl9PU19XSU5ET1dTIDEK
QEAgLTYwMCw3ICs1OTUsNyBAQAogCiAjZW5kaWYgLyogT1MoREFSV0lOKSAqLwogCi0jaWYgT1Mo
V0lORE9XUykgJiYgIU9TKFdJTkNFKQorI2lmIE9TKFdJTkRPV1MpCiAKICNkZWZpbmUgSEFWRV9T
WVNfVElNRUJfSCAxCiAjZGVmaW5lIEhBVkVfQUxJR05FRF9NQUxMT0MgMQpAQCAtNjU1LDggKzY1
MCw3IEBACiAvKiBUaGUgSklUIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBhbGwgeDg2LCB4ODYt
NjQsIEFSTSAmIE1JUFMgcGxhdGZvcm1zIGV4Y2VwdCBBUk12N2sgYW5kIFdpbmRvd3MuICovCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgXAogICAgICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkgXAotICAgICYmICFDUFUo
QVBQTEVfQVJNVjdLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICYmICFPUyhXSU5DRSkKKyAgICAmJiAhQ1BVKEFQUExFX0FS
TVY3SykKICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKIApAQCAtOTQzLDcgKzkzNyw3IEBA
CiAjZGVmaW5lIFdURl9VU0VfVU5JWF9ET01BSU5fU09DS0VUUyAxCiAjZW5kaWYKIAotI2lmICFk
ZWZpbmVkKFdURl9VU0VfSU1MQU5HX0ZPTlRfTElOSzIpICYmICFPUyhXSU5DRSkKKyNpZiAhZGVm
aW5lZChXVEZfVVNFX0lNTEFOR19GT05UX0xJTksyKQogI2RlZmluZSBXVEZfVVNFX0lNTEFOR19G
T05UX0xJTksyIDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGNiMmM1
MjYuLjc0YzllYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC01LDE1ICs1LDkgQEAg
bGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICB3aW4vUnVuTG9vcFdpbi5jcHAKICkKIAotaWYg
KFdJTkNFKQotICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAgICAgICAgbW10aW1lcgot
ICAgICkKLWVsc2UgKCkKLSAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCi0gICAgICAgIHdp
bm1tCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKKyAgICB3aW5t
bQorKQogCiBsaXN0KEFQUEVORCBXVEZfSEVBREVSUwogICAgICIke0RFUklWRURfU09VUkNFU19X
VEZfRElSfS9XVEZIZWFkZXJEZXRlY3Rpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1JBTVNpemUuY3BwIGIvU291cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKaW5kZXggNTBiNTIyMi4u
YTZkMWY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvUkFNU2l6ZS5jcHAKQEAgLTYxLDEzICs2MSw2IEBAIHN0YXRpYyBzaXplX3Qg
Y29tcHV0ZVJBTVNpemUoKQogICAgIGlmIChwYWdlcyA9PSAtMSB8fCBwYWdlU2l6ZSA9PSAtMSkK
ICAgICAgICAgcmV0dXJuIHJhbVNpemVHdWVzczsKICAgICByZXR1cm4gcGFnZXMgKiBwYWdlU2l6
ZTsKLSNlbGlmIE9TKFdJTkNFKQotICAgIE1FTU9SWVNUQVRVUyBzdGF0dXM7Ci0gICAgc3RhdHVz
LmR3TGVuZ3RoID0gc2l6ZW9mKHN0YXR1cyk7Ci0gICAgR2xvYmFsTWVtb3J5U3RhdHVzKCZzdGF0
dXMpOwotICAgIGlmIChzdGF0dXMuZHdUb3RhbFBoeXMgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJh
bVNpemVHdWVzczsKLSAgICByZXR1cm4gc3RhdHVzLmR3VG90YWxQaHlzOwogI2VsaWYgT1MoV0lO
RE9XUykKICAgICBNRU1PUllTVEFUVVNFWCBzdGF0dXM7CiAgICAgc3RhdHVzLmR3TGVuZ3RoID0g
c2l6ZW9mKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJT
ZWVkLmggYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKaW5kZXggMTNhZDQ4ZS4u
YTY1ZDdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaApAQCAtNDUsOSArNDUsNiBAQCBp
bmxpbmUgdm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCkKIHsKICNpZiBPUyhE
QVJXSU4pCiAgICAgLy8gT24gRGFyd2luIHdlIHVzZSBhcmM0cmFuZG9tIHdoaWNoIGluaXRpYWxp
c2VzIGl0c2VsZi4KLSNlbGlmIE9TKFdJTkNFKQotICAgIC8vIGluaXRpYWxpemUgcmFuZCgpCi0g
ICAgc3JhbmQoR2V0VGlja0NvdW50KCkpOwogI2VsaWYgQ09NUElMRVIoTVNWQykgJiYgZGVmaW5l
ZChfQ1JUX1JBTkRfUykKICAgICAvLyBPbiBXaW5kb3dzIHdlIHVzZSByYW5kX3Mgd2hpY2ggaW5p
dGlhbGlzZXMgaXRzZWxmCiAjZWxpZiBPUyhVTklYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU3RhY2tCb3VuZHMuY3BwIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuY3BwCmluZGV4
IDFjODY3NTAuLmYzMDhhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5jcHAKQEAgLTEyNCwxNiArMTI0
LDYgQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCiAgICAgLy8gc3RhY2tPcmlnaW4u
QWxsb2NhdGlvbkJhc2UgcG9pbnRzIHRvIHRoZSByZXNlcnZlZCBzdGFjayBtZW1vcnkgYmFzZSBh
ZGRyZXNzLgogCiAgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tPcmlnaW4u
QmFzZUFkZHJlc3MpICsgc3RhY2tPcmlnaW4uUmVnaW9uU2l6ZTsKLSNpZiBPUyhXSU5DRSkKLSAg
ICBTWVNURU1fSU5GTyBzeXN0ZW1JbmZvOwotICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbUluZm8p
OwotICAgIERXT1JEIHBhZ2VTaXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotCi0gICAgTUVN
T1JZX0JBU0lDX0lORk9STUFUSU9OIHN0YWNrTWVtb3J5OwotICAgIFZpcnR1YWxRdWVyeShtX29y
aWdpbiwgJnN0YWNrTWVtb3J5LCBzaXplb2Yoc3RhY2tNZW1vcnkpKTsKLQotICAgIG1fYm91bmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pIC0gc3RhY2tNZW1vcnkuUmVnaW9uU2l6ZSAr
IHBhZ2VTaXplOwotI2Vsc2UKICAgICAvLyBUaGUgc3RhY2sgb24gV2luZG93cyBjb25zaXN0cyBv
dXQgb2YgdGhyZWUgcGFydHMgKHVuY29tbWl0dGVkIG1lbW9yeSwgYSBndWFyZCBwYWdlIGFuZCBw
cmVzZW50CiAgICAgLy8gY29tbWl0dGVkIG1lbW9yeSkuIFRoZSAzIHJlZ2lvbnMgaGF2ZSBkaWZm
ZXJlbnQgQmFzZUFkZHJlc3NlcyBidXQgYWxsIGhhdmUgdGhlIHNhbWUgQWxsb2NhdGlvbkJhc2UK
ICAgICAvLyBzaW5jZSB0aGV5IGFyZSBhbGwgZnJvbSB0aGUgc2FtZSBWaXJ0dWFsQWxsb2MuIFRo
ZSAzIHJlZ2lvbnMgYXJlIGxhaWQgb3V0IGluIG1lbW9yeSAoZnJvbSBoaWdoIHRvCkBAIC0xNzMs
NyArMTYzLDYgQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCiAgICAgQVNTRVJUKGVu
ZE9mU3RhY2sgPT0gY29tcHV0ZWRFbmQpOwogI2VuZGlmIC8vIE5ERUJVRwogICAgIG1fYm91bmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kT2ZTdGFjaykgKyBndWFyZFBhZ2UuUmVnaW9uU2l6ZTsK
LSNlbmRpZiAvLyBPUyhXSU5DRSkKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IGI1
N2FhZTIuLjE3OWNjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgK
KysrIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtOTgsMTEgKzk4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fb3JpZ2luICYmIG1fYm91bmQpOwotI2lmIE9TKFdJTkNFKQotICAgICAgICByZXR1
cm4gbV9vcmlnaW4gPiBtX2JvdW5kOwotI2Vsc2UKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5k
aWYKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJF
eHRyYXMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCmluZGV4IGMxZjQ1ZTAuLmEw
MTg3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCkBAIC0yOTcsMzEgKzI5Nyw2IEBAIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGlzQ29tcGlsYXRpb25UaHJlYWQoKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKLSNpZiBPUyhXSU5DRSkKLS8vIFdpbmRvd3MgQ0UgQ1JUIGhhcyBkb2VzIG5vdCBpbXBs
ZW1lbnQgYnNlYXJjaCgpLgotaW5saW5lIHZvaWQqIHd0Zl9ic2VhcmNoKGNvbnN0IHZvaWQqIGtl
eSwgY29uc3Qgdm9pZCogYmFzZSwgc2l6ZV90IGNvdW50LCBzaXplX3Qgc2l6ZSwgaW50ICgqY29t
cGFyZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotewotICAgIGNvbnN0IGNoYXIqIGZp
cnN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpOwotCi0gICAgd2hpbGUgKGNvdW50
KSB7Ci0gICAgICAgIHNpemVfdCBwb3MgPSAoY291bnQgLSAxKSA+PiAxOwotICAgICAgICBjb25z
dCBjaGFyKiBpdGVtID0gZmlyc3QgKyBwb3MgKiBzaXplOwotICAgICAgICBpbnQgY29tcGFyZVJl
c3VsdCA9IGNvbXBhcmUoaXRlbSwga2V5KTsKLSAgICAgICAgaWYgKCFjb21wYXJlUmVzdWx0KQot
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhcio+KGl0ZW0pOwotICAgICAgICBpZiAo
Y29tcGFyZVJlc3VsdCA8IDApIHsKLSAgICAgICAgICAgIGNvdW50IC09IChwb3MgKyAxKTsKLSAg
ICAgICAgICAgIGZpcnN0ICs9IChwb3MgKyAxKSAqIHNpemU7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY291bnQgPSBwb3M7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZp
bmUgYnNlYXJjaChrZXksIGJhc2UsIGNvdW50LCBzaXplLCBjb21wYXJlKSB3dGZfYnNlYXJjaChr
ZXksIGJhc2UsIGNvdW50LCBzaXplLCBjb21wYXJlKQotI2VuZGlmCi0KIC8vIFRoaXMgdmVyc2lv
biBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KIGVudW0gTm90TnVsbFRhZyB7IE5v
dE51bGwgfTsKIGlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBOb3ROdWxsVGFnLCB2
b2lkKiBsb2NhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5o
IGIvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKaW5kZXggMTAzZTE3My4uYjFhZWE1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvU3RyaW5nRXh0cmFzLmgKQEAgLTY5LDI1ICs2OSw2IEBAIGlubGluZSBkb3VibGUgd3Rm
X3ZzbnByaW50ZihjaGFyKiBidWZmZXIsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogZm9ybWF0
LCB2YV9sCiAvLyB2c25wcmludGYgZG9lcyBub3QgbnVsbCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlci4g
V2ViS2l0IGNhbiByZWx5IG9uIHRoZSBudWxsIHRlcm1pbmF0aW9uLgogI2RlZmluZSB2c25wcmlu
dGYoYnVmZmVyLCBjb3VudCwgZm9ybWF0LCBhcmdzKSB3dGZfdnNucHJpbnRmKGJ1ZmZlciwgY291
bnQsIGZvcm1hdCwgYXJncykKIAotI2lmIE9TKFdJTkNFKQotCi1pbmxpbmUgaW50IHN0cm5pY21w
KGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IGNoYXIqIHN0cmluZzIsIHNpemVfdCBjb3VudCkK
LXsKLSAgICByZXR1cm4gX3N0cm5pY21wKHN0cmluZzEsIHN0cmluZzIsIGNvdW50KTsKLX0KLQot
aW5saW5lIGludCBzdHJpY21wKGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IGNoYXIqIHN0cmlu
ZzIpCi17Ci0gICAgcmV0dXJuIF9zdHJpY21wKHN0cmluZzEsIHN0cmluZzIpOwotfQotCi1pbmxp
bmUgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHN0clNvdXJjZSkKLXsKLSAgICByZXR1cm4gX3N0
cmR1cChzdHJTb3VyY2UpOwotfQotCi0jZW5kaWYKLQogaW5saW5lIGludCBzdHJuY2FzZWNtcChj
b25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVfdCBsZW4pCiB7CiAgICAgcmV0dXJu
IF9zdHJuaWNtcChzMSwgczIsIGxlbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRTcGVjaWZpYy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaAppbmRleCAxZGNi
Mzc4Li5mNDA0MGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKQEAgLTE1OCwxMSArMTU4LDYg
QEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OnNldChUKiBwdHIpCiAKICNlbGlmIE9T
KFdJTkRPV1MpCiAKLS8vIFRMU19PVVRfT0ZfSU5ERVhFUyBpcyBub3QgZGVmaW5lZCBvbiBXaW5D
RS4KLSNpZm5kZWYgVExTX09VVF9PRl9JTkRFWEVTCi0jZGVmaW5lIFRMU19PVVRfT0ZfSU5ERVhF
UyAweGZmZmZmZmZmCi0jZW5kaWYKLQogLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFRMUyBrZXlz
IHRoYXQgY2FuIGJlIGNyZWF0ZWQuIEZvciBzaW1wbGlmaWNhdGlvbiwgd2UgYXNzdW1lIHRoYXQ6
CiAvLyAxKSBPbmNlIHRoZSBpbnN0YW5jZSBvZiBUaHJlYWRTcGVjaWZpYzw+IGlzIGNyZWF0ZWQs
IGl0IHdpbGwgbm90IGJlIGRlc3RydWN0ZWQgdW50aWwgdGhlIHByb2dyYW0gZGllcy4KIC8vIDIp
IFdlIGRvIG5vdCBuZWVkIHRvIGhvbGQgbWFueSBpbnN0YW5jZXMgb2YgVGhyZWFkU3BlY2lmaWM8
PiBkYXRhLiBUaGlzIGZpeGVkIG51bWJlciBzaG91bGQgYmUgZmFyIGVub3VnaC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCmluZGV4IGU3MmFmZmYuLjJlOTc2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcApAQCAtOTQsNiArOTQsNyBAQAogCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1
ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEwNywxMCArMTA4LDYgQEAKICNpbmNsdWRlICJUaHJlYWRT
cGVjaWZpYy5oIgogI2VuZGlmCiAKLSNpZiAhT1MoV0lOQ0UpCi0jaW5jbHVkZSA8cHJvY2Vzcy5o
PgotI2VuZGlmCi0KICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRp
ZgpAQCAtMjE4LDE3ICsyMTUsOSBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIHVuc2ln
bmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQg
PSAwOwogICAgIE93blB0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24gPSBh
ZG9wdFB0cihuZXcgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKGVudHJ5UG9pbnQsIGRhdGEpKTsK
LSNpZiBPUyhXSU5DRSkKLSAgICAvLyBUaGlzIGlzIHNhZmUgb24gV0lOQ0UsIHNpbmNlIENSVCBp
cyBpbiB0aGUgY29yZSBhbmQgaW5uYXRlbHkgbXVsdGl0aHJlYWRlZC4KLSAgICAvLyBPbiBkZXNr
dG9wIFdpbmRvd3MsIG5lZWQgdG8gdXNlIF9iZWdpbnRocmVhZGV4IChub3QgYXZhaWxhYmxlIG9u
IFdpbkNFKSBpZiB1c2luZyBhbnkgQ1JUIGZ1bmN0aW9ucwotICAgIEhBTkRMRSB0aHJlYWRIYW5k
bGUgPSBDcmVhdGVUaHJlYWQoMCwgMCwgKExQVEhSRUFEX1NUQVJUX1JPVVRJTkUpd3RmVGhyZWFk
RW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgKExQRFdPUkQpJnRocmVhZElkZW50aWZp
ZXIpOwotI2Vsc2UKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxI
QU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRp
b24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7Ci0jZW5kaWYKICAgICBpZiAoIXRocmVh
ZEhhbmRsZSkgewotI2lmIE9TKFdJTkNFKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcDogJWxkIiwgZW50cnlQ
b2ludCwgZGF0YSwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0jZWxpZiAhSEFWRShFUlJOT19IKQorI2lm
ICFIQVZFKEVSUk5PX0gpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJl
YWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwLiIsIGVudHJ5UG9pbnQsIGRhdGEpOwog
I2Vsc2UKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRy
eSBwb2ludCAlcCB3aXRoIGRhdGEgJXA6ICVsZCIsIGVudHJ5UG9pbnQsIGRhdGEsIGVycm5vKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dpbmRvd3NFeHRyYXMuaCBiL1NvdXJjZS9XVEYv
d3RmL1dpbmRvd3NFeHRyYXMuaAppbmRleCAxNmJjODY1Li4wNjFkYjUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9XaW5kb3dzRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvV2luZG93
c0V4dHJhcy5oCkBAIC0zOSwzNCArMzksMTcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGlubGluZSBI
UkVTVUxUIGdldFJlZ2lzdHJ5VmFsdWUoSEtFWSBoa2V5LCBMUENXU1RSIHBzelN1YktleSwgTFBD
V1NUUiBwc3pWYWx1ZSwgTFBEV09SRCBwZHdUeXBlLCBMUFZPSUQgcHZEYXRhLCBMUERXT1JEIHBj
YkRhdGEpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgSEtFWSBrZXk7Ci0gICAgaWYgKDo6UmVnT3Bl
bktleUV4Vyhoa2V5LCBwc3pTdWJLZXksIDAsIDAsICZrZXkpICE9IEVSUk9SX1NVQ0NFU1MpCi0g
ICAgICAgIHJldHVybiBFUlJPUl9JTlZBTElEX05BTUU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSA6
OlJlZ1F1ZXJ5VmFsdWVFeFcoa2V5LCBwc3pWYWx1ZSwgMCwgcGR3VHlwZSwgc3RhdGljX2Nhc3Q8
TFBCWVRFPihwdkRhdGEpLCBwY2JEYXRhKTsKLSAgICA6OlJlZ0Nsb3NlS2V5KGtleSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSNlbHNlCiAgICAgcmV0dXJuIDo6U0hHZXRWYWx1ZVcoaGtleSwgcHN6
U3ViS2V5LCBwc3pWYWx1ZSwgcGR3VHlwZSwgcHZEYXRhLCBwY2JEYXRhKTsKLSNlbmRpZgogfQog
CiBpbmxpbmUgdm9pZCogZ2V0V2luZG93UG9pbnRlcihIV05EIGhXbmQsIGludCBpbmRleCkKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oOjpHZXRX
aW5kb3dMb25nKGhXbmQsIGluZGV4KSk7Ci0jZWxzZQogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPig6OkdldFdpbmRvd0xvbmdQdHIoaFduZCwgaW5kZXgpKTsKLSNlbmRpZgogfQog
CiBpbmxpbmUgdm9pZCogc2V0V2luZG93UG9pbnRlcihIV05EIGhXbmQsIGludCBpbmRleCwgdm9p
ZCogdmFsdWUpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KDo6U2V0V2luZG93TG9uZyhoV25kLCBpbmRleCwgcmVpbnRlcnByZXRfY2FzdDxMT05H
Pih2YWx1ZSkpKTsKLSNlbHNlCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDo6
U2V0V2luZG93TG9uZ1B0cihoV25kLCBpbmRleCwgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4o
dmFsdWUpKSk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmgK
aW5kZXggNWM0MTQ4Mi4uOWUyZmMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS91
dGlscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2R0b2EvdXRpbHMuaApAQCAtNDksNyArNDksNyBA
QAogZGVmaW5lZChfX0FSTUVMX18pIHx8IFwKIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikK
ICNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCi0j
ZWxpZiBDUFUoTUlQUykgfHwgQ1BVKFBQQykgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoUFBDNjRMRSkg
fHwgT1MoV0lOQ0UpIHx8IENQVShTSDQpIHx8IENQVShTMzkwKSB8fCBDUFUoUzM5MFgpIHx8IENQ
VShJQTY0KSB8fCBDUFUoQUxQSEEpIHx8IENQVShBUk02NCkgfHwgQ1BVKEhQUEEpCisjZWxpZiBD
UFUoTUlQUykgfHwgQ1BVKFBQQykgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoUFBDNjRMRSkgfHwgQ1BV
KFNINCkgfHwgQ1BVKFMzOTApIHx8IENQVShTMzkwWCkgfHwgQ1BVKElBNjQpIHx8IENQVShBTFBI
QSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoSFBQQSkKICNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05f
Q09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCiAjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRl
ZmluZWQoX19pMzg2X18pCiAjaWYgZGVmaW5lZChfV0lOMzIpCkBAIC01OCw4ICs1OCw2IEBAIGRl
ZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikKICNlbHNlCiAjdW5kZWYgRE9VQkxFX0NPTlZFUlNJ
T05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUwogI2VuZGlmICAvLyBfV0lOMzIKLSNlbGlmIGRl
ZmluZWQoV0lOQ0UpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLSNkZWZpbmUgRE9VQkxFX0NPTlZF
UlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCiAjZWxzZQogI2Vycm9yIFRhcmdldCBh
cmNoaXRlY3R1cmUgd2FzIG5vdCBkZXRlY3RlZCBhcyBzdXBwb3J0ZWQgYnkgRG91YmxlLUNvbnZl
cnNpb24uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCAwODAzYzJkLi5m
NjllYzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC00NTIsMjkgKzQ1Miw2IEBA
IFZlY3RvcjxVQ2hhcj4gU3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpIGNv
bnN0CiAKIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsK
LSNpZiBPUyhXSU5DRSkKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKLQotICAgIFZlY3RvcjxjaGFyLCAyNTY+IGJ1ZmZlcjsKLQotICAgIGludCBidWZmZXJT
aXplID0gMjU2OwotICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7Ci0gICAgZm9yICg7Oykg
ewotICAgICAgICBpbnQgd3JpdHRlbiA9IHZzbnByaW50ZihidWZmZXIuZGF0YSgpLCBidWZmZXJT
aXplLCBmb3JtYXQsIGFyZ3MpOwotICAgICAgICB2YV9lbmQoYXJncyk7Ci0KLSAgICAgICAgaWYg
KHdyaXR0ZW4gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwotICAgICAgICBp
ZiAod3JpdHRlbiA+IDApCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0YSgpKSwgd3JpdHRlbik7Ci0g
ICAgICAgIAotICAgICAgICBidWZmZXJTaXplIDw8PSAxOwotICAgICAgICBidWZmZXIucmVzaXpl
KGJ1ZmZlclNpemUpOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIH0KLQot
I2Vsc2UKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKIApA
QCAtNTA5LDcgKzQ4Niw2IEBAIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKICAgICB2YV9lbmQoYXJncyk7CiAgICAgCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnVmZmVyLmRhdGEoKSksIGxl
bik7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIFN0cmluZzo6bnVtYmVyKGludCBudW1iZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZDRmMGExZC4uOGU0NTdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAor
MjAxNC0wOS0yNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2
YXRlTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIFBsYXRmb3JtV2luQ0UuY21ha2U6IFJlbW92
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgICogbG9hZGVyL2ljb24vd2luY2Uv
SWNvbkRhdGFiYXNlV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51
RXZlbnRGb3JLZXkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAqIHBh
Z2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmNyZWF0ZURyYWdnaW5nRGF0YVRyYW5zZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250
ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNv
bGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmFtZUFuZEFj
dGl2YXRlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRJQlBpeGVsRGF0YTo6c2V0UkdCQUJpdG1hcEFs
cGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNBbHBoYUJsZW5kU3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjph
bHBoYUJsZW5kSWZTdXBwb3J0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
Y29uV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjppbml0R0RJRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpi
b3VuZHNGb3JHRElHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6d2lk
dGhGb3JHRElHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c2NyaXB0
Rm9udFByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRD
YWNoZVdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdl
VHJlZU5vZGVXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhZGllbnRXaW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyRGF0YVdpbmNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5
ZXJQcml2YXRlV2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1h
cC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZv
bnREYXRhV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmllcldpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRlTm90aWZpZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9DT01QdHIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJ
dGVtV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmdldENvbnRleHRNZW51SXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmNyZWF0ZVBsYXRmb3JtQ29udGV4dE1lbnVGcm9t
SXRlbXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhZ0xhYmVsRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpsb2dMZXZlbFN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZE93
bmVyV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5
QW5kUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZXNz
YWdlVG9FdmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVl
bldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VJbmZvRm9yV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNob3cp
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnVXaW46OnJlZ2lzdGVyQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51V2luOjp3bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhl
bWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50QnV0
dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGltZXJXaW5kb3dXbmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVPZmZTY3Jl
ZW5UaW1lcldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpxdWV1ZVRpbWVyUHJvYyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Tb2Z0TGlua2lu
Zy5oOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndpbmRvd3NWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NvckFyY2hp
dGVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjphcmNoaXRlY3R1cmVUb2tlbkZvclVBU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldDRGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgICogcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
Vmlld05vbmUuY3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9y
eSk6CisgICAgICAgIChXZWJDb3JlOjphZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMpOgor
ICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luUGFja2FnZTo6bG9hZCk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9v
a3MpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJQbHVnaW5WaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnduZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBh
aW50SW50b1RyYW5zZm9ybWVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bkNFLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdp
bkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFk
V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRX
aW5DRS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFk
V2luQ0UuaDogUmVtb3ZlZC4KKwogMjAxNC0wOS0yNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIHN0eWxlIG1hcmtpbmcgZnJvbSA6
bnRoLWNoaWxkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcAppbmRleCBhYzZmNDZmLi4x
MjcxYTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0NETVByaXZhdGVNZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwCkBAIC0zNCw3ICszNCw3IEBA
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAK
LSNpZiBQTEFURk9STShJT1MpIHx8IE9TKFdJTkNFKQorI2lmIFBMQVRGT1JNKElPUykKICNpbmNs
dWRlICJTb2Z0TGlua2luZy5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtV2luQ0UuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtl
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmU4OTE4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ0UuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw2NCAr
MCwwIEBACi1saXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vd2luY2UiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3dp
biIKLSAgICAiJHszUkRQQVJUWV9ESVJ9L2xpYmpwZWciCi0gICAgIiR7M1JEUEFSVFlfRElSfS9s
aWJwbmciCi0gICAgIiR7M1JEUEFSVFlfRElSfS9saWJ4bWwyL2luY2x1ZGUiCi0gICAgIiR7M1JE
UEFSVFlfRElSfS9saWJ4c2x0L2luY2x1ZGUiCi0gICAgIiR7M1JEUEFSVFlfRElSfS9zcWxpdGUi
Ci0gICAgIiR7M1JEUEFSVFlfRElSfS96bGliIgotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKLSAgICBwYWdlL3dpbi9GcmFtZUdkaVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yTm9uZS5jcHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERh
dGEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udENhY2hlV2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZv
cm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdpbmNlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luY2UuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZVdpbkNFLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5j
ZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5jZS5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAKLQotICAgIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKLQotICAgIHBsYXRmb3JtL25l
dHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9DcmVk
ZW50aWFsU3RvcmFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Qcm94eVNlcnZl
cldpbi5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Tb2NrZXRTdHJlYW1IYW5kbGVXaW4uY3BwCi0KLSAg
ICBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L3dpbi9U
ZXh0Q29kZWNXaW4uY3BwCi0KLSAgICByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAKLSkK
LQotbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICBjcnlwdDMyCi0gICAgaXBobHBh
cGkKLSAgICBsaWJqcGVnCi0gICAgbGlicG5nCi0gICAgbGlieG1sMgotICAgIGxpYnhzbHQKLSAg
ICBzcWxpdGUKLSAgICB3aW5pbmV0Ci0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBlYWExNjIzLi5iMGVjNTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTU2Niw3ICs1NjYs
NyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShXaWRnZXQqIHZpZXcpCiB9CiAgICAgCiAg
ICAgCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgT1MoV0lOQ0UpCisjaWYgIVBMQVRGT1JNKFdJTikK
IEFYSUQgQVhPYmplY3RDYWNoZTo6cGxhdGZvcm1HZW5lcmF0ZUFYSUQoKSBjb25zdAogewogICAg
IHN0YXRpYyBBWElEIGxhc3RVc2VkSUQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAppbmRleCAyMDExMmNhLi5iMTFiMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNzcwLDggKzc3MCw2IEBAIFZpc2libGVQb3Np
dGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgLy8gVmlzdWFsIHdv
cmQgbW92ZW1lbnQgcmVsaWVzIG9uIGlzV29yZFRleHRCcmVhayB3aGljaCBpcyBub3QgaW1wbGVt
ZW50ZWQgaW4gV2luQ0UgYW5kIFFULgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODExMzYuCiAgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3Zp
bmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRT
a2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRp
b24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZp
bml0eSgpKSwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2lu
Q0UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2lu
Q0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGZkOWViLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL3dpbmNlL0ljb25EYXRhYmFzZVdpbkNFLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZUNs
aWVudC5oIgotI2luY2x1ZGUgIkljb25SZWNvcmQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEljb25EYXRhYmFzZSogc2hhcmVk
SWNvbkRhdGFiYXNlID0gMDsKLQotLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgaWNv
biBkYXRhYmFzZS4KLUljb25EYXRhYmFzZSYgaWNvbkRhdGFiYXNlKCkKLXsKLSAgICBpZiAoIXNo
YXJlZEljb25EYXRhYmFzZSkKLSAgICAgICAgc2hhcmVkSWNvbkRhdGFiYXNlID0gbmV3IEljb25E
YXRhYmFzZTsKLSAgICByZXR1cm4gKnNoYXJlZEljb25EYXRhYmFzZTsKLX0KLQotSWNvbkRhdGFi
YXNlOjpJY29uRGF0YWJhc2UoKSB7fQotSWNvbkRhdGFiYXNlOjp+SWNvbkRhdGFiYXNlKCkge30K
LQotdm9pZCBJY29uRGF0YWJhc2U6OnNldENsaWVudChJY29uRGF0YWJhc2VDbGllbnQqKSB7fQot
Ci1ib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIGZh
bHNlOyB9Ci12b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKSB7fQotCi12b2lkIEljb25EYXRhYmFz
ZTo6cmVtb3ZlQWxsSWNvbnMoKSB7fQotCi1JbWFnZSogSWNvbkRhdGFiYXNlOjppY29uRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsgfQotdm9pZCBJ
Y29uRGF0YWJhc2U6OnJlYWRJY29uRm9yUGFnZVVSTEZyb21EaXNrKGNvbnN0IFN0cmluZyYpIHt9
Ci1TdHJpbmcgSWNvbkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7
IHJldHVybiBTdHJpbmcoKTsgfQotSW1hZ2UqIEljb25EYXRhYmFzZTo6ZGVmYXVsdEljb24oY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIDA7fQotCi12b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNv
bkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikge30KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNl
SWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikge30KLQotdm9pZCBJY29uRGF0YWJhc2U6OnNl
dEljb25EYXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3Qg
U3RyaW5nJikge30KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkge30KLQotSWNvbkxvYWRE
ZWNpc2lvbiBJY29uRGF0YWJhc2U6OmxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5n
JiwgRG9jdW1lbnRMb2FkZXIqKSB7IHJldHVybiBJY29uTG9hZE5vOyB9Ci1ib29sIEljb25EYXRh
YmFzZTo6aWNvbkRhdGFLbm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFs
c2U7IH0KLQotdm9pZCBJY29uRGF0YWJhc2U6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7fQot
Ym9vbCBJY29uRGF0YWJhc2U6OmlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykg
e30KLWJvb2wgSWNvbkRhdGFiYXNlOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCi12b2lkIEljb25EYXRhYmFzZTo6ZGVsYXlEYXRhYmFzZUNsZWFu
dXAoKSB7fQotdm9pZCBJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCkge30KLXZv
aWQgSWNvbkRhdGFiYXNlOjpjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKSB7fQotCi0vLyBT
dXBwb3J0IGZvciBXZWJDb3JlU3RhdGlzdGljcyBpbiBXZWJLaXQKLXNpemVfdCBJY29uRGF0YWJh
c2U6OnBhZ2VVUkxNYXBwaW5nQ291bnQoKSB7IHJldHVybiAwOyB9Ci1zaXplX3QgSWNvbkRhdGFi
YXNlOjpyZXRhaW5lZFBhZ2VVUkxDb3VudCgpIHtyZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRh
YmFzZTo6aWNvblJlY29yZENvdW50KCkgeyByZXR1cm4gMDsgfQotc2l6ZV90IEljb25EYXRhYmFz
ZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEoKSB7IHJldHVybiAwOyB9Ci0KLWJvb2wgSWNvbkRh
dGFiYXNlOjppc09wZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotU3RyaW5nIEljb25EYXRh
YmFzZTo6ZGF0YWJhc2VQYXRoKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLVN0cmluZyBJ
Y29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCmluZGV4IGNlZjE4MWYuLjdjZGQ2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTI4MTUsNyArMjgxNSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4
dE1lbnVFdmVudEZvcktleSgpCiAKICAgICBzdGF0aWMgY29uc3QgaW50IGtDb250ZXh0TWVudU1h
cmdpbiA9IDE7CiAKLSNpZiBPUyhXSU5ET1dTKSAmJiAhT1MoV0lOQ0UpCisjaWYgT1MoV0lORE9X
UykKICAgICBpbnQgcmlnaHRBbGlnbmVkID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX01FTlVEUk9Q
QUxJR05NRU5UKTsKICNlbHNlCiAgICAgaW50IHJpZ2h0QWxpZ25lZCA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCmluZGV4IGZlNWEzZDUuLmI4NTg1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBTZXR0aW5nczo6Z01hbmFnZUF1ZGlvU2Vz
c2lvbiA9IGZhbHNlOwogCiAvLyBOT1RFcwogLy8gIDEpIEVkaXRpbmdNYWNCZWhhdmlvciBjb21w
cmlzZXMgVGlnZXIsIExlb3BhcmQsIFNub3dMZW9wYXJkIGFuZCBpT1MgYnVpbGRzLCBhcyB3ZWxs
IGFzIFF0V2ViS2l0IHdoZW4gYnVpbHQgb24gTWFjOwotLy8gIDIpIEVkaXRpbmdXaW5kb3dzQmVo
YXZpb3IgY29tcHJpc2VzIFdpbjMyIGFuZCBXaW5DRSBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJL
aXQgYW5kIENocm9taXVtIHdoZW4gYnVpbHQgb24gV2luZG93czsKKy8vICAyKSBFZGl0aW5nV2lu
ZG93c0JlaGF2aW9yIGNvbXByaXNlcyBXaW4zMiBidWlsZDsKIC8vICAzKSBFZGl0aW5nVW5peEJl
aGF2aW9yIGNvbXByaXNlcyBhbGwgdW5peC1iYXNlZCBzeXN0ZW1zLCBidXQgRGFyd2luL01hY09T
IChhbmQgdGhlbiBhYnVzaW5nIHRoZSB0ZXJtaW5vbG9neSk7CiAvLyA5OSkgTWFjRWRpdGluZ0Jl
aGF2aW9yIGlzIHVzZWQgYXMgYSBmYWxsYmFjay4KIHN0YXRpYyBFZGl0aW5nQmVoYXZpb3JUeXBl
IGVkaXRpbmdCZWhhdmlvclR5cGVGb3JQbGF0Zm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRXZlbnRIYW5kbGVyV2luLmNwcAppbmRleCA2MGI3ZjIwLi42NDQyZWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKQEAgLTk0LDExICs5NCw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldmVudCkgY29uc3QKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXI+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdEYXRhVHJhbnNmZXIo
KSBjb25zdAogewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiAwOwotI2Vsc2UKICAgICByZXR1
cm4gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JEcmFnQW5kRHJvcCgpOwotI2VuZGlmCiB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgKaW5kZXggZmY5ZDM2Yi4uYzhl
MmE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCkBAIC05Miw5ICs5Miw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CiAjZWxzZQogICAgICAgICBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIHVu
c2lnbmVkIG1faXRlbUNvdW50OwotI2VuZGlmCiAjZW5kaWYKIAogI2VuZGlmIC8vIFVTRShDUk9T
U19QTEFURk9STV9DT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAKaW5kZXggNWYxZTFkZC4uODE5MWM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuY3BwCkBAIC0yMDEsNyArMjAxLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
ckltYWdlKEZyYW1lJiBmcmFtZSwgTm9kZSYgbm9kZSwgSW50UmVjdCYgaW1hZ2VSZWMKICAgICBy
ZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90KHNuYXBzaG90Tm9kZShmcmFtZSwgbm9k
ZSksICZub2RlKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgKCFQTEFURk9STShXSU4p
IHx8IE9TKFdJTkNFKSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShXSU4pCiBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhVUkwmLCBjb25zdCBTdHJpbmcmLCBG
b250UmVuZGVyaW5nTW9kZSkKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTeXN0ZW0uaAppbmRleCA0M2NmODc2Li5hODEzODY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0xOTcsNyArMTk3LDcgQEAgQ1N0cmluZyBzaGFyZWRSZXNv
dXJjZXNQYXRoKCk7CiB1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29uc3QgY2hh
ciopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkKKyNpZiBQTEFU
Rk9STShXSU4pCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBT
dHJpbmcgcm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4
IGJmYTlkMGYuLjIyMGIzNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTY3NiwxMSArNjc2LDcgQEAgYm9vbCBCaXRtYXBJbWFn
ZTo6bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkKIHsKICAgICBpZiAoIW1fY2hlY2tlZEZvclNvbGlk
Q29sb3IgJiYgZnJhbWVDb3VudCgpID4gMCkgewogICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3Io
KTsKLSAgICAgICAgLy8gV0lOQ0UgUE9SVDogY2hlY2tGb3JTb2xpZENvbG9yKCkgZG9lc24ndCBz
ZXQgbV9jaGVja2VkRm9yU29saWRDb2xvciB1bnRpbAotICAgICAgICAvLyBpdCBnZXRzIGVub3Vn
aCBpbmZvcm1hdGlvbiB0byBtYWtlIGZpbmFsIGRlY2lzaW9uLgotI2lmICFPUyhXSU5DRSkKICAg
ICAgICAgQVNTRVJUKG1fY2hlY2tlZEZvclNvbGlkQ29sb3IpOwotI2VuZGlmCiAgICAgfQogICAg
IHJldHVybiBtX2lzU29saWRDb2xvciAmJiAhbV9jdXJyZW50RnJhbWU7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCmluZGV4IGE4Y2FkNDQu
LjUyMGI0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRHbHlwaHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRH
bHlwaHMuY3BwCkBAIC0zOTQsMjAgKzM5NCwxMCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlw
aFBhZ2UqPiBGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKGNvbnN0CiAg
ICAgICAgIEdseXBoRGF0YSBkYXRhID0gZmFsbGJhY2tQYWdlICYmIGZhbGxiYWNrUGFnZS0+Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoYykgPyBmYWxsYmFja1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKSA6IGNoYXJhY3RlckZvbnREYXRhLT5taXNzaW5nR2x5cGhEYXRhKCk7CiAgICAgICAgIC8v
IENhY2hlIGl0IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gc3lzdGVtIGZhbGxiYWNrIGFnYWluIG5l
eHQgdGltZS4KICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotI2lmIE9T
KFdJTkNFKQotICAgICAgICAgICAgLy8gbWlzc2luZ0dseXBoRGF0YSByZXR1cm5zIGEgbnVsbCBj
aGFyYWN0ZXIsIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgR0RJIHRvIGRpc3BsYXkuCi0gICAg
ICAgICAgICAvLyBBbHNvLCBzb21ldGltZXMgd2UgY2Fubm90IG1hcCBhIGZvbnQgZm9yIHRoZSBj
aGFyYWN0ZXIgb24gV0lOQ0UsIGJ1dCBHREkgY2FuIHN0aWxsCi0gICAgICAgICAgICAvLyBkaXNw
bGF5IHRoZSBjaGFyYWN0ZXIsIHByb2JhYmx5IGJlY2F1c2UgdGhlIGZvbnQgcGFja2FnZSBpcyBu
b3QgaW5zdGFsbGVkIGNvcnJlY3RseS4KLSAgICAgICAgICAgIC8vIFNvIHdlIGp1c3QgYWx3YXlz
IHNldCB0aGUgZ2x5cGggdG8gYmUgc2FtZSBhcyB0aGUgY2hhcmFjdGVyLCBhbmQgbGV0IEdESSBz
b2x2ZSBpdC4KLSAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBj
LCBjaGFyYWN0ZXJGb250RGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0
YS0+c2V0TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGNoYXJhY3RlckZvbnREYXRhLT5t
YXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2ZWwoKSkpOwotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSwgcGFnZSk7
Ci0jZWxzZQogICAgICAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRh
dGEuZ2x5cGgsIGRhdGEuZm9udERhdGEpOwogICAgICAgICAgICAgZGF0YS5mb250RGF0YS0+c2V0
TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFn
ZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7CiAgICAgICAgICAgICBpZiAoIUZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSAhPSBIb3Jpem9udGFsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUFuZFBh
Z2VGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5u
b25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEsIGZhbGxiYWNrUGFnZSwgcGFnZU51bWJlcik7
Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZGF0YSwg
cGFnZSk7CiAgICAgfQpAQCAtNDE2LDE1ICs0MDYsOCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBH
bHlwaFBhZ2UqPiBGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKGNvbnN0
CiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHVzZSB0aGUgbWlzc2luZyBnbHlw
aCBmcm9tIHRoZSBsYXN0IHJlc29ydCBmb250IGluc3RlYWQuCiAgICAgR2x5cGhEYXRhIGRhdGEg
PSBwcmltYXJ5U2ltcGxlRm9udERhdGEoZGVzY3JpcHRpb24pLT5taXNzaW5nR2x5cGhEYXRhKCk7
CiAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotI2lmIE9TKFdJTkNFKQotICAg
ICAgICAvLyBTZWUgY29tbWVudCBhYm91dCBXSU5DRSBHREkgaGFuZGxpbmcgbmVhciBzZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIgYWJvdmUuCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihjLCBjLCBkYXRhLmZvbnREYXRhKTsKLSAgICAgICAgZGF0YS5mb250RGF0YS0+c2V0
TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFn
ZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKICAgICAg
ICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGRhdGEuZm9u
dERhdGEpOwogICAgICAgICBkYXRhLmZvbnREYXRhLT5zZXRNYXhHbHlwaFBhZ2VUcmVlTGV2ZWwo
c3RkOjptYXgoZGF0YS5mb250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCksIG5vZGUtPmxl
dmVsKCkpKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZGF0YSwg
cGFnZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKaW5kZXggODIwMzNhMC4uOTdlODVkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjMsOSAr
MjMsNyBAQAogICovCiAKIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCBhbGwgcG9y
dHMgc3dpdGNoIHRvIHVzaW5nIHRoaXMgZmlsZS4KLSNpZiBVU0UoV0lOR0RJKQotI2luY2x1ZGUg
IndpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaCIKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oR1RLKQorI2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgImZy
ZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaCIKICNlbHNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKaW5kZXggZTFhOWU2Yi4uZmJk
YWU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmgKQEAgLTI3LDYgKzI3LDQgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFD
Ry5oIgogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgi
Ci0jZWxpZiBVU0UoV0lOR0RJKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YVdpbmNlLmgiCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAppbmRleCBhN2Y0YjFlLi40MDlhNTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC02Niw5ICs2Niw2IEBACiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjZW5kaWYKICNlbmRp
ZgotI2VsaWYgT1MoV0lOQ0UpCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCIK
LSNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBsYXllclByaXZhdGUK
ICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShHU1RSRUFNRVIpCiAjaWYgVVNFKEFWRk9VTkRB
VElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKaW5k
ZXggZDMwMjcyMi4uZjEyZjgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2VuZGlmCiAKLSNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0Up
KQorI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAKQEAgLTIz
MCwxMCArMjMwLDggQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgaXNT
eXN0ZW1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3RlbUZvbnQ7IH0KLSNpZiAhT1MoV0lO
Q0UpIC8vIGRpc2FibGUgdW51c2VkIG1lbWJlcnMgdG8gc2F2ZSBzcGFjZQogICAgIFNDUklQVF9G
T05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRf
Q0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KLSNl
bmRpZgogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhib29sKTsK
ICAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsKICAgICBzdGF0aWMg
ZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQg
YXNjZW50LCBmbG9hdCBkZXNjZW50KTsKQEAgLTI1NCw3ICsyNTIsNyBAQCBwcml2YXRlOgogICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAotI2lmIChQTEFURk9STShX
SU4pICYmICFPUyhXSU5DRSkpCisjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZv
bnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOwogICAgIEZsb2F0UmVjdCBi
b3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CkBAIC0zMzYsMTEgKzMzNCw5IEBA
IHByaXZhdGU6CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSNpZiAhT1MoV0lOQ0UpIC8vIGRpc2FibGUgdW51c2VkIG1lbWJlcnMgdG8gc2F2ZSBzcGFjZQog
ICAgIG11dGFibGUgU0NSSVBUX0NBQ0hFIG1fc2NyaXB0Q2FjaGU7CiAgICAgbXV0YWJsZSBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYKLSNlbmRp
ZgogI2lmIFBMQVRGT1JNKElPUykKICAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKaW5kZXggZDA5YzVhNC4uZjdk
MGFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcApAQCAtNDA4LDcgKzQwOCw2IEBA
IGJvb2wgcmVuYW1lRm9udChjb25zdCBTaGFyZWRCdWZmZXImIGZvbnREYXRhLCBjb25zdCBTdHJp
bmcmIGZvbnROYW1lLCBWZWN0b3I8Y2hhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiAhT1Mo
V0lOQ0UpCiAvLyBSZW5hbWUgdGhlIGZvbnQgYW5kIGluc3RhbGwgdGhlIG5ldyBmb250IGRhdGEg
aW50byB0aGUgc3lzdGVtCiBIQU5ETEUgcmVuYW1lQW5kQWN0aXZhdGVGb250KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgZm9udERhdGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUpCiB7CkBAIC00MjYsNiAr
NDI1LDUgQEAgSEFORExFIHJlbmFtZUFuZEFjdGl2YXRlRm9udChjb25zdCBTaGFyZWRCdWZmZXIm
IGZvbnREYXRhLCBjb25zdCBTdHJpbmcmIGZvbnROYW0KIAogICAgIHJldHVybiBmb250SGFuZGxl
OwogfQotI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCmluZGV4IGFiODM5ZTAu
LjgzMmE0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaApAQCAtMzcsMTAgKzM3LDYgQEAg
c3RydWN0IEJpZ0VuZGlhblVTaG9ydDsKIHN0cnVjdCBFT1RQcmVmaXg7CiBjbGFzcyBTaGFyZWRC
dWZmZXI7CiAKLSNpZiBPUyhXSU5DRSkKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ4IFVJbnQ4Owot
I2VuZGlmCi0KIHN0cnVjdCBFT1RIZWFkZXIgewogICAgIEVPVEhlYWRlcigpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3Bw
CmluZGV4IGU5YTBmOWIuLjBhODY1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCkBAIC05MSwxMiArOTEsMTAgQEAg
dm9pZCBESUJQaXhlbERhdGE6OnNldFJHQkFCaXRtYXBBbHBoYShIREMgaGRjLCBjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCB1bnNpZ25lZAogICAgIEFTU0VSVChwaXhlbERhdGEuYml0c1BlclBpeGVs
KCkgPT0gMzIpOwogCiAgICAgSW50UmVjdCBkcmF3UmVjdChkc3RSZWN0KTsKLSNpZiAhT1MoV0lO
Q0UpCiAgICAgWEZPUk0gdHJhbnM7CiAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmdHJhbnMp
OwogICAgIEludFNpemUgdHJhbnNmb3JtZWRQb3NpdGlvbih0cmFucy5lRHgsIHRyYW5zLmVEeSk7
CiAgICAgZHJhd1JlY3QubW92ZSh0cmFuc2Zvcm1lZFBvc2l0aW9uKTsKLSNlbmRpZgogCiAgICAg
aW50IHBpeGVsRGF0YVdpZHRoID0gcGl4ZWxEYXRhLnNpemUoKS53aWR0aCgpOwogICAgIGludCBw
aXhlbERhdGFIZWlnaHQgPSBwaXhlbERhdGEuc2l6ZSgpLmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkOTVkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR0RJRXh0cmFzLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHRElFeHRyYXMu
aCIKLQotI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
I2lmIE9TKFdJTkNFKQotU09GVF9MSU5LX0xJQlJBUlkoY29yZWRsbCkKLVNPRlRfTElOS19PUFRJ
T05BTChjb3JlZGxsLCBBbHBoYUJsZW5kLCBCT09MLCBBUElFTlRSWSwgKEhEQyBoZGNEZXN0LCBp
bnQgblhPcmlnaW5EZXN0LCBpbnQgbllPcmlnaW5EZXN0LCBpbnQgbldpZHRoRGVzdCwgaW50IG5I
ZWlnaHREZXN0LCBIREMgaGRjU3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5YT3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMs
IGludCBuV2lkdGhTcmMsIGludCBuSGVpZ2h0U3JjLCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rp
b24pKQotCi1BbHBoYUJsZW5kUG9pbnRlclR5cGUgQWxwaGFCbGVuZFBvaW50ZXIoKQotewotICAg
IHJldHVybiBBbHBoYUJsZW5kUHRyKCk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dE
SUV4dHJhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dESUV4dHJh
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTY2MTI0Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HRElFeHRyYXMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmlj
ayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR0RJRXh0cmFzX2gKLSNkZWZpbmUg
R0RJRXh0cmFzX2gKLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10eXBlZGVmIEJPT0wgKEFQSUVOVFJZICpBbHBoYUJsZW5kUG9pbnRlclR5cGUpIChIREMg
aGRjRGVzdCwgaW50IG5YT3JpZ2luRGVzdCwgaW50IG5ZT3JpZ2luRGVzdCwgaW50IG5XaWR0aERl
c3QsIGludCBuSGVpZ2h0RGVzdCwgSERDIGhkY1NyYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuWE9yaWdpblNyYywgaW50IG5ZT3JpZ2luU3Jj
LCBpbnQgbldpZHRoU3JjLCBpbnQgbkhlaWdodFNyYywgQkxFTkRGVU5DVElPTiBibGVuZEZ1bmN0
aW9uKTsKLQotI2lmIE9TKFdJTkNFKQotQWxwaGFCbGVuZFBvaW50ZXJUeXBlIEFscGhhQmxlbmRQ
b2ludGVyKCk7Ci0jZW5kaWYKLQotaW5saW5lIGJvb2wgaGFzQWxwaGFCbGVuZFN1cHBvcnQoKQot
ewotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiBBbHBoYUJsZW5kUG9pbnRlcigpOwotI2Vsc2UK
LSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBhbHBoYUJsZW5kSWZT
dXBwb3J0ZWQoSERDIGhkY0Rlc3QsIGludCBuWE9yaWdpbkRlc3QsIGludCBuWU9yaWdpbkRlc3Qs
IGludCBuV2lkdGhEZXN0LCBpbnQgbkhlaWdodERlc3QsIEhEQyBoZGNTcmMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5YT3JpZ2luU3JjLCBpbnQgbllPcmlnaW5TcmMs
IGludCBuV2lkdGhTcmMsIGludCBuSGVpZ2h0U3JjLCBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rp
b24pCi17Ci0jaWYgT1MoV0lOQ0UpCi0gICAgQWxwaGFCbGVuZFBvaW50ZXJUeXBlIGFscGhhQmxl
bmRQb2ludGVyID0gQWxwaGFCbGVuZFBvaW50ZXIoKTsKLSAgICBpZiAoIWFscGhhQmxlbmRQb2lu
dGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhbHBoYUJsZW5kUG9pbnRlcihoZGNE
ZXN0LCBuWE9yaWdpbkRlc3QsIG5ZT3JpZ2luRGVzdCwgbldpZHRoRGVzdCwgbkhlaWdodERlc3Qs
IGhkY1NyYywgblhPcmlnaW5TcmMsIG5ZT3JpZ2luU3JjLCBuV2lkdGhTcmMsIG5IZWlnaHRTcmMs
IGJsZW5kRnVuY3Rpb24pOwotI2Vsc2UKLSAgICBBbHBoYUJsZW5kKGhkY0Rlc3QsIG5YT3JpZ2lu
RGVzdCwgbllPcmlnaW5EZXN0LCBuV2lkdGhEZXN0LCBuSGVpZ2h0RGVzdCwgaGRjU3JjLCBuWE9y
aWdpblNyYywgbllPcmlnaW5TcmMsIG5XaWR0aFNyYywgbkhlaWdodFNyYywgYmxlbmRGdW5jdGlv
bik7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gR0RJRXh0cmFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAppbmRleCA1MGNmM2U1Li5mM2IwZDBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCkBAIC0y
NywxMSArMjcsNiBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotI2lmIE9TKFdJTkNFKQotLy8gU0hHRklfU0hFTExJQ09OU0laRSBpcyBu
b3QgYXZhaWxhYmxlIG9uIFdJTkNFCi0jZGVmaW5lIFNIR0ZJX1NIRUxMSUNPTlNJWkUgICAgICAg
ICAwCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IHNo
ZWxsMzJNdWx0aXBsZUZpbGVJY29uSW5kZXggPSA1NDsKQEAgLTY0LDkgKzU5LDYgQEAgUGFzc1Jl
ZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVuYW1lcykKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKHNmaS5oSWNvbikp
OwogICAgIH0KIAotI2lmIE9TKFdJTkNFKQotICAgIHJldHVybiAwOwotI2Vsc2UKICAgICBXQ0hB
UiBidWZmZXJbTUFYX1BBVEhdOwogICAgIFVJTlQgbGVuZ3RoID0gOjpHZXRTeXN0ZW1EaXJlY3Rv
cnlXKGJ1ZmZlciwgV1RGX0FSUkFZX0xFTkdUSChidWZmZXIpKTsKICAgICBpZiAoIWxlbmd0aCkK
QEAgLTc5LDcgKzcxLDYgQEAgUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmls
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICBpZiAoITo6RXh0cmFjdElj
b25FeFcoYnVmZmVyLCBzaGVsbDMyTXVsdGlwbGVGaWxlSWNvbkluZGV4LCAwLCAmaEljb24sIDEp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaEljb24p
KTsKLSNlbmRpZgogfQogCiB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcikKQEAgLTg3LDEyICs3OCw4IEBAIHZvaWQgSWNvbjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQogICAgIGlmIChjb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIE9TKFdJTkNF
KQotICAgIGNvbnRleHQtPmRyYXdJY29uKG1faEljb24sIHIsIERJX05PUk1BTCk7Ci0jZWxzZQog
ICAgIExvY2FsV2luZG93c0NvbnRleHQgd2luZG93Q29udGV4dChjb250ZXh0LCByKTsKICAgICBE
cmF3SWNvbkV4KHdpbmRvd0NvbnRleHQuaGRjKCksIHIueCgpLCByLnkoKSwgbV9oSWNvbiwgci53
aWR0aCgpLCByLmhlaWdodCgpLCAwLCAwLCBESV9OT1JNQUwpOwotI2VuZGlmCiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCmluZGV4IDZjMTQ4NjYuLjk2NTg0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2lu
LmNwcApAQCAtOTYsMTMgKzk2LDExIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRHRElGb250
KCkKICAgICBtX2F2Z0NoYXJXaWR0aCA9IHRleHRNZXRyaWNzLnRtQXZlQ2hhcldpZHRoOwogICAg
IG1fbWF4Q2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGg7CiAgICAgZmxvYXQg
eEhlaWdodCA9IGFzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5v
IHggZ2x5cGggaXMgcHJlc2VudC4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgR0xZUEhNRVRSSUNTIGdt
OwogICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAs
ICAwLCAxIH07CiAgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhPdXRsaW5lKGhkYywgJ3gnLCBHR09f
TUVUUklDUywgJmdtLCAwLCAwLCAmaWRlbnRpdHkpOwogICAgIGlmIChsZW4gIT0gR0RJX0VSUk9S
ICYmIGdtLmdtcHRHbHlwaE9yaWdpbi55ID4gMCkKICAgICAgICAgeEhlaWdodCA9IGdtLmdtcHRH
bHlwaE9yaWdpbi55OwotI2VuZGlmCiAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWln
aHQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbShtZXRyaWNzLm90bUVNU3F1YXJl
KTsKIApAQCAtMTIxLDEwICsxMTksOCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNo
YXJXaWR0aEluaXQoKQogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQog
ewotI2lmICFPUyhXSU5DRSkKICAgICBTY3JpcHRGcmVlQ2FjaGUoJm1fc2NyaXB0Q2FjaGUpOwog
ICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCiB9CiAKIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3QKQEAgLTIwMCw5ICsxOTYsNiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpk
ZXRlcm1pbmVQaXRjaCgpCiAKIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJ
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotI2Vsc2UKICAgICBIV25kREMgaGRjKDApOwogICAgIFNldEdyYXBoaWNzTW9k
ZShoZGMsIEdNX0FEVkFOQ0VEKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3Qo
aGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKQEAgLTIxNSwzNSArMjA4LDI0IEBAIEZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLngsIC1n
ZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi55LAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tC
b3hYICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsgCi0j
ZW5kaWYKIH0KIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKLSNpZiAhT1MoV0lOQ0UpCiAgICAg
U2V0R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQpOwotI2VuZGlmCiAgICAgSEdESU9CSiBv
bGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7CiAKLSNp
ZiBPUyhXSU5DRSkKLSAgICBXQ0hBUiBjID0gZ2x5cGg7Ci0gICAgU0laRSBmb250U2l6ZTsKLSAg
ICBHZXRUZXh0RXh0ZW50UG9pbnQzMlcoaGRjLCAmYywgMSwgJmZvbnRTaXplKTsKLSAgICBmbG9h
dCByZXN1bHQgPSBmb250U2l6ZS5jeCAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDcyLmY7Ci0j
ZWxzZQogICAgIEdMWVBITUVUUklDUyBnZGlNZXRyaWNzOwogICAgIHN0YXRpYyBjb25zdCBNQVQy
IGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07CiAgICAgR2V0R2x5cGhP
dXRsaW5lKGhkYywgZ2x5cGgsIEdHT19NRVRSSUNTIHwgR0dPX0dMWVBIX0lOREVYLCAmZ2RpTWV0
cmljcywgMCwgMCwgJmlkZW50aXR5KTsKICAgICBmbG9hdCByZXN1bHQgPSBnZGlNZXRyaWNzLmdt
Q2VsbEluY1ggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci0jZW5kaWYKIAogICAgIFNlbGVjdE9i
amVjdChoZGMsIG9sZEZvbnQpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmICFPUyhX
SU5DRSkKIFNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERhdGE6OnNjcmlwdEZvbnRQ
cm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2NyaXB0Rm9udFByb3BlcnRpZXMpIHsK
QEAgLTI2MSw2ICsyNDMsNSBAQCBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIFNpbXBsZUZvbnREYXRh
OjpzY3JpcHRGb250UHJvcGVydGllcygpIGNvbnN0CiAgICAgfQogICAgIHJldHVybiBtX3Njcmlw
dEZvbnRQcm9wZXJ0aWVzOwogfQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNo
ZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRD
YWNoZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllYmU0Yi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2Fj
aGVXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
LSogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSoKLSogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0qIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgi
Ci0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3aW5k
b3dzLmg+Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1leHRl
cm4gSERDIGdfc2NyZWVuREM7Ci0KLXN0YXRpYyBJTXVsdGlMYW5ndWFnZSAqbXVsdGlMYW5ndWFn
ZSA9IDA7Ci1zdGF0aWMgSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSAwOwotCi1J
TXVsdGlMYW5ndWFnZSogRm9udENhY2hlOjpnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkKLXsK
LSAgICBpZiAoIW11bHRpTGFuZ3VhZ2UpCi0gICAgICAgIENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURf
Q011bHRpTGFuZ3VhZ2UsIDAsIENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURfSU11bHRpTGFuZ3Vh
Z2UsICh2b2lkKiopJm11bHRpTGFuZ3VhZ2UpOwotCi0gICAgcmV0dXJuIG11bHRpTGFuZ3VhZ2U7
Ci19Ci0KLUlNTGFuZ0ZvbnRMaW5rVHlwZSogRm9udENhY2hlOjpnZXRGb250TGlua0ludGVyZmFj
ZSgpCi17Ci0gICAgaWYgKCFsYW5nRm9udExpbmspIHsKLSAgICAgICAgaWYgKElNdWx0aUxhbmd1
YWdlKiBtbGkgPSBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkpCi0gICAgICAgICAgICBtbGkt
PlF1ZXJ5SW50ZXJmYWNlKCZsYW5nRm9udExpbmspOwotICAgIH0KLQotICAgIHJldHVybiBsYW5n
Rm9udExpbms7Ci19Ci0KLXN0YXRpYyBib29sIGN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIo
SU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmssIEhEQyBoZGMsIEhGT05UIGhmb250LCBV
Q2hhciBjaGFyYWN0ZXIsIGNvbnN0IHdjaGFyX3QqIGZhY2VOYW1lKQotewotI2lmIFVTRShJTUxB
TkdfRk9OVF9MSU5LMikKLSAgICBVSU5UIHVuaWNvZGVSYW5nZXM7Ci0gICAgaWYgKFNfT0sgIT0g
bGFuZ0ZvbnRMaW5rLT5HZXRGb250VW5pY29kZVJhbmdlcyhoZGMsICZ1bmljb2RlUmFuZ2VzLCAw
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIFZlY3RvcjxVTklDT0RFUkFO
R0UsIDY0PiBnbHlwaHNldEJ1ZmZlcjsKLSAgICBnbHlwaHNldEJ1ZmZlci5yZXNpemUodW5pY29k
ZVJhbmdlcyk7Ci0KLSAgICBpZiAoU19PSyAhPSBsYW5nRm9udExpbmstPkdldEZvbnRVbmljb2Rl
UmFuZ2VzKGhkYywgJnVuaWNvZGVSYW5nZXMsIGdseXBoc2V0QnVmZmVyLmRhdGEoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBhIGJpbmFy
eSBzZWFyY2guIChZb25nIExpOiBUaGF0J3MgZWFzeS4gQnV0LCBpcyBpdCBndWFyYW50ZWVkIHRo
YXQgdGhlIHJhbmdlcyBhcmUgc29ydGVkPykKLSAgICBmb3IgKFZlY3RvcjxVTklDT0RFUkFOR0Us
IDY0Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IGdseXBoc2V0QnVmZmVyLmJlZ2luKCk7IGkgIT0gZ2x5
cGhzZXRCdWZmZXIuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoaS0+d2NUbyA+PSBjaGFyYWN0
ZXIpCi0gICAgICAgICAgICByZXR1cm4gaS0+d2NGcm9tIDw9IGNoYXJhY3RlcjsKLSAgICB9Ci0j
ZWxzZQotICAgIERXT1JEIGZvbnRDb2RlUGFnZXMgPSAwLCBjaGFyQ29kZVBhZ2VzID0gMDsKLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IGxhbmdGb250TGluay0+R2V0Rm9udENvZGVQYWdlcyhoZGMsIGhm
b250LCAmZm9udENvZGVQYWdlcyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTX09LKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2Vz
KGNoYXJhY3RlciwgJmNoYXJDb2RlUGFnZXMpOwotICAgIGlmIChyZXN1bHQgIT0gU19PSykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9udENvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1E
YXRhOjpnZXRLbm93bkZvbnRDb2RlUGFnZXMoZmFjZU5hbWUpOwotICAgIGlmIChmb250Q29kZVBh
Z2VzICYgY2hhckNvZGVQYWdlcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdG
b250TGlua1R5cGUqIGxhbmdGb250TGluaywgSERDIGhkYywgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcmVmRm9udCwgRFdPUkQgY29kZVBhZ2VNYXNrLCBVQ2hhciBjaGFyYWN0ZXIgPSAwKQotewot
ICAgIEhGT05UIG1sYW5nRm9udDsKLQotI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKLSAgICBI
UkVTVUxUIHJlc3VsdCA9IGxhbmdGb250TGluay0+TWFwRm9udChoZGMsIGNvZGVQYWdlTWFzaywg
Y2hhcmFjdGVyLCAmbWxhbmdGb250KTsKLSNlbHNlCi0gICAgSFJFU1VMVCByZXN1bHQgPSBsYW5n
Rm9udExpbmstPk1hcEZvbnQoaGRjLCBjb2RlUGFnZU1hc2ssIHJlZkZvbnQuaGZvbnQoKSwgJm1s
YW5nRm9udCk7Ci0jZW5kaWYKLQotICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAg
cmV0dXJuIG1sYW5nRm9udDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3Rv
cjxEV09SRCwgND4mIGdldENKS0NvZGVQYWdlTWFza3MoKQotewotICAgIC8vIFRoZSBkZWZhdWx0
IG9yZGVyIGluIHdoaWNoIHdlIGxvb2sgZm9yIGEgZm9udCBmb3IgYSBDSksgY2hhcmFjdGVyLiBJ
ZiB0aGUgdXNlcidzIGRlZmF1bHQgY29kZSBwYWdlIGlzCi0gICAgLy8gb25lIG9mIHRoZXNlLCB3
ZSB3aWxsIHVzZSBpdCBmaXJzdC4KLSAgICBzdGF0aWMgY29uc3QgVUlOVCBDSktDb2RlUGFnZXNb
XSA9IHsKLSAgICAgICAgOTMyLCAvKiBKYXBhbmVzZSAqLwotICAgICAgICA5MzYsIC8qIFNpbXBs
aWZpZWQgQ2hpbmVzZSAqLwotICAgICAgICA5NTAsIC8qIFRyYWRpdGlvbmFsIENoaW5lc2UgKi8K
LSAgICAgICAgOTQ5ICAvKiBLb3JlYW4gKi8KLSAgICB9OwotCi0gICAgc3RhdGljIFZlY3RvcjxE
V09SRCwgND4gY29kZVBhZ2VNYXNrczsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLSAg
ICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAg
ICAgSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250
TGlua0ludGVyZmFjZSgpOwotICAgICAgICBpZiAoIWxhbmdGb250TGluaykKLSAgICAgICAgICAg
IHJldHVybiBjb2RlUGFnZU1hc2tzOwotCi0gICAgICAgIFVJTlQgZGVmYXVsdENvZGVQYWdlOwot
ICAgICAgICBEV09SRCBkZWZhdWx0Q29kZVBhZ2VNYXNrID0gMDsKLSAgICAgICAgaWYgKEdldExv
Y2FsZUluZm8oTE9DQUxFX1VTRVJfREVGQVVMVCwgTE9DQUxFX1JFVFVSTl9OVU1CRVIgfCBMT0NB
TEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmZGVmYXVs
dENvZGVQYWdlKSwgc2l6ZW9mKGRlZmF1bHRDb2RlUGFnZSkpKQotICAgICAgICAgICAgbGFuZ0Zv
bnRMaW5rLT5Db2RlUGFnZVRvQ29kZVBhZ2VzKGRlZmF1bHRDb2RlUGFnZSwgJmRlZmF1bHRDb2Rl
UGFnZU1hc2spOwotCi0gICAgICAgIGlmIChkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2Vz
WzBdIHx8IGRlZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFnZXNbMV0gfHwgZGVmYXVsdENvZGVQ
YWdlID09IENKS0NvZGVQYWdlc1syXSB8fCBkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2Vz
WzNdKQotICAgICAgICAgICAgY29kZVBhZ2VNYXNrcy5hcHBlbmQoZGVmYXVsdENvZGVQYWdlTWFz
ayk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChkZWZhdWx0Q29kZVBhZ2UgIT0gQ0pLQ29kZVBhZ2VzW2ldKSB7Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgY29kZVBhZ2VNYXNrOwotICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+
Q29kZVBhZ2VUb0NvZGVQYWdlcyhDSktDb2RlUGFnZXNbaV0sICZjb2RlUGFnZU1hc2spOwotICAg
ICAgICAgICAgICAgIGNvZGVQYWdlTWFza3MuYXBwZW5kKGNvZGVQYWdlTWFzayk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvZGVQYWdlTWFza3M7Ci19Ci0K
LQotc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJv
Y0RhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQotICAgICAgICA6IG1fZmFtaWx5
TmFtZShmYW1pbHlOYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG1fZmFtaWx5TmFtZTsKLSAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RyYWl0c01hc2tzOwotfTsK
LQotc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZP
TlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqIHByb2NEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDxUcmFpdHNJbkZhbWlseVByb2NEYXRhKj4obFBhcmFtKTsKLQotICAg
IHVuc2lnbmVkIHRyYWl0c01hc2sgPSAwOwotICAgIHRyYWl0c01hc2sgfD0gbG9nRm9udC0+bGZJ
dGFsaWMgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzazsKLSAgICB0
cmFpdHNNYXNrIHw9IEZvbnRWYXJpYW50Tm9ybWFsTWFzazsKLSAgICBMT05HIHdlaWdodCA9IEZv
bnRQbGF0Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodChsb2dGb250LT5sZldlaWdodCwg
cHJvY0RhdGEtPm1fZmFtaWx5TmFtZSk7Ci0gICAgdHJhaXRzTWFzayB8PSB3ZWlnaHQgPT0gRldf
VEhJTiA/IEZvbnRXZWlnaHQxMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX0VYVFJBTElH
SFQgPyBGb250V2VpZ2h0MjAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19MSUdIVCA/IEZv
bnRXZWlnaHQzMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX05PUk1BTCA/IEZvbnRXZWln
aHQ0MDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX01FRElVTSA/IEZvbnRXZWlnaHQ1MDBN
YXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX1NFTUlCT0xEID8gRm9udFdlaWdodDYwME1hc2sg
OgotICAgICAgICB3ZWlnaHQgPT0gRldfQk9MRCA/IEZvbnRXZWlnaHQ3MDBNYXNrIDoKLSAgICAg
ICAgd2VpZ2h0ID09IEZXX0VYVFJBQk9MRCA/IEZvbnRXZWlnaHQ4MDBNYXNrIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRXZWlnaHQ5MDBNYXNrOwotICAgIHByb2NEYXRh
LT5tX3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKLSAgICByZXR1cm4gMTsKLX0KLQotdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpjb21J
bml0aWFsaXplKCkKLXsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmNvbVVuaW5pdGlhbGl6ZSgpCi17
Ci0gICAgaWYgKGxhbmdGb250TGluaykgewotICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2Uo
KTsKLSAgICAgICAgbGFuZ0ZvbnRMaW5rID0gMDsKLSAgICB9Ci0gICAgaWYgKG11bHRpTGFuZ3Vh
Z2UpIHsKLSAgICAgICAgbXVsdGlMYW5ndWFnZS0+UmVsZWFzZSgpOwotICAgICAgICBtdWx0aUxh
bmd1YWdlID0gMDsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29s
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAgICBTdHJpbmcgZmFt
aWx5TmFtZTsKLSAgICBXQ0hBUiBuYW1lW0xGX0ZBQ0VTSVpFXTsKLQotICAgIFVDaGFyIGNoYXJh
Y3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3JpZ0Zv
bnQgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLQotICAgIGlmIChJTUxhbmdG
b250TGlua1R5cGUqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKLSAg
ICAgICAgSEdESU9CSiBvbGRGb250ID0gR2V0Q3VycmVudE9iamVjdChnX3NjcmVlbkRDLCBPQkpf
Rk9OVCk7Ci0gICAgICAgIEhGT05UIGhmb250ID0gMDsKLSAgICAgICAgRFdPUkQgY29kZVBhZ2Vz
ID0gMDsKLSAgICAgICAgVUlOVCBjb2RlUGFnZSA9IDA7Ci0gICAgICAgIC8vIFRyeSBNTGFuZyBm
b250IGxpbmtpbmcgZmlyc3QuCi0gICAgICAgIGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdl
cyhjaGFyYWN0ZXIsICZjb2RlUGFnZXMpOwotICAgICAgICBpZiAoY29kZVBhZ2VzICYmIHVfZ2V0
SW50UHJvcGVydHlWYWx1ZShjaGFyYWN0ZXIsIFVDSEFSX1VOSUZJRURfSURFT0dSQVBIKSkgewot
ICAgICAgICAgICAgLy8gVGhlIENKSyBjaGFyYWN0ZXIgbWF5IGJlbG9uZyB0byBtdWx0aXBsZSBj
b2RlIHBhZ2VzLiBXZSB3YW50IHRvCi0gICAgICAgICAgICAvLyBkbyBmb250IGxpbmtpbmcgYWdh
aW5zdCBhIHNpbmdsZSBvbmUgb2YgdGhlbSwgcHJlZmVycmluZyB0aGUgZGVmYXVsdAotICAgICAg
ICAgICAgLy8gY29kZSBwYWdlIGZvciB0aGUgdXNlcidzIGxvY2FsZS4KLSAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxEV09SRCwgND4mIENKS0NvZGVQYWdlTWFza3MgPSBnZXRDSktDb2RlUGFnZU1h
c2tzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1Db2RlUGFnZXMgPSBDSktDb2RlUGFnZU1h
c2tzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db2Rl
UGFnZXM7ICsraSkgewotICAgICAgICAgICAgICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxh
bmdGb250TGluaywgZ19zY3JlZW5EQywgb3JpZ0ZvbnQsIENKS0NvZGVQYWdlTWFza3NbaV0pOwot
ICAgICAgICAgICAgICAgIGlmICghaGZvbnQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhmb250KTsKLSAg
ICAgICAgICAgICAgICBHZXRUZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9GQUNFU0laRSwgbmFtZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGZvbnQgJiYgIShjb2RlUGFnZXMgJiBDSktDb2RlUGFn
ZU1hc2tzW2ldKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc2tlZCBhYm91dCBhIGNv
ZGUgcGFnZSB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIGNvZGUgcGFnZXMKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuZWQgYnkgTUxhbmcsIHNvIHRoZSBmb250IG1pZ2h0IG5vdCBjb250YWlu
IHRoZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250
YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGhmb250LCBjaGFyYWN0ZXIs
IG5hbWUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBT
ZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsYW5nRm9udExpbmstPlJlbGVhc2VGb250KGhmb250KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGhmb250ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaGZvbnQgPSBj
cmVhdGVNTGFuZ0ZvbnQobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBvcmlnRm9udCwgY29kZVBh
Z2VzLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhm
b250KTsKLSAgICAgICAgICAgIEdldFRleHRGYWNlKGdfc2NyZWVuREMsIExGX0ZBQ0VTSVpFLCBu
YW1lKTsKLSAgICAgICAgfQotICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgb2xkRm9u
dCk7Ci0KLSAgICAgICAgaWYgKGhmb250KSB7Ci0gICAgICAgICAgICBmYW1pbHlOYW1lID0gbmFt
ZTsKLSAgICAgICAgICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGE6Om1hcEtub3duRm9udChjb2Rl
UGFnZXMsIGZhbWlseU5hbWUpOwotICAgIH0KLQotICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHko
KSkKLSAgICAgICAgZmFtaWx5TmFtZSA9IEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFt
aWx5KCk7Ci0KLSAgICBpZiAoIWZhbWlseU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgVGhhaSBmb250IHByb2JsZW0KLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0gICAgICAgIGlm
ICh1YmxvY2tfZ2V0Q29kZShjKSA9PSBVQkxPQ0tfVEhBSSAmJiBmb250RGVzY3JpcHRpb24ud2Vp
Z2h0KCkgPiBGb250V2VpZ2h0Tm9ybWFsKQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBy
ZXN1bHQgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
TmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5oYXNoKCkgIT0gb3JpZ0ZvbnQu
aGFzaCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0
YSA9IGdldENhY2hlZEZvbnREYXRhKHJlc3VsdCwgRG9Ob3RSZXRhaW4pKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCi17Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4g
YmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Ig
bm93IHdlJ2xsIHBpY2sKLSAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdl
dCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoZm9udERlc2MsIEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCksIGZhbHNl
LCBzaG91bGRSZXRhaW4pOwotfQotCi1QYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KSk7Ci19
Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQotewotICAgIExPR0ZP
TlQgbG9nRm9udDsKLSAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKLSAg
ICB1bnNpZ25lZCBmYW1pbHlMZW5ndGggPSBzdGQ6Om1pbihmYW1pbHlOYW1lLmxlbmd0aCgpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTEZfRkFDRVNJWkUgLSAxKSk7Ci0gICAgbWVtY3B5KGxvZ0Zv
bnQubGZGYWNlTmFtZSwgZmFtaWx5TmFtZS5jaGFyYWN0ZXJzKCksIGZhbWlseUxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwotICAgIGxvZ0ZvbnQubGZGYWNlTmFtZVtmYW1pbHlMZW5ndGhdID0gMDsK
LSAgICBsb2dGb250LmxmUGl0Y2hBbmRGYW1pbHkgPSAwOwotCi0gICAgVHJhaXRzSW5GYW1pbHlQ
cm9jRGF0YSBwcm9jRGF0YShmYW1pbHlOYW1lKTsKLSAgICBFbnVtRm9udEZhbWlsaWVzRXgoZ19z
Y3JlZW5EQywgJmxvZ0ZvbnQsIHRyYWl0c0luRmFtaWx5RW51bVByb2MsIHJlaW50ZXJwcmV0X2Nh
c3Q8TFBBUkFNPigmcHJvY0RhdGEpLCAwKTsKLSAgICBjb3B5VG9WZWN0b3IocHJvY0RhdGEubV90
cmFpdHNNYXNrcywgdHJhaXRzTWFza3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0Yjk0OGY4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
OTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRGb250
LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIk9wZW5UeXBlVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JhbmRv
bU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBDdXN0b21Gb250Q2FjaGUqIGdfY3VzdG9tRm9udENhY2hlID0gMDsK
LQotdm9pZCBzZXRDdXN0b21Gb250Q2FjaGUoQ3VzdG9tRm9udENhY2hlKiBjYWNoZSkKLXsKLSAg
ICBnX2N1c3RvbUZvbnRDYWNoZSA9IGNhY2hlOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKGdfY3VzdG9tRm9udENhY2hl
ICYmICFtX25hbWUuaXNFbXB0eSgpKQotICAgICAgICBnX2N1c3RvbUZvbnRDYWNoZS0+dW5yZWdp
c3RlckZvbnQobV9uYW1lKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGlj
LCBGb250T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCi17Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjOwotICAgIGZvbnRE
ZXNjLnNldENvbXB1dGVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzYy5zZXRTcGVjaWZpZWRTaXpl
KHNpemUpOwotICAgIGZvbnREZXNjLnNldEl0YWxpYyhpdGFsaWMpOwotICAgIGZvbnREZXNjLnNl
dFdlaWdodChib2xkID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBy
ZXR1cm4gRm9udFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9uYW1lLCBmYWxzZSk7Ci19Ci0KLS8v
IENyZWF0ZXMgYSB1bmlxdWUgYW5kIHVucHJlZGljdGFibGUgZm9udCBuYW1lLCBpbiBvcmRlciB0
byBhdm9pZCBjb2xsaXNpb25zIGFuZCB0bwotLy8gbm90IGFsbG93IGFjY2VzcyBmcm9tIENTUy4K
LXN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQotewotICAgIEdVSUQgZm9udFV1
aWQ7Ci0KLSAgICB1bnNpZ25lZCBpbnQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oJmZvbnRVdWlkKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihHVUlEKSAv
IHNpemVvZihpbnQpIDsgKytpKQotICAgICAgICAqKHB0ciArIGkpID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgKyAxLjApKTsKLQotICAgIFN0cmluZyBmb250TmFtZSA9IGJhc2U2NEVuY29kZShy
ZWludGVycHJldF9jYXN0PGNoYXIqPigmZm9udFV1aWQpLCBzaXplb2YoZm9udFV1aWQpKTsKLSAg
ICBBU1NFUlQoZm9udE5hbWUubGVuZ3RoKCkgPCBMRl9GQUNFU0laRSk7Ci0gICAgcmV0dXJuIGZv
bnROYW1lLnJlcGxhY2UoJy8nLCAnXycpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIm
IGJ1ZmZlcikKLXsKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBjcmVhdGVVbmlxdWVGb250TmFtZSgp
OwotCi0gICAgVmVjdG9yPGNoYXI+IHJld3JpdHRlbkZvbnREYXRhOwotICAgIGlmICghcmVuYW1l
Rm9udChidWZmZXIsIGZvbnROYW1lLCByZXdyaXR0ZW5Gb250RGF0YSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9jYWxCdWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHJld3JpdHRlbkZvbnREYXRhKTsKLSAgICBpZiAoIWdfY3Vz
dG9tRm9udENhY2hlIHx8ICFnX2N1c3RvbUZvbnRDYWNoZS0+cmVnaXN0ZXJGb250KGZvbnROYW1l
LCBsb2NhbEJ1ZmZlci5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4oZm9udE5hbWUpOwot
fQotCi1ib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0
cmluZyYgZm9ybWF0KQotewotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJ0
cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgIm9wZW50eXBlIik7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDQyZDc0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0j
ZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJGb250V2lk
dGhWYXJpYW50LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZv
bnRQbGF0Zm9ybURhdGE7Ci0gICAgY2xhc3MgQ2FjaGVkRm9udDsKLSAgICBjbGFzcyBTaGFyZWRC
dWZmZXI7Ci0KLSAgICBjbGFzcyBDdXN0b21Gb250Q2FjaGUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdmlydHVhbCBib29sIHJlZ2lzdGVyRm9udChjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBjb25z
dCBTaGFyZWRCdWZmZXIqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyRm9u
dChjb25zdCBTdHJpbmcmIGZvbnROYW1lKSA9IDA7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEN1
c3RvbVBsYXRmb3JtRGF0YSk7Ci0gICAgcHVibGljOgotICAgICAgICBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICAgICAgICAgIDogbV9uYW1lKG5hbWUpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7
Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250
V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJl
bmRlcmluZ01vZGUpOwotCi0gICAgICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRm9ybWF0KGNvbnN0
IFN0cmluZyYpOwotCi0gICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgfTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBjcmVhdGVGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKFNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgc2V0Q3VzdG9tRm9udENhY2hlKEN1c3Rv
bUZvbnRDYWNoZSopOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNmNhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1
ZGUgPG1sYW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIEhEQyBnX3NjcmVl
bkRDOwotCi1zdGF0aWMgd2NoYXJfdCBzb25nVGlTdHJbXSA9IHsgMHg1YjhiLCAweDRmNTMsIDAg
fTsKLXN0YXRpYyB3Y2hhcl90IGhlaVRpU3RyW10gPSB7IDB4OWVkMSwgMHg0ZjUzLCAwIH07Ci0K
LWNsYXNzIEZvbnRGYW1pbHlDb2RlUGFnZUluZm8gewotcHVibGljOgotICAgIEZvbnRGYW1pbHlD
b2RlUGFnZUluZm8oKQotICAgICAgICA6IG1fY29kZVBhZ2UoMCksIG1fY29kZVBhZ2VzKDApCi0g
ICAgewotICAgIH0KLSAgICBGb250RmFtaWx5Q29kZVBhZ2VJbmZvKGNvbnN0IHdjaGFyX3QqIGZh
bWlseSwgVUlOVCBjb2RlUGFnZSkKLSAgICAgICAgOiBtX2ZhbWlseShmYW1pbHkpLCBtX2NvZGVQ
YWdlKGNvZGVQYWdlKSwgbV9jb2RlUGFnZXMoMCkKLSAgICB7Ci0gICAgfQotICAgIERXT1JEIGNv
ZGVQYWdlcygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fY29kZVBhZ2VzKSB7Ci0gICAg
ICAgICAgICBpZiAoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUo
KS5nZXRGb250TGlua0ludGVyZmFjZSgpKQotICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+
Q29kZVBhZ2VUb0NvZGVQYWdlcyhtX2NvZGVQYWdlLCAmbV9jb2RlUGFnZXMpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX2NvZGVQYWdlczsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9mYW1p
bHk7Ci0gICAgVUlOVCBtX2NvZGVQYWdlOwotcHJpdmF0ZToKLSAgICBtdXRhYmxlIERXT1JEIG1f
Y29kZVBhZ2VzOwotfTsKLQotY2xhc3MgRm9udEZhbWlseUNoZWNrZXIgewotcHVibGljOgotICAg
IEZvbnRGYW1pbHlDaGVja2VyKGNvbnN0IHdjaGFyX3QqIGZhbWlseSkKLSAgICAgICAgOiBtX2V4
aXN0cyhmYWxzZSkKLSAgICB7Ci0gICAgICAgIEVudW1Gb250RmFtaWxpZXMoZ19zY3JlZW5EQywg
ZmFtaWx5LCBlbnVtRm9udEZhbVByb2MsIChMUEFSQU0pdGhpcyk7Ci0gICAgfQotICAgIGJvb2wg
aXNTdXBwb3J0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4aXN0czsgfQotcHJpdmF0ZToKLSAgICBi
b29sIG1fZXhpc3RzOwotICAgIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bUZvbnRGYW1Qcm9jKGNv
bnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09S
RCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSk7Ci19OwotCi1jbGFzcyBWYWxpZEZvbnRGYW1pbHlG
aW5kZXIgewotcHVibGljOgotICAgIFZhbGlkRm9udEZhbWlseUZpbmRlcigpCi0gICAgewotICAg
ICAgICBFbnVtRm9udEZhbWlsaWVzKGdfc2NyZWVuREMsIDAsIGVudW1Gb250RmFtUHJvYywgKExQ
QVJBTSl0aGlzKTsKLSAgICB9Ci0gICAgY29uc3QgU3RyaW5nJiBmYW1pbHkoKSBjb25zdCB7IHJl
dHVybiBtX2ZhbWlseTsgfQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHk7Ci0gICAgc3Rh
dGljIGludCBDQUxMQkFDSyBlbnVtRm9udEZhbVByb2MoY29uc3QgTE9HRk9OVCBGQVIqIGxwZWxm
LCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZvbnRUeXBlLCBMUEFSQU0gbFBh
cmFtKTsKLX07Ci0KLWNsYXNzIEZpeGVkU2l6ZUZvbnREYXRhOiBwdWJsaWMgUmVmQ291bnRlZDxG
aXhlZFNpemVGb250RGF0YT4gewotcHVibGljOgotICAgIExPR0ZPTlQgbV9mb250OwotICAgIEdE
SU9iamVjdDxIRk9OVD4gbV9oZm9udDsKLSAgICBURVhUTUVUUklDIG1fbWV0cmljczsKLSAgICBE
V09SRCBtX2NvZGVQYWdlczsKLSAgICB1bnNpZ25lZCBtX3dlaWdodDsKLSAgICBib29sIG1faXRh
bGljOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgdW5zaWduZWQgd2VpZ2h0LCBib29sIGl0YWxpYyk7
Ci1wcml2YXRlOgotICAgIEZpeGVkU2l6ZUZvbnREYXRhKCkKLSAgICAgICAgOiBtX2NvZGVQYWdl
cygwKQotICAgICAgICAsIG1fd2VpZ2h0KDApCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0g
ICAgewotICAgICAgICBtZW1zZXQoJm1fZm9udCwgMCwgc2l6ZW9mKG1fZm9udCkpOwotICAgICAg
ICBtZW1zZXQoJm1fbWV0cmljcywgMCwgc2l6ZW9mKG1fbWV0cmljcykpOwotICAgIH0KLX07Ci0K
LXN0cnVjdCBGaXhlZFNpemVGb250RGF0YUtleSB7Ci0gICAgRml4ZWRTaXplRm9udERhdGFLZXko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBBdG9taWNTdHJpbmcoKSwgdW5zaWduZWQgd2Vp
Z2h0ID0gMCwgYm9vbCBpdGFsaWMgPSBmYWxzZSkKLSAgICAgICAgOiBtX2ZhbWlseShmYW1pbHkp
Ci0gICAgICAgICwgbV93ZWlnaHQod2VpZ2h0KQotICAgICAgICAsIG1faXRhbGljKGl0YWxpYykK
LSAgICB7Ci0gICAgfQotCi0gICAgRml4ZWRTaXplRm9udERhdGFLZXkoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKSA6IG1fd2VpZ2h0KC0yKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV93ZWlnaHQgPT0gLTI7IH0KLQotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9mYW1pbHksIG90aGVyLm1f
ZmFtaWx5KQotICAgICAgICAgICAgJiYgbV93ZWlnaHQgPT0gb3RoZXIubV93ZWlnaHQKLSAgICAg
ICAgICAgICYmIG1faXRhbGljID09IG90aGVyLm1faXRhbGljOwotICAgIH0KLQotICAgIEF0b21p
Y1N0cmluZyBtX2ZhbWlseTsKLSAgICB1bnNpZ25lZCBtX3dlaWdodDsKLSAgICBib29sIG1faXRh
bGljOwotfTsKLQotc3RydWN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5SGFzaCB7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIGZvbnQpCi0gICAgewot
ICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAgICAgIENhc2VGb2xkaW5n
SGFzaDo6aGFzaChmb250Lm1fZmFtaWx5KSwKLSAgICAgICAgICAgIGZvbnQubV93ZWlnaHQsCi0g
ICAgICAgICAgICAvLyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZm9udC5tX2l0YWxpYyk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhh
c2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgRml4ZWRTaXplRm9udERhdGFLZXkmIGEsIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBi
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19OwotCi1zdHJ1
Y3QgRml4ZWRTaXplRm9udERhdGFLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZp
eGVkU2l6ZUZvbnREYXRhS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBlbXB0
eVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChG
aXhlZFNpemVGb250RGF0YUtleSwga2V5LCAobnVsbEF0b20pKTsKLSAgICAgICAgcmV0dXJuIGtl
eTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZpeGVkU2l6
ZUZvbnREYXRhS2V5JiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRml4ZWRTaXpl
Rm9udERhdGFLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
LSAgICB9Ci19OwotCi1pbnQgQ0FMTEJBQ0sgRm9udEZhbWlseUNoZWNrZXI6OmVudW1Gb250RmFt
UHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRFWFRNRVRSSUMgRkFSKiBscG50
bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgKChGb250RmFtaWx5Q2hl
Y2tlciopbFBhcmFtKS0+bV9leGlzdHMgPSB0cnVlOwotICAgIHJldHVybiAwOwotfQotCi1pbnQg
Q0FMTEJBQ0sgVmFsaWRGb250RmFtaWx5RmluZGVyOjplbnVtRm9udEZhbVByb2MoY29uc3QgTE9H
Rk9OVCBGQVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZvbnRU
eXBlLCBMUEFSQU0gbFBhcmFtKQotewotICAgIGlmIChscGVsZi0+bGZDaGFyU2V0ICE9IFNZTUJP
TF9DSEFSU0VUKSB7Ci0gICAgICAgICgoVmFsaWRGb250RmFtaWx5RmluZGVyKilsUGFyYW0pLT5t
X2ZhbWlseSA9IFN0cmluZyhscGVsZi0+bGZGYWNlTmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotdHlwZWRlZiBWZWN0b3I8Rm9udEZhbWlseUNvZGVQ
YWdlSW5mbz4gS25vd25Gb250czsKLXN0YXRpYyBLbm93bkZvbnRzJiBrbm93bkZvbnRzKCkKLXsK
LSAgICBzdGF0aWMgS25vd25Gb250cyBmb250czsKLSAgICBzdGF0aWMgYm9vbCBmaXJzdFRpbWUg
PSB0cnVlOwotICAgIGlmIChmaXJzdFRpbWUpIHsKLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7
Ci0gICAgICAgIGlmIChGb250UGxhdGZvcm1EYXRhOjppc1NvbmdUaVN1cHBvcnRlZCgpKQotICAg
ICAgICAgICAgZm9udHMuYXBwZW5kKEZvbnRGYW1pbHlDb2RlUGFnZUluZm8oc29uZ1RpU3RyLCA5
MzYpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvbnRzOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldERl
ZmF1bHRGb250RmFtaWx5KCkKLXsKLSAgICBpZiAoRm9udEZhbWlseUNoZWNrZXIoTCJUYWhvbWEi
KS5pc1N1cHBvcnRlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKEwiVGFob21hIik7Ci0KLSAg
ICBib29sIGdvb2QgPSBmYWxzZTsKLSAgICBTdHJpbmcgZmFtaWx5OwotICAgIEhLRVkga2V5Owot
ICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBMIlNZU1RFTVxcR0RJXFxT
eXNGbnQiLCAwLCAwLCAma2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERXT1JEIG1h
eGxlbiwgdHlwZTsKLSAgICAgICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChrZXksIEwiTm0iLCAwLCAm
dHlwZSwgMCwgJm1heGxlbikgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgewot
ICAgICAgICAgICAgKyttYXhsZW47Ci0gICAgICAgICAgICBpZiAod2NoYXJfdCogYnVmZmVyID0g
bmV3IHdjaGFyX3RbbWF4bGVuXSkgewotICAgICAgICAgICAgICAgIGlmIChSZWdRdWVyeVZhbHVl
RXgoa2V5LCBMIk5tIiwgMCwgJnR5cGUsIChMUEJZVEUpYnVmZmVyLCAmbWF4bGVuKSA9PSBFUlJP
Ul9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IFN0cmluZyhidWZmZXIs
IG1heGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGdvb2QgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBidWZmZXI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci0gICAgaWYgKGdvb2Qp
Ci0gICAgICAgIHJldHVybiBmYW1pbHk7Ci0KLSAgICByZXR1cm4gVmFsaWRGb250RmFtaWx5Rmlu
ZGVyKCkuZmFtaWx5KCk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGaXhlZFNpemVGb250RGF0YUtl
eSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiwgRml4ZWRTaXplRm9udERhdGFLZXlIYXNoLCBG
aXhlZFNpemVGb250RGF0YUtleVRyYWl0cz4gRml4ZWRTaXplRm9udENhY2hlOwotRml4ZWRTaXpl
Rm9udENhY2hlIGdfZml4ZWRTaXplRm9udENhY2hlOwotCi1QYXNzUmVmUHRyPEZpeGVkU2l6ZUZv
bnREYXRhPiBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCB1bnNpZ25lZCB3ZWlnaHQsIGJvb2wgaXRhbGljKQotewotICAgIEZpeGVkU2l6ZUZvbnRE
YXRhKiBmb250RGF0YSA9IG5ldyBGaXhlZFNpemVGb250RGF0YSgpOwotCi0gICAgZm9udERhdGEt
Pm1fd2VpZ2h0ID0gd2VpZ2h0OwotICAgIGZvbnREYXRhLT5tX2l0YWxpYyA9IGl0YWxpYzsKLQot
ICAgIExPR0ZPTlQmIHdpbkZvbnQgPSBmb250RGF0YS0+bV9mb250OwotICAgIC8vIFRoZSBzaXpl
IGhlcmUgbG9va3MgdW51c3VhbC4gIFRoZSBuZWdhdGl2ZSBudW1iZXIgaXMgaW50ZW50aW9uYWwu
Ci0gICAgd2luRm9udC5sZkhlaWdodCA9IC03MjsKLSAgICB3aW5Gb250LmxmV2lkdGggPSAwOwot
ICAgIHdpbkZvbnQubGZFc2NhcGVtZW50ID0gMDsKLSAgICB3aW5Gb250LmxmT3JpZW50YXRpb24g
PSAwOwotICAgIHdpbkZvbnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKLSAgICB3aW5Gb250LmxmU3Ry
aWtlT3V0ID0gZmFsc2U7Ci0gICAgd2luRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7
Ci0gICAgd2luRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9ERUZBVUxUX1BSRUNJUzsKLSAgICB3
aW5Gb250LmxmUXVhbGl0eSA9IENMRUFSVFlQRV9RVUFMSVRZOyAvL0RFRkFVTFRfUVVBTElUWTsK
LSAgICB3aW5Gb250LmxmQ2xpcFByZWNpc2lvbiA9IENMSVBfREVGQVVMVF9QUkVDSVM7Ci0gICAg
d2luRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFOwot
ICAgIHdpbkZvbnQubGZJdGFsaWMgPSBpdGFsaWM7Ci0gICAgd2luRm9udC5sZldlaWdodCA9IEZv
bnRQbGF0Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodCh3ZWlnaHQsIGZhbWlseSk7Ci0K
LSAgICBpbnQgbGVuID0gc3RkOjptaW4oZmFtaWx5Lmxlbmd0aCgpLCAodW5zaWduZWQgaW50KUxG
X0ZBQ0VTSVpFIC0gMSk7Ci0gICAgd21lbWNweSh3aW5Gb250LmxmRmFjZU5hbWUsIGZhbWlseS5j
aGFyYWN0ZXJzKCksIGxlbik7Ci0gICAgd2luRm9udC5sZkZhY2VOYW1lW2xlbl0gPSBMJ1wwJzsK
LQotICAgIGZvbnREYXRhLT5tX2hmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5k
aXJlY3QoJndpbkZvbnQpKTsKLQotICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChn
X3NjcmVlbkRDLCBmb250RGF0YS0+bV9oZm9udC5nZXQoKSk7Ci0KLSAgICBHZXRUZXh0TWV0cmlj
cyhnX3NjcmVlbkRDLCAmZm9udERhdGEtPm1fbWV0cmljcyk7Ci0KLSAgICBpZiAoSU1MYW5nRm9u
dExpbmtUeXBlKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0ludGVyZmFj
ZSgpKSB7Ci0gICAgICAgIGxhbmdGb250TGluay0+R2V0Rm9udENvZGVQYWdlcyhnX3NjcmVlbkRD
LCBmb250RGF0YS0+bV9oZm9udC5nZXQoKSwgJmZvbnREYXRhLT5tX2NvZGVQYWdlcyk7Ci0gICAg
ICAgIGZvbnREYXRhLT5tX2NvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1EYXRhOjpnZXRLbm93bkZv
bnRDb2RlUGFnZXMod2luRm9udC5sZkZhY2VOYW1lKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmpl
Y3QoZ19zY3JlZW5EQywgb2xkRm9udCk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoZm9udERhdGEp
OwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRT
aXplRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIHVuc2lnbmVkIHdlaWdodCwg
Ym9vbCBpdGFsaWMpCi17Ci0gICAgRml4ZWRTaXplRm9udERhdGFLZXkga2V5KGZhbWlseSwgd2Vp
Z2h0LCBpdGFsaWMpOwotICAgIEZpeGVkU2l6ZUZvbnRDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9
IGdfZml4ZWRTaXplRm9udENhY2hlLmFkZChrZXksIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4o
KSk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGlj
KTsKLQotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1zdGF0aWMgTE9O
RyB0b0dESUZvbnRXZWlnaHQoRm9udFdlaWdodCBmb250V2VpZ2h0KQotewotICAgIHN0YXRpYyBM
T05HIGdkaUZvbnRXZWlnaHRzW10gPSB7Ci0gICAgICAgIEZXX1RISU4sICAgICAgICAvLyBGb250
V2VpZ2h0MTAwCi0gICAgICAgIEZXX0VYVFJBTElHSFQsICAvLyBGb250V2VpZ2h0MjAwCi0gICAg
ICAgIEZXX0xJR0hULCAgICAgICAvLyBGb250V2VpZ2h0MzAwCi0gICAgICAgIEZXX05PUk1BTCwg
ICAgICAvLyBGb250V2VpZ2h0NDAwCi0gICAgICAgIEZXX01FRElVTSwgICAgICAvLyBGb250V2Vp
Z2h0NTAwCi0gICAgICAgIEZXX1NFTUlCT0xELCAgICAvLyBGb250V2VpZ2h0NjAwCi0gICAgICAg
IEZXX0JPTEQsICAgICAgICAvLyBGb250V2VpZ2h0NzAwCi0gICAgICAgIEZXX0VYVFJBQk9MRCwg
ICAvLyBGb250V2VpZ2h0ODAwCi0gICAgICAgIEZXX0hFQVZZICAgICAgICAvLyBGb250V2VpZ2h0
OTAwCi0gICAgfTsKLSAgICByZXR1cm4gZ2RpRm9udFdlaWdodHNbZm9udFdlaWdodF07Ci19Ci0K
LWNsYXNzIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhIHsKLXB1YmxpYzoKLSAgICBpbnQgbV9yZWZl
cmVuY2U7Ci0gICAgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBtX3Jvb3RGb250RGF0YTsKLSAg
ICBBdG9taWNTdHJpbmcgbV9mYW1pbHk7Ci0gICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2Ny
aXB0aW9uOwotICAgIEdESU9iamVjdDxIRk9OVD4gbV9oZm9udFNjYWxlZDsKLSAgICBpbnQgbV9z
aXplOwotICAgIGxvbmcgbV9mb250U2NhbGVkV2lkdGg7Ci0gICAgbG9uZyBtX2ZvbnRTY2FsZWRI
ZWlnaHQ7Ci0gICAgYm9vbCBtX2Rpc2FibGVkOwotICAgIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRh
KGludCBzaXplLCB1bnNpZ25lZCB3ZWlnaHQpCi0gICAgICAgIDogbV9yZWZlcmVuY2UoMSkKLSAg
ICAgICAgLCBtX2ZhbWlseShGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpKQot
ICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fZm9udFNjYWxlZFdpZHRoKDApCi0g
ICAgICAgICwgbV9mb250U2NhbGVkSGVpZ2h0KDApCi0gICAgICAgICwgbV9kaXNhYmxlZChmYWxz
ZSkKLSAgICB7Ci0gICAgICAgIG1fcm9vdEZvbnREYXRhID0gY3JlYXRlRml4ZWRTaXplRm9udERh
dGEobV9mYW1pbHksIHdlaWdodCwgZmFsc2UpOwotICAgIH0KLSAgICBGb250UGxhdGZvcm1Qcml2
YXRlRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpCi0gICAgICAgIDogbV9yZWZlcmVuY2UoMSkKLSAgICAgICAgLCBt
X3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCi0gICAgICAgICwgbV9m
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQotICAgICAgICAsIG1fZmFtaWx5KGZhbWls
eSkKLSAgICAgICAgLCBtX2ZvbnRTY2FsZWRXaWR0aCgwKQotICAgICAgICAsIG1fZm9udFNjYWxl
ZEhlaWdodCgwKQotICAgICAgICAsIG1fZGlzYWJsZWQoIWZvbnREZXNjcmlwdGlvbi5zcGVjaWZp
ZWRTaXplKCkpCi0gICAgewotICAgICAgICBtX3Jvb3RGb250RGF0YSA9IEZpeGVkU2l6ZUZvbnRE
YXRhOjpjcmVhdGUoZmFtaWx5LCB0b0dESUZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdo
dCgpKSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpKTsKLSAgICB9Ci19OwotCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGRlc2lyZWRGYW1pbHksIGJvb2wgdXNlRGVmYXVs
dEZvbnRJZk5vdFByZXNlbnQpCi17Ci0gICAgU3RyaW5nIGZhbWlseShkZXNpcmVkRmFtaWx5KTsK
LSAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgZGVmYXVsdEZvbnRGYW1pbHkoKSkg
JiYgIUZvbnRGYW1pbHlDaGVja2VyKGZhbWlseS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLmRhdGEoKSkuaXNTdXBwb3J0ZWQoKSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCBTdHJpbmcoaGVpVGlTdHIpKSAmJiBpc1NvbmdUaVN1cHBvcnRlZCgpKQotICAg
ICAgICAgICAgZmFtaWx5ID0gU3RyaW5nKHNvbmdUaVN0cik7Ci0gICAgICAgIGVsc2UgaWYgKHVz
ZURlZmF1bHRGb250SWZOb3RQcmVzZW50KQotICAgICAgICAgICAgZmFtaWx5ID0gZGVmYXVsdEZv
bnRGYW1pbHkoKTsKLSAgICB9Ci0KLSAgICBtX3ByaXZhdGUgPSBuZXcgRm9udFBsYXRmb3JtUHJp
dmF0ZURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQot
ewotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9wcml2YXRlID0gMDsKLSAgICBlbHNlCi0gICAg
ICAgIG1fcHJpdmF0ZSA9IG5ldyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSgoaW50KShzaXplICsg
MC41KSwgYm9sZCA/IEZXX0JPTEQgOiBGV19OT1JNQUwpOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKGlzVmFsaWQoKSAmJiAhLS1tX3ByaXZh
dGUtPm1fcmVmZXJlbmNlKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRh
LT5yZWZDb3VudCgpID09IDIpIHsKLSAgICAgICAgICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtl
eShtX3ByaXZhdGUtPm1fZmFtaWx5LCBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX3dlaWdo
dCwgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9pdGFsaWMpOwotICAgICAgICAgICAgZ19m
aXhlZFNpemVGb250Q2FjaGUucmVtb3ZlKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRl
IG1fcHJpdmF0ZTsKLSAgICB9Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURh
dGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKQotewotICAgIGlmIChpc1Zh
bGlkKCkgJiYgIS0tbV9wcml2YXRlLT5tX3JlZmVyZW5jZSkKLSAgICAgICAgZGVsZXRlIG1fcHJp
dmF0ZTsKLQotICAgIGlmIChtX3ByaXZhdGUgPSBvLm1fcHJpdmF0ZSkKLSAgICAgICAgKyttX3By
aXZhdGUtPm1fcmVmZXJlbmNlOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1IRk9OVCBGb250
UGxhdGZvcm1EYXRhOjpoZm9udCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQp
Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9m
b250KSk7Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udC5n
ZXQoKTsKLX0KLQotSEZPTlQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0U2NhbGVkRm9udEhhbmRsZShp
bnQgaGVpZ2h0LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkgfHwgbV9w
cml2YXRlLT5tX2Rpc2FibGVkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghbV9wcml2
YXRlLT5tX2hmb250U2NhbGVkIHx8IG1fcHJpdmF0ZS0+bV9mb250U2NhbGVkSGVpZ2h0ICE9IGhl
aWdodCB8fCBtX3ByaXZhdGUtPm1fZm9udFNjYWxlZFdpZHRoICE9IHdpZHRoKSB7Ci0gICAgICAg
IG1fcHJpdmF0ZS0+bV9mb250U2NhbGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtX3ByaXZh
dGUtPm1fZm9udFNjYWxlZFdpZHRoID0gd2lkdGg7Ci0gICAgICAgIExPR0ZPTlQgZm9udCA9IG1f
cHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udDsKLSAgICAgICAgZm9udC5sZkhlaWdodCA9
IC1oZWlnaHQ7Ci0gICAgICAgIGZvbnQubGZXaWR0aCA9IHdpZHRoOwotICAgICAgICBtX3ByaXZh
dGUtPm1faGZvbnRTY2FsZWQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgm
Zm9udCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3ByaXZhdGUtPm1faGZvbnRTY2FsZWQuZ2V0
KCk7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6ZGlzY2FyZEZvbnRIYW5kbGUoKQotewot
ICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9w
cml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udCkgewotICAgICAgICBtX3ByaXZhdGUtPm1f
cm9vdEZvbnREYXRhLT5tX2hmb250ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9oZm9udFNjYWxlZCkgewotICAgICAgICBtX3By
aXZhdGUtPm1faGZvbnRTY2FsZWQgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBURVhUTUVUUklDJiBGb250UGxhdGZv
cm1EYXRhOjptZXRyaWNzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RG
b250RGF0YS0+bV9tZXRyaWNzOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzU3lzdGVt
Rm9udCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgRm9udFBsYXRmb3Jt
RGF0YTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9zaXplOwotfQot
Ci1jb25zdCBGb250RGVzY3JpcHRpb24mIEZvbnRQbGF0Zm9ybURhdGE6OmZvbnREZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9mb250RGVzY3JpcHRpb247Ci19
Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgRm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX2ZhbWlseTsKLX0KLQotY29uc3QgTE9HRk9OVCYg
Rm9udFBsYXRmb3JtRGF0YTo6bG9nRm9udCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udDsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpp
c0Rpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWlzVmFsaWQoKSB8fCBtX3ByaXZhdGUt
Pm1fZGlzYWJsZWQ7Ci19Ci0KLURXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmNvZGVQYWdlcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fY29kZVBhZ2Vz
OwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzU29uZ1RpU3VwcG9ydGVkKCkKLXsKLSAg
ICBzdGF0aWMgYm9vbCBleGlzdHMgPSBGb250RmFtaWx5Q2hlY2tlcihzb25nVGlTdHIpLmlzU3Vw
cG9ydGVkKCk7Ci0gICAgcmV0dXJuIGV4aXN0czsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRh
OjptYXBLbm93bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBL
bm93bkZvbnRzJiBmb250cyA9IGtub3duRm9udHMoKTsKLSAgICBmb3IgKEtub3duRm9udHM6Oml0
ZXJhdG9yIGkgPSBmb250cy5iZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGktPmNvZGVQYWdlcygpICYgY29kZVBhZ2VzKSB7Ci0gICAgICAgICAgICBmYW1pbHkg
PSBpLT5tX2ZhbWlseTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRFdPUkQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25v
d25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSkKLXsKLSAgICBLbm93bkZvbnRz
JiBmb250cyA9IGtub3duRm9udHMoKTsKLSAgICBmb3IgKEtub3duRm9udHM6Oml0ZXJhdG9yIGkg
PSBmb250cy5iZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGktPm1fZmFtaWx5LCBTdHJpbmcoZmFtaWx5KSkpCi0gICAgICAgICAg
ICByZXR1cm4gaS0+Y29kZVBhZ2VzKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1jb25z
dCBTdHJpbmcmIEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCkKLXsKLSAgICBz
dGF0aWMgU3RyaW5nIGZhbWlseShnZXREZWZhdWx0Rm9udEZhbWlseSgpKTsKLSAgICByZXR1cm4g
ZmFtaWx5OwotfQotCi1MT05HIEZvbnRQbGF0Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdo
dChMT05HIGdkaUZvbnRXZWlnaHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQotewotICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgbHVjaWRhU3RyKCJMdWNpZGEgR3JhbmRlIik7Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhU3RyKSkgewotICAgICAgICBpZiAoZ2RpRm9udFdl
aWdodCA9PSBGV19OT1JNQUwpCi0gICAgICAgICAgICByZXR1cm4gRldfTUVESVVNOwotICAgICAg
ICBpZiAoZ2RpRm9udFdlaWdodCA9PSBGV19CT0xEKQotICAgICAgICAgICAgcmV0dXJuIEZXX1NF
TUlCT0xEOwotICAgIH0KLSAgICByZXR1cm4gZ2RpRm9udFdlaWdodDsKLX0KLQotI2lmbmRlZiBO
REVCVUcKLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjOTQ2OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuCi0gKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZv
bnQuY3BwLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9u
dFBsYXRmb3JtRGF0YV9oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHRhZ1RFWFRNRVRSSUNX
IFRFWFRNRVRSSUM7Ci10eXBlZGVmIHN0cnVjdCB0YWdMT0dGT05UVyBMT0dGT05UOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YTsKLQot
ICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotCi0gICAgcHVibGljOgotCi0gICAgICAgIEZv
bnRQbGF0Zm9ybURhdGEoKTogbV9wcml2YXRlKDApIHt9Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotCi0gICAgICAgIC8vIFVz
ZWQgZm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuCi0g
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6
IG1fcHJpdmF0ZSgoRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEqKTEpIHt9Ci0gICAgICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAodW5zaWduZWQpbV9wcml2
YXRlID09IDE7IH0KLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCB1
c2VEZWZhdWx0Rm9udElmTm90UHJlc2VudCA9IHRydWUpOwotCi0gICAgICAgIH5Gb250UGxhdGZv
cm1EYXRhKCk7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBvKSA6IG1fcHJpdmF0ZSgwKSB7IG9wZXJhdG9yPShvKTsgfQotICAgICAgICBGb250UGxh
dGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgbyk7Ci0KLSAgICAg
ICAgaW50IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihtX3ByaXZhdGUpICYgfjE7IH0KLSAgICAgICAgSEZPTlQgaGZvbnQoKSBjb25zdDsKLSAgICAg
ICAgY29uc3QgVEVYVE1FVFJJQyYgbWV0cmljcygpIGNvbnN0OwotICAgICAgICBib29sIGlzU3lz
dGVtRm9udCgpIGNvbnN0OwotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gKHVuc2lnbmVkKW1fcHJpdmF0ZTsgfQotICAgICAg
ICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OwotICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSgpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0IHsgICAgIHJldHVybiBt
X3ByaXZhdGUgPT0gb3RoZXIubV9wcml2YXRlOyB9Ci0gICAgICAgIEhGT05UIGdldFNjYWxlZEZv
bnRIYW5kbGUoaW50IGhlaWdodCwgaW50IHdpZHRoKSBjb25zdDsKLSAgICAgICAgY29uc3QgTE9H
Rk9OVCYgbG9nRm9udCgpIGNvbnN0OwotICAgICAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBkaXNjYXJkRm9udEhhbmRsZSgpOwotICAgICAgICBEV09SRCBjb2RlUGFn
ZXMoKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgYm9vbCBpc1NvbmdUaVN1cHBvcnRlZCgpOwot
ICAgICAgICBzdGF0aWMgYm9vbCBtYXBLbm93bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcm
IGZhbWlseSk7Ci0gICAgICAgIHN0YXRpYyBEV09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29u
c3Qgd2NoYXJfdCogZmFtaWx5KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVs
dEZvbnRGYW1pbHkoKTsKLSAgICAgICAgc3RhdGljIExPTkcgYWRqdXN0ZWRHRElGb250V2VpZ2h0
KExPTkcgZ2RpRm9udFdlaWdodCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpOwotCi0gICAgICAgIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIEhvcml6b250YWw7IH0g
Ly8gRklYTUU6IEltcGxlbWVudC4KLSAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24pIHsgfSAvLyBGSVhNRTogSW1wbGVtZW50LgotCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEqIG1fcHJpdmF0ZTsKLSAgICB9OwotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMjg0OGMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUg
IldpZHRoSXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdURjo6VW5pY29kZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1IREMgZ19zY3JlZW5EQyA9
IEdldERDKDApOwotCi1jbGFzcyBTY3JlZW5EY1JlbGVhc2VyIHsKLXB1YmxpYzoKLSAgICB+U2Ny
ZWVuRGNSZWxlYXNlcigpCi0gICAgewotICAgICAgICBSZWxlYXNlREMoMCwgZ19zY3JlZW5EQyk7
Ci0gICAgfQotfTsKLQotU2NyZWVuRGNSZWxlYXNlciByZWxlYXNlU2NyZWVuRGM7Ci0KLXZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
Ci0gICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAotewotICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RleHQoZm9udERhdGEsIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKLX0KLQotY2xhc3MgVGV4dFJ1bkNvbXBvbmVu
dCB7Ci1wdWJsaWM6Ci0gICAgVGV4dFJ1bkNvbXBvbmVudCgpIDogbV90ZXh0UnVuKDAsIDApIHt9
Ci0gICAgVGV4dFJ1bkNvbXBvbmVudChjb25zdCBVQ2hhciAqc3RhcnQsIGludCBsZW5ndGgsIGNv
bnN0IFRleHRSdW4mIHBhcmVudFRleHRSdW4sIGNvbnN0IEZvbnQgJmZvbnQsIGludCBvZmZzZXQp
OwotICAgIFRleHRSdW5Db21wb25lbnQoaW50IHNwYWNlcywgY29uc3QgRm9udCAmZm9udCwgaW50
IG9mZnNldCk7Ci0gICAgflRleHRSdW5Db21wb25lbnQoKSB7IG1fdGV4dFJ1bjsgfQotCi0gICAg
Ym9vbCBpc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZXM7IH0KLSAgICBpbnQgdGV4dExl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VzID8gbV9zcGFjZXMgOiBtX3RleHRSdW4ubGVu
Z3RoKCk7IH0KLQotICAgIFRleHRSdW4gbV90ZXh0UnVuOwotICAgIGZsb2F0IG1fd2lkdGg7Ci0g
ICAgaW50IG1fb2Zmc2V0OwotICAgIGludCBtX3NwYWNlczsKLX07Ci0KLVRleHRSdW5Db21wb25l
bnQ6OlRleHRSdW5Db21wb25lbnQoY29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQgbGVuZ3RoLCBjb25z
dCBUZXh0UnVuJiBwYXJlbnRUZXh0UnVuLCBjb25zdCBGb250ICZmb250LCBpbnQgbykKLSAgICA6
IG1fdGV4dFJ1bihzdGFydCwgbGVuZ3RoLCAwLCAwCi0gICAgICAgICwgcGFyZW50VGV4dFJ1bi5h
bGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpID8gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biA6IFRleHRSdW46OkZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uCi0gICAgICAgICwgcGFyZW50VGV4
dFJ1bi5kaXJlY3Rpb24oKQotICAgICAgICAsIHBhcmVudFRleHRSdW4uZGlyZWN0aW9uYWxPdmVy
cmlkZSgpKQotICAgICwgbV9vZmZzZXQobykKLSAgICAsIG1fc3BhY2VzKDApCi17Ci0gICAgbV90
ZXh0UnVuLnNldFRhYlNpemUocGFyZW50VGV4dFJ1bi5hbGxvd1RhYnMoKSwgcGFyZW50VGV4dFJ1
bi50YWJTaXplKCkpOwotCi0gICAgV2lkdGhJdGVyYXRvciBpdCgmZm9udCwgbV90ZXh0UnVuKTsK
LSAgICBpdC5hZHZhbmNlKG1fdGV4dFJ1bi5sZW5ndGgoKSwgMCk7Ci0gICAgbV93aWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKLX0KLQotVGV4dFJ1bkNvbXBvbmVudDo6VGV4dFJ1bkNvbXBvbmVu
dChpbnQgcywgY29uc3QgRm9udCAmZm9udCwgaW50IG8pCi0gICAgOiBtX3RleHRSdW4oMCwgMCkK
LSAgICAsIG1fb2Zmc2V0KG8pCi0gICAgLCBtX3NwYWNlcyhzKQotewotICAgIG1fd2lkdGggPSBz
ICogZm9udC5wcmltYXJ5Rm9udCgpLT53aWR0aEZvckdseXBoKCcgJyk7Ci19Ci0KLXR5cGVkZWYg
VmVjdG9yPFRleHRSdW5Db21wb25lbnQsIDEyOD4gVGV4dFJ1bkNvbXBvbmVudHM7Ci0KLXN0YXRp
YyBpbnQgZ2VuZXJhdGVDb21wb25lbnRzKFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBj
b25zdCBGb250ICZmb250LCBjb25zdCBUZXh0UnVuICZydW4pCi17Ci0gICAgaW50IGxldHRlclNw
YWNpbmcgPSBmb250LmxldHRlclNwYWNpbmcoKTsKLSAgICBpbnQgd29yZFNwYWNpbmcgPSBmb250
LndvcmRTcGFjaW5nKCk7Ci0gICAgaW50IHBhZGRpbmcgPSBydW4uZXhwYW5zaW9uKCk7Ci0gICAg
aW50IG51bVNwYWNlcyA9IDA7Ci0gICAgaWYgKHBhZGRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBydW4ubGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIGlmIChGb250Ojp0cmVh
dEFzU3BhY2UocnVuW2ldKSkKLSAgICAgICAgICAgICAgICArK251bVNwYWNlczsKLSAgICB9Ci0K
LSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBpZiAobGV0dGVyU3BhY2luZykgewotICAgICAgICAv
LyBuZWVkIHRvIGRyYXcgZXZlcnkgbGV0dGVyIG9uIGl0J3Mgb3duCi0gICAgICAgIGludCBzdGFy
dCA9IDA7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuWzBdKSkgewotICAgICAg
ICAgICAgaW50IGFkZCA9IDA7Ci0gICAgICAgICAgICBpZiAobnVtU3BhY2VzKSB7Ci0gICAgICAg
ICAgICAgICAgYWRkID0gcGFkZGluZy9udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgcGFkZGlu
ZyAtPSBhZGQ7Ci0gICAgICAgICAgICAgICAgLS1udW1TcGFjZXM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudCgxLCBmb250LCBv
ZmZzZXQpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBhZGQgKyBsZXR0ZXJTcGFjaW5nICsgY29t
cG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7Ci0gICAgICAgICAgICBzdGFydCA9IDE7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBydW4ubGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICAgICAgVUNoYXIgY2ggPSBydW5baV07Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2gpICYmIFUxNl9JU19UUkFJTChydW5baS0xXSkpCi0gICAgICAgICAgICAgICAgY2ggPSBVMTZf
R0VUX1NVUFBMRU1FTlRBUlkoY2gsIHJ1bltpLTFdKTsKLSAgICAgICAgICAgIGlmIChVMTZfSVNf
VFJBSUwoY2gpIHx8IFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NTl9NQVNLKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5b
aV0pKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFkZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYg
KGkgLSBzdGFydCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5k
KFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGkgLSBzdGFydCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuLCBmb250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBv
bmVudHMtPmxhc3QoKS5tX3dpZHRoICsgbGV0dGVyU3BhY2luZzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAgICAgICAgICBh
ZGQgPSBwYWRkaW5nL251bVNwYWNlczsKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZyAtPSBh
ZGQ7Ci0gICAgICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudCgxLCBm
b250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gd29yZFNwYWNpbmcgKyBh
ZGQgKyBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAg
ICAgICAgICAgc3RhcnQgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMxNigp
ICsgc3RhcnQsIGkgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0
ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoICsgbGV0dGVyU3BhY2luZzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVu
Lmxlbmd0aCgpIC0gc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQo
VGV4dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgcnVuLmxlbmd0aCgp
IC0gc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b250LCBvZmZzZXQpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCku
bV93aWR0aDsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0gbGV0dGVyU3BhY2luZzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJ1bi5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRB
c1NwYWNlKHJ1bltpXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSAtIHN0YXJ0ID4gMCkgewot
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChy
dW4uY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgaSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsIG9mZnNldCkp
OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lk
dGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludCBhZGQgPSAwOwotICAg
ICAgICAgICAgICAgIGlmIChudW1TcGFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkID0g
cGFkZGluZy9udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwot
ICAgICAgICAgICAgICAgICAgICAtLW51bVNwYWNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwg
b2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGFkZCArIGNvbXBvbmVudHMtPmxh
c3QoKS5tX3dpZHRoOwotICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQgKz0gd29yZFNwYWNpbmc7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmxlbmd0aCgpIC0gc3Rh
cnQgPiAwKSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVu
dChydW4uY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgcnVuLmxlbmd0aCgpIC0gc3RhcnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LCBvZmZzZXQpKTsK
LSAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1mbG9hdCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGlm
ICh0byA8IDApCi0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotICAgIGlmIChmcm9tIDwgMCkK
LSAgICAgICAgZnJvbSA9IDA7Ci0KLSAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwot
ICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsK
LQotICAgIGZsb2F0IHdpZHRoT2ZEcmF3blRleHQgPSAwOwotICAgIGludCBjdXJQb3MgPSAwOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCljb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOwot
ICAgICAgICBpbnQgbGVuID0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIGludCBjdXJFbmQg
PSBjdXJQb3MgKyBsZW47Ci0gICAgICAgIGlmIChjdXJQb3MgPCB0byAmJiBmcm9tIDwgY3VyRW5k
ICYmICFjb21wLmlzU3BhY2UoKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwdCA9IHBvaW50
OwotICAgICAgICAgICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgICAgICAgICBwdC5zZXRYKHBv
aW50LngoKSArIHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dpZHRoKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50LngoKSArIGNvbXAubV9vZmZzZXQp
OwotICAgICAgICAgICAgd2lkdGhPZkRyYXduVGV4dCArPSBkcmF3U2ltcGxlVGV4dChjb250ZXh0
LCBjb21wLm1fdGV4dFJ1biwgcHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6bWluKHRvLCBjdXJFbmQp
IC0gY3VyUG9zKTsKLSAgICAgICAgfQotICAgICAgICBjdXJQb3MgKz0gbGVuOwotICAgICAgICBp
ZiAoZnJvbSA8IGN1clBvcykKLSAgICAgICAgICAgIGZyb20gPSBjdXJQb3M7Ci0gICAgfQotICAg
IHJldHVybiB3aWR0aE9mRHJhd25UZXh0OwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
RmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBj
b25zdAotewotICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgaW50IHcgPSBn
ZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwotICAgIHJldHVybiB3
OwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9y
IEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQg
bnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8v
d2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgotICAgIGludCBw
b3NpdGlvbiA9IHN0YXRpY19jYXN0PGludD4oeEZsb2F0KTsKLQotICAgIFRleHRSdW5Db21wb25l
bnRzIGNvbXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVu
dHMsICp0aGlzLCBydW4pOwotCi0gICAgaWYgKHBvc2l0aW9uID49IHcpCi0gICAgICAgIHJldHVy
biBydW4ubGVuZ3RoKCk7Ci0KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBpZiAocnVuLnJ0bCgp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVu
dHMuYXQoaSk7Ci0gICAgICAgICAgICBpbnQgeGUgPSB3IC0gY29tcC5tX29mZnNldDsKLSAgICAg
ICAgICAgIGludCB4cyA9IHhlIC0gY29tcC5tX3dpZHRoOwotICAgICAgICAgICAgaWYgKHBvc2l0
aW9uID49IHhzKQotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAoY29tcC5pc1NwYWNl
KCkKLSAgICAgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxpbnQ+KChwb3NpdGlvbiAtIHhl
KSAqIGNvbXAubV9zcGFjZXMgLyBzdGQ6Om1heCgxLmYsIGNvbXAubV93aWR0aCkgKyAwLjUpCi0g
ICAgICAgICAgICAgICAgICAgIDogb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbXAu
bV90ZXh0UnVuLCBwb3NpdGlvbiAtIHhzLCBpbmNsdWRlUGFydGlhbEdseXBocykpOwotCi0gICAg
ICAgICAgICBvZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25l
bnRzLmF0KGkpOwotICAgICAgICAgICAgaW50IHhzID0gY29tcC5tX29mZnNldDsKLSAgICAgICAg
ICAgIGludCB4ZSA9IHhzICsgY29tcC5tX3dpZHRoOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9u
IDw9IHhlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIC0geHMgPj0geGUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsgKGNvbXAuaXNTcGFjZSgpCi0gICAgICAgICAgICAg
ICAgICAgID8gc3RhdGljX2Nhc3Q8aW50PigocG9zaXRpb24gLSB4cykgKiBjb21wLm1fc3BhY2Vz
IC8gc3RkOjptYXgoMS5mLCBjb21wLm1fd2lkdGgpICsgMC41KQotICAgICAgICAgICAgICAgICAg
ICA6IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb21wLm1fdGV4dFJ1biwgcG9zaXRp
b24gLSB4cywgaW5jbHVkZVBhcnRpYWxHbHlwaHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG9mZnNldCArPSBjb21wLnRleHRMZW5ndGgoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gcnVuLmxlbmd0aCgpOwotfQotCi0KLXN0YXRpYyBmbG9hdCBjdXJzb3JUb1goY29uc3Qg
Rm9udCogZm9udCwgY29uc3QgVGV4dFJ1bkNvbXBvbmVudHMmIGNvbXBvbmVudHMsIGludCB3aWR0
aCwgYm9vbCBydGwsIGludCBjdXJzb3IpCi17Ci0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7Ci0gICAgICAgIGlm
IChzdGFydCArIGNvbXAudGV4dExlbmd0aCgpIDw9IGN1cnNvcikgewotICAgICAgICAgICAgc3Rh
cnQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpbnQgeHMgPSBjb21wLm1fb2Zmc2V0OwotICAgICAgICBpZiAocnRsKQotICAg
ICAgICAgICAgeHMgPSB3aWR0aCAtIHhzIC0gY29tcC5tX3dpZHRoOwotCi0gICAgICAgIGludCBw
b3MgPSBjdXJzb3IgLSBzdGFydDsKLSAgICAgICAgaWYgKGNvbXAuaXNTcGFjZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAocnRsKQotICAgICAgICAgICAgICAgIHBvcyA9IGNvbXAudGV4dExlbmd0aCgp
IC0gcG9zOwotICAgICAgICAgICAgcmV0dXJuIHhzICsgcG9zICogY29tcC5tX3dpZHRoIC8gY29t
cC5tX3NwYWNlczsKLSAgICAgICAgfQotICAgICAgICBXaWR0aEl0ZXJhdG9yIGl0KGZvbnQsIGNv
bXAubV90ZXh0UnVuKTsKLSAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgICAg
IGl0LmFkdmFuY2UocG9zLCAmZ2x5cGhCdWZmZXIpOwotICAgICAgICByZXR1cm4geHMgKyBpdC5t
X3J1bldpZHRoU29GYXI7Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKLX0KLQotRmxvYXRSZWN0
IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHB0LAotICAgIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAot
ewotICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0
ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwotCi0gICAgaWYgKCFmcm9tICYm
IHRvID09IHJ1bi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCksIHB0
LnkoKSwgdywgaCk7Ci0KLSAgICBmbG9hdCB4MSA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25lbnRz
LCB3LCBydW4ucnRsKCksIGZyb20pOwotICAgIGZsb2F0IHgyID0gY3Vyc29yVG9YKHRoaXMsIGNv
bXBvbmVudHMsIHcsIHJ1bi5ydGwoKSwgdG8pOwotICAgIGlmICh4MiA8IHgxKQotICAgICAgICBz
dGQ6OnN3YXAoeDEsIHgyKTsKLQotICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgeDEsIHB0
LnkoKSwgeDIgLSB4MSwgaCk7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250
c0ZvckNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRm9udDo6
Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5DRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9k
ZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjNTVmNC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VU
cmVlTm9kZVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgotCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1EV09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsK
LQotdHlwZWRlZiB1bnNpZ25lZCAoKmZ1bmNHZXRDaGFyQ29kZVBhZ2VzKSh1bnNpZ25lZCBzaG9y
dCBjLCB1bnNpZ25lZCYgbGFzdFBvcyk7Ci1mdW5jR2V0Q2hhckNvZGVQYWdlcyBnZXRDaGFyQ29k
ZVBhZ2VzID0gMDsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIGlmIChsZW5ndGggIT0gYnVmZmVyTGVu
Z3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCkpIHsKLSAgICAgICAgRFdPUkQgZm9udENvZGVQYWdlcyA9IGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5jb2RlUGFnZXMoKTsKLSAgICAgICAgaWYgKGZvbnRDb2RlUGFnZXMp
IHsKLSAgICAgICAgICAgIGlmIChnZXRDaGFyQ29kZVBhZ2VzKSB7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgbGFzdFBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIERXT1JEIGFj
dHVhbENvZGVQYWdlcyA9IGdldENoYXJDb2RlUGFnZXMoYnVmZmVyW2ldLCBsYXN0UG9zKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxDb2RlUGFnZXMgfHwgKGFjdHVhbENvZGVQYWdl
cyAmIGZvbnRDb2RlUGFnZXMpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRh
Rm9ySW5kZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCBmb250RGF0YSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoSU1MYW5nRm9udExpbmtUeXBlKiBs
YW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIERXT1JEIGFjdHVhbENvZGVQYWdlczsKLSAgICAgICAgICAg
ICAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2VzKGJ1ZmZlcltpXSwgJmFjdHVh
bENvZGVQYWdlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWN0dWFsQ29kZVBhZ2VzIHx8
IChhY3R1YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRH
bHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
IHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5D
RS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MzU4ODEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5DRS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHcmFkaWVu
dDo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVT
dG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wJiBiKQotewotICAgIHJldHVybiBhLnN0b3AgPCBiLnN0b3A7Ci19Ci0KLWNvbnN0IFZlY3Rv
cjxHcmFkaWVudDo6Q29sb3JTdG9wLCAyPiYgR3JhZGllbnQ6OmdldFN0b3BzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fc3RvcHNTb3J0ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RvcHMuc2l6ZSgpKQot
ICAgICAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5k
KCksIGNvbXBhcmVTdG9wcyk7Ci0gICAgICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gbV9zdG9wczsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0Nv
bnRleHQqIGMsIGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBjLT5maWxsUmVjdChyLCB0aGlz
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjY5ZjAwLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAx
MCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdESUV4dHJhcy5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgot
I2luY2x1ZGUgIlNoYXJlZEJpdG1hcC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5
cGVkZWYgdm9pZCAoKkZ1bmNHcmFkaWVudEZpbGxSZWN0TGluZWFyKShIREMgaGRjLCBjb25zdCBJ
bnRSZWN0JiByLCBjb25zdCBJbnRQb2ludCYgcDAsIGNvbnN0IEludFBvaW50JiBwMSwgY29uc3Qg
VmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyk7Ci10eXBlZGVmIHZvaWQgKCpGdW5j
R3JhZGllbnRGaWxsUmVjdFJhZGlhbCkoSERDIGhkYywgY29uc3QgSW50UmVjdCYgciwgY29uc3Qg
SW50UG9pbnQmIHAwLCBjb25zdCBJbnRQb2ludCYgcDEsIGZsb2F0IHIwLCBmbG9hdCByMSwgY29u
c3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcyk7Ci1GdW5jR3JhZGllbnRGaWxs
UmVjdExpbmVhciBnX2xpbmVhckdyYWRpZW50RmlsbGVyID0gMDsKLUZ1bmNHcmFkaWVudEZpbGxS
ZWN0UmFkaWFsIGdfcmFkaWFsR3JhZGllbnRGaWxsZXIgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNaZXJvKGRvdWJsZSBkKQotewotICAgIHJldHVybiBkID4gMCA/IGQgPD0gMS5FLTEwIDog
ZCA+PSAtMS5FLTEwOwotfQotCi0vLyBzdGFibGVSb3VuZCByb3VuZHMgLTAuNSB0byAwLCB3aGVy
ZSBscm91bmQgcm91bmRzIC0wLjUgdG8gLTEuCi1zdGF0aWMgaW5saW5lIGludCBzdGFibGVSb3Vu
ZChkb3VibGUgZCkKLXsKLSAgICBpZiAoZCA+IDApCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGQgKyAwLjUpOwotCi0gICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwotICAg
IHJldHVybiBpIC0gZCA+IDAuNSA/IGkgLSAxIDogaTsKLX0KLQotLy8gVW5saWtlIGVuY2xvc2lu
Z0ludFJlY3QoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIHN0cmljdCByb3VuZGluZy4KLXN0YXRpYyBp
bmxpbmUgSW50UmVjdCByb3VuZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIHJldHVy
biBJbnRSZWN0KHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVS
b3VuZChyLm1heFgoKSkgLSBzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIubWF4WSgp
KSAtIHN0YWJsZVJvdW5kKHIueSgpKSk7Ci19Ci0KLS8vIFJvdGF0aW9uIHRyYW5zZm9ybWF0aW9u
Ci1jbGFzcyBSb3RhdGlvblRyYW5zZm9ybSB7Ci1wdWJsaWM6Ci0gICAgUm90YXRpb25UcmFuc2Zv
cm0oKQotICAgICAgICA6IG1fY29zQSgxLikKLSAgICAgICAgLCBtX3NpbkEoMC4pCi0gICAgICAg
ICwgbV9wcmVTaGlmdFgoMCkKLSAgICAgICAgLCBtX3ByZVNoaWZ0WSgwKQotICAgICAgICAsIG1f
cG9zdFNoaWZ0WCgwKQotICAgICAgICAsIG1fcG9zdFNoaWZ0WSgwKQotICAgIHsKLSAgICB9Ci0g
ICAgUm90YXRpb25UcmFuc2Zvcm0gb3BlcmF0b3ItKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJv
dGF0aW9uVHJhbnNmb3JtIHJ0bjsKLSAgICAgICAgcnRuLm1fY29zQSA9IG1fY29zQTsKLSAgICAg
ICAgcnRuLm1fc2luQSA9IC1tX3NpbkE7Ci0gICAgICAgIHJ0bi5tX3ByZVNoaWZ0WCA9IG1fcG9z
dFNoaWZ0WDsKLSAgICAgICAgcnRuLm1fcHJlU2hpZnRZID0gbV9wb3N0U2hpZnRZOwotICAgICAg
ICBydG4ubV9wb3N0U2hpZnRYID0gbV9wcmVTaGlmdFg7Ci0gICAgICAgIHJ0bi5tX3Bvc3RTaGlm
dFkgPSBtX3ByZVNoaWZ0WTsKLSAgICAgICAgcmV0dXJuIHJ0bjsKLSAgICB9Ci0gICAgdm9pZCBt
YXAoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0Ci0g
ICAgewotICAgICAgICB4MSArPSBtX3ByZVNoaWZ0WDsKLSAgICAgICAgeTEgKz0gbV9wcmVTaGlm
dFk7Ci0gICAgICAgICp4MiA9IHgxICogbV9jb3NBICsgeTEgKiBtX3NpbkEgKyBtX3Bvc3RTaGlm
dFg7Ci0gICAgICAgICp5MiA9IHkxICogbV9jb3NBIC0geDEgKiBtX3NpbkEgKyBtX3Bvc3RTaGlm
dFk7Ci0gICAgfQotICAgIHZvaWQgbWFwKGludCB4MSwgaW50IHkxLCBpbnQqIHgyLCBpbnQqIHky
KSBjb25zdAotICAgIHsKLSAgICAgICAgeDEgKz0gbV9wcmVTaGlmdFg7Ci0gICAgICAgIHkxICs9
IG1fcHJlU2hpZnRZOwotICAgICAgICAqeDIgPSBzdGFibGVSb3VuZCh4MSAqIG1fY29zQSArIHkx
ICogbV9zaW5BKSArIG1fcG9zdFNoaWZ0WDsKLSAgICAgICAgKnkyID0gc3RhYmxlUm91bmQoeTEg
KiBtX2Nvc0EgLSB4MSAqIG1fc2luQSkgKyBtX3Bvc3RTaGlmdFk7Ci0gICAgfQotCi0gICAgZG91
YmxlIG1fY29zQTsKLSAgICBkb3VibGUgbV9zaW5BOwotICAgIGludCBtX3ByZVNoaWZ0WDsKLSAg
ICBpbnQgbV9wcmVTaGlmdFk7Ci0gICAgaW50IG1fcG9zdFNoaWZ0WDsKLSAgICBpbnQgbV9wb3N0
U2hpZnRZOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBJbnRQb2ludCBt
YXBQb2ludChjb25zdCBJbnRQb2ludCYgcCwgY29uc3QgVCYgdCkKLXsKLSAgICBpbnQgeCwgeTsK
LSAgICB0Lm1hcChwLngoKSwgcC55KCksICZ4LCAmeSk7Ci0gICAgcmV0dXJuIEludFBvaW50KHgs
IHkpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgbWFw
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgVCYgdCkKLXsKLSAgICBkb3VibGUgeCwg
eTsKLSAgICB0Lm1hcChwLngoKSwgcC55KCksICZ4LCAmeSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9p
bnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBUcmFuc2Zvcm0sIGNsYXNzIFJlY3QsIGNsYXNzIFZhbHVlPiBzdGF0aWMg
aW5saW5lIFJlY3QgbWFwUmVjdChjb25zdCBSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBWYWx1ZSB4WzRdLCB5WzRdOwotICAgIFZhbHVlIGwsIHQsIHIsIGI7
Ci0gICAgciA9IHJlY3QubWF4WCgpIC0gMTsKLSAgICBiID0gcmVjdC5tYXhZKCkgLSAxOwotICAg
IHRyYW5zZm9ybS5tYXAocmVjdC54KCksIHJlY3QueSgpLCB4LCB5KTsKLSAgICB0cmFuc2Zvcm0u
bWFwKHJlY3QueCgpLCBiLCB4ICsgMSwgeSArIDEpOwotICAgIHRyYW5zZm9ybS5tYXAociwgYiwg
eCArIDIsIHkgKyAyKTsKLSAgICB0cmFuc2Zvcm0ubWFwKHIsIHJlY3QueSgpLCB4ICsgMywgeSAr
IDMpOwotICAgIGwgPSByID0geFszXTsKLSAgICB0ID0gYiA9IHlbM107Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKHhbaV0gPCBsKQotICAgICAgICAgICAg
bCA9IHhbaV07Ci0gICAgICAgIGVsc2UgaWYgKHhbaV0gPiByKQotICAgICAgICAgICAgciA9IHhb
aV07Ci0KLSAgICAgICAgaWYgKHlbaV0gPCB0KQotICAgICAgICAgICAgdCA9IHlbaV07Ci0gICAg
ICAgIGVsc2UgaWYgKHlbaV0gPiBiKQotICAgICAgICAgICAgYiA9IHlbaV07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEludFJlY3QobCwgdCwgciAtIGwgKyAxLCBiIC0gdCArIDEpOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5saW5lIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBUJiB0cmFuc2Zvcm0pCi17Ci0gICAgcmV0dXJuIG1hcFJlY3Q8VCwgSW50
UmVjdCwgaW50PihyZWN0LCB0cmFuc2Zvcm0pOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0
aWMgaW5saW5lIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
VCYgdHJhbnNmb3JtKQotewotICAgIHJldHVybiBtYXBSZWN0PFQsIEZsb2F0UmVjdCwgZG91Ymxl
PihyZWN0LCB0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVEYXRhIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVE
YXRhKCkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSgpCi0gICAgICAgICwgbV9vcGFjaXR5KDEuMCkK
LSAgICB7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotICAgIGZs
b2F0IG1fb3BhY2l0eTsKLX07Ci0KLWVudW0gQWxwaGFQYWludFR5cGUgewotICAgIEFscGhhUGFp
bnROb25lLAotICAgIEFscGhhUGFpbnRJbWFnZSwKLSAgICBBbHBoYVBhaW50T3RoZXIsCi19Owot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKEhEQyBkYykKLSAgICAgICAgOiBtX2RjKGRjKQotICAgIHsKLSAgICB9
Ci0gICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCi0gICAgewotICAgICAgICB3
aGlsZSAoIW1fYmFja3VwRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN0b3JlKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICB7Ci0gICAg
ICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNmb3JtLnNjYWxl
Tm9uVW5pZm9ybShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHZv
aWQgcm90YXRlKGZsb2F0IHJhZGlhbnMpCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybS5yb3Rh
dGUocmFkMmRlZyhyYWRpYW5zKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybSAq
PSB0cmFuc2Zvcm07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi0gICAgewotICAgICAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsK
LSAgICB9Ci0KLSAgICBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwotICAgIH0K
LQotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwotICAgIH0KLQot
ICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Ci0gICAgfQotCi0g
ICAgRmxvYXRQb2ludCBtYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Ci0gICAgfQot
Ci0gICAgRmxvYXRTaXplIG1hcFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAotICAg
IHsKLSAgICAgICAgZG91YmxlIHcsIGg7Ci0gICAgICAgIG1fdHJhbnNmb3JtLm1hcChzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIHcsIGgpOwotICAgICAgICByZXR1cm4gRmxvYXRTaXplKHN0
YXRpY19jYXN0PGZsb2F0Pih3KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGMpCi0gICAgICAgICAgICBTYXZl
REMobV9kYyk7Ci0KLSAgICAgICAgbV9iYWNrdXBEYXRhLmFwcGVuZCgqc3RhdGljX2Nhc3Q8R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSo+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmFja3VwRGF0YS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fZGMpCi0gICAgICAgICAgICBS
ZXN0b3JlREMobV9kYywgLTEpOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZURhdGE6Om9wZXJhdG9yPShtX2JhY2t1cERhdGEubGFzdCgpKTsKLSAgICAgICAgbV9iYWNr
dXBEYXRhLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0FscGhhKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRtYXAgJiYgbV9iaXRtYXAtPmhhc0FscGhhKCk7IH0KLQotICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQml0bWFwPiBnZXRUcmFuc3BhcmVudExheWVyQml0bWFwKEludFJlY3QmIG9y
aWdSZWN0LCBBbHBoYVBhaW50VHlwZSBhbHBoYVBhaW50LCBSRUNUJiBibXBSZWN0LCBib29sIGNo
ZWNrQ2xpcEJveCwgYm9vbCBmb3JjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX29wYWNp
dHkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmIChmb3JjZSB8fCBt
X29wYWNpdHkgPCAxLikgIHsKLSAgICAgICAgICAgIGlmIChjaGVja0NsaXBCb3gpIHsKLSAgICAg
ICAgICAgICAgICBSRUNUIGNsaXBCb3g7Ci0gICAgICAgICAgICAgICAgaW50IGNsaXBUeXBlID0g
R2V0Q2xpcEJveChtX2RjLCAmY2xpcEJveCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsaXBUeXBl
ID09IFNJTVBMRVJFR0lPTiB8fCBjbGlwVHlwZSA9PSBDT01QTEVYUkVHSU9OKQotICAgICAgICAg
ICAgICAgICAgICBvcmlnUmVjdC5pbnRlcnNlY3QoY2xpcEJveCk7Ci0gICAgICAgICAgICAgICAg
aWYgKG9yaWdSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IFNo
YXJlZEJpdG1hcDo6Y3JlYXRlKG9yaWdSZWN0LnNpemUoKSwgYWxwaGFQYWludCA9PSBBbHBoYVBh
aW50Tm9uZSA/IEJpdG1hcEluZm86OkJpdENvdW50MTYgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDMy
LCBmYWxzZSk7Ci0gICAgICAgICAgICBTZXRSZWN0KCZibXBSZWN0LCAwLCAwLCBvcmlnUmVjdC53
aWR0aCgpLCBvcmlnUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoYm1wKSB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChhbHBoYVBhaW50KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBB
bHBoYVBhaW50Tm9uZToKLSAgICAgICAgICAgICAgICBjYXNlIEFscGhhUGFpbnRJbWFnZToKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkQml0bWFw
OjpEQ0hvbGRlciBkYyhibXAuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRj
LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0Qmx0KGRjLmdldCgpLCAw
LCAwLCBvcmlnUmVjdC53aWR0aCgpLCBvcmlnUmVjdC5oZWlnaHQoKSwgbV9kYywgb3JpZ1JlY3Qu
eCgpLCBvcmlnUmVjdC55KCksIFNSQ0NPUFkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChibXAtPmlzMzJiaXQoKSAmJiAoIW1fYml0bWFwIHx8IG1fYml0bWFwLT5pczE2Yml0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBhbHBoYSBjaGFubmVs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbHMgPSAodW5z
aWduZWQqKWJtcC0+Ynl0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQqIGNvbnN0IHBpeGVsc0VuZCA9IHBpeGVscyArIGJtcC0+Yml0bWFwSW5mbygp
Lm51bVBpeGVscygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGl4
ZWxzIDwgcGl4ZWxzRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGl4ZWxzIHw9IDB4RkYwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArK3BpeGVsczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Ym1wOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vY2FzZSBBbHBoYVBh
aW50T3RoZXI6Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
bWVtc2V0KGJtcC0+Ynl0ZXMoKSwgMHhGRiwgYm1wLT5iaXRtYXBJbmZvKCkubnVtUGl4ZWxzKCkg
KiA0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJtcDsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgYm1wUmVjdCA9IG9yaWdSZWN0OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICB2b2lkIHBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAoSERDIGhkYywgU2hhcmVk
Qml0bWFwKiBibXAsIGNvbnN0IEludFJlY3QmIG9yaWdSZWN0LCBBbHBoYVBhaW50VHlwZSBhbHBo
YVBhaW50LCBjb25zdCBSRUNUJiBibXBSZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGhkYyA9PSBt
X2RjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhbHBoYVBhaW50ID09IEFs
cGhhUGFpbnRPdGhlciAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoYm1wICYmIGJtcC0+Ynl0ZXMoKSAmJiBibXAtPmlzMzJiaXQoKSk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCogcGl4ZWxzID0gKHVuc2lnbmVkKilibXAtPmJ5dGVzKCk7Ci0gICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCogY29uc3QgcGl4ZWxzRW5kID0gcGl4ZWxzICsgYm1wLT5iaXRtYXBJ
bmZvKCkubnVtUGl4ZWxzKCk7Ci0gICAgICAgICAgICB3aGlsZSAocGl4ZWxzIDwgcGl4ZWxzRW5k
KSB7Ci0gICAgICAgICAgICAgICAgKnBpeGVscyBePSAweEZGMDAwMDAwOwotICAgICAgICAgICAg
ICAgICsrcGl4ZWxzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgobV9v
cGFjaXR5IDwgMS4gfHwgYWxwaGFQYWludCA9PSBBbHBoYVBhaW50T3RoZXIpICYmIGhhc0FscGhh
QmxlbmRTdXBwb3J0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEJMRU5ERlVOQ1RJT04gYmxlbmQg
PSB7IEFDX1NSQ19PVkVSLCAwCi0gICAgICAgICAgICAgICAgLCBtX29wYWNpdHkgPj0gMS4gPyAy
NTUgOiAoQllURSkobV9vcGFjaXR5ICogMjU1KQotICAgICAgICAgICAgICAgICwgYWxwaGFQYWlu
dCA9PSBBbHBoYVBhaW50Tm9uZSA/IDAgOiBBQ19TUkNfQUxQSEEgfTsKLSAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGFscGhhQmxlbmRJZlN1cHBvcnRlZChtX2RjLCBvcmlnUmVjdC54KCksIG9y
aWdSZWN0LnkoKSwgb3JpZ1JlY3Qud2lkdGgoKSwgb3JpZ1JlY3QuaGVpZ2h0KCksIGhkYywgMCwg
MCwgYm1wUmVjdC5yaWdodCwgYm1wUmVjdC5ib3R0b20sIGJsZW5kKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgU3RyZXRjaEJsdChtX2RjLCBvcmlnUmVjdC54KCksIG9yaWdSZWN0LnkoKSwgb3JpZ1JlY3Qu
d2lkdGgoKSwgb3JpZ1JlY3QuaGVpZ2h0KCksIGhkYywgMCwgMCwgYm1wUmVjdC5yaWdodCwgYm1w
UmVjdC5ib3R0b20sIFNSQ0NPUFkpOwotICAgIH0KLQotICAgIEhEQyBtX2RjOwotICAgIFJlZlB0
cjxTaGFyZWRCaXRtYXA+IG1fYml0bWFwOwotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEYXRhPiBtX2JhY2t1cERhdGE7Ci19OwotCi1zdGF0aWMgR0RJT2JqZWN0PEhQ
RU4+IGNyZWF0ZVBlbihjb25zdCBDb2xvciYgY29sLCBkb3VibGUgZldpZHRoLCBTdHJva2VTdHls
ZSBzdHlsZSkKLXsKLSAgICBpbnQgd2lkdGggPSBzdGFibGVSb3VuZChmV2lkdGgpOwotICAgIGlm
ICh3aWR0aCA8IDEpCi0gICAgICAgIHdpZHRoID0gMTsKLQotICAgIGludCBwZW5TdHlsZSA9IFBT
X05VTEw7Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgICAgICBjYXNlIFNvbGlkU3Ryb2tlOgot
ICAgICAgICBjYXNlIERvdWJsZVN0cm9rZToKLSAgICAgICAgY2FzZSBXYXZ5U3Ryb2tlOiAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MTE0IC0gTmVl
ZHMgcGxhdGZvcm0gc3VwcG9ydC4KLSAgICAgICAgICAgIHBlblN0eWxlID0gUFNfU09MSUQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEb3R0ZWRTdHJva2U6ICAvLyBub3Qgc3Vw
cG9ydGVkIG9uIFdpbmRvd3MgQ0UKLSAgICAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAg
ICAgICBwZW5TdHlsZSA9IFBTX0RBU0g7Ci0gICAgICAgICAgICB3aWR0aCA9IDE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBlbihwZW5TdHlsZSwgd2lkdGgs
IFJHQihjb2wucmVkKCksIGNvbC5ncmVlbigpLCBjb2wuYmx1ZSgpKSkpOwotfQotCi1zdGF0aWMg
aW5saW5lIEdESU9iamVjdDxIQlJVU0g+IGNyZWF0ZUJydXNoKGNvbnN0IENvbG9yJiBjb2wpCi17
Ci0gICAgcmV0dXJuIGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChSR0IoY29sLnJl
ZCgpLCBjb2wuZ3JlZW4oKSwgY29sLmJsdWUoKSkpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFBpeGVsVHlwZSwgYm9vbCBJczE2Yml0PiBzdGF0aWMgdm9pZCBfcm90YXRlQml0bWFwKFNoYXJl
ZEJpdG1hcCogZGVzdEJtcCwgY29uc3QgU2hhcmVkQml0bWFwKiBzb3VyY2VCbXAsIGNvbnN0IFJv
dGF0aW9uVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaW50IGRlc3RXID0gZGVzdEJtcC0+
d2lkdGgoKTsKLSAgICBpbnQgZGVzdEggPSBkZXN0Qm1wLT5oZWlnaHQoKTsKLSAgICBpbnQgc291
cmNlVyA9IHNvdXJjZUJtcC0+d2lkdGgoKTsKLSAgICBpbnQgc291cmNlSCA9IHNvdXJjZUJtcC0+
aGVpZ2h0KCk7Ci0gICAgUGl4ZWxUeXBlKiBkZXN0ID0gKFBpeGVsVHlwZSopZGVzdEJtcC0+Ynl0
ZXMoKTsKLSAgICBjb25zdCBQaXhlbFR5cGUqIHNvdXJjZSA9IChjb25zdCBQaXhlbFR5cGUqKXNv
dXJjZUJtcC0+Ynl0ZXMoKTsKLSAgICBpbnQgcGFkZGluZzsKLSAgICBpbnQgcGFkZGVkU291cmNl
VzsKLSAgICBpZiAoSXMxNmJpdCkgewotICAgICAgICBwYWRkaW5nID0gZGVzdFcgJiAxOwotICAg
ICAgICBwYWRkZWRTb3VyY2VXID0gc291cmNlVyArIChzb3VyY2VXICYgMSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcGFkZGluZyA9IDA7Ci0gICAgICAgIHBhZGRlZFNvdXJjZVcgPSBzb3VyY2VX
OwotICAgIH0KLSAgICBpZiAoaXNaZXJvKHRyYW5zZm9ybS5tX3NpbkEpKSB7Ci0gICAgICAgIGlu
dCBjb3NBID0gdHJhbnNmb3JtLm1fY29zQSA+IDAgPyAxIDogLTE7Ci0gICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgZGVzdEg7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBkZXN0VzsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgxID0geCArIHRyYW5zZm9ybS5t
X3ByZVNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgeTEgPSB5ICsgdHJhbnNmb3JtLm1fcHJl
U2hpZnRZOwotICAgICAgICAgICAgICAgIGludCBzcmNYID0geDEgKiBjb3NBICsgdHJhbnNmb3Jt
Lm1fcG9zdFNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWSA9IHkxICogY29zQSAtIHRy
YW5zZm9ybS5tX3Bvc3RTaGlmdFk7Ci0gICAgICAgICAgICAgICAgaWYgKHNyY1ggPj0gMCAmJiBz
cmNYIDw9IHNvdXJjZVcgJiYgc3JjWSA+PSAwICYmIHNyY1kgPD0gc291cmNlSCkKLSAgICAgICAg
ICAgICAgICAgICAgKmRlc3QrKyA9IHNvdXJjZVtzcmNZICogcGFkZGVkU291cmNlVyArIHNyY1hd
IHwgMHhGRjAwMDAwMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICpkZXN0KysgfD0gMHhGRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgKz0gcGFk
ZGluZzsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXNaZXJvKHRyYW5zZm9ybS5tX2Nvc0Ep
KSB7Ci0gICAgICAgIGludCBzaW5BID0gdHJhbnNmb3JtLm1fc2luQSA+IDAgPyAxIDogLTE7Ci0g
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZGVzdEg7ICsreSkgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBkZXN0VzsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgaW50IHgxID0g
eCArIHRyYW5zZm9ybS5tX3ByZVNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgeTEgPSB5ICsg
dHJhbnNmb3JtLm1fcHJlU2hpZnRZOwotICAgICAgICAgICAgICAgIGludCBzcmNYID0geTEgKiBz
aW5BICsgdHJhbnNmb3JtLm1fcG9zdFNoaWZ0WDsKLSAgICAgICAgICAgICAgICBpbnQgc3JjWSA9
IC14MSAqIHNpbkEgKyB0cmFuc2Zvcm0ubV9wb3N0U2hpZnRZOwotICAgICAgICAgICAgICAgIGlm
IChzcmNYID49IDAgJiYgc3JjWCA8PSBzb3VyY2VXICYmIHNyY1kgPj0gMCAmJiBzcmNZIDw9IHNv
dXJjZUgpCi0gICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBzb3VyY2Vbc3JjWSAqIHBhZGRl
ZFNvdXJjZVcgKyBzcmNYXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgKz0gcGFk
ZGluZzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgZGVzdEg7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkZXN0Vzsg
Kyt4KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IGZvciBiZXN0IHF1YWxpdHksIHdlIHNo
b3VsZCBnZXQgd2VpZ2h0ZWQgc3VtIG9mIGZvdXIgbmVpZ2hib3VycywKLSAgICAgICAgICAgICAg
ICAvLyBidXQgdGhhdCB3aWxsIGJlIHRvbyBleHBlbnNpdmUKLSAgICAgICAgICAgICAgICBpbnQg
c3JjWCwgc3JjWTsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubWFwKHgsIHksICZzcmNYLCAm
c3JjWSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNyY1ggPj0gMCAmJiBzcmNYIDw9IHNvdXJjZVcg
JiYgc3JjWSA+PSAwICYmIHNyY1kgPD0gc291cmNlSCkKLSAgICAgICAgICAgICAgICAgICAgKmRl
c3QrKyA9IHNvdXJjZVtzcmNZICogcGFkZGVkU291cmNlVyArIHNyY1hdOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZGVzdCArPSBwYWRkaW5nOwotICAgICAgICB9Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZCByb3RhdGVCaXRtYXAoU2hhcmVkQml0bWFwKiBkZXN0Qm1wLCBjb25zdCBTaGFy
ZWRCaXRtYXAqIHNvdXJjZUJtcCwgY29uc3QgUm90YXRpb25UcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBBU1NFUlQoZGVzdEJtcC0+aXMxNmJpdCgpID09IHNvdXJjZUJtcC0+aXMxNmJpdCgp
KTsKLSAgICBpZiAoZGVzdEJtcC0+aXMxNmJpdCgpKQotICAgICAgICBfcm90YXRlQml0bWFwPHVu
c2lnbmVkIHNob3J0LCB0cnVlPihkZXN0Qm1wLCBzb3VyY2VCbXAsIHRyYW5zZm9ybSk7Ci0gICAg
ZWxzZQotICAgICAgICBfcm90YXRlQml0bWFwPHVuc2lnbmVkLCBmYWxzZT4oZGVzdEJtcCwgc291
cmNlQm1wLCB0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBUcmFuc3BhcmVudExheWVyREMgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRyYW5zcGFyZW50TGF5ZXJEQyk7Ci1wdWJsaWM6Ci0gICAg
VHJhbnNwYXJlbnRMYXllckRDKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGF0YSwg
SW50UmVjdCYgb3JpZ1JlY3QsIGNvbnN0IEludFJlY3QqIHJlY3RCZWZvcmVUcmFuc2Zvcm0gPSAw
LCBpbnQgYWxwaGEgPSAyNTUsIGJvb2wgcGFpbnRJbWFnZSA9IGZhbHNlKTsKLSAgICB+VHJhbnNw
YXJlbnRMYXllckRDKCk7Ci0KLSAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9tZW1EYzsg
fQotICAgIGNvbnN0IFJFQ1QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX2JtcFJlY3Q7IH0KLSAg
ICBJbnRTaXplIHRvU2hpZnQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fYm1wUmVjdC5sZWZ0
IC0gbV9vcmlnUmVjdC54KCksIG1fYm1wUmVjdC50b3AgLSBtX29yaWdSZWN0LnkoKSk7IH0KLSAg
ICB2b2lkIGZpbGxBbHBoYUNoYW5uZWwoKTsKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YTsKLSAgICBJbnRSZWN0IG1fb3JpZ1JlY3Q7Ci0gICAg
SW50UmVjdCBtX3JvdGF0ZWRPcmlnUmVjdDsKLSAgICBIREMgbV9tZW1EYzsKLSAgICBSZWZQdHI8
U2hhcmVkQml0bWFwPiBtX2JpdG1hcDsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBtX3JvdGF0
ZWRCaXRtYXA7Ci0gICAgUkVDVCBtX2JtcFJlY3Q7Ci0gICAgdW5zaWduZWQgbV9rZXk7Ci0gICAg
Um90YXRpb25UcmFuc2Zvcm0gbV9yb3RhdGlvbjsKLSAgICBmbG9hdCBtX29sZE9wYWNpdHk7Ci0g
ICAgQWxwaGFQYWludFR5cGUgbV9hbHBoYVBhaW50VHlwZTsKLX07Ci0KLVRyYW5zcGFyZW50TGF5
ZXJEQzo6VHJhbnNwYXJlbnRMYXllckRDKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSog
ZGF0YSwgSW50UmVjdCYgb3JpZ1JlY3QsIGNvbnN0IEludFJlY3QqIHJlY3RCZWZvcmVUcmFuc2Zv
cm0sIGludCBhbHBoYSwgYm9vbCBwYWludEltYWdlKQotOiBtX2RhdGEoZGF0YSkKLSwgbV9vcmln
UmVjdChvcmlnUmVjdCkKLSwgbV9vbGRPcGFjaXR5KGRhdGEtPm1fb3BhY2l0eSkKLS8vIG1fa2V5
MSBhbmQgbV9rZXkyIGFyZSBub3QgaW5pdGFsaXplZCBoZXJlLiBUaGV5IGFyZSB1c2VkIG9ubHkg
aW4gdGhlIGNhc2UgdGhhdAotLy8gU2hhcmVkQml0bWFwOjpnZXREQygpIGlzIGNhbGxlZCwgSS5F
Liwgd2hlbiBtX2JpdG1hcCBpcyBub3QgbnVsbC4KLXsKLSAgICBtX2RhdGEtPm1fb3BhY2l0eSAq
PSBhbHBoYSAvIDI1NS47Ci0gICAgYm9vbCBtdXN0Q3JlYXRlTGF5ZXI7Ci0gICAgaWYgKCFtX2Rh
dGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAgbXVzdENyZWF0ZUxheWVyID0gZmFsc2U7Ci0gICAg
ICAgIG1fYWxwaGFQYWludFR5cGUgPSBBbHBoYVBhaW50Tm9uZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtdXN0Q3JlYXRlTGF5ZXIgPSB0cnVlOwotICAgICAgICBtX2FscGhhUGFpbnRUeXBlID0g
cGFpbnRJbWFnZSA/IEFscGhhUGFpbnRJbWFnZSA6IEFscGhhUGFpbnRPdGhlcjsKLSAgICB9Ci0g
ICAgaWYgKHJlY3RCZWZvcmVUcmFuc2Zvcm0gJiYgIWlzWmVybyhtX2RhdGEtPm1fdHJhbnNmb3Jt
LmIoKSkpIHsKLSAgICAgICAgbV9yb3RhdGVkT3JpZ1JlY3QgPSBvcmlnUmVjdDsKLSAgICAgICAg
bV9yb3RhdGVkQml0bWFwID0gbV9kYXRhLT5nZXRUcmFuc3BhcmVudExheWVyQml0bWFwKG1fcm90
YXRlZE9yaWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2JtcFJlY3QsIGZhbHNlLCB0cnVlKTsK
LSAgICAgICAgaWYgKG1fcm90YXRlZEJpdG1hcCkgewotICAgICAgICAgICAgZG91YmxlIGEgPSBt
X2RhdGEtPm1fdHJhbnNmb3JtLmEoKTsKLSAgICAgICAgICAgIGRvdWJsZSBiID0gbV9kYXRhLT5t
X3RyYW5zZm9ybS5iKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IF9oeXBvdChhLCBiKTsKLSAg
ICAgICAgICAgIG1fcm90YXRpb24ubV9jb3NBID0gYSAvIGM7Ci0gICAgICAgICAgICBtX3JvdGF0
aW9uLm1fc2luQSA9IGIgLyBjOwotCi0gICAgICAgICAgICBpbnQgY2VudGVyWCA9IG9yaWdSZWN0
LngoKSArIG9yaWdSZWN0LndpZHRoKCkgLyAyOwotICAgICAgICAgICAgaW50IGNlbnRlclkgPSBv
cmlnUmVjdC55KCkgKyBvcmlnUmVjdC5oZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICBtX3JvdGF0
aW9uLm1fcHJlU2hpZnRYID0gLWNlbnRlclg7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcHJl
U2hpZnRZID0gLWNlbnRlclk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WCA9
IGNlbnRlclg7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSA9IGNlbnRlclk7
Ci0KLSAgICAgICAgICAgIG1fb3JpZ1JlY3QgPSBtYXBSZWN0KG1fcm90YXRlZE9yaWdSZWN0LCBt
X3JvdGF0aW9uKTsKLQotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3ByZVNoaWZ0WCArPSBtX3Jv
dGF0ZWRPcmlnUmVjdC54KCk7Ci0gICAgICAgICAgICBtX3JvdGF0aW9uLm1fcHJlU2hpZnRZICs9
IG1fcm90YXRlZE9yaWdSZWN0LnkoKTsKLSAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hp
ZnRYIC09IG1fb3JpZ1JlY3QueCgpOwotICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlm
dFkgLT0gbV9vcmlnUmVjdC55KCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCA9
IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludChyZWN0QmVmb3JlVHJhbnNm
b3JtLT5sb2NhdGlvbigpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHJlY3RC
ZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7Ci0g
ICAgICAgICAgICB0b3BSaWdodCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQodG9wUmln
aHQpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zv
cm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+bWF4WSgpIC0gMSk7Ci0gICAgICAgICAgICBi
b3R0b21MZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludChib3R0b21MZWZ0KTsKLSAg
ICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlVG9wID0gdG9wUmlnaHQgLSB0b3BMZWZ0OwotICAgICAg
ICAgICAgRmxvYXRTaXplIHNpZGVMZWZ0ID0gYm90dG9tTGVmdCAtIHRvcExlZnQ7Ci0gICAgICAg
ICAgICBmbG9hdCB3aWR0aCA9IF9oeXBvdChzaWRlVG9wLndpZHRoKCkgKyAxLCBzaWRlVG9wLmhl
aWdodCgpICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBoZWlnaHQgPSBfaHlwb3Qoc2lkZUxlZnQu
d2lkdGgoKSArIDEsIHNpZGVMZWZ0LmhlaWdodCgpICsgMSk7Ci0KLSAgICAgICAgICAgIG9yaWdS
ZWN0LmluZmxhdGVYKHN0YWJsZVJvdW5kKCh3aWR0aCAtIG9yaWdSZWN0LndpZHRoKCkpICogMC41
KSk7Ci0gICAgICAgICAgICBvcmlnUmVjdC5pbmZsYXRlWShzdGFibGVSb3VuZCgoaGVpZ2h0IC0g
b3JpZ1JlY3QuaGVpZ2h0KCkpICogMC41KSk7Ci0KLSAgICAgICAgICAgIG1fYml0bWFwID0gU2hh
cmVkQml0bWFwOjpjcmVhdGUobV9vcmlnUmVjdC5zaXplKCksIG1fcm90YXRlZEJpdG1hcC0+aXMx
NmJpdCgpID8gQml0bWFwSW5mbzo6Qml0Q291bnQxNiA6IEJpdG1hcEluZm86OkJpdENvdW50MzIs
IHRydWUpOwotICAgICAgICAgICAgaWYgKG1fYml0bWFwKQotICAgICAgICAgICAgICAgIHJvdGF0
ZUJpdG1hcChtX2JpdG1hcC5nZXQoKSwgbV9yb3RhdGVkQml0bWFwLmdldCgpLCAtbV9yb3RhdGlv
bik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yb3RhdGVkQml0bWFwID0g
MDsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBtX2JpdG1hcCA9IG1fZGF0YS0+Z2V0
VHJhbnNwYXJlbnRMYXllckJpdG1hcChtX29yaWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2Jt
cFJlY3QsIHRydWUsIG11c3RDcmVhdGVMYXllcik7Ci0gICAgaWYgKG1fYml0bWFwKQotICAgICAg
ICBtX21lbURjID0gbV9iaXRtYXAtPmdldERDKCZtX2tleSk7Ci0gICAgZWxzZQotICAgICAgICBt
X21lbURjID0gbV9kYXRhLT5tX2RjOwotfQotCi1UcmFuc3BhcmVudExheWVyREM6On5UcmFuc3Bh
cmVudExheWVyREMoKQotewotICAgIGlmIChtX3JvdGF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9i
aXRtYXAtPnJlbGVhc2VEQyhtX21lbURjLCBtX2tleSk7Ci0gICAgICAgIG1fa2V5ID0gMDsKLSAg
ICAgICAgcm90YXRlQml0bWFwKG1fcm90YXRlZEJpdG1hcC5nZXQoKSwgbV9iaXRtYXAuZ2V0KCks
IG1fcm90YXRpb24pOwotICAgICAgICBtX21lbURjID0gbV9yb3RhdGVkQml0bWFwLT5nZXREQygm
bV9rZXkpOwotICAgICAgICBtX2RhdGEtPnBhaW50QmFja1RyYW5zcGFyZW50TGF5ZXJCaXRtYXAo
bV9tZW1EYywgbV9yb3RhdGVkQml0bWFwLmdldCgpLCBtX3JvdGF0ZWRPcmlnUmVjdCwgbV9hbHBo
YVBhaW50VHlwZSwgbV9ibXBSZWN0KTsKLSAgICAgICAgbV9yb3RhdGVkQml0bWFwLT5yZWxlYXNl
REMobV9tZW1EYywgbV9rZXkpOwotICAgIH0gZWxzZSBpZiAobV9iaXRtYXApIHsKLSAgICAgICAg
bV9kYXRhLT5wYWludEJhY2tUcmFuc3BhcmVudExheWVyQml0bWFwKG1fbWVtRGMsIG1fYml0bWFw
LmdldCgpLCBtX29yaWdSZWN0LCBtX2FscGhhUGFpbnRUeXBlLCBtX2JtcFJlY3QpOwotICAgICAg
ICBtX2JpdG1hcC0+cmVsZWFzZURDKG1fbWVtRGMsIG1fa2V5KTsKLSAgICB9Ci0gICAgbV9kYXRh
LT5tX29wYWNpdHkgPSBtX29sZE9wYWNpdHk7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbnRMYXllckRD
OjpmaWxsQWxwaGFDaGFubmVsKCkKLXsKLSAgICBpZiAoIW1fYml0bWFwIHx8ICFtX2JpdG1hcC0+
aXMzMmJpdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCogcGl4ZWxzID0gKHVu
c2lnbmVkKiltX2JpdG1hcC0+Ynl0ZXMoKTsKLSAgICBjb25zdCB1bnNpZ25lZCogY29uc3QgcGl4
ZWxzRW5kID0gcGl4ZWxzICsgbV9iaXRtYXAtPmJpdG1hcEluZm8oKS5udW1QaXhlbHMoKTsKLSAg
ICB3aGlsZSAocGl4ZWxzIDwgcGl4ZWxzRW5kKSB7Ci0gICAgICAgICpwaXhlbHMgfD0gMHhGRjAw
MDAwMDsKLSAgICAgICAgKytwaXhlbHM7Ci0gICAgfQotfQotCi1jbGFzcyBTY29wZURDUHJvdmlk
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlRENQcm92aWRlcik7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgU2NvcGVEQ1Byb3ZpZGVyKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogZGF0YSkKLSAgICAgICAgOiBtX2RhdGEoZGF0YSkKLSAgICB7Ci0gICAgICAgIGlmICht
X2RhdGEtPm1fYml0bWFwKQotICAgICAgICAgICAgbV9kYXRhLT5tX2RjID0gbV9kYXRhLT5tX2Jp
dG1hcC0+Z2V0REMoJm1fa2V5KTsKLSAgICB9Ci0gICAgflNjb3BlRENQcm92aWRlcigpCi0gICAg
ewotICAgICAgICBpZiAobV9kYXRhLT5tX2JpdG1hcCkgewotICAgICAgICAgICAgbV9kYXRhLT5t
X2JpdG1hcC0+cmVsZWFzZURDKG1fZGF0YS0+bV9kYywgbV9rZXkpOwotICAgICAgICAgICAgbV9k
YXRhLT5tX2RjID0gMDsKLSAgICAgICAgfQotICAgIH0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9rZXk7Ci19Owot
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIGRjLCBib29sKQotewotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoZGMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0
cm95KCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Qml0bWFwKFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBibXApCi17Ci0gICAgQVNTRVJUKCFt
X2RhdGEtPm1fZGMpOwotICAgIG1fZGF0YS0+bV9iaXRtYXAgPSBibXA7Ci19Ci0KLUhEQyBHcmFw
aGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJv
b2wgc3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgQWxwaGFCbGVuZC4KLSAgICBBU1NFUlQoIXN1cHBvcnRBbHBo
YUJsZW5kKTsKLSAgICByZXR1cm4gbV9kYXRhLT5tX2RjOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJl
Y3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQotewotICAgIG1fZGF0
YS0+c2F2ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3Rh
dGUoKQotewotICAgIG1fZGF0YS0+cmVzdG9yZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCByZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRh
KTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVj
dCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRD
IHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJlY3QsICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFu
c3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJl
Y3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJSVVNI
PiBicnVzaDsKLSAgICBIR0RJT0JKIG9sZEJydXNoOwotICAgIGlmIChmaWxsQ29sb3IoKS5hbHBo
YSgpKSB7Ci0gICAgICAgIGJydXNoID0gY3JlYXRlQnJ1c2goZmlsbENvbG9yKCkpOwotICAgICAg
ICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgYnJ1c2guZ2V0KCkpOwotICAgIH0gZWxzZQot
ICAgICAgICBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9C
UlVTSCkpOwotCi0gICAgR0RJT2JqZWN0PEhQRU4+IHBlbjsKLSAgICBIR0RJT0JKIG9sZFBlbjsK
LSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewotICAgICAgICBwZW4gPSBjcmVh
dGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwot
ICAgICAgICBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9Q
RU4pKTsKLQotICAgIGlmIChicnVzaCB8fCBwZW4pIHsKLSAgICAgICAgaWYgKHRyUmVjdC53aWR0
aCgpIDw9IDApCi0gICAgICAgICAgICB0clJlY3Quc2V0V2lkdGgoMSk7Ci0gICAgICAgIGlmICh0
clJlY3QuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgICAgIHRyUmVjdC5zZXRIZWlnaHQoMSk7Ci0K
LSAgICAgICAgUmVjdGFuZ2xlKGRjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4
WCgpLCB0clJlY3QubWF4WSgpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBl
bik7Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlz
YWJsZWQoKSB8fCBzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlIHx8ICFzdHJva2VDb2xvcigpLmFs
cGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVy
KG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEludFBvaW50IHRyUG9pbnQxID0gbV9kYXRhLT5tYXBQb2ludChwb2ludDEpOwotICAgIEludFBv
aW50IHRyUG9pbnQyID0gbV9kYXRhLT5tYXBQb2ludChwb2ludDIpOwotCi0gICAgSW50UmVjdCBs
aW5lUmVjdCh0clBvaW50MSwgdHJQb2ludDIgLSB0clBvaW50MSk7Ci0gICAgbGluZVJlY3Quc2V0
SGVpZ2h0KGxpbmVSZWN0LmhlaWdodCgpICsgc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIFRyYW5z
cGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgbGluZVJlY3QsIDAsIHN0cm9rZUNv
bG9yKCkuYWxwaGEoKSk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBp
ZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJQb2ludDEgKz0gdHJhbnNwYXJlbnREQy50
b1NoaWZ0KCk7Ci0gICAgdHJQb2ludDIgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0KCk7Ci0KLSAg
ICBhdXRvIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwg
c3Ryb2tlU3R5bGUoKSk7Ci0gICAgSEdESU9CSiBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBl
bi5nZXQoKSk7Ci0KLSAgICBNb3ZlVG9FeChkYywgdHJQb2ludDEueCgpLCB0clBvaW50MS55KCks
IDApOwotICAgIExpbmVUbyhkYywgdHJQb2ludDIueCgpLCB0clBvaW50Mi55KCkpOwotCi0gICAg
U2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFj
aXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCAoIWZpbGxDb2xvcigpLmFscGhhKCkgJiYgc3Ry
b2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQ
cm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3Qp
OwotICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAm
cmVjdCk7Ci0gICAgSERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQot
ICAgICAgICByZXR1cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkp
OwotCi0gICAgR0RJT2JqZWN0PEhCUlVTSD4gYnJ1c2g7Ci0gICAgSEdESU9CSiBvbGRCcnVzaDsK
LSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBicnVzaCA9IGNyZWF0ZUJy
dXNoKGZpbGxDb2xvcigpKTsKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3QoZGMsIGJy
dXNoLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkQnJ1c2ggPSBTZWxlY3RPYmplY3Qo
ZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLQotICAgIEdESU9iamVjdDxIUEVOPiBw
ZW47Ci0gICAgSEdESU9CSiBvbGRQZW4gPSAwOwotICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5v
U3Ryb2tlKSB7Ci0gICAgICAgIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VU
aGlja25lc3MoKSwgc3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVj
dChkYywgcGVuLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkUGVuID0gU2VsZWN0T2Jq
ZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAgaWYgKGJydXNoIHx8IHBl
bikKLSAgICAgICAgRWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1h
eFgoKSwgdHJSZWN0Lm1heFkoKSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0g
ICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVzaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBl
cXVhbEFuZ2xlKGRvdWJsZSBhLCBkb3VibGUgYikgCi17Ci0gICAgcmV0dXJuIGZhYnMoYSAtIGIp
IDwgMUUtNTsKLX0KLQotdm9pZCBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGRvdWJsZSBhbmdsZSwg
ZG91YmxlIGEsIGRvdWJsZSBiLCBmbG9hdCYgeCwgZmxvYXQmIHkpCi17Ci0gICAgd2hpbGUgKGFu
Z2xlIDwgMCkKLSAgICAgICAgYW5nbGUgKz0gMiAqIHBpRG91YmxlOwotICAgIHdoaWxlIChhbmds
ZSA+PSAyICogcGlEb3VibGUpCi0gICAgICAgIGFuZ2xlIC09IDIgKiBwaURvdWJsZTsKLQotICAg
IGlmIChlcXVhbEFuZ2xlKGFuZ2xlLCAwKSB8fCBlcXVhbEFuZ2xlKGFuZ2xlLCAyICogcGlEb3Vi
bGUpKSB7Ci0gICAgICAgIHggPSBhOwotICAgICAgICB5ID0gMDsKLSAgICB9IGVsc2UgaWYgKGVx
dWFsQW5nbGUoYW5nbGUsIHBpRG91YmxlKSkgewotICAgICAgICB4ID0gLWE7Ci0gICAgICAgIHkg
PSAwOwotICAgIH0gZWxzZSBpZiAoZXF1YWxBbmdsZShhbmdsZSwgLjUgKiBwaURvdWJsZSkpIHsK
LSAgICAgICAgeCA9IDA7Ci0gICAgICAgIHkgPSBiOwotICAgIH0gZWxzZSBpZiAoZXF1YWxBbmds
ZShhbmdsZSwgMS41ICogcGlEb3VibGUpKSB7Ci0gICAgICAgIHggPSAwOwotICAgICAgICB5ID0g
LWI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGsgPSB0YW4oYW5nbGUpOwotICAgICAg
ICBkb3VibGUgc3FBID0gYSAqIGE7Ci0gICAgICAgIGRvdWJsZSBzcUIgPSBiICogYjsKLSAgICAg
ICAgZG91YmxlIHRtcCA9IDEuIC8gKDEuIC8gc3FBICsgKGsgKiBrKSAvIHNxQik7Ci0gICAgICAg
IHRtcCA9IHRtcCA8PSAwID8gMCA6IHNxcnQodG1wKTsKLSAgICAgICAgaWYgKGFuZ2xlID4gLjUg
KiBwaURvdWJsZSAmJiBhbmdsZSA8IDEuNSAqIHBpRG91YmxlKQotICAgICAgICAgICAgdG1wID0g
LXRtcDsKLSAgICAgICAgeCA9IHRtcDsKLQotICAgICAgICBrID0gdGFuKC41ICogcGlEb3VibGUg
LSBhbmdsZSk7Ci0gICAgICAgIHRtcCA9IDEuIC8gKChrICogaykgLyBzcUEgKyAxIC8gc3FCKTsK
LSAgICAgICAgdG1wID0gdG1wIDw9IDAgPyAwIDogc3FydCh0bXApOwotICAgICAgICBpZiAoYW5n
bGUgPiBwaURvdWJsZSkKLSAgICAgICAgICAgIHRtcCA9IC10bXA7Ci0gICAgICAgIHkgPSB0bXA7
Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxp
YXMpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkg
fHwgbnBvaW50cyA8PSAxIHx8ICFwb2ludHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3Bl
RENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxQT0lOVCwgMjA+IHdpblBvaW50cyhucG9pbnRz
KTsKLSAgICBGbG9hdFBvaW50IHRyUG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50c1swXSk7
Ci0gICAgd2luUG9pbnRzWzBdLnggPSBzdGFibGVSb3VuZCh0clBvaW50LngoKSk7Ci0gICAgd2lu
UG9pbnRzWzBdLnkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7Ci0gICAgUkVDVCByZWN0ID0g
eyB3aW5Qb2ludHNbMF0ueCwgd2luUG9pbnRzWzBdLnksIHdpblBvaW50c1swXS54LCB3aW5Qb2lu
dHNbMF0ueSB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgKytpKSB7Ci0g
ICAgICAgIHRyUG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHBvaW50c1tpXSk7Ci0gICAgICAgIHdp
blBvaW50c1tpXS54ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwotICAgICAgICB3aW5Qb2lu
dHNbaV0ueSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKLSAgICAgICAgaWYgKHJlY3QubGVm
dCA+IHdpblBvaW50c1tpXS54KQotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gd2luUG9pbnRzW2ld
Lng7Ci0gICAgICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPCB3aW5Qb2ludHNbaV0ueCkKLSAgICAg
ICAgICAgIHJlY3QucmlnaHQgPSB3aW5Qb2ludHNbaV0ueDsKLSAgICAgICAgaWYgKHJlY3QudG9w
ID4gd2luUG9pbnRzW2ldLnkpCi0gICAgICAgICAgICByZWN0LnRvcCA9IHdpblBvaW50c1tpXS55
OwotICAgICAgICBlbHNlIGlmIChyZWN0LmJvdHRvbSA8IHdpblBvaW50c1tpXS55KQotICAgICAg
ICAgICAgcmVjdC5ib3R0b20gPSB3aW5Qb2ludHNbaV0ueTsKLSAgICB9Ci0gICAgcmVjdC5ib3R0
b20gKz0gMTsKLSAgICByZWN0LnJpZ2h0ICs9IDE7Ci0KLSAgICBJbnRSZWN0IGludFJlY3QocmVj
dCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBpbnRSZWN0
KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBvaW50czsgKytpKSB7
Ci0gICAgICAgIHdpblBvaW50c1tpXS54ICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndpZHRo
KCk7Ci0gICAgICAgIHdpblBvaW50c1tpXS55ICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpLmhl
aWdodCgpOwotICAgIH0KLQotICAgIEdESU9iamVjdDxIQlJVU0g+IGJydXNoOwotICAgIEhHRElP
Qkogb2xkQnJ1c2g7Ci0gICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKLSAgICAgICAgYnJ1
c2ggPSBjcmVhdGVCcnVzaChmaWxsQ29sb3IoKSk7Ci0gICAgICAgIG9sZEJydXNoID0gU2VsZWN0
T2JqZWN0KGRjLCBicnVzaC5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9sZEJydXNoID0g
U2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0KLSAgICBHRElP
YmplY3Q8SFBFTj4gcGVuOwotICAgIEhHRElPQkogb2xkUGVuOwotICAgIGlmIChzdHJva2VTdHls
ZSgpICE9IE5vU3Ryb2tlKSB7Ci0gICAgICAgIHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigp
LCBzdHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIG9sZFBlbiA9IFNl
bGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb2xkUGVuID0g
U2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX1BFTikpOwotCi0gICAgaWYgKGJy
dXNoIHx8IHBlbikKLSAgICAgICAgUG9seWdvbihkYywgd2luUG9pbnRzLmRhdGEoKSwgbnBvaW50
cyk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7Ci0gICAgU2VsZWN0T2JqZWN0KGRj
LCBvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdv
bihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFs
aWFzZWQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG51bVBvaW50cyA8PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8g
RklYTUU6IElNUExFTUVOVCEhCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFj
aXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgYWxwaGEgPSBjb2xvci5hbHBoYSgpOwot
ICAgIGlmICghYWxwaGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBk
Y1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEludFJlY3QgaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci0gICAg
VHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCBtX2RhdGEtPm1hcFJlY3Qo
aW50UmVjdCksICZpbnRSZWN0LCBhbHBoYSk7Ci0KLSAgICBpZiAoIXRyYW5zcGFyZW50REMuaGRj
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaGJydXNoID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVTb2xpZEJydXNoKFJHQihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3Iu
Ymx1ZSgpKSkpOwotICAgIEZpbGxSZWN0KHRyYW5zcGFyZW50REMuaGRjKCksICZ0cmFuc3BhcmVu
dERDLnJlY3QoKSwgaGJydXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBS
ZWN0KHJlY3QpKTsKLQotICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
UmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgaWYgKEdldENsaXBSZ24obV9kYXRhLT5tX2RjLCBj
bGlwUmduLmdldCgpKSA+IDApCi0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9k
YywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNsaXBSZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJl
Y3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFko
KSkpOwotICAgICAgICBTZWxlY3RDbGlwUmduKG1fZGF0YS0+bV9kYywgY2xpcFJnbi5nZXQoKSk7
Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJl
Y3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotCi0gICAgRXhjbHVkZUNsaXBSZWN0
KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJS
ZWN0Lm1heFkoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBp
bnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3Bh
Y2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3Bl
RENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDI7Ci0gICAg
b2Zmc2V0ICs9IHJhZGl1czsKLQotICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUo
KTsKLSAgICBJbnRSZWN0IGZpbmFsRm9jdXNSZWN0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWN0Q291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdCA9IHJlY3Rz
W2ldOwotICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShvZmZzZXQpOwotICAgICAgICBmaW5hbEZv
Y3VzUmVjdC51bml0ZShmb2N1c1JlY3QpOwotICAgIH0KLQotICAgIEludFJlY3QgaW50UmVjdCA9
IGZpbmFsRm9jdXNSZWN0OwotICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGZp
bmFsRm9jdXNSZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2Rh
dGEsIHRyUmVjdCwgJmludFJlY3QpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7
Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFy
ZW50REMudG9TaGlmdCgpKTsKLQotICAgIFJFQ1QgcmVjdCA9IHRyUmVjdDsKLSAgICBEcmF3Rm9j
dXNSZWN0KGRjLCAmcmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRo
LCBib29sIHByaW50aW5nKQotewotICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNp
emUod2lkdGgsIHN0cm9rZVRoaWNrbmVzcygpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cm9rZVN0eWxlIG9sZFN0eWxl
ID0gc3Ryb2tlU3R5bGUoKTsKLSAgICBzZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAg
ZHJhd0xpbmUocm91bmRlZEludFBvaW50KG9yaWdpbiksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4g
KyBGbG9hdFNpemUod2lkdGgsIDApKSk7Ci0gICAgaWYgKGRvdWJsZVVuZGVybGluZXMpCi0gICAg
ICAgIGRyYXdMaW5lKHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9hdFNpemUoMCwgc3Ryb2tl
VGhpY2tuZXNzKCkgKiAyKSksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9hdFNpemUod2lk
dGgsIHN0cm9rZVRoaWNrbmVzcygpICogMikpKTsKLSAgICBzZXRTdHJva2VTdHlsZShvbGRTdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2lk
dGhzLnNpemUoKTsgaSArPSAyKQotICAgICAgICBkcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChw
b2ludC54KCkgKyB3aWR0aHNbaV0sIHBvaW50LnkoKSksIHdpZHRoc1tpKzFdIC0gd2lkdGhzW2ld
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2wsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGF0YS0+aGFzQWxwaGEoKSkgewotICAg
ICAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT5tYXBSZWN0KHJl
Y3QpKTsKLSAgICAgICAgbV9kYXRhLT5tX2JpdG1hcC0+Y2xlYXJQaXhlbHModHJSZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0gCi0KLSAgICBmaWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6
d2hpdGUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBp
ZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZURDUHJvdmlkZXIg
ZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRhLT5tX2RjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotICAg
IEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGludFJlY3QpOwotICAgIFRyYW5zcGFy
ZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmaW50UmVjdCk7Ci0gICAg
SERDIGRjID0gdHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1
cm47Ci0gICAgdHJSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0gICAgYXV0
byBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9r
ZVN0eWxlKCkpOwotICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0
KCkpOwotCi0gICAgaW50IHJpZ2h0ID0gdHJSZWN0Lm1heFgoKSAtIDE7Ci0gICAgaW50IGJvdHRv
bSA9IHRyUmVjdC5tYXhZKCkgLSAxOwotICAgIGNvbnN0IFBPSU5UIGludFBvaW50c1s1XSA9Ci0g
ICAgewotICAgICAgICB7IHRyUmVjdC54KCksIHRyUmVjdC55KCkgfSwKLSAgICAgICAgeyByaWdo
dCwgdHJSZWN0LnkoKSB9LAotICAgICAgICB7IHJpZ2h0LCBib3R0b20gfSwKLSAgICAgICAgeyB0
clJlY3QueCgpLCBib3R0b20gfSwKLSAgICAgICAgeyB0clJlY3QueCgpLCB0clJlY3QueSgpIH0K
LSAgICB9OwotCi0gICAgUG9seWxpbmUoZGMsIGludFBvaW50cywgNSk7Ci0KLSAgICBTZWxlY3RP
YmplY3QoZGMsIG9sZFBlbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBtX2RhdGEtPnNhdmUo
KTsKLSAgICBtX2RhdGEtPm1fb3BhY2l0eSAqPSBvcGFjaXR5OwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgbV9kYXRhLT5y
ZXN0b3JlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5j
eUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9k
YXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBtX2RhdGEtPnNl
dENUTSh0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0mIEdyYXBoaWNzQ29udGV4dDo6
YWZmaW5lVHJhbnNmb3JtKCkKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5zZm9ybTsKLX0K
LQotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBHcmFwaGljc0NvbnRleHQ6OmFmZmluZVRyYW5zZm9y
bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV90cmFuc2Zvcm07Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpyZXNldEFmZmluZVRyYW5zZm9ybSgpCi17Ci0gICAgbV9kYXRhLT5t
X3RyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0g
ICAgbV9kYXRhLT5yb3RhdGUocmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgbV9kYXRhLT5zY2FsZShzaXplKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEo
ZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9kYXRhLT5tX29wYWNpdHkgPSBhbHBoYTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewot
ICAgIGNsaXAocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dChjb25zdCBQYXRoJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMg
aW5saW5lIEludFBvaW50IHJlY3RDZW50ZXJQb2ludChjb25zdCBSRUNUJiByZWN0KQotewotICAg
IHJldHVybiBJbnRQb2ludChyZWN0LmxlZnQgKyAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgLyAy
LCByZWN0LnRvcCArIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAvIDIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgU2NvcGVE
Q1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBz
aGFkb3dCbHVyID0gMDsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBDb2xvclNwYWNlIHNo
YWRvd0NvbG9yU3BhY2U7Ci0gICAgICAgIAotICAgIGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKLSAgICAKLSAgICBjb25z
dCBGbG9hdFJlY3QmIGZpbGxSZWN0ID0gcmVjdC5yZWN0KCk7Ci0gICAgSW50UmVjdCBkc3RSZWN0
ID0gZmlsbFJlY3Q7Ci0gICAgCi0gICAgZHN0UmVjdC5tb3ZlKHN0YWJsZVJvdW5kKHNoYWRvd09m
ZnNldC53aWR0aCgpKSwgc3RhYmxlUm91bmQoc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7Ci0gICAg
ZHN0UmVjdC5pbmZsYXRlKHN0YWJsZVJvdW5kKHNoYWRvd0JsdXIpKTsKLSAgICBkc3RSZWN0ID0g
bV9kYXRhLT5tYXBSZWN0KGRzdFJlY3QpOwotICAKLSAgICBGbG9hdFNpemUgbmV3VG9wTGVmdCht
X2RhdGEtPm1hcFNpemUocmVjdC5yYWRpaSgpLnRvcExlZnQoKSkpOwotICAgIEZsb2F0U2l6ZSBu
ZXdUb3BSaWdodChtX2RhdGEtPm1hcFNpemUocmVjdC5yYWRpaSgpLnRvcFJpZ2h0KCkpKTsKLSAg
ICBGbG9hdFNpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUocmVjdC5yYWRpaSgpLmJv
dHRvbUxlZnQoKSkpOwotICAgIEZsb2F0U2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1hcFNp
emUocmVjdC5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKLQotICAgIFRyYW5zcGFyZW50TGF5ZXJE
QyB0cmFuc3BhcmVudERjKG1fZGF0YSwgZHN0UmVjdCwgJmZpbGxSZWN0KTsKLSAgICBIREMgZGMg
PSB0cmFuc3BhcmVudERjLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGRzdFJlY3QubW92ZSh0cmFuc3BhcmVudERjLnRvU2hpZnQoKSk7Ci0KLSAgICBSRUNUIHJl
Y3RXaW4gPSBkc3RSZWN0OwotCi0gICAgYXV0byBicnVzaCA9IGNyZWF0ZUJydXNoKHNoYWRvd0Nv
bG9yKTsKLSAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBicnVzaC5nZXQo
KSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVOKSk7Ci0K
LSAgICBJbnRQb2ludCBjZW50ZXJQb2ludCA9IHJlY3RDZW50ZXJQb2ludChyZWN0V2luKTsKLSAg
ICAvLyBEcmF3IHRvcCBsZWZ0IGhhbGYKLSAgICBSRUNUIGNsaXBSZWN0KHJlY3RXaW4pOwotICAg
IGNsaXBSZWN0LnJpZ2h0ID0gY2VudGVyUG9pbnQueCgpOwotICAgIGNsaXBSZWN0LmJvdHRvbSA9
IGNlbnRlclBvaW50LnkoKTsKLQotICAgIGF1dG8gY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgYm9vbCBuZWVkc05ld0NsaXAgPSAoR2V0
Q2xpcFJnbihkYywgY2xpcFJnbi5nZXQoKSkgPD0gMCk7Ci0KLSAgICBkcmF3Um91bmRDb3JuZXIo
bmVlZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld1RvcExl
ZnQud2lkdGgoKSAqIDIpLCBzdGFibGVSb3VuZChuZXdUb3BMZWZ0LmhlaWdodCgpICogMikpOwot
Ci0gICAgLy8gRHJhdyB0b3AgcmlnaHQKLSAgICBjbGlwUmVjdCA9IHJlY3RXaW47Ci0gICAgY2xp
cFJlY3QubGVmdCA9IGNlbnRlclBvaW50LngoKTsKLSAgICBjbGlwUmVjdC5ib3R0b20gPSBjZW50
ZXJQb2ludC55KCk7Ci0KLSAgICBkcmF3Um91bmRDb3JuZXIobmVlZHNOZXdDbGlwLCBjbGlwUmVj
dCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld1RvcFJpZ2h0LndpZHRoKCkgKiAyKSwgc3Rh
YmxlUm91bmQobmV3VG9wUmlnaHQuaGVpZ2h0KCkgKiAyKSk7Ci0KLSAgICAgLy8gRHJhdyBib3R0
b20gbGVmdAotICAgIGNsaXBSZWN0ID0gcmVjdFdpbjsKLSAgICBjbGlwUmVjdC5yaWdodCA9IGNl
bnRlclBvaW50LngoKTsKLSAgICBjbGlwUmVjdC50b3AgPSBjZW50ZXJQb2ludC55KCk7Ci0KLSAg
ICBkcmF3Um91bmRDb3JuZXIobmVlZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0
YWJsZVJvdW5kKG5ld0JvdHRvbUxlZnQud2lkdGgoKSAqIDIpLCBzdGFibGVSb3VuZChuZXdCb3R0
b21MZWZ0LmhlaWdodCgpICogMikpOwotCi0gICAgLy8gRHJhdyBib3R0b20gcmlnaHQKLSAgICBj
bGlwUmVjdCA9IHJlY3RXaW47Ci0gICAgY2xpcFJlY3QubGVmdCA9IGNlbnRlclBvaW50LngoKTsK
LSAgICBjbGlwUmVjdC50b3AgPSBjZW50ZXJQb2ludC55KCk7Ci0KLSAgICBkcmF3Um91bmRDb3Ju
ZXIobmVlZHNOZXdDbGlwLCBjbGlwUmVjdCwgcmVjdFdpbiwgZGMsIHN0YWJsZVJvdW5kKG5ld0Jv
dHRvbVJpZ2h0LndpZHRoKCkgKiAyKSwgc3RhYmxlUm91bmQobmV3Qm90dG9tUmlnaHQuaGVpZ2h0
KCkgKiAyKSk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSb3VuZENvcm5lcihib29sIG5lZWRzTmV3Q2xpcCwgUkVDVCBj
bGlwUmVjdCwgUkVDVCByZWN0V2luLCBIREMgZGMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsK
LSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNsaXBSZ24gPSBhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgIGlmIChuZWVkc05l
d0NsaXApIHsKLSAgICAgICAgY2xpcFJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJn
bihjbGlwUmVjdC5sZWZ0LCBjbGlwUmVjdC50b3AsIGNsaXBSZWN0LnJpZ2h0LCBjbGlwUmVjdC5i
b3R0b20pKTsKLSAgICAgICAgU2VsZWN0Q2xpcFJnbihkYywgY2xpcFJnbi5nZXQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KGRjLCBjbGlwUmVjdC5sZWZ0LCBjbGlw
UmVjdC50b3AsIGNsaXBSZWN0LnJpZ2h0LCBjbGlwUmVjdC5ib3R0b20pOwotCi0gICAgOjpSb3Vu
ZFJlY3QoZGMsIHJlY3RXaW4ubGVmdCAsIHJlY3RXaW4udG9wICwgcmVjdFdpbi5yaWdodCAsIHJl
Y3RXaW4uYm90dG9tICwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBTZWxlY3RDbGlwUmduKGRjLCBu
ZWVkc05ld0NsaXAgPyAwIDogY2xpcFJnbi5nZXQoKSk7Ci19Ci0KLQotRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBS
b3VuZGluZ01vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZnJlY3Q7
Ci19Ci0KLUNvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9yKGNvbnN0IEdyYWRpZW50KiBncmFkaWVu
dCkKLXsKLSAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzID0gZ3Jh
ZGllbnQtPmdldFN0b3BzKCk7Ci0gICAgaWYgKHN0b3BzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIENvbG9yKCk7Ci0KLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wID0gc3Rv
cHMuZmlyc3QoKTsKLSAgICBpZiAoc3RvcHMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBD
b2xvcihzdG9wLnJlZCwgc3RvcC5ncmVlbiwgc3RvcC5ibHVlLCBzdG9wLmFscGhhKTsKLQotICAg
IGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGxhc3RTdG9wID0gc3RvcHMubGFzdCgpOwotICAg
IHJldHVybiBDb2xvcigoc3RvcC5yZWQgKyBsYXN0U3RvcC5yZWQpICogMC41ZgotICAgICAgICAs
IChzdG9wLmdyZWVuICsgbGFzdFN0b3AuZ3JlZW4pICogMC41ZgotICAgICAgICAsIChzdG9wLmJs
dWUgKyBsYXN0U3RvcC5ibHVlKSAqIDAuNWYKLSAgICAgICAgLCAoc3RvcC5hbHBoYSArIGxhc3RT
dG9wLmFscGhhKSAqIDAuNWYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ29sb3IgYyA9IG1fc3RhdGUuZmlsbEdyYWRpZW50Ci0gICAgICAgID8gZ3Jh
ZGllbnRBdmVyYWdlQ29sb3IobV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpCi0gICAgICAgIDog
ZmlsbENvbG9yKCk7Ci0KLSAgICBpZiAoIWMuYWxwaGEoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0
YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
YnJ1c2ggPSBjcmVhdGVCcnVzaChjKTsKLQotICAgIGlmIChtX2RhdGEtPm1fb3BhY2l0eSA8IDEu
MGYgfHwgbV9kYXRhLT5oYXNBbHBoYSgpKSB7Ci0gICAgICAgIEludFJlY3QgdHJSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChtX2RhdGEtPm1hcFJlY3QocGF0aC5ib3VuZGluZ1JlY3QoKSkpOwotICAg
ICAgICB0clJlY3QuaW5mbGF0ZSgxKTsKLSAgICAgICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5z
cGFyZW50REMobV9kYXRhLCB0clJlY3QpOwotICAgICAgICBIREMgZGMgPSB0cmFuc3BhcmVudERD
LmhkYygpOwotICAgICAgICBpZiAoIWRjKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSB0ciA9IG1fZGF0YS0+bV90cmFuc2Zvcm07Ci0gICAgICAgIHRyLnRy
YW5zbGF0ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKS53aWR0aCgpLCB0cmFuc3BhcmVudERDLnRv
U2hpZnQoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09i
amVjdChOVUxMX1BFTikpOwotICAgICAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0
KGRjLCBicnVzaC5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1QYXRoKCktPmZpbGxQYXRo
KGRjLCAmdHIpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBHZXRTdG9ja09iamVjdChO
VUxMX1BFTikpOwotICAgICAgICBIR0RJT0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KG1fZGF0
YS0+bV9kYywgYnJ1c2guZ2V0KCkpOwotICAgICAgICBwYXRoLnBsYXRmb3JtUGF0aCgpLT5maWxs
UGF0aChtX2RhdGEtPm1fZGMsICZtX2RhdGEtPm1fdHJhbnNmb3JtKTsKLSAgICAgICAgU2VsZWN0
T2JqZWN0KG1fZGF0YS0+bV9kYywgb2xkQnJ1c2gpOwotICAgIH0KLX0KLQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYXRo
LmlzTnVsbCgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9k
YykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29s
b3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwotCi0gICAgaWYgKG1fZGF0
YS0+bV9vcGFjaXR5IDwgMS4wZiB8fCBtX2RhdGEtPmhhc0FscGhhKCkpIHsKLSAgICAgICAgSW50
UmVjdCB0clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdChwYXRoLmJvdW5k
aW5nUmVjdCgpKSk7Ci0gICAgICAgIHRyUmVjdC5pbmZsYXRlKDEpOwotICAgICAgICBUcmFuc3Bh
cmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHRyUmVjdCk7Ci0gICAgICAgIEhEQyBk
YyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0gICAgICAgIGlmICghZGMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyID0gbV9kYXRhLT5tX3RyYW5zZm9y
bTsKLSAgICAgICAgdHIudHJhbnNsYXRlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpLndpZHRoKCks
IHRyYW5zcGFyZW50REMudG9TaGlmdCgpLmhlaWdodCgpKTsKLQotICAgICAgICBTZWxlY3RPYmpl
Y3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfQlJVU0gpKTsKLSAgICAgICAgSEdESU9CSiBvbGRQ
ZW4gPSBTZWxlY3RPYmplY3QoZGMsIHBlbi5nZXQoKSk7Ci0gICAgICAgIHBhdGgucGxhdGZvcm1Q
YXRoKCktPnN0cm9rZVBhdGgoZGMsICZ0cik7Ci0gICAgICAgIFNlbGVjdE9iamVjdChkYywgb2xk
UGVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBH
ZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0gICAgICAgIEhHRElPQkogb2xkUGVuID0gU2Vs
ZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgcGVuLmdldCgpKTsKLSAgICAgICAgcGF0aC5wbGF0Zm9y
bVBhdGgoKS0+c3Ryb2tlUGF0aChtX2RhdGEtPm1fZGMsICZtX2RhdGEtPm1fdHJhbnNmb3JtKTsK
LSAgICAgICAgU2VsZWN0T2JqZWN0KG1fZGF0YS0+bV9kYywgb2xkUGVuKTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0
IEdyYWRpZW50KiBncmFkaWVudCkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0
b3BzID0gZ3JhZGllbnQtPmdldFN0b3BzKCk7Ci0gICAgaWYgKHN0b3BzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotICAg
IGlmIChudW1TdG9wcyA9PSAxKSB7Ci0gICAgICAgIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3Am
IHN0b3AgPSBzdG9wcy5maXJzdCgpOwotICAgICAgICBDb2xvciBjb2xvcihzdG9wLnJlZCwgc3Rv
cC5ncmVlbiwgc3RvcC5ibHVlLCBzdG9wLmFscGhhKTsKLSAgICAgICAgZmlsbFJlY3QociwgY29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICByZXR1cm47Ci0gICAgfSAKLSAgICAK
LSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRh
LT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGludFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHIpOwotICAgIEludFJlY3QgcmVjdCA9IG1fZGF0YS0+bWFwUmVjdChpbnRSZWN0
KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyhtX2RhdGEsIHJlY3QsICZp
bnRSZWN0LCAyNTUsIHRydWUpOwotICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50REMuaGRjKCk7Ci0g
ICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVjdC5tb3ZlKHRyYW5zcGFyZW50
REMudG9TaGlmdCgpKTsKLSAgICBGbG9hdFBvaW50IGZwMCA9IG1fZGF0YS0+bWFwUG9pbnQoZ3Jh
ZGllbnQtPnAwKCkpOwotICAgIEZsb2F0UG9pbnQgZnAxID0gbV9kYXRhLT5tYXBQb2ludChncmFk
aWVudC0+cDEoKSk7Ci0gICAgSW50UG9pbnQgcDAoc3RhYmxlUm91bmQoZnAwLngoKSksIHN0YWJs
ZVJvdW5kKGZwMC55KCkpKTsKLSAgICBJbnRQb2ludCBwMShzdGFibGVSb3VuZChmcDEueCgpKSwg
c3RhYmxlUm91bmQoZnAxLnkoKSkpOwotICAgIHAwICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgp
OwotICAgIHAxICs9IHRyYW5zcGFyZW50REMudG9TaGlmdCgpOwotCi0gICAgaWYgKGdyYWRpZW50
LT5pc1JhZGlhbCgpKSB7Ci0gICAgICAgIGlmIChnX3JhZGlhbEdyYWRpZW50RmlsbGVyKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogZG9uJ3Qgc3VwcG9ydCAyRCBzY2FsaW5nIGF0IHRoaXMgdGlt
ZQotICAgICAgICAgICAgZG91YmxlIHNjYWxlID0gKG1fZGF0YS0+bV90cmFuc2Zvcm0uYSgpICsg
bV9kYXRhLT5tX3RyYW5zZm9ybS5kKCkpICogMC41OwotICAgICAgICAgICAgZmxvYXQgcjAgPSBn
cmFkaWVudC0+c3RhcnRSYWRpdXMoKSAqIHNjYWxlOwotICAgICAgICAgICAgZmxvYXQgcjEgPSBn
cmFkaWVudC0+ZW5kUmFkaXVzKCkgKiBzY2FsZTsKLSAgICAgICAgICAgIGdfcmFkaWFsR3JhZGll
bnRGaWxsZXIoZGMsIHJlY3QsIHAwLCBwMSwgcjAsIHIxLCBncmFkaWVudC0+Z2V0U3RvcHMoKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGdfbGluZWFy
R3JhZGllbnRGaWxsZXIpIHsKLSAgICAgICAgZ19saW5lYXJHcmFkaWVudEZpbGxlcihkYywgcmVj
dCwgcDAsIHAxLCBncmFkaWVudC0+Z2V0U3RvcHMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBTaW1wbGUgMUQgbGluZWFyIHNvbHV0aW9uIHRoYXQgYXNzdW1lcyBwMCBpcyBv
biB0aGUgdG9wIG9yIGxlZnQgc2lkZSwgYW5kIHAxIGlzIG9uIHRoZSByaWdodCBvciBib3R0b20g
c2lkZQotICAgIHNpemVfdCBudW1SZWN0cyA9IChudW1TdG9wcyAtIDEpOwotICAgIFZlY3RvcjxU
UklWRVJURVgsIDIwPiB0djsKLSAgICB0di5yZXNpemUobnVtUmVjdHMgKiAyKTsKLSAgICBWZWN0
b3I8R1JBRElFTlRfUkVDVCwgMTA+IG1lc2g7Ci0gICAgbWVzaC5yZXNpemUobnVtUmVjdHMpOwot
ICAgIGludCB4ID0gcmVjdC54KCk7Ci0gICAgaW50IHkgPSByZWN0LnkoKTsKLSAgICBpbnQgd2lk
dGggPSByZWN0LndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAg
RmxvYXRTaXplIGQgPSBncmFkaWVudC0+cDEoKSAtIGdyYWRpZW50LT5wMCgpOwotICAgIGJvb2wg
dmVydGljYWwgPSBmYWJzKGQuaGVpZ2h0KCkpID4gZmFicyhkLndpZHRoKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICBjb25zdCBHcmFkaWVu
dDo6Q29sb3JTdG9wJiBzdG9wID0gc3RvcHNbaV07Ci0gICAgICAgIGludCBpVHYgPSBpID8gMiAq
IGkgLSAxIDogMDsKLSAgICAgICAgdHZbaVR2XS5SZWQgPSBzdG9wLnJlZCAqIDB4RkZGRjsKLSAg
ICAgICAgdHZbaVR2XS5HcmVlbiA9IHN0b3AuZ3JlZW4gKiAweEZGRkY7Ci0gICAgICAgIHR2W2lU
dl0uQmx1ZSA9IHN0b3AuYmx1ZSAqIDB4RkZGRjsKLSAgICAgICAgdHZbaVR2XS5BbHBoYSA9IHN0
b3AuYWxwaGEgKiAweEZGRkY7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICB0dltpVHZd
LnggPSB2ZXJ0aWNhbCA/IHggKyB3aWR0aDogeCArIHdpZHRoICogc3RvcC5zdG9wOwotICAgICAg
ICAgICAgdHZbaVR2XS55ID0gdmVydGljYWwgPyB5ICsgaGVpZ2h0ICogc3RvcC5zdG9wIDogeSAr
IGhlaWdodDsKLSAgICAgICAgICAgIG1lc2hbaSAtIDFdLlVwcGVyTGVmdCA9IGlUdiAtIDE7Ci0g
ICAgICAgICAgICBtZXNoW2kgLSAxXS5Mb3dlclJpZ2h0ID0gaVR2OwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdHZbaVR2XS54ID0geDsKLSAgICAgICAgICAgIHR2W2lUdl0ueSA9IHk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSAmJiBpIDwgbnVtUmVjdHMpIHsKLSAgICAgICAg
ICAgIHR2W2lUdiArIDFdID0gdHZbaVR2XTsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkKLSAg
ICAgICAgICAgICAgICB0dltpVHYgKyAxXS54ID0geDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB0dltpVHYgKyAxXS55ID0geTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdy
YWRpZW50RmlsbChkYywgdHYuZGF0YSgpLCB0di5zaXplKCksIG1lc2guZGF0YSgpLCBtZXNoLnNp
emUoKSwgdmVydGljYWwgPyBHUkFESUVOVF9GSUxMX1JFQ1RfViA6IEdSQURJRU5UX0ZJTExfUkVD
VF9IKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX3Ry
YW5zZm9ybTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwotCi0gICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KQotICAgICAgICBmaWxsUmVjdChyZWN0LCBtX3N0YXRlLmZpbGxHcmFk
aWVudC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LCBmaWxsQ29sb3Io
KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSW50ZXJwb2xhdGlvblF1YWxpdHkgR3Jh
cGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJw
b2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGlzQ2hhclZpc2libGUoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyAmJiBjICE9
IHplcm9XaWR0aFNwYWNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFm
aWxsQ29sb3IoKS5hbHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBtdXN0U3VwcG9ydEFscGhhID0gbV9kYXRhLT5oYXNBbHBoYSgpOwotCi0g
ICAgaWYgKCFtdXN0U3VwcG9ydEFscGhhICYmIGZpbGxDb2xvcigpLmFscGhhKCkgPT0gMHhGRiAm
JiBtX2RhdGEtPm1fb3BhY2l0eSA+PSAxLjApIHsKLSAgICAgICAgZm9udC5kcmF3VGV4dCh0aGlz
LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBm
bG9hdCBvbGRPcGFjaXR5ID0gbV9kYXRhLT5tX29wYWNpdHk7Ci0gICAgbV9kYXRhLT5tX29wYWNp
dHkgKj0gZmlsbENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwotCi0gICAgRmxvYXRSZWN0IHRleHRS
ZWN0ID0gZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBmb250LmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCksIGZyb20sIHRvKTsKLSAgICB0ZXh0UmVjdC5zZXRZKHRleHRSZWN0Lnko
KSAtIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgSW50UmVjdCB0clJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdCh0ZXh0UmVjdCkpOwotICAgIFJFQ1QgYm1w
UmVjdDsKLSAgICBBbHBoYVBhaW50VHlwZSBhbHBoYVBhaW50VHlwZSA9IG11c3RTdXBwb3J0QWxw
aGEgPyBBbHBoYVBhaW50T3RoZXIgOiBBbHBoYVBhaW50Tm9uZTsKLSAgICBpZiAoUmVmUHRyPFNo
YXJlZEJpdG1hcD4gYm1wID0gbV9kYXRhLT5nZXRUcmFuc3BhcmVudExheWVyQml0bWFwKHRyUmVj
dCwgYWxwaGFQYWludFR5cGUsIGJtcFJlY3QsIHRydWUsIG11c3RTdXBwb3J0QWxwaGEpKSB7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYygwKTsKLSAgICAgICAgICAg
IGdjLnNldEJpdG1hcChibXApOwotICAgICAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKG1fZGF0
YS0+bV90cmFuc2Zvcm0uYSgpLCBtX2RhdGEtPm1fdHJhbnNmb3JtLmQoKSkpOwotICAgICAgICAg
ICAgZm9udC5kcmF3VGV4dCgmZ2MsIHJ1biwgSW50UG9pbnQoMCwgZm9udC5mb250TWV0cmljcygp
LmFzY2VudCgpKSwgZnJvbSwgdG8pOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGtleTE7
Ci0gICAgICAgIEhEQyBtZW1EQyA9IGJtcC0+Z2V0REMoJmtleTEpOwotICAgICAgICBpZiAobWVt
REMpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+cGFpbnRCYWNrVHJhbnNwYXJlbnRMYXllckJpdG1h
cChtZW1EQywgYm1wLmdldCgpLCB0clJlY3QsIGFscGhhUGFpbnRUeXBlLCBibXBSZWN0KTsKLSAg
ICAgICAgICAgIGJtcC0+cmVsZWFzZURDKG1lbURDLCBrZXkxKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fZGF0YS0+bV9vcGFjaXR5ID0gb2xkT3BhY2l0eTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIGlmICghbnVtR2x5cGhzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoaXND
aGFyVmlzaWJsZSgqZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICArK2Zyb207Ci0gICAgICAgIC0tbnVtR2x5cGhzOwotICAgIH0KLQotICAgIGRv
dWJsZSBzY2FsZVggPSBtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKTsKLSAgICBkb3VibGUgc2NhbGVZ
ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5kKCk7Ci0KLSAgICBpbnQgaGVpZ2h0ID0gZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLnNpemUoKSAqIHNjYWxlWTsKLSAgICBpbnQgd2lkdGggPSBmb250RGF0
YS0+YXZnQ2hhcldpZHRoKCkgKiBzY2FsZVg7Ci0KLSAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0
YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhGT05U
IGhGb250ID0gaGVpZ2h0ID4gMQotICAgICAgICA/IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5n
ZXRTY2FsZWRGb250SGFuZGxlKGhlaWdodCwgc2NhbGVYID09IHNjYWxlWSA/IDAgOiB3aWR0aCkK
LSAgICAgICAgOiAwOwotCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9p
bnQueSgpIC0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgIEZsb2F0UG9p
bnQgdHJQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2ludCk7Ci0gICAgaW50IHkgPSBz
dGFibGVSb3VuZCh0clBvaW50LnkoKSk7Ci0KLSAgICBDb2xvciBjb2xvciA9IGZpbGxDb2xvcigp
OwotICAgIGlmICghY29sb3IuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09MT1JS
RUYgZm9udENvbG9yID0gUkdCKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCkpOwotCi0gICAgaWYgKCFoRm9udCkgewotICAgICAgICBkb3VibGUgb2Zmc2V0ID0gdHJQb2lu
dC54KCk7Ci0gICAgICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZSA9IGdseXBo
QnVmZmVyLmFkdmFuY2VzKGZyb20pOwotICAgICAgICBpZiAoc2NhbGVYID09IDEuKQotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1HbHlwaHM7ICsraSkKLSAgICAgICAgICAgICAg
ICBvZmZzZXQgKz0gKCphZHZhbmNlKyspLndpZHRoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtR2x5cGhzOyArK2kpCi0gICAgICAgICAgICAgICAg
b2Zmc2V0ICs9ICgqYWR2YW5jZSsrKS53aWR0aCgpICogc2NhbGVYOwotCi0gICAgICAgIG9mZnNl
dCArPSB3aWR0aDsKLQotICAgICAgICBhdXRvIGhQZW4gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVBlbihQU19EQVNILCAxLCBmb250Q29sb3IpKTsKLSAgICAgICAgSEdESU9CSiBvbGRQZW4gPSBT
ZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBoUGVuLmdldCgpKTsKLQotICAgICAgICBNb3ZlVG9F
eChtX2RhdGEtPm1fZGMsIHN0YWJsZVJvdW5kKHRyUG9pbnQueCgpKSwgeSwgMCk7Ci0gICAgICAg
IExpbmVUbyhtX2RhdGEtPm1fZGMsIHN0YWJsZVJvdW5kKG9mZnNldCksIHkpOwotCi0gICAgICAg
IFNlbGVjdE9iamVjdChtX2RhdGEtPm1fZGMsIG9sZFBlbik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXIg
PSAwOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JT
cGFjZTsKLSAgICBib29sIGhhc1NoYWRvdyA9IHRleHREcmF3aW5nTW9kZSgpID09IFRleHRNb2Rl
RmlsbAotICAgICAgICAmJiBnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFk
b3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSkKLSAgICAgICAgJiYgc2hhZG93Q29sb3IuYWxwaGEo
KTsKLSAgICBDT0xPUlJFRiBzaGFkb3dSR0JDb2xvcjsKLSAgICBGbG9hdFBvaW50IHRyU2hhZG93
UG9pbnQ7Ci0gICAgaWYgKGhhc1NoYWRvdykgewotICAgICAgICBzaGFkb3dSR0JDb2xvciA9IFJH
QihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1
ZSgpKTsKLSAgICAgICAgdHJTaGFkb3dQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2lu
dCArIHNoYWRvd09mZnNldCk7Ci0gICAgfQotCi0gICAgSEdESU9CSiBoT2xkRm9udCA9IFNlbGVj
dE9iamVjdChtX2RhdGEtPm1fZGMsIGhGb250KTsKLSAgICBDT0xPUlJFRiBvbGRUZXh0Q29sb3Ig
PSBHZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjKTsKLSAgICBpbnQgb2xkVGV4dEFsaWduID0gR2V0
VGV4dEFsaWduKG1fZGF0YS0+bV9kYyk7Ci0gICAgU2V0VGV4dEFsaWduKG1fZGF0YS0+bV9kYywg
MCk7Ci0KLSAgICBpbnQgb2xkQmtNb2RlID0gR2V0QmtNb2RlKG1fZGF0YS0+bV9kYyk7Ci0gICAg
U2V0QmtNb2RlKG1fZGF0YS0+bV9kYywgVFJBTlNQQVJFTlQpOwotCi0gICAgaWYgKG51bUdseXBo
cyA+IDEpIHsKLSAgICAgICAgZG91YmxlIG9mZnNldCA9IHRyUG9pbnQueCgpOwotICAgICAgICBW
ZWN0b3I8aW50LCAyNTY+IGdseXBoU3BhY2UobnVtR2x5cGhzKTsKLSAgICAgICAgVmVjdG9yPFVD
aGFyLCAyNTY+IHRleHQobnVtR2x5cGhzKTsKLSAgICAgICAgaW50KiBjdXJTcGFjZSA9IGdseXBo
U3BhY2UuZGF0YSgpOwotICAgICAgICBVQ2hhciogY3VyQ2hhciA9IHRleHQuZGF0YSgpOwotICAg
ICAgICBjb25zdCBVQ2hhciogc3JjQ2hhciA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAg
ICAgICAgY29uc3QgVUNoYXIqIGNvbnN0IHNyY0NoYXJFbmQgPSBzcmNDaGFyICsgbnVtR2x5cGhz
OwotICAgICAgICAqY3VyQ2hhcisrID0gKnNyY0NoYXIrKzsKLSAgICAgICAgaW50IGZpcnN0T2Zm
c2V0ID0gc3RhYmxlUm91bmQob2Zmc2V0KTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBmaXJz
dE9mZnNldDsKLSAgICAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlID0gZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7Ci0gICAgICAgIC8vIEZJWE1FOiBFeHRUZXh0T3V0KCkg
Y2FuIGZsaXAgb3ZlciBlYWNoIHdvcmQgZm9yIFJUTCBsYW5ndWFnZXMsIGV2ZW4gd2hlbiBUQV9S
VExSRUFESU5HIGlzIG9mZi4KLSAgICAgICAgLy8gKHRoaXMgY2FuIGJlIEdESSBidWcgb3IgZm9u
dCBkcml2ZXIgYnVnPykKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBjbGVhciBob3cgaXQgcHJvY2Vz
c2VzIGNoYXJhY3RlcnMgYW5kIGhhbmRsZXMgc3BlY2lmaWVkIHNwYWNlcy4gT24gdGhlIG90aGVy
IHNpZGUsCi0gICAgICAgIC8vIG91ciBnbHlwaCBidWZmZXIgaXMgYWxyZWFkeSBpbiB0aGUgY29y
cmVjdCBvcmRlciBmb3IgcmVuZGVyaW5nLiBTbywgdGhlIHNvbHV0aW9uIGlzIHRoYXQgd2UKLSAg
ICAgICAgLy8gY2FsbCBFeHRUZXh0T3V0KCkgZm9yIGVhY2ggc2luZ2xlIGNoYXJhY3RlciB3aGVu
IHRoZSB0ZXh0IGNvbnRhaW5zIGFueSBSVEwgY2hhcmFjdGVyLgotICAgICAgICAvLyBUaGlzIHNv
bHV0aW9uIGlzIG5vdCBwZXJmZWN0IGFzIGl0IGlzIHNsb3dlciB0aGFuIGNhbGxpbmcgRXh0VGV4
dE91dCgpIG9uZSB0aW1lIGZvciBhbGwgY2hhcmFjdGVycy4KLSAgICAgICAgLy8gRHJhd2luZyBj
aGFyYWN0ZXJzIG9uZSBieSBvbmUgbWF5IGJlIHRvbyBzbG93LgotICAgICAgICBib29sIGRyYXdP
bmVCeU9uZSA9IGZhbHNlOwotICAgICAgICBpZiAoc2NhbGVYID09IDEuKSB7Ci0gICAgICAgICAg
ICBmb3IgKDsgc3JjQ2hhciA8IHNyY0NoYXJFbmQ7ICsrc3JjQ2hhcikgewotICAgICAgICAgICAg
ICAgIG9mZnNldCArPSAoKmFkdmFuY2UrKykud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBpbnQg
b2Zmc2V0SW50ID0gc3RhYmxlUm91bmQob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoaXND
aGFyVmlzaWJsZSgqc3JjQ2hhcikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkcmF3T25l
QnlPbmUgJiYgdV9jaGFyRGlyZWN0aW9uKCpzcmNDaGFyKSA9PSBVX1JJR0hUX1RPX0xFRlQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkcmF3T25lQnlPbmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAqY3VyQ2hhcisrID0gKnNyY0NoYXI7Ci0gICAgICAgICAgICAgICAgICAgICpjdXJT
cGFjZSsrID0gb2Zmc2V0SW50IC0gbGFzdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbGFz
dE9mZnNldCA9IG9mZnNldEludDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKDsgc3JjQ2hhciA8IHNyY0NoYXJFbmQ7
ICsrc3JjQ2hhcikgewotICAgICAgICAgICAgICAgIG9mZnNldCArPSAoKmFkdmFuY2UrKykud2lk
dGgoKSAqIHNjYWxlWDsKLSAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0SW50ID0gc3RhYmxlUm91
bmQob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNDaGFyVmlzaWJsZSgqc3JjQ2hhcikp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkcmF3T25lQnlPbmUgJiYgdV9jaGFyRGlyZWN0
aW9uKCpzcmNDaGFyKSA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3T25lQnlPbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAqY3VyQ2hhcisrID0g
KnNyY0NoYXI7Ci0gICAgICAgICAgICAgICAgICAgICpjdXJTcGFjZSsrID0gb2Zmc2V0SW50IC0g
bGFzdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdE9mZnNldCA9IG9mZnNldEludDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbnVt
R2x5cGhzID0gY3VyQ2hhciAtIHRleHQuZGF0YSgpOwotICAgICAgICBpZiAoaGFzU2hhZG93KSB7
Ci0gICAgICAgICAgICBTZXRUZXh0Q29sb3IobV9kYXRhLT5tX2RjLCBzaGFkb3dSR0JDb2xvcik7
Ci0gICAgICAgICAgICBpZiAoZHJhd09uZUJ5T25lKSB7Ci0gICAgICAgICAgICAgICAgaW50IHhT
aGFkb3cgPSBmaXJzdE9mZnNldCArIHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueCgpIC0gdHJQ
b2ludC54KCkpOwotICAgICAgICAgICAgICAgIGludCB5U2hhZG93ID0gc3RhYmxlUm91bmQodHJT
aGFkb3dQb2ludC55KCkpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
R2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1f
ZGMsIHhTaGFkb3csIHlTaGFkb3csIDAsIE5VTEwsIHRleHQuZGF0YSgpICsgaSwgMSwgMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHhTaGFkb3cgKz0gZ2x5cGhTcGFjZVtpXTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBFeHRUZXh0T3V0KG1f
ZGF0YS0+bV9kYywgZmlyc3RPZmZzZXQgKyBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSAt
IHRyUG9pbnQueCgpKSwgc3RhYmxlUm91bmQodHJTaGFkb3dQb2ludC55KCkpLCAwLCBOVUxMLCB0
ZXh0LmRhdGEoKSwgbnVtR2x5cGhzLCBnbHlwaFNwYWNlLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgU2V0VGV4dENvbG9yKG1fZGF0YS0+bV9kYywgZm9udENvbG9yKTsKLSAgICAgICAgaWYg
KGRyYXdPbmVCeU9uZSkgewotICAgICAgICAgICAgaW50IHggPSBmaXJzdE9mZnNldDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBFeHRUZXh0T3V0KG1fZGF0YS0+bV9kYywgeCwgeSwgMCwgTlVMTCwgdGV4dC5kYXRhKCkg
KyBpLCAxLCAwKTsKLSAgICAgICAgICAgICAgICB4ICs9IGdseXBoU3BhY2VbaV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgRXh0VGV4dE91dChtX2RhdGEtPm1f
ZGMsIGZpcnN0T2Zmc2V0LCB5LCAwLCBOVUxMLCB0ZXh0LmRhdGEoKSwgbnVtR2x5cGhzLCBnbHlw
aFNwYWNlLmRhdGEoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIgYyA9ICpnbHlwaEJ1
ZmZlci5nbHlwaHMoZnJvbSk7Ci0gICAgICAgIGlmIChoYXNTaGFkb3cpIHsKLSAgICAgICAgICAg
IFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIHNoYWRvd1JHQkNvbG9yKTsKLSAgICAgICAgICAg
IEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCBzdGFibGVSb3VuZCh0clNoYWRvd1BvaW50LngoKSks
IHN0YWJsZVJvdW5kKHRyU2hhZG93UG9pbnQueSgpKSwgMCwgTlVMTCwgJmMsIDEsIDApOwotICAg
ICAgICB9Ci0gICAgICAgIFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIGZvbnRDb2xvcik7Ci0g
ICAgICAgIEV4dFRleHRPdXQobV9kYXRhLT5tX2RjLCBzdGFibGVSb3VuZCh0clBvaW50LngoKSks
IHksIDAsIE5VTEwsICZjLCAxLCAwKTsKLSAgICB9Ci0KLSAgICBTZXRUZXh0QWxpZ24obV9kYXRh
LT5tX2RjLCBvbGRUZXh0QWxpZ24pOwotICAgIFNldFRleHRDb2xvcihtX2RhdGEtPm1fZGMsIG9s
ZFRleHRDb2xvcik7Ci0gICAgU2V0QmtNb2RlKG1fZGF0YS0+bV9kYywgb2xkQmtNb2RlKTsKLSAg
ICBTZWxlY3RPYmplY3QobV9kYXRhLT5tX2RjLCBoT2xkRm9udCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RnJhbWVDb250cm9sKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVk
IHR5cGUsIHVuc2lnbmVkIHN0YXRlKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGludCBib3hXaWR0aEJlc3QgPSA4OwotICAgIGNv
bnN0IGludCBib3hIZWlnaHRCZXN0ID0gODsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3Zp
ZGVyKG1fZGF0YSk7Ci0gICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwotICAgIFRyYW5zcGFy
ZW50TGF5ZXJEQyB0cmFuc3BhcmVudERDKG1fZGF0YSwgdHJSZWN0LCAmcmVjdCwgMjU1LCB0cnVl
KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAg
ICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0K
LSAgICBSRUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0KLSAgICBpZiAoKHJlY3RXaW4ucmlnaHQgLSBy
ZWN0V2luLmxlZnQpIDwgYm94V2lkdGhCZXN0KSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRt
YXA+IGJtcCA9IFNoYXJlZEJpdG1hcDo6Y3JlYXRlKEludFNpemUoYm94V2lkdGhCZXN0LCBib3hI
ZWlnaHRCZXN0KSwgQml0bWFwSW5mbzo6Qml0Q291bnQxNiwgdHJ1ZSk7Ci0gICAgICAgIFNoYXJl
ZEJpdG1hcDo6RENIb2xkZXIgbWVtREMoYm1wLmdldCgpKTsKLSAgICAgICAgaWYgKG1lbURDLmdl
dCgpKSB7Ci0gICAgICAgICAgICBSRUNUIHRlbXBSZWN0ID0gezAsIDAsIGJveFdpZHRoQmVzdCwg
Ym94SGVpZ2h0QmVzdH07Ci0gICAgICAgICAgICBEcmF3RnJhbWVDb250cm9sKG1lbURDLmdldCgp
LCAmdGVtcFJlY3QsIHR5cGUsIHN0YXRlKTsKLQotICAgICAgICAgICAgOjpTdHJldGNoQmx0KGRj
LCByZWN0V2luLmxlZnQsIHJlY3RXaW4udG9wLCByZWN0V2luLnJpZ2h0IC0gcmVjdFdpbi5sZWZ0
LCByZWN0V2luLmJvdHRvbSAtIHJlY3RXaW4udG9wLCBtZW1EQy5nZXQoKSwgMCwgMCwgYm94V2lk
dGhCZXN0LCBib3hIZWlnaHRCZXN0LCBTUkNDT1BZKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIERyYXdGcmFtZUNvbnRyb2woZGMsICZyZWN0V2luLCB0eXBl
LCBzdGF0ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBp
ZiAoIW1fZGF0YS0+bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJlY3Qg
PSBtX2RhdGEtPm1hcFJlY3QocmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFy
ZW50REMobV9kYXRhLCB0clJlY3QsICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERD
LmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0
cmFuc3BhcmVudERDLnRvU2hpZnQoKSk7Ci0KLSAgICBSRUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0g
ICAgRHJhd0ZvY3VzUmVjdChkYywgJnJlY3RXaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGFpbnRUZXh0RmllbGQoY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgc3RhdGUpCi17
Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nv
cGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+bV9kYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0clJlY3QgPSBtX2RhdGEtPm1hcFJlY3Qo
cmVjdCk7Ci0gICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50REMobV9kYXRhLCB0clJl
Y3QsICZyZWN0KTsKLSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICgh
ZGMpCi0gICAgICAgIHJldHVybjsKLSAgICB0clJlY3QubW92ZSh0cmFuc3BhcmVudERDLnRvU2hp
ZnQoKSk7Ci0KLSAgICBSRUNUIHJlY3RXaW4gPSB0clJlY3Q7Ci0gICAgRHJhd0VkZ2UoZGMsICZy
ZWN0V2luLCBFREdFX0VUQ0hFRCwgQkZfUkVDVCB8IEJGX0FESlVTVCk7Ci0gICAgRmlsbFJlY3Qo
ZGMsICZyZWN0V2luLCByZWludGVycHJldF9jYXN0PEhCUlVTSD4oKChzdGF0ZSAmIERGQ1NfSU5B
Q1RJVkUpID8gQ09MT1JfQlRORkFDRSA6IENPTE9SX1dJTkRPVykgKyAxKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFwKFNoYXJlZEJpdG1hcCogYm1wLCBjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0SW4sIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKLXsKLSAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTY29wZURDUHJvdmlkZXIgZGNQcm92aWRlcihtX2RhdGEpOwotICAgIGlmICghbV9kYXRh
LT5tX2RjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRzdFJlY3QgPSBtX2RhdGEt
Pm1hcFJlY3QoZHN0UmVjdEluKTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnRE
QyhtX2RhdGEsIGRzdFJlY3QsICZkc3RSZWN0SW4sIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0g
dHJhbnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAg
ZHN0UmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLQotICAgIGJtcC0+ZHJhdyhk
YywgZHN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSk7Ci0KLSAgICBpZiAo
Ym1wLT5pczE2Yml0KCkpCi0gICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hhbm5lbCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0
bWFwKiBibXAsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3RJbiwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNp
emUpCi17Ci0gICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU2NvcGVEQ1Byb3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKLSAgICBpZiAoIW1fZGF0YS0+
bV9kYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBpbnREc3RSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChkZXN0UmVjdEluKTsKLSAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFw
UmVjdChpbnREc3RSZWN0KTsKLSAgICBUcmFuc3BhcmVudExheWVyREMgdHJhbnNwYXJlbnREQyht
X2RhdGEsIHRyUmVjdCwgJmludERzdFJlY3QsIDI1NSwgdHJ1ZSk7Ci0gICAgSERDIGRjID0gdHJh
bnNwYXJlbnREQy5oZGMoKTsKLSAgICBpZiAoIWRjKQotICAgICAgICByZXR1cm47Ci0gICAgdHJS
ZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UmVjdCBtb3ZlZERz
dFJlY3QgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdCh0
clJlY3QpKTsKLSAgICBGbG9hdFNpemUgbW92ZWQobW92ZWREc3RSZWN0LmxvY2F0aW9uKCkgLSBk
ZXN0UmVjdEluLmxvY2F0aW9uKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBt
X2RhdGEtPm1fdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobW92ZWQud2lkdGgo
KSwgbW92ZWQuaGVpZ2h0KCkpOwotCi0gICAgYm1wLT5kcmF3UGF0dGVybihkYywgdHJhbnNmb3Jt
LCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3RJbiwgb3JpZ1NvdXJjZVNpemUpOwotCi0gICAgaWYgKCFibXAtPmhhc0FscGhh
KCkpCi0gICAgICAgIHRyYW5zcGFyZW50REMuZmlsbEFscGhhQ2hhbm5lbCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ljb24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYgZHN0
UmVjdEluLCBVSU5UIGZsYWdzKQotewotICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNjb3BlRENQcm92aWRlciBkY1Byb3ZpZGVyKG1fZGF0YSk7Ci0g
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZHN0
UmVjdCA9IG1fZGF0YS0+bWFwUmVjdChkc3RSZWN0SW4pOwotICAgIFRyYW5zcGFyZW50TGF5ZXJE
QyB0cmFuc3BhcmVudERDKG1fZGF0YSwgZHN0UmVjdCwgJmRzdFJlY3RJbiwgMjU1LCB0cnVlKTsK
LSAgICBIREMgZGMgPSB0cmFuc3BhcmVudERDLmhkYygpOwotICAgIGlmICghZGMpCi0gICAgICAg
IHJldHVybjsKLSAgICBkc3RSZWN0Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotCi0g
ICAgRHJhd0ljb25FeChkYywgZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBpY29uLCBkc3RSZWN0
LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksIDAsIE5VTEwsIGZsYWdzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZm
ZXJEYXRhV2luY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyRGF0YVdpbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDZk
MzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VCdWZmZXJEYXRhV2luY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewot
cHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7Ci0gICAgUmVmUHRy
PFNoYXJlZEJpdG1hcD4gbV9iaXRtYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlcldpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2MyM2Y4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBCdWZmZXJlZEltYWdlOiBwdWJsaWMgSW1hZ2UgewotCi1wdWJsaWM6
Ci0gICAgQnVmZmVyZWRJbWFnZShjb25zdCBJbWFnZUJ1ZmZlckRhdGEqIGRhdGEpCi0gICAgICAg
IDogbV9kYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50
RnJhbWVLbm93blRvQmVPcGFxdWUoKSB7IHJldHVybiAhbV9kYXRhLT5tX2JpdG1hcC0+aGFzQWxw
aGEoKSA7IH0KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNp
emUobV9kYXRhLT5tX2JpdG1hcC0+d2lkdGgoKSwgbV9kYXRhLT5tX2JpdG1hcC0+aGVpZ2h0KCkp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwg
PSB0cnVlKSB7fQotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJl
dHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Ci0KLSAgICBjb25zdCBJbWFnZUJ1
ZmZlckRhdGEqIG1fZGF0YTsKLX07Ci0KLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbikKLXsKLSAgICBJbnRSZWN0IGludERzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRzdFJl
Y3QpOwotICAgIEludFJlY3QgaW50U3JjUmVjdChzcmNSZWN0KTsKLSAgICBtX2RhdGEtPm1fYml0
bWFwLT5kcmF3KGN0eHQsIGludERzdFJlY3QsIGludFNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwg
Y29tcG9zaXRlT3AsIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUpCi17Ci0gICAgbV9k
YXRhLT5tX2JpdG1hcC0+ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBzaXplKCkpOwotfQot
Ci1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQot
ICAgIDogbV9iaXRtYXAoU2hhcmVkQml0bWFwOjpjcmVhdGUoc2l6ZSwgQml0bWFwSW5mbzo6Qml0
Q291bnQzMiwgZmFsc2UpKQotewotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0Qt
aHRtbDUtMjAwOTAyMTIvdGhlLWNhbnZhcy1lbGVtZW50Lmh0bWwjY2FudmFzcGl4ZWxhcnJheQot
ICAgIC8vICJXaGVuIHRoZSBjYW52YXMgaXMgaW5pdGlhbGl6ZWQgaXQgbXVzdCBiZSBzZXQgdG8g
ZnVsbHkgdHJhbnNwYXJlbnQgYmxhY2suIgotICAgIG1fYml0bWFwLT5yZXNldFBpeGVscyh0cnVl
KTsKLSAgICBtX2JpdG1hcC0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6
IG1fZGF0YShzaXplKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNp
emUpCi17Ci0gICAgLy8gRklYTUU6IFJlc3BlY3QgcmVzb3V0aW9uU2NhbGUgdG8gc3VwcG9ydCBo
aWdoLURQSSBjYW52YXMuCi0gICAgVU5VU0VEX1BBUkFNKHJlc29sdXRpb25TY2FsZSk7Ci0gICAg
Ly8gRklYTUU6IGNvbG9yU3BhY2UgaXMgbm90IHVzZWQKLSAgICBVTlVTRURfUEFSQU0oY29sb3JT
cGFjZSk7Ci0KLSAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KDAp
KTsKLSAgICBtX2NvbnRleHQtPnNldEJpdG1hcChtX2RhdGEubV9iaXRtYXApOwotICAgIHN1Y2Nl
c3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKLXsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWhhdmlvcikgY29u
c3QKLXsKLSAgICBBU1NFUlQoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpOwotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWRJbWFnZSgmbV9kYXRhKSk7Ci19Ci0KLUJhY2tp
bmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1
cm4gQ29weUJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVD
b2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCksIHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3As
IGRlc3RSZWN0KTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgcHJlbXVsdGlwbGllZD4KLXN0YXRpYyBQ
YXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgU2hhcmVkQml0bWFwKiBiaXRtYXApCi17Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFs
aXplZChyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7Ci0KLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBzcmMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYml0bWFw
LT5ieXRlcygpKTsKLSAgICBpZiAoIXNyYykKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxl
YXNlKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoMCwgMCwgYml0bWFwLT53aWR0aCgpLCBi
aXRtYXAtPmhlaWdodCgpKTsKLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChyZWN0KTsKLSAgICBp
ZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFz
ZSgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZHN0ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAg
aW1hZ2VEYXRhLT56ZXJvRmlsbCgpOwotICAgIHNyYyArPSAoc291cmNlUmVjdC55KCkgKiBiaXRt
YXAtPndpZHRoKCkgKyBzb3VyY2VSZWN0LngoKSkgKiA0OwotICAgIGRzdCArPSAoKHNvdXJjZVJl
Y3QueSgpIC0gcmVjdC55KCkpICogcmVjdC53aWR0aCgpICsgc291cmNlUmVjdC54KCkgLSByZWN0
LngoKSkgKiA0OwotICAgIGludCBieXRlc1RvQ29weSA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7
Ci0gICAgaW50IHNyY1NraXAgPSAoYml0bWFwLT53aWR0aCgpIC0gc291cmNlUmVjdC53aWR0aCgp
KSAqIDQ7Ci0gICAgaW50IGRzdFNraXAgPSAocmVjdC53aWR0aCgpIC0gc291cmNlUmVjdC53aWR0
aCgpKSAqIDQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogZHN0RW5kID0gZHN0ICsgc291cmNl
UmVjdC5oZWlnaHQoKSAqIHJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgd2hpbGUgKGRzdCA8IGRzdEVu
ZCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkc3RSb3dFbmQgPSBkc3QgKyBieXRl
c1RvQ29weTsKLSAgICAgICAgd2hpbGUgKGRzdCA8IGRzdFJvd0VuZCkgewotICAgICAgICAgICAg
Ly8gQ29udmVydCBBUkdCIGxpdHRsZSBlbmRpYW4gdG8gUkdCQSBiaWcgZW5kaWFuCi0gICAgICAg
ICAgICBpbnQgYmx1ZSA9ICpzcmMrKzsKLSAgICAgICAgICAgIGludCBncmVlbiA9ICpzcmMrKzsK
LSAgICAgICAgICAgIGludCByZWQgPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgYWxwaGEgPSAq
c3JjKys7Ci0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAg
ICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KChyZWQgKiBhbHBoYSArIDI1NCkg
LyAyNTUpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NSk7Ci0gICAgICAgICAgICAgICAgKmRzdCsr
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTUp
OwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFs
cGhhKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKmRzdCsrID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocmVkKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihncmVlbik7Ci0gICAgICAgICAgICAgICAgKmRzdCsr
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYmx1ZSk7Ci0gICAgICAgICAgICAgICAgKmRz
dCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYWxwaGEpOwotICAgICAgICAgICAgICAg
ICsrc3JjOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNyYyArPSBzcmNTa2lw
OwotICAgICAgICBkc3QgKz0gZHN0U2tpcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8ZmFsc2U+KHJlY3Qs
IG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0
YTx0cnVlPihyZWN0LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkq
IHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAg
ICBTaGFyZWRCaXRtYXAqIGJpdG1hcCA9IG1fZGF0YS5tX2JpdG1hcC5nZXQoKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkc3QgPSAodW5zaWduZWQgY2hhciopYml0bWFwLT5ieXRlcygpOwotICAgIGlm
ICghZHN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KGRlc3RQb2lu
dCwgc291cmNlUmVjdC5zaXplKCkpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KDAs
IDAsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSkpOwotCi0gICAgaWYgKGRlc3RS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc3JjID0gc291cmNlLT5kYXRhKCk7Ci0gICAgZHN0ICs9IChkZXN0UmVjdC55KCkgKiBiaXRt
YXAtPndpZHRoKCkgKyBkZXN0UmVjdC54KCkpICogNDsKLSAgICBzcmMgKz0gKHNvdXJjZVJlY3Qu
eSgpICogc291cmNlU2l6ZS53aWR0aCgpICsgc291cmNlUmVjdC54KCkpICogNDsKLSAgICBpbnQg
Ynl0ZXNUb0NvcHkgPSBkZXN0UmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgZHN0U2tpcCA9IChi
aXRtYXAtPndpZHRoKCkgLSBkZXN0UmVjdC53aWR0aCgpKSAqIDQ7Ci0gICAgaW50IHNyY1NraXAg
PSAoc291cmNlU2l6ZS53aWR0aCgpIC0gZGVzdFJlY3Qud2lkdGgoKSkgKiA0OwotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGRzdEVuZCA9IGRzdCArIGRlc3RSZWN0LmhlaWdodCgpICogYml0bWFw
LT53aWR0aCgpICogNDsKLSAgICB3aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGRzdFJvd0VuZCA9IGRzdCArIGJ5dGVzVG9Db3B5OwotICAgICAgICB3
aGlsZSAoZHN0IDwgZHN0Um93RW5kKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IFJHQkEgYmln
IGVuZGlhbiB0byBBUkdCIGxpdHRsZSBlbmRpYW4KLSAgICAgICAgICAgIGludCByZWQgPSAqc3Jj
Kys7Ci0gICAgICAgICAgICBpbnQgZ3JlZW4gPSAqc3JjKys7Ci0gICAgICAgICAgICBpbnQgYmx1
ZSA9ICpzcmMrKzsKLSAgICAgICAgICAgIGludCBhbHBoYSA9ICpzcmMrKzsKLSAgICAgICAgICAg
IGlmIChtdWx0aXBsaWVkID09IFByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihibHVlICogMjU1IC8gYWxwaGEpOwotICAg
ICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGdyZWVuICog
MjU1IC8gYWxwaGEpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KHJlZCAqIDI1NSAvIGFscGhhKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhbHBoYSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJsdWUp
OwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGdy
ZWVuKTsKLSAgICAgICAgICAgICAgICAqZHN0KysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihyZWQpOwotICAgICAgICAgICAgICAgICpkc3QrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGFscGhhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzcmMgKz0gc3Jj
U2tpcDsKLSAgICAgICAgZHN0ICs9IGRzdFNraXA7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tV
cFRhYmxlKQotewotICAgIFVOVVNFRF9QQVJBTShsb29rVXBUYWJsZSk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fZGF0YS5tX2JpdG1hcC0+Ynl0ZXMoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwi
OwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJjMGE5NjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJXaW5j
ZUdyYXBoaWNzRXh0cmFzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFNoYXJlZEJpdG1hcDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX3NpemUsIGhh
c0FscGhhKCkpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFEYXRh
KQotewotICAgIGlmIChjbGVhck1ldGFEYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZh
bHNlOwotCi0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZSA9IDA7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaXRt
YXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6
ZSkKLXsKLSAgICBpZiAoIWJtcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQklUTUFQ
IGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KGJtcCwgc2l6ZW9mKEJJVE1BUCksICZibXBJbmZvKTsK
LQotICAgIEFTU0VSVChibXBJbmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpbnQgYnVmZmVy
U2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLQotICAgIGF1
dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotICAgIEhH
RElPQkogaE9sZEJtcCA9IFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGJtcCk7Ci0KLSAgICB7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhoZGMuZ2V0KCkpOwotCi0gICAgICAgIEludFNpemUg
aW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICAgICAgaWYgKHNpemUpCi0gICAg
ICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMCwgMCwg
Ym1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgKnNpemUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3KCZn
YywgRmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEZs
b2F0UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24oKSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5n
ZXQoKSwgaE9sZEJtcCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCi17Ci0gICAg
aW50IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1l
czsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IGZyYW1lQXRJbmRl
eChpKTsKLSAgICAgICAgaWYgKCFibXAgfHwgYm1wLT5oZWlnaHQoKSAhPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3JjU2l6ZS5oZWlnaHQoKSkgfHwgYm1wLT53aWR0aCgpICE9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzcmNTaXplLndpZHRoKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwotICAgICAgICBtX2N1
cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAs
IDAsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwg
Y29tcG9zaXRlT3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
KCkpOwotICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZv
dW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCi0gICAgSW50U2l6ZSBp
bWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwg
RmxvYXRSZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbigpKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0SW4sIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uKQotewotICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKQotICAgICAgICBmaWxsV2l0
aFNvbGlkQ29sb3IoY3R4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2Us
IGNvbXBvc2l0ZU9wKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSW50UmVjdCBpbnRTcmNSZWN0KHNy
Y1JlY3RJbik7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IGJtcCA9IGZyYW1lQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgICAgIGlmIChibXApIHsKLSAgICAgICAgICAgIGlmIChi
bXAtPndpZHRoKCkgIT0gbV9zb3VyY2Uuc2l6ZSgpLndpZHRoKCkpIHsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgc2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGJtcC0+d2lkdGgoKSkg
LyBtX3NvdXJjZS5zaXplKCkud2lkdGgoKTsKLQotICAgICAgICAgICAgICAgIGludFNyY1JlY3Qu
c2V0WChzdGFibGVSb3VuZChzcmNSZWN0SW4ueCgpICogc2NhbGVGYWN0b3IpKTsKLSAgICAgICAg
ICAgICAgICBpbnRTcmNSZWN0LnNldFdpZHRoKHN0YWJsZVJvdW5kKHNyY1JlY3RJbi53aWR0aCgp
ICogc2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgICAgICBpbnRTcmNSZWN0LnNldFkoc3RhYmxl
Um91bmQoc3JjUmVjdEluLnkoKSAqIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgaW50
U3JjUmVjdC5zZXRIZWlnaHQoc3RhYmxlUm91bmQoc3JjUmVjdEluLmhlaWdodCgpICogc2NhbGVG
YWN0b3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJtcC0+ZHJhdyhjdHh0LCBlbmNs
b3NpbmdJbnRSZWN0KGRzdFJlY3QpLCBpbnRTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wLCBibGVuZE1vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhcnRBbmltYXRp
b24oKTsKLX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAg
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghYm1wKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBibXAtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgbV9zb3VyY2Uu
c2l6ZSgpKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBs
aW5nTGV2ZWwoKSBjb25zdAotewotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgPSAwOwot
fQotCi12b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQotewotICAgIGlmICht
X2NoZWNrZWRGb3JTb2xpZENvbG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZnJhbWVD
b3VudCgpICE9IDEpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAg
bV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAgPSBmcmFtZUF0SW5kZXgoMCk7Ci0gICAgaWYg
KCFibXAgfHwgIWJtcC0+dmFsaWRIZWlnaHQoKSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9
IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGJtcC0+d2lkdGgoKSAh
PSAxIHx8IGJtcC0+dmFsaWRIZWlnaHQoKSAhPSAxKSB7Ci0gICAgICAgIG1faXNTb2xpZENvbG9y
ID0gZmFsc2U7Ci0gICAgICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwotCi0gICAgaWYg
KGJtcC0+aXMxNmJpdCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGMgPSAoKHVuc2lnbmVk
IHNob3J0ICopYm1wLT5ieXRlcygpKVswXTsKLSAgICAgICAgaW50IHIgPSAoYyA+PiA3KSAmIDB4
Rjg7Ci0gICAgICAgIGludCBnID0gKGMgPj4gMikgJiAweEY4OwotICAgICAgICBpbnQgYiA9IChj
IDw8IDMpICYgMHhGODsKLSAgICAgICAgaWYgKGJtcC0+dXNlc1RyYW5zcGFyZW50Q29sb3IoKSAm
JiBibXAtPnRyYW5zcGFyZW50Q29sb3IoKSA9PSBSR0IociwgZywgYikpCi0gICAgICAgICAgICBt
X3NvbGlkQ29sb3IgPSBDb2xvcihyLCBnLCBiLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9zb2xpZENvbG9yID0gQ29sb3IociwgZywgYik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
dW5zaWduZWQgYyA9ICgodW5zaWduZWQgKilibXAtPmJ5dGVzKCkpWzBdOwotICAgICAgICBtX3Nv
bGlkQ29sb3IgPSBDb2xvcihjKTsKLSAgICB9Ci0KLSAgICBpZiAoYm1wLT52YWxpZEhlaWdodCgp
ID09IGJtcC0+aGVpZ2h0KCkpCi0gICAgICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZhdGVXaW5DRS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcml2YXRlV2lu
Q0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjMjUyMy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByaXZh
dGVXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IE1lZGlhUGxheWVyUHJpdmF0ZVdpbkNFX2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlV2lu
Q0VfaAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgSW50UmVjdDsKLQot
ICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7Ci0KLSAgICAgICAgfk1lZGlhUGxheWVyUHJp
dmF0ZSgpOwotCi0gICAgICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKLSAgICAgICAg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcm
IHVybCk7Ci0gICAgICAgIHZvaWQgY2FuY2VsTG9hZCgpOwotCi0gICAgICAgIHZvaWQgcGxheSgp
OwotICAgICAgICB2b2lkIHBhdXNlKCk7Ci0KLSAgICAgICAgYm9vbCBwYXVzZWQoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgZmxvYXQgZHVyYXRpb24o
KSBjb25zdDsKLSAgICAgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZWVrKGZsb2F0IHRpbWUpOwotCi0gICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0gICAg
ICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKLQotICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1N0YXRlOyB9Ci0g
ICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3JlYWR5U3RhdGU7IH0KLQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1l
UmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OwotICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUo
KSBjb25zdDsKLSAgICAgICAgLy8gRklYTUU6IGJ5dGVzTG9hZGVkKCkgc2hvdWxkIGJlIHJlcGxh
Y2VkIHdpdGggZGlkTG9hZGluZ1Byb2dyZXNzKCkgKGJ5IHNvbWVib2R5IHdobyBjYW4gZmluZCB0
aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcykuCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVz
TG9hZGVkKCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKLQot
ICAgICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBJbnRTaXplJik7Ci0KLSAgICAgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAg
IHZvaWQgZGlkRW5kKCk7Ci0KLSAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllclByaXZh
dGUoTWVkaWFQbGF5ZXIqKTsKLQotICAgICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgICAg
ICB2b2lkIGRvU2VlaygpOwotICAgICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICAgICAgdm9p
ZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7Ci0gICAgICAgIGZs
b2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzYXdVbnN1cHBvcnRlZFRy
YWNrcygpOwotCi0gICAgICAgIC8vIGVuZ2luZSBzdXBwb3J0Ci0gICAgICAgIHN0YXRpYyBQYXNz
T3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYg
dHlwZXMpOwotICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0
c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOwotICAgICAgICBzdGF0
aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuZ2luZURl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gIldpbkNFIjsgfQotCi0gICAgICAgIE1lZGlhUGxh
eWVyKiBtX3BsYXllcjsKLSAgICAgICAgZmxvYXQgbV9zZWVrVG87Ci0gICAgICAgIGZsb2F0IG1f
ZW5kVGltZTsKLSAgICAgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3NlZWtUaW1lcjsK
LSAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKLSAgICAg
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgICAgICB1bnNpZ25l
ZCBtX2VuYWJsZWRUcmFja0NvdW50OwotICAgICAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tDb3Vu
dDsKLSAgICAgICAgYm9vbCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzOwotICAgICAgICBib29sIG1f
c3RhcnRlZFBsYXlpbmc7Ci0gICAgICAgIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICB9OwotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KLSNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZh
dGVXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiOGQxMDQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByb3h5LmgiCi0KLSNpbmNsdWRlICJC
cmlkZ2VKU0MuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oIgot
I2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKLSNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSAiY19jbGFzcy5oIgot
I2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBCaW5kaW5nczsKLXVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7Ci0KLVdlYk1lZGlhUGxheWVyUHJveHk6OldlYk1lZGlhUGxheWVy
UHJveHkoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fbWVkaWFQbGF5ZXIocGxheWVyKQot
ICAgICwgbV9pbml0KGZhbHNlKQotICAgICwgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbihmYWxz
ZSkKLXsKLSAgICBpZiAoIW1faW5pdCkKLSAgICAgICAgaW5pdEVuZ2luZSgpOwotfQotCi1XZWJN
ZWRpYVBsYXllclByb3h5Ojp+V2ViTWVkaWFQbGF5ZXJQcm94eSgpCi17Ci0gICAgbV9pbnN0YW5j
ZS5yZWxlYXNlKCk7Ci19Ci0KLVNjcmlwdEluc3RhbmNlIFdlYk1lZGlhUGxheWVyUHJveHk6OnBs
dWdpbkluc3RhbmNlKCkKLXsKLSAgICBpZiAoIW1faW5zdGFuY2UpIHsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiByID0gZWxlbWVudCgpLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXIgfHwgIXIt
PmlzV2lkZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBGcmFtZSogZnJh
bWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLQotICAgICAgICBSZW5kZXJXaWRn
ZXQqIHJlbmRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KGVsZW1lbnQoKS0+
cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJXaWRnZXQgJiYgcmVuZGVyV2lkZ2V0LT53
aWRnZXQoKSkKLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+c2NyaXB0KCkuY3JlYXRl
U2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1faW5zdGFuY2U7Ci19Ci0KLXZvaWQgV2ViTWVkaWFQbGF5ZXJQcm94eTo6
bG9hZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoIW1faW5pdCkKLSAgICAgICAgaW5p
dEVuZ2luZSgpOwotICAgIGlmIChtX2luaXQpCi0gICAgICAgIGludm9rZU1ldGhvZCgicGxheSIp
OwotfQotCi12b2lkIFdlYk1lZGlhUGxheWVyUHJveHk6OmluaXRFbmdpbmUoKQotewotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobV9tZWRpYVBsYXll
ci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7Ci0gICAgU3RyaW5nIHVybCA9IGVsZW1lbnQtPmluaXRp
YWxVUkwoKTsKLQotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgVmVjdG9y
PFN0cmluZz4gcGFyYW1OYW1lczsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKLSAg
ICBTdHJpbmcgc2VydmljZVR5cGU7Ci0KLSAgICAvLyBhZGQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9u
IHRoZSBlbWJlZCBvYmplY3QKLSAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKSB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgp
OyArK2kpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBlbGVtZW50LT5hdHRyaWJ1dGVJ
dGVtKGkpOwotICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5h
bWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVl
KCkuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNlcnZpY2VUeXBlID0gImFwcGxp
Y2F0aW9uL3gtbXBsYXllcjIiOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIo
KS0+cmVxdWVzdE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4oZWxlbWVudC0+
cmVuZGVyZXIoKSksIHVybCwgbnVsbEF0b20sIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJh
bVZhbHVlcyk7Ci0gICAgbV9pbml0ID0gdHJ1ZTsKLQotfQotCi1IVE1MTWVkaWFFbGVtZW50KiBX
ZWJNZWRpYVBsYXllclByb3h5OjplbGVtZW50KCkKLXsKLSAgICByZXR1cm4gdG9IVE1MTWVkaWFF
bGVtZW50KG1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOwotCi19Ci0KLXZvaWQg
V2ViTWVkaWFQbGF5ZXJQcm94eTo6aW52b2tlTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kTmFt
ZSkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKTsK
LSAgICBSb290T2JqZWN0KiByb290ID0gZnJhbWUtPnNjcmlwdCgpLmJpbmRpbmdSb290T2JqZWN0
KCk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0gICAgRXhlY1N0YXRlICpleGVj
ID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBJbnN0YW5jZSogaW5z
dGFuY2UgPSBwbHVnaW5JbnN0YW5jZSgpLmdldCgpOwotICAgIGlmICghaW5zdGFuY2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIENsYXNzICphQ2xhc3Mg
PSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKTsKLSAgICBJZGVudGlmaWVyIGlkZW4oZXhlYywgbWV0aG9k
TmFtZSk7Ci0gICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gYUNsYXNzLT5tZXRob2RzTmFtZWQo
aWRlbiwgaW5zdGFuY2UpOwotICAgIEFyZ0xpc3QgYXJnczsKLSAgICBpbnN0YW5jZS0+aW52b2tl
TWV0aG9kKGV4ZWMsIG1ldGhvZExpc3QgLCBhcmdzKTsKLSAgICBpbnN0YW5jZS0+ZW5kKCk7Ci19
Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE0OTVhMjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJveHlfaAot
I2RlZmluZSBNZWRpYVBsYXllclByb3h5X2gKLQotI2lmIEVOQUJMRShWSURFTykKLQotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIElu
dFJlY3Q7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBNZWRpYVBsYXllcjsKLSAgICBj
bGFzcyBQbHVnaW5WaWV3OwotICAgIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci0KLSAgICBlbnVt
IE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKLSAgICAgICAgTWVkaWFQbGF5ZXJO
b3RpZmljYXRpb25QbGF5UGF1c2VCdXR0b25QcmVzc2VkLAotICAgICAgICBJZGxlLAotICAgICAg
ICBMb2FkaW5nLAotICAgICAgICBMb2FkZWQsCi0gICAgICAgIEZvcm1hdEVycm9yLAotICAgICAg
ICBOZXR3b3JrRXJyb3IsCi0gICAgICAgIERlY29kZUVycm9yCi0gICAgfTsKLQotICAgIGNsYXNz
IFdlYk1lZGlhUGxheWVyUHJveHkgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2ViTWVkaWFQbGF5
ZXJQcm94eShNZWRpYVBsYXllciogcGxheWVyKTsKLSAgICAgICAgfldlYk1lZGlhUGxheWVyUHJv
eHkoKTsKLQotICAgICAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSB7cmV0dXJuIG1fbWVk
aWFQbGF5ZXI7fQotICAgICAgICB2b2lkIGluaXRFbmdpbmUoKTsKLSAgICAgICAgdm9pZCBsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCgp
OwotICAgICAgICB2b2lkIGludm9rZU1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUpOwot
ICAgICAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IHBsdWdpbkluc3RhbmNlKCk7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKLSAg
ICAgICAgYm9vbCBtX2luaXQ7Ci0gICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2lu
VmlldzsKLSAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwotICAgICAgICBT
Y3JpcHRJbnN0YW5jZSBtX2luc3RhbmNlOwotICAgIH07Ci0KLX0KLSNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvUGF0aFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1BhdGhXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYy
Y2U5ZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvUGF0aFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1QYXRoOjpQYXRoKCkKLSAgICA6IG1fcGF0aChuZXcgUGxhdGZvcm1QYXRoKCkp
Ci17Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi0gICAgOiBtX3BhdGgobmV3
IFBsYXRmb3JtUGF0aCgqb3RoZXIubV9wYXRoKSkKLXsKLX0KLQotUGF0aDo6flBhdGgoKQotewot
ICAgIGRlbGV0ZSBtX3BhdGg7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRo
JiBvdGhlcikKLXsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKLSAgICAgICAgZGVsZXRlIG1f
cGF0aDsKLSAgICAgICAgbV9wYXRoID0gbmV3IFBsYXRmb3JtUGF0aCgqb3RoZXIubV9wYXRoKTsK
LSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAotewotICAgIHJldHVybiBt
X3BhdGgtPmNvbnRhaW5zKHBvaW50LCBydWxlKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2xhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIG1fcGF0aC0+dHJhbnNsYXRlKHNpemUpOwot
fQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKLX0KLQotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCi17Ci0gICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOwotfQotCi12b2lk
IFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBtX3BhdGgt
PmFkZExpbmVUbyhwb2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgbV9wYXRoLT5hZGRR
dWFkQ3VydmVUbyhjcCwgcCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2lu
dCYgcCkKLXsKLSAgICBtX3BhdGgtPmFkZEJlemllckN1cnZlVG8oY3AxLCBjcDIsIHApOwotfQot
Ci12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBv
aW50JiBwMiwgZmxvYXQgcmFkaXVzKQotewotICAgIG1fcGF0aC0+YWRkQXJjVG8ocDEsIHAyLCBy
YWRpdXMpOwotfQotCi12b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCi17Ci0gICAgbV9wYXRoLT5j
bG9zZVN1YnBhdGgoKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYg
cCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsK
LSAgICBtX3BhdGgtPmFkZEVsbGlwc2UocCwgciwgciwgc2FyLCBlYXIsIGFudGljbG9ja3dpc2Up
OwotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG1f
cGF0aC0+YWRkUmVjdChyKTsKLX0KLQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcikKLXsKLSAgICBtX3BhdGgtPmFkZEVsbGlwc2Uocik7Ci19Ci0KLXZvaWQgUGF0aDo6
YWRkUGF0aChjb25zdCBQYXRoJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmNsZWFyKCkKLXsKLSAgICBtX3BhdGgtPmNs
ZWFyKCk7Ci19Ci0KLWJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGF0aC0+aXNFbXB0eSgpOwotfQotCi12b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhB
cHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgbV9wYXRoLT5hcHBseShpbmZv
LCBmdW5jdGlvbik7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdCkKLXsKLSAgICBtX3BhdGgtPnRyYW5zZm9ybSh0KTsKLX0KLQotRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi1ib29sIFBh
dGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0Ci17Ci0gICAgLy8gTm90IHN1cmUg
aWYgdGhpcyBpcyBjb3JyZWN0LiBBdCB0aGUgbWVhbnRpbWUsIHdlIGRvIHdoYXQgb3RoZXIgcG9y
dHMKLSAgICAvLyBkby4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3MjY2LAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzE4NywgYW5kIAotICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzQ1ODczCi0gICAgcmV0dXJuICFpc0VtcHR5KCk7Ci19Ci0KLUZsb2F0UG9pbnQgUGF0aDo6
Y3VycmVudFBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYXRoLT5sYXN0UG9pbnQoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTc5ZDkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc3MiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0y
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJXaW5DRUdyYXBoaWNzRXh0cmFzLmgiCi0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSW1wbGVtZW50ZWQgaW4gR3JhcGhpY3NDb250ZXh0V2lu
Q0UuY3BwCi12b2lkIGdldEVsbGlwc2VQb2ludEJ5QW5nbGUoZG91YmxlIGFuZ2xlLCBkb3VibGUg
YSwgZG91YmxlIGIsIGZsb2F0JiB4LCBmbG9hdCYgeSk7Ci0KLXN0YXRpYyB2b2lkIHF1YWRDdXJ2
ZShpbnQgc2VnbWVudHMsIFZlY3RvcjxQYXRoUG9pbnQ+JiBwdHMsIGNvbnN0IFBhdGhQb2ludCog
Y29udHJvbCkKLXsKLSAgICBjb25zdCBmbG9hdCBzdGVwID0gMS4wIC8gc2VnbWVudHM7Ci0gICAg
cmVnaXN0ZXIgZmxvYXQgdEEgPSAwLjA7Ci0gICAgcmVnaXN0ZXIgZmxvYXQgdEIgPSAxLjA7Ci0K
LSAgICBmbG9hdCBjMXggPSBjb250cm9sWzBdLngoKTsKLSAgICBmbG9hdCBjMXkgPSBjb250cm9s
WzBdLnkoKTsKLSAgICBmbG9hdCBjMnggPSBjb250cm9sWzFdLngoKTsKLSAgICBmbG9hdCBjMnkg
PSBjb250cm9sWzFdLnkoKTsKLSAgICBmbG9hdCBjM3ggPSBjb250cm9sWzJdLngoKTsKLSAgICBm
bG9hdCBjM3kgPSBjb250cm9sWzJdLnkoKTsKLQotICAgIGNvbnN0IGludCBvZmZzZXQgPSBwdHMu
c2l6ZSgpOwotICAgIHB0cy5yZXNpemUob2Zmc2V0ICsgc2VnbWVudHMpOwotICAgIFBhdGhQb2lu
dCBwcDsKLSAgICBwcC5tX3ggPSBjMXg7Ci0gICAgcHAubV95ID0gYzF5OwotCi0gICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBzZWdtZW50czsgKytpKSB7Ci0gICAgICAgIHRBICs9IHN0ZXA7Ci0gICAg
ICAgIHRCIC09IHN0ZXA7Ci0KLSAgICAgICAgY29uc3QgZmxvYXQgYSA9IHRCICogdEI7Ci0gICAg
ICAgIGNvbnN0IGZsb2F0IGIgPSAyLjAgKiB0QSAqIHRCOwotICAgICAgICBjb25zdCBmbG9hdCBj
ID0gdEEgKiB0QTsKLQotICAgICAgICBwcC5tX3ggPSBjMXggKiBhICsgYzJ4ICogYiArIGMzeCAq
IGM7Ci0gICAgICAgIHBwLm1feSA9IGMxeSAqIGEgKyBjMnkgKiBiICsgYzN5ICogYzsKLQotICAg
ICAgICBwdHNbb2Zmc2V0ICsgaSAtIDFdID0gcHA7Ci0gICAgfQotCi0gICAgcHAubV94ID0gYzN4
OwotICAgIHBwLm1feSA9IGMzeTsKLSAgICBwdHNbb2Zmc2V0ICsgc2VnbWVudHMgLSAxXSA9IHBw
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmV6aWVyKGludCBzZWdtZW50cywgVmVjdG9yPFBh
dGhQb2ludD4mIHB0cywgY29uc3QgUGF0aFBvaW50KiBjb250cm9sKQotewotICAgIGNvbnN0IGZs
b2F0IHN0ZXAgPSAxLjAgLyBzZWdtZW50czsKLSAgICByZWdpc3RlciBmbG9hdCB0QSA9IDAuMDsK
LSAgICByZWdpc3RlciBmbG9hdCB0QiA9IDEuMDsKLQotICAgIGZsb2F0IGMxeCA9IGNvbnRyb2xb
MF0ueCgpOwotICAgIGZsb2F0IGMxeSA9IGNvbnRyb2xbMF0ueSgpOwotICAgIGZsb2F0IGMyeCA9
IGNvbnRyb2xbMV0ueCgpOwotICAgIGZsb2F0IGMyeSA9IGNvbnRyb2xbMV0ueSgpOwotICAgIGZs
b2F0IGMzeCA9IGNvbnRyb2xbMl0ueCgpOwotICAgIGZsb2F0IGMzeSA9IGNvbnRyb2xbMl0ueSgp
OwotICAgIGZsb2F0IGM0eCA9IGNvbnRyb2xbM10ueCgpOwotICAgIGZsb2F0IGM0eSA9IGNvbnRy
b2xbM10ueSgpOwotCi0gICAgY29uc3QgaW50IG9mZnNldCA9IHB0cy5zaXplKCk7Ci0gICAgcHRz
LnJlc2l6ZShvZmZzZXQgKyBzZWdtZW50cyk7Ci0gICAgUGF0aFBvaW50IHBwOwotICAgIHBwLm1f
eCA9IGMxeDsKLSAgICBwcC5tX3kgPSBjMXk7Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHNl
Z21lbnRzOyArK2kpIHsKLSAgICAgICAgdEEgKz0gc3RlcDsKLSAgICAgICAgdEIgLT0gc3RlcDsK
LSAgICAgICAgY29uc3QgZmxvYXQgdEFzcSA9IHRBICogdEE7Ci0gICAgICAgIGNvbnN0IGZsb2F0
IHRCc3EgPSB0QiAqIHRCOwotCi0gICAgICAgIGNvbnN0IGZsb2F0IGEgPSB0QnNxICogdEI7Ci0g
ICAgICAgIGNvbnN0IGZsb2F0IGIgPSAzLjAgKiB0QSAqIHRCc3E7Ci0gICAgICAgIGNvbnN0IGZs
b2F0IGMgPSAzLjAgKiB0QiAqIHRBc3E7Ci0gICAgICAgIGNvbnN0IGZsb2F0IGQgPSB0QXNxICog
dEE7Ci0KLSAgICAgICAgcHAubV94ID0gYzF4ICogYSArIGMyeCAqIGIgKyBjM3ggKiBjICsgYzR4
ICogZDsKLSAgICAgICAgcHAubV95ID0gYzF5ICogYSArIGMyeSAqIGIgKyBjM3kgKiBjICsgYzR5
ICogZDsKLQotICAgICAgICBwdHNbb2Zmc2V0ICsgaSAtIDFdID0gcHA7Ci0gICAgfQotCi0gICAg
cHAubV94ID0gYzR4OwotICAgIHBwLm1feSA9IGM0eTsKLSAgICBwdHNbb2Zmc2V0ICsgc2VnbWVu
dHMgLSAxXSA9IHBwOwotfQotCi1zdGF0aWMgYm9vbCBjb250YWluc1BvaW50KGNvbnN0IEZsb2F0
UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gcC54KCkgPj0gci54
KCkgJiYgcC55KCkgPj0gci55KCkgJiYgcC54KCkgPCByLm1heFgoKSAmJiBwLnkoKSA8IHIubWF4
WSgpOwotfQotCi1zdGF0aWMgdm9pZCBub3JtYWxpemVBbmdsZShmbG9hdCYgYW5nbGUpCi17Ci0g
ICAgYW5nbGUgPSBmbW9kKGFuZ2xlLCAyICogcGlGbG9hdCk7Ci0gICAgaWYgKGFuZ2xlIDwgMCkK
LSAgICAgICAgYW5nbGUgKz0gMiAqIHBpRmxvYXQ7Ci0gICAgaWYgKGFuZ2xlIDwgMC4wMDAwMWYp
Ci0gICAgICAgIGFuZ2xlID0gMDsKLX0KLQotc3RhdGljIHZvaWQgdHJhbnNmb3JtQXJjUG9pbnQo
ZmxvYXQmIHgsIGZsb2F0JiB5LCBjb25zdCBGbG9hdFBvaW50JiBjKQotewotICAgIHggKz0gYy54
KCk7Ci0gICAgeSArPSBjLnkoKTsKLX0KLQotc3RhdGljIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRh
aW5Qb2ludChGbG9hdFJlY3QmIHIsIGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaWYgKHIuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHIuc2V0WCh4KTsKLSAgICAgICAgci5zZXRZKHkpOwotICAgICAg
ICByLnNldFNpemUoRmxvYXRTaXplKDEsIDEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoeCA8IHIueCgpKSB7Ci0gICAgICAgIHIuc2V0V2lkdGgoci5tYXhYKCkgLSB4KTsKLSAg
ICAgICAgci5zZXRYKHgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IHcgPSB4IC0gci54
KCkgKyAxOwotICAgICAgICBpZiAodyA+IHIud2lkdGgoKSkKLSAgICAgICAgICAgIHIuc2V0V2lk
dGgodyk7Ci0gICAgfQotICAgIGlmICh5IDwgci55KCkpIHsKLSAgICAgICAgci5zZXRIZWlnaHQo
ci5tYXhZKCkgLSB5KTsKLSAgICAgICAgci5zZXRZKHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZsb2F0IGggPSAgeSAtIHIueSgpICsgMTsKLSAgICAgICAgaWYgKGggPiByLmhlaWdodCgpKQot
ICAgICAgICAgICAgci5zZXRIZWlnaHQoaCk7Ci0gICAgfQotfQotCi0vLyByZXR1cm4gMC1iYXNl
ZCB2YWx1ZTogMCAtIGZpcnN0IFF1YWRyYW50ICggMCAtIDkwIGRlZ3JlZSkKLXN0YXRpYyBpbmxp
bmUgaW50IHF1YWRyYW50KGNvbnN0IFBhdGhQb2ludCYgcG9pbnQsIGNvbnN0IFBhdGhQb2ludCYg
b3JpZ2luKQotewotICAgIHJldHVybiBwb2ludC5tX3ggPCBvcmlnaW4ubV94ID8KLSAgICAgICAg
KHBvaW50Lm1feSA8IG9yaWdpbi5tX3kgPyAyIDogMSkKLSAgICAgICAgOiAocG9pbnQubV95IDwg
b3JpZ2luLm1feSA/IDMgOiAwKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUXVhZHJhbnRP
bkxlZnQoaW50IHEpIHsgcmV0dXJuIHEgPT0gMSB8fCBxID09IDI7IH0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1F1YWRyYW50T25SaWdodChpbnQgcSkgeyByZXR1cm4gcSA9PSAwIHx8IHEgPT0gMzsg
fQotc3RhdGljIGlubGluZSBib29sIGlzUXVhZHJhbnRPblRvcChpbnQgcSkgeyByZXR1cm4gcSA9
PSAyIHx8IHEgPT0gMzsgfQotc3RhdGljIGlubGluZSBib29sIGlzUXVhZHJhbnRPbkJvdHRvbShp
bnQgcSkgeyByZXR1cm4gcSA9PSAwIHx8IHEgPT0gMTsgfQotCi1zdGF0aWMgaW5saW5lIGludCBu
ZXh0UXVhZHJhbnQoaW50IHEpIHsgcmV0dXJuIHEgPT0gMyA/IDAgOiBxICsgMTsgfQotc3RhdGlj
IGlubGluZSBpbnQgcXVhZHJhbnREaWZmKGludCBxMSwgaW50IHEyKQotewotICAgIGludCBkID0g
cTEgLSBxMjsKLSAgICB3aGlsZSAoZCA8IDApCi0gICAgICAgIGQgKz0gNDsKLSAgICByZXR1cm4g
ZDsKLX0KLQotc3RydWN0IFBhdGhWZWN0b3IgewotICAgIGZsb2F0IG1feDsKLSAgICBmbG9hdCBt
X3k7Ci0KLSAgICBQYXRoVmVjdG9yKCkgOiBtX3goMCksIG1feSgwKSB7fQotICAgIFBhdGhWZWN0
b3IoZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7fQotICAgIGRvdWJsZSBhbmds
ZSgpIGNvbnN0IHsgcmV0dXJuIGF0YW4yKG1feSwgbV94KTsgfQotICAgIG9wZXJhdG9yIGRvdWJs
ZSAoKSBjb25zdCB7IHJldHVybiBhbmdsZSgpOyB9Ci0gICAgZG91YmxlIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIF9oeXBvdChtX3gsIG1feSk7IH0KLX07Ci0KLVBhdGhWZWN0b3Igb3BlcmF0b3It
KGNvbnN0IFBhdGhQb2ludCYgcDEsIGNvbnN0IFBhdGhQb2ludCYgcDIpCi17Ci0gICAgcmV0dXJu
IFBhdGhWZWN0b3IocDEubV94IC0gcDIubV94LCBwMS5tX3kgLSBwMi5tX3kpOwotfQotCi1zdGF0
aWMgdm9pZCBhZGRBcmNQb2ludChQYXRoUG9seWdvbiYgcG9seSwgY29uc3QgUGF0aFBvaW50JiBj
ZW50ZXIsIGNvbnN0IFBhdGhQb2ludCYgcmFkaXVzLCBkb3VibGUgYW5nbGUpCi17Ci0gICAgUGF0
aFBvaW50IHA7Ci0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShhbmdsZSwgcmFkaXVzLm1feCwg
cmFkaXVzLm1feSwgcC5tX3gsIHAubV95KTsKLSAgICB0cmFuc2Zvcm1BcmNQb2ludChwLm1feCwg
cC5tX3ksIGNlbnRlcik7Ci0gICAgaWYgKHBvbHkuaXNFbXB0eSgpIHx8IHBvbHkubGFzdCgpICE9
IHApCi0gICAgICAgIHBvbHkuYXBwZW5kKHApOwotfQotCi1zdGF0aWMgdm9pZCBhZGRBcmNQb2lu
dHMoUGF0aFBvbHlnb24mIHBvbHksIGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkFyY1RvJiBk
YXRhKQotewotICAgIGNvbnN0IFBhdGhQb2ludCYgc3RhcnRQb2ludCA9IHBvbHkubGFzdCgpOwot
ICAgIGRvdWJsZSBjdXJBbmdsZSA9IHN0YXJ0UG9pbnQgLSBkYXRhLm1fY2VudGVyOwotICAgIGRv
dWJsZSBlbmRBbmdsZSA9IGRhdGEubV9lbmQgLSBkYXRhLm1fY2VudGVyOwotICAgIGRvdWJsZSBh
bmdsZVN0ZXAgPSAyLiAvIHN0ZDo6bWF4KGRhdGEubV9yYWRpdXMubV94LCBkYXRhLm1fcmFkaXVz
Lm1feSk7Ci0gICAgaWYgKGRhdGEubV9jbG9ja3dpc2UpIHsKLSAgICAgICAgaWYgKGVuZEFuZ2xl
IDw9IGN1ckFuZ2xlIHx8IHN0YXJ0UG9pbnQgPT0gZGF0YS5tX2VuZCkKLSAgICAgICAgICAgIGVu
ZEFuZ2xlICs9IDIgKiBwaURvdWJsZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhbmdsZVN0ZXAg
PSAtYW5nbGVTdGVwOwotICAgICAgICBpZiAoZW5kQW5nbGUgPj0gY3VyQW5nbGUgfHwgc3RhcnRQ
b2ludCA9PSBkYXRhLm1fZW5kKQotICAgICAgICAgICAgZW5kQW5nbGUgLT0gMiAqIHBpRG91Ymxl
OwotICAgIH0KLQotICAgIGZvciAoY3VyQW5nbGUgKz0gYW5nbGVTdGVwOyBkYXRhLm1fY2xvY2t3
aXNlID8gY3VyQW5nbGUgPCBlbmRBbmdsZSA6IGN1ckFuZ2xlID4gZW5kQW5nbGU7IGN1ckFuZ2xl
ICs9IGFuZ2xlU3RlcCkKLSAgICAgICAgYWRkQXJjUG9pbnQocG9seSwgZGF0YS5tX2NlbnRlciwg
ZGF0YS5tX3JhZGl1cywgY3VyQW5nbGUpOwotCi0gICAgaWYgKHBvbHkuaXNFbXB0eSgpIHx8IHBv
bHkubGFzdCgpICE9IGRhdGEubV9lbmQpCi0gICAgICAgIHBvbHkuYXBwZW5kKGRhdGEubV9lbmQp
OwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UG9seWdvbnMoSERDIGRjLCBjb25zdCBWZWN0b3I8UGF0
aFBvbHlnb24+JiBwb2x5Z29ucywgYm9vbCBmaWxsLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0qIHRy
YW5zZm9ybWF0aW9uKQotewotICAgIGZvciAoVmVjdG9yPFBhdGhQb2x5Z29uPjo6Y29uc3RfaXRl
cmF0b3IgaSA9IHBvbHlnb25zLmJlZ2luKCk7IGkgIT0gcG9seWdvbnMuZW5kKCk7ICsraSkgewot
ICAgICAgICBpbnQgbnBvaW50cyA9IGktPnNpemUoKTsKLSAgICAgICAgaWYgKCFucG9pbnRzKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUE9JTlQqIHdpblBvaW50cyA9IDA7Ci0g
ICAgICAgIGlmIChmaWxsKSB7Ci0gICAgICAgICAgICBpZiAobnBvaW50cyA+IDIpCi0gICAgICAg
ICAgICAgICAgd2luUG9pbnRzID0gbmV3IFBPSU5UW25wb2ludHMgKyAxXTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB3aW5Qb2ludHMgPSBuZXcgUE9JTlRbbnBvaW50c107Ci0KLSAgICAg
ICAgaWYgKHdpblBvaW50cykgewotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8IG5wb2ludHM7ICsraTIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCB0clBvaW50ID0gdHJhbnNmb3JtYXRpb24tPm1h
cFBvaW50KGktPmF0KGkyKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50c1tpMl0ueCA9
IHN0YWJsZVJvdW5kKHRyUG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9pbnRz
W2kyXS55ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8
IG5wb2ludHM7ICsraTIpIHsKLSAgICAgICAgICAgICAgICAgICAgd2luUG9pbnRzW2kyXS54ID0g
c3RhYmxlUm91bmQoaS0+YXQoaTIpLngoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdpblBvaW50
c1tpMl0ueSA9IHN0YWJsZVJvdW5kKGktPmF0KGkyKS55KCkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpbGwgJiYgd2luUG9pbnRzW25wb2lu
dHMgLSAxXSAhPSB3aW5Qb2ludHNbMF0pIHsKLSAgICAgICAgICAgICAgICB3aW5Qb2ludHNbbnBv
aW50c10ueCA9IHdpblBvaW50c1swXS54OwotICAgICAgICAgICAgICAgIHdpblBvaW50c1tucG9p
bnRzXS55ID0gd2luUG9pbnRzWzBdLnk7Ci0gICAgICAgICAgICAgICAgKytucG9pbnRzOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmlsbCkKLSAgICAgICAgICAgICAgICA6OlBv
bHlnb24oZGMsIHdpblBvaW50cywgbnBvaW50cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgOjpQb2x5bGluZShkYywgd2luUG9pbnRzLCBucG9pbnRzKTsKLSAgICAgICAgICAg
IGRlbGV0ZVtdIHdpblBvaW50czsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi1pbnQgUGxhdGZv
cm1QYXRoRWxlbWVudDo6bnVtQ29udHJvbFBvaW50cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICBjYXNlIFBhdGhNb3ZlVG86Ci0gICAgY2FzZSBQYXRoTGluZVRvOgotICAg
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAgICBjYXNlIFBhdGhB
cmNUbzoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBQYXRoQmV6aWVyQ3VydmVUbzoKLSAg
ICAgICAgcmV0dXJuIDM7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQ
YXRoQ2xvc2VTdWJwYXRoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUGxh
dGZvcm1QYXRoRWxlbWVudDo6bnVtUG9pbnRzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fdHlw
ZSkgewotICAgIGNhc2UgUGF0aE1vdmVUbzoKLSAgICBjYXNlIFBhdGhMaW5lVG86Ci0gICAgY2Fz
ZSBQYXRoQXJjVG86Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgUGF0aFF1YWRDdXJ2ZVRv
OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFBhdGhCZXppZXJDdXJ2ZVRvOgotICAgICAg
ICByZXR1cm4gMzsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQobV90eXBlID09IFBhdGhD
bG9zZVN1YnBhdGgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgUGF0aFBv
bHlnb246Om1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi17Ci0gICAgZm9yIChWZWN0b3I8
UGF0aFBvaW50Pjo6aXRlcmF0b3IgaSA9IGJlZ2luKCk7IGkgPCBlbmQoKTsgKytpKQotICAgICAg
ICBpLT5tb3ZlKG9mZnNldCk7Ci19Ci0KLXZvaWQgUGF0aFBvbHlnb246OnRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi17Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvaW50Pjo6aXRl
cmF0b3IgaSA9IGJlZ2luKCk7IGkgPCBlbmQoKTsgKytpKQotICAgICAgICAqaSA9IHQubWFwUG9p
bnQoKmkpOwotfQotCi1ib29sIFBhdGhQb2x5Z29uOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgpIDwgMykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gVGVzdCBpbnRlcnNlY3Rpb25zIGJldHdlZW4gdGhlIHBvbHlnb24gYW5k
IHRoZSB2ZXJ0aWNhbCBsaW5lOiB4ID0gcG9pbnQueCgpCi0KLSAgICBpbnQgaW50ZXJzZWN0ZWQg
PSAwOwotICAgIGNvbnN0IFBhdGhQb2ludCogcG9pbnQxID0gJmxhc3QoKTsKLSAgICBWZWN0b3I8
UGF0aFBvaW50Pjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGVuZCgpOwotICAgIC8vIHdhc05lZ2F0
aXZlOiAtMSBtZWFucyB1bmtub3duLCAwIG1lYW5zIGZhbHNlLCAxIG1lYW5zIHRydWUuCi0gICAg
aW50IHdhc05lZ2F0aXZlID0gLTE7Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvaW50Pjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IGJlZ2luKCk7IGkgIT0gbGFzdDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFBh
dGhQb2ludCYgcG9pbnQyID0gKmk7Ci0gICAgICAgIGlmIChwb2ludDEtPngoKSAhPSBwb2ludC54
KCkpIHsKLSAgICAgICAgICAgIGlmIChwb2ludDIueCgpID09IHBvaW50LngoKSkgewotICAgICAg
ICAgICAgICAgIC8vIFdlIGFyZSBnZXR0aW5nIG9uIHRoZSB2ZXJ0aWNhbCBsaW5lCi0gICAgICAg
ICAgICAgICAgd2FzTmVnYXRpdmUgPSBwb2ludDEtPngoKSA8IHBvaW50LngoKSA/IDEgOiAwOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChwb2ludDIueCgpIDwgcG9pbnQueCgpICE9IHBvaW50MS0+
eCgpIDwgcG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgeSA9IChwb2ludDIueSgp
IC0gcG9pbnQxLT55KCkpIC8gKHBvaW50Mi54KCkgLSBwb2ludDEtPngoKSkgKiAocG9pbnQueCgp
IC0gcG9pbnQxLT54KCkpICsgcG9pbnQxLT55KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHkgPj0g
cG9pbnQueSgpKQotICAgICAgICAgICAgICAgICAgICArK2ludGVyc2VjdGVkOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugd2VyZSBvbiB0aGUgdmVy
dGljYWwgbGluZQotCi0gICAgICAgICAgICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlCi0gICAgICAg
ICAgICBpZiAocG9pbnQxLT55KCkgPT0gcG9pbnQueSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgICAgICAgICBpZiAocG9pbnQxLT55KCkgPiBwb2ludC55KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAocG9pbnQyLngoKSA9PSBwb2ludC54KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc2VlIGlmIHRoZSBwb2ludCBpcyBvbiB0aGlzIHNlZ21lbnQKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHBvaW50Mi55KCkgPD0gcG9pbnQueSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHN0
aWxsIG9uIHRoZSBsaW5lCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgYXJlIGxlYXZpbmcgdGhlIGxpbmUgbm93LgotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIGdldCBiYWNrIHRvIHNlZSB3aGljaCBzaWRlIHdlIGNvbWUgZnJvbS4g
SWYgd2UgY29tZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIHNpZGUgd2Ug
YXJlIGxlYXZpbmcsIG5vIGludGVyc2VjdGlvbiBzaG91bGQgYmUgY291bnRlZAotICAgICAgICAg
ICAgICAgICAgICBpZiAod2FzTmVnYXRpdmUgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8UGF0aFBvaW50Pjo6Y29uc3RfaXRlcmF0b3Igakxhc3QgPSBpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPFBhdGhQb2ludD46OmNvbnN0X2l0ZXJhdG9yIGogPSBpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChqID09IGJlZ2luKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBs
YXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLS1qOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqLT54
KCkgIT0gcG9pbnQueCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChq
LT54KCkgPiBwb2ludC54KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
YXNOZWdhdGl2ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc05lZ2F0aXZlID0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaiAhPSBqTGFzdCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNOZWdhdGl2ZSA8IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh3YXNOZWdhdGl2ZSA/IHBvaW50Mi54KCkgPiBwb2ludC54
KCkgOiBwb2ludDIueCgpIDwgcG9pbnQueCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgKytp
bnRlcnNlY3RlZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBv
aW50Mi54KCkgPT0gcG9pbnQueCgpICYmIHBvaW50Mi55KCkgPj0gcG9pbnQueSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHBvaW50MSA9ICZwb2lu
dDI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGludGVyc2VjdGVkICYgMTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVBhdGhFbGVtZW50Ojptb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotewotICAgIGlu
dCBuID0gbnVtQ29udHJvbFBvaW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytp
KQotICAgICAgICBtX2RhdGEubV9wb2ludHNbaV0ubW92ZShvZmZzZXQpOwotfQotCi12b2lkIFBs
YXRmb3JtUGF0aEVsZW1lbnQ6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi17
Ci0gICAgaW50IG4gPSBudW1Db250cm9sUG9pbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuOyArK2kpIHsKLSAgICAgICAgRmxvYXRQb2ludCBwID0gdC5tYXBQb2ludChtX2RhdGEubV9w
b2ludHNbaV0pOwotICAgICAgICBtX2RhdGEubV9wb2ludHNbaV0uc2V0KHAueCgpLCBwLnkoKSk7
Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OmluZmxhdGVSZWN0VG9Db250
YWluTWUoRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFBvaW50JiBsYXN0UG9pbnQpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fdHlwZSA9PSBQYXRoQXJjVG8pIHsKLSAgICAgICAgY29uc3QgQXJjVG8mIGRh
dGEgPSBtX2RhdGEubV9hcmNUb0RhdGE7Ci0gICAgICAgIFBhdGhQb2ludCBzdGFydFBvaW50Owot
ICAgICAgICBzdGFydFBvaW50ID0gbGFzdFBvaW50OwotICAgICAgICBQYXRoUG9pbnQgZW5kUG9p
bnQgPSBkYXRhLm1fZW5kOwotICAgICAgICBpZiAoIWRhdGEubV9jbG9ja3dpc2UpCi0gICAgICAg
ICAgICBzdGQ6OnN3YXAoc3RhcnRQb2ludCwgZW5kUG9pbnQpOwotCi0gICAgICAgIGludCBxMCA9
IHF1YWRyYW50KHN0YXJ0UG9pbnQsIGRhdGEubV9jZW50ZXIpOwotICAgICAgICBpbnQgcTEgPSBx
dWFkcmFudChlbmRQb2ludCwgZGF0YS5tX2NlbnRlcik7Ci0gICAgICAgIGJvb2wgY29udGFpbnNF
eHRyZW1lc1s0XSA9IHsgZmFsc2UgfTsgLy8gYm90dG9tLCBsZWZ0LCB0b3AsIHJpZ2h0Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBQYXRoUG9pbnQgZXh0cmVtZVZlY3RvcnNbNF0gPSB7IHsgMCwgMSB9
LCB7IC0xLCAwIH0sIHsgMCwgLTEgfSwgeyAxLCAwIH0gfTsKLSAgICAgICAgaWYgKHEwID09IHEx
KSB7Ci0gICAgICAgICAgICBpZiAoc3RhcnRQb2ludC5tX3ggPT0gZW5kUG9pbnQubV94IHx8IGlz
UXVhZHJhbnRPbkJvdHRvbShxMCkgIT0gc3RhcnRQb2ludC5tX3ggPiBlbmRQb2ludC5tX3gpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGFpbnNFeHRyZW1lc1tpXSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgZXh0cmVtZSA9IHEwOwotICAgICAgICAgICAg
aW50IGRpZmYgPSBxdWFkcmFudERpZmYocTEsIHEwKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZGlmZjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29udGFpbnNFeHRyZW1lc1tl
eHRyZW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZXh0cmVtZSA9IG5leHRRdWFkcmFudChl
eHRyZW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGluZmxhdGVSZWN0
VG9Db250YWluUG9pbnQociwgc3RhcnRQb2ludC5tX3gsIHN0YXJ0UG9pbnQubV95KTsKLSAgICAg
ICAgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Qb2ludChyLCBlbmRQb2ludC5tX3gsIGVuZFBvaW50Lm1f
eSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoY29udGFpbnNFeHRyZW1lc1tpXSkKLSAgICAgICAgICAgICAgICBpbmZsYXRlUmVjdFRvQ29u
dGFpblBvaW50KHIsIGRhdGEubV9jZW50ZXIubV94ICsgZGF0YS5tX3JhZGl1cy5tX3ggKiBleHRy
ZW1lVmVjdG9yc1tpXS5tX3gsIGRhdGEubV9jZW50ZXIubV95ICsgZGF0YS5tX3JhZGl1cy5tX3kg
KiBleHRyZW1lVmVjdG9yc1tpXS5tX3kpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaW50IG4gPSBudW1Qb2ludHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyAr
K2kpCi0gICAgICAgICAgICBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KHIsIG1fZGF0YS5tX3Bv
aW50c1tpXS5tX3gsIG1fZGF0YS5tX3BvaW50c1tpXS5tX3kpOwotICAgIH0KLX0KLQotUGF0aEVs
ZW1lbnRUeXBlIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHN3aXRj
aCAobV90eXBlKSB7Ci0gICAgY2FzZSBQYXRoTW92ZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVs
ZW1lbnRNb3ZlVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhMaW5lVG86Ci0gICAgICAgIHJldHVybiBQ
YXRoRWxlbWVudEFkZExpbmVUb1BvaW50OwotICAgIGNhc2UgUGF0aEFyY1RvOgotICAgICAgICAv
LyBGSVhNRTogdGhlcmUncyBubyBhcmNUbyB0eXBlIGZvciBQYXRoRWxlbWVudAotICAgICAgICBy
ZXR1cm4gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDsKLSAgICAgICAgLy8gcmV0dXJuIFBhdGhF
bGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDsKLSAgICBjYXNlIFBhdGhRdWFkQ3VydmVUbzoKLSAg
ICAgICAgcmV0dXJuIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDsKLSAgICBjYXNlIFBh
dGhCZXppZXJDdXJ2ZVRvOgotICAgICAgICByZXR1cm4gUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQYXRoQ2xvc2VTdWJw
YXRoKTsKLSAgICAgICAgcmV0dXJuIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOwotICAgIH0KLX0K
LQotUGxhdGZvcm1QYXRoOjpQbGF0Zm9ybVBhdGgoKQotICAgIDogbV9wZW5MaWZ0ZWQodHJ1ZSkK
LXsKLSAgICBtX2N1cnJlbnRQb2ludC5jbGVhcigpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aDo6
ZW5zdXJlU3VicGF0aCgpCi17Ci0gICAgaWYgKG1fcGVuTGlmdGVkKSB7Ci0gICAgICAgIG1fcGVu
TGlmdGVkID0gZmFsc2U7Ci0gICAgICAgIG1fc3VicGF0aHMuYXBwZW5kKFBhdGhQb2x5Z29uKCkp
OwotICAgICAgICBtX3N1YnBhdGhzLmxhc3QoKS5hcHBlbmQobV9jdXJyZW50UG9pbnQpOwotICAg
IH0gZWxzZQotICAgICAgICBBU1NFUlQoIW1fc3VicGF0aHMuaXNFbXB0eSgpKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybVBhdGg6OmFkZFRvU3VicGF0aChjb25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBl
KQotewotICAgIGlmIChlLnBsYXRmb3JtVHlwZSgpID09IFBsYXRmb3JtUGF0aEVsZW1lbnQ6OlBh
dGhNb3ZlVG8pIHsKLSAgICAgICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwotICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IGUucG9pbnRBdCgwKTsKLSAgICB9IGVsc2UgaWYgKGUucGxhdGZvcm1UeXBlKCkg
PT0gUGxhdGZvcm1QYXRoRWxlbWVudDo6UGF0aENsb3NlU3VicGF0aCkgewotICAgICAgICBtX3Bl
bkxpZnRlZCA9IHRydWU7Ci0gICAgICAgIGlmICghbV9zdWJwYXRocy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGlmIChtX2N1cnJlbnRQb2ludCAhPSBtX3N1YnBhdGhzLmxhc3QoKVswXSkgewot
ICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBXM0MsIHdlIGhhdmUgdG8gZHJhdyBhIGxp
bmUgZnJvbSBjdXJyZW50IHBvaW50IHRvIHRoZSBpbml0aWFsIHBvaW50Ci0gICAgICAgICAgICAg
ICAgbV9zdWJwYXRocy5sYXN0KCkuYXBwZW5kKG1fc3VicGF0aHMubGFzdCgpWzBdKTsKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IG1fc3VicGF0aHMubGFzdCgpWzBdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50LmNsZWFy
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW5zdXJlU3VicGF0aCgpOwotICAgICAgICBzd2l0
Y2ggKGUucGxhdGZvcm1UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBhdGhFbGVtZW50
OjpQYXRoTGluZVRvOgotICAgICAgICAgICAgbV9zdWJwYXRocy5sYXN0KCkuYXBwZW5kKGUucG9p
bnRBdCgwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVBhdGhF
bGVtZW50OjpQYXRoQXJjVG86Ci0gICAgICAgICAgICBhZGRBcmNQb2ludHMobV9zdWJwYXRocy5s
YXN0KCksIGUuYXJjVG8oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbGF0
Zm9ybVBhdGhFbGVtZW50OjpQYXRoUXVhZEN1cnZlVG86Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgUGF0aFBvaW50IGNvbnRyb2xbXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQsCi0gICAgICAgICAgICAgICAgICAgIGUucG9pbnRBdCgwKSwKLSAgICAgICAg
ICAgICAgICAgICAgZS5wb2ludEF0KDEpLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IG1hZ2ljIG51bWJlcj8KLSAgICAgICAgICAgICAgICBxdWFkQ3VydmUo
NTAsIG1fc3VicGF0aHMubGFzdCgpLCBjb250cm9sKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OlBhdGhCZXppZXJD
dXJ2ZVRvOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBhdGhQb2ludCBjb250cm9s
W10gPSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50LAotICAgICAgICAgICAg
ICAgICAgICBlLnBvaW50QXQoMCksCi0gICAgICAgICAgICAgICAgICAgIGUucG9pbnRBdCgxKSwK
LSAgICAgICAgICAgICAgICAgICAgZS5wb2ludEF0KDIpLAotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IG1hZ2ljIG51bWJlcj8KLSAgICAgICAgICAgICAgICBi
ZXppZXIoMTAwLCBtX3N1YnBhdGhzLmxhc3QoKSwgY29udHJvbCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSBtX3N1YnBhdGhzLmxhc3QoKS5sYXN0KCk7Ci0gICAgfQotfQotCi12b2lk
IFBsYXRmb3JtUGF0aDo6YXBwZW5kKGNvbnN0IFBsYXRmb3JtUGF0aEVsZW1lbnQmIGUpCi17Ci0g
ICAgZS5pbmZsYXRlUmVjdFRvQ29udGFpbk1lKG1fYm91bmRpbmdSZWN0LCBsYXN0UG9pbnQoKSk7
Ci0gICAgYWRkVG9TdWJwYXRoKGUpOwotICAgIG1fZWxlbWVudHMuYXBwZW5kKGUpOwotfQotCi12
b2lkIFBsYXRmb3JtUGF0aDo6YXBwZW5kKGNvbnN0IFBsYXRmb3JtUGF0aCYgcCkKLXsKLSAgICBj
b25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50cyYgZSA9IHAuZWxlbWVudHMoKTsKLSAgICBmb3IgKFBs
YXRmb3JtUGF0aEVsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdChlLmJlZ2luKCkpOyBpdCAhPSBl
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGFkZFRvU3VicGF0aCgqaXQpOwotICAgICAgICBpdC0+
aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShtX2JvdW5kaW5nUmVjdCwgbGFzdFBvaW50KCkpOwotICAg
ICAgICBtX2VsZW1lbnRzLmFwcGVuZCgqaXQpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybVBh
dGg6OmNsZWFyKCkKLXsKLSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci0gICAgbV9ib3VuZGluZ1Jl
Y3QgPSBGbG9hdFJlY3QoKTsKLSAgICBtX3N1YnBhdGhzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50
UG9pbnQuY2xlYXIoKTsKLSAgICBtX3BlbkxpZnRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1QYXRoOjpzdHJva2VQYXRoKEhEQyBkYywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zv
cm1hdGlvbikgY29uc3QKLXsKLSAgICBkcmF3UG9seWdvbnMoZGMsIG1fc3VicGF0aHMsIGZhbHNl
LCB0cmFuc2Zvcm1hdGlvbik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpmaWxsUGF0aChIREMg
ZGMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17Ci0gICAg
SEdESU9CSiBvbGRQZW4gPSBTZWxlY3RPYmplY3QoZGMsIEdldFN0b2NrT2JqZWN0KE5VTExfUEVO
KSk7Ci0gICAgZHJhd1BvbHlnb25zKGRjLCBtX3N1YnBhdGhzLCB0cnVlLCB0cmFuc2Zvcm1hdGlv
bik7Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwotfQotCi12b2lkIFBsYXRmb3JtUGF0
aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBmb3IgKFBsYXRmb3Jt
UGF0aEVsZW1lbnRzOjppdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2Vs
ZW1lbnRzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+bW92ZShzaXplKTsKLQotICAgIG1fYm91
bmRpbmdSZWN0Lm1vdmUoc2l6ZSk7Ci0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHlnb24+OjppdGVy
YXRvciBpdCA9IG1fc3VicGF0aHMuYmVnaW4oKTsgaXQgIT0gbV9zdWJwYXRocy5lbmQoKTsgKytp
dCkKLSAgICAgICAgaXQtPm1vdmUoc2l6ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjp0cmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQotewotICAgIGZvciAoUGxhdGZvcm1QYXRo
RWxlbWVudHM6Oml0ZXJhdG9yIGl0KG1fZWxlbWVudHMuYmVnaW4oKSk7IGl0ICE9IG1fZWxlbWVu
dHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT50cmFuc2Zvcm0odCk7Ci0KLSAgICBtX2JvdW5k
aW5nUmVjdCA9IHQubWFwUmVjdChtX2JvdW5kaW5nUmVjdCk7Ci0gICAgZm9yIChWZWN0b3I8UGF0
aFBvbHlnb24+OjppdGVyYXRvciBpdCA9IG1fc3VicGF0aHMuYmVnaW4oKTsgaXQgIT0gbV9zdWJw
YXRocy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnRyYW5zZm9ybSh0KTsKLX0KLQotYm9vbCBQ
bGF0Zm9ybVBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBy
dWxlKSBjb25zdAotewotICAgIC8vIG9wdGltaXphdGlvbjogY2hlY2sgdGhlIGJvdW5kaW5nIHJl
Y3QgZmlyc3QKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQobV9ib3VuZGluZ1JlY3QsIHBvaW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChWZWN0b3I8UGF0aFBvbHlnb24+Ojpj
b25zdF9pdGVyYXRvciBpID0gbV9zdWJwYXRocy5iZWdpbigpOyBpICE9IG1fc3VicGF0aHMuZW5k
KCk7ICsraSkgewotICAgICAgICBpZiAoaS0+Y29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsYXRm
b3JtUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIFBsYXRmb3Jt
UGF0aEVsZW1lbnQ6Ok1vdmVUbyBkYXRhID0geyB7IHBvaW50LngoKSwgcG9pbnQueSgpIH0gfTsK
LSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1QYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17
Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6TGluZVRvIGRhdGEgPSB7IHsgcG9pbnQueCgpLCBw
b2ludC55KCkgfSB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBw
ZW5kKHBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIFBsYXRmb3JtUGF0aEVs
ZW1lbnQ6OlF1YWRDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AueCgpLCBjcC55KCkgfSwgeyBwLngoKSwg
cC55KCkgfSB9OwotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7Ci0gICAgYXBwZW5k
KHBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxv
YXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAp
Ci17Ci0gICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6QmV6aWVyQ3VydmVUbyBkYXRhID0geyB7IGNw
MS54KCksIGNwMS55KCkgfSwgeyBjcDIueCgpLCBjcDIueSgpIH0sIHsgcC54KCksIHAueSgpIH0g
fTsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBmcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIGZwMiwgZmxvYXQgcmFkaXVzKQotewotICAgIGNvbnN0IFBhdGhQb2lu
dCYgcDAgPSBtX2N1cnJlbnRQb2ludDsKLSAgICBQYXRoUG9pbnQgcDE7Ci0gICAgcDEgPSBmcDE7
Ci0gICAgUGF0aFBvaW50IHAyOwotICAgIHAyID0gZnAyOwotICAgIGlmICghcmFkaXVzIHx8IHAw
ID09IHAxIHx8IHAxID09IHAyKSB7Ci0gICAgICAgIGFkZExpbmVUbyhwMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBQYXRoVmVjdG9yIHYwMSA9IHAwIC0gcDE7Ci0gICAgUGF0aFZl
Y3RvciB2MjEgPSBwMiAtIHAxOwotCi0gICAgLy8gc2luKEEgLSBCKSA9IHNpbihBKSAqIGNvcyhC
KSAtIHNpbihCKSAqIGNvcyhBKQotICAgIGRvdWJsZSBjcm9zcyA9IHYwMS5tX3ggKiB2MjEubV95
IC0gdjAxLm1feSAqIHYyMS5tX3g7Ci0KLSAgICBpZiAoZmFicyhjcm9zcykgPCAxRS0xMCkgewot
ICAgICAgICAvLyBvbiBvbmUgbGluZQotICAgICAgICBhZGRMaW5lVG8ocDEpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZG91YmxlIGQwMSA9IHYwMS5sZW5ndGgoKTsKLSAgICBkb3Vi
bGUgZDIxID0gdjIxLmxlbmd0aCgpOwotICAgIGRvdWJsZSBhbmdsZSA9IChwaURvdWJsZSAtIGZh
YnMoYXNpbihjcm9zcyAvIChkMDEgKiBkMjEpKSkpICogMC41OwotICAgIGRvdWJsZSBzcGFuID0g
cmFkaXVzICogdGFuKGFuZ2xlKTsKLSAgICBkb3VibGUgcmF0ZSA9IHNwYW4gLyBkMDE7Ci0gICAg
UGF0aFBvaW50IHN0YXJ0UG9pbnQ7Ci0gICAgc3RhcnRQb2ludC5tX3ggPSBwMS5tX3ggKyB2MDEu
bV94ICogcmF0ZTsKLSAgICBzdGFydFBvaW50Lm1feSA9IHAxLm1feSArIHYwMS5tX3kgKiByYXRl
OwotCi0gICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOwotCi0gICAgUGF0aFBvaW50IGVuZFBvaW50
OwotICAgIHJhdGUgPSBzcGFuIC8gZDIxOwotICAgIGVuZFBvaW50Lm1feCA9IHAxLm1feCArIHYy
MS5tX3ggKiByYXRlOwotICAgIGVuZFBvaW50Lm1feSA9IHAxLm1feSArIHYyMS5tX3kgKiByYXRl
OwotCi0gICAgUGF0aFBvaW50IG1pZFBvaW50OwotICAgIG1pZFBvaW50Lm1feCA9IChzdGFydFBv
aW50Lm1feCArIGVuZFBvaW50Lm1feCkgKiAwLjU7Ci0gICAgbWlkUG9pbnQubV95ID0gKHN0YXJ0
UG9pbnQubV95ICsgZW5kUG9pbnQubV95KSAqIDAuNTsKLQotICAgIFBhdGhWZWN0b3Igdm0xID0g
bWlkUG9pbnQgLSBwMTsKLSAgICBkb3VibGUgZG0xID0gdm0xLmxlbmd0aCgpOwotICAgIGRvdWJs
ZSBkID0gX2h5cG90KHJhZGl1cywgc3Bhbik7Ci0KLSAgICBQYXRoUG9pbnQgY2VudGVyUG9pbnQ7
Ci0gICAgcmF0ZSA9IGQgLyBkbTE7Ci0gICAgY2VudGVyUG9pbnQubV94ID0gcDEubV94ICsgdm0x
Lm1feCAqIHJhdGU7Ci0gICAgY2VudGVyUG9pbnQubV95ID0gcDEubV95ICsgdm0xLm1feSAqIHJh
dGU7Ci0KLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyBkYXRhID0gewotICAgICAgICBl
bmRQb2ludCwKLSAgICAgICAgY2VudGVyUG9pbnQsCi0gICAgICAgIHsgcmFkaXVzLCByYWRpdXMg
fSwKLSAgICAgICAgY3Jvc3MgPCAwCi0gICAgfTsKLSAgICBQbGF0Zm9ybVBhdGhFbGVtZW50IHBl
KGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjpjbG9zZVN1
YnBhdGgoKQotewotICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGU7Ci0gICAgYXBwZW5kKHBlKTsK
LX0KLQotLy8gYWRkIGEgY2lyY3VsYXIgYXJjIGNlbnRyZWQgYXQgcCB3aXRoIHJhZGl1cyByIGZy
b20gc3RhcnQgYW5nbGUgc2FyIChyYWRpYW5zKSB0byBlbmQgYW5nbGUgZWFyCi12b2lkIFBsYXRm
b3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCBhLCBmbG9hdCBi
LCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIGZsb2F0
IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZOwotCi0gICAgbm9ybWFsaXplQW5nbGUoc2FyKTsK
LSAgICBub3JtYWxpemVBbmdsZShlYXIpOwotCi0gICAgZ2V0RWxsaXBzZVBvaW50QnlBbmdsZShz
YXIsIGEsIGIsIHN0YXJ0WCwgc3RhcnRZKTsKLSAgICBnZXRFbGxpcHNlUG9pbnRCeUFuZ2xlKGVh
ciwgYSwgYiwgZW5kWCwgZW5kWSk7Ci0KLSAgICB0cmFuc2Zvcm1BcmNQb2ludChzdGFydFgsIHN0
YXJ0WSwgcCk7Ci0gICAgdHJhbnNmb3JtQXJjUG9pbnQoZW5kWCwgZW5kWSwgcCk7Ci0KLSAgICBG
bG9hdFBvaW50IHN0YXJ0KHN0YXJ0WCwgc3RhcnRZKTsKLSAgICBtb3ZlVG8oc3RhcnQpOwotCi0g
ICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6QXJjVG8gZGF0YSA9IHsgeyBlbmRYLCBlbmRZIH0sIHsg
cC54KCksIHAueSgpIH0sICB7IGEsIGIgfSwgIWFudGljbG9ja3dpc2UgfTsKLSAgICBQbGF0Zm9y
bVBhdGhFbGVtZW50IHBlKGRhdGEpOwotICAgIGFwcGVuZChwZSk7Ci19Ci0KLQotdm9pZCBQbGF0
Zm9ybVBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG1vdmVUbyhyLmxv
Y2F0aW9uKCkpOwotCi0gICAgZmxvYXQgcmlnaHQgPSByLm1heFgoKSAtIDE7Ci0gICAgZmxvYXQg
Ym90dG9tID0gci5tYXhZKCkgLSAxOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJpZ2h0LCBy
LnkoKSkpOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJpZ2h0LCBib3R0b20pKTsKLSAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludChyLngoKSwgYm90dG9tKSk7Ci0gICAgYWRkTGluZVRvKHIubG9j
YXRpb24oKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcikKLXsKLSAgICBGbG9hdFNpemUgcmFkaXVzKHIud2lkdGgoKSAqIDAuNSwgci5oZWln
aHQoKSAqIDAuNSk7Ci0gICAgYWRkRWxsaXBzZShyLmxvY2F0aW9uKCkgKyByYWRpdXMsIHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCksIDAsIDAsIHRydWUpOwotfQotCi12b2lkIFBsYXRm
b3JtUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikg
Y29uc3QKLXsKLSAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKLSAgICBGbG9hdFBvaW50IHBvaW50
c1szXTsKLSAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7Ci0KLSAgICBmb3IgKFBsYXRmb3Jt
UGF0aEVsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAh
PSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHBlbGVtZW50LnR5cGUgPSBpdC0+
dHlwZSgpOwotICAgICAgICBpbnQgbiA9IGl0LT5udW1Qb2ludHMoKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICBwb2ludHNbaV0gPSBpdC0+cG9pbnRB
dChpKTsKLSAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYmNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhZTkyNDNmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxODMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybVBhdGhXaW5DRV9oCi0jZGVmaW5l
IFBsYXRmb3JtUGF0aFdpbkNFX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotCi0gICAgc3RydWN0IFBhdGhQb2ludCB7Ci0gICAgICAgIGZs
b2F0IG1feDsKLSAgICAgICAgZmxvYXQgbV95OwotICAgICAgICBjb25zdCBmbG9hdCYgeCgpIGNv
bnN0IHsgcmV0dXJuIG1feDsgfQotICAgICAgICBjb25zdCBmbG9hdCYgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQotICAgICAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX3ggPSB4OwotICAgICAgICAgICAgbV95ID0geTsKLSAgICAgICAgfTsK
LSAgICAgICAgb3BlcmF0b3IgRmxvYXRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQo
bV94LCBtX3kpOyB9Ci0gICAgICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
LSAgICAgICAgewotICAgICAgICAgICAgbV94ICs9IG9mZnNldC53aWR0aCgpOwotICAgICAgICAg
ICAgbV95ICs9IG9mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICBQYXRoUG9pbnQm
IG9wZXJhdG9yPShjb25zdCBGbG9hdFBvaW50JiBwKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
X3ggPSBwLngoKTsKLSAgICAgICAgICAgIG1feSA9IHAueSgpOwotICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgY2xlYXIoKSB7IG1feCA9IG1feSA9IDA7
IH0KLSAgICB9OwotCi0gICAgc3RydWN0IFBhdGhQb2x5Z29uOiBwdWJsaWMgVmVjdG9yPFBhdGhQ
b2ludD4gewotICAgICAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOwotICAg
ICAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotICAgICAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdDsKLSAgICB9OwotCi0g
ICAgY2xhc3MgUGxhdGZvcm1QYXRoRWxlbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVt
IFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgewotICAgICAgICAgICAgUGF0aE1vdmVUbywKLSAgICAg
ICAgICAgIFBhdGhMaW5lVG8sCi0gICAgICAgICAgICBQYXRoQXJjVG8sCi0gICAgICAgICAgICBQ
YXRoUXVhZEN1cnZlVG8sCi0gICAgICAgICAgICBQYXRoQmV6aWVyQ3VydmVUbywKLSAgICAgICAg
ICAgIFBhdGhDbG9zZVN1YnBhdGgsCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0IE1vdmVU
byB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
c3RydWN0IExpbmVUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9lbmQ7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgc3RydWN0IEFyY1RvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX2VuZDsK
LSAgICAgICAgICAgIFBhdGhQb2ludCBtX2NlbnRlcjsKLSAgICAgICAgICAgIFBhdGhQb2ludCBt
X3JhZGl1czsKLSAgICAgICAgICAgIGJvb2wgbV9jbG9ja3dpc2U7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgc3RydWN0IFF1YWRDdXJ2ZVRvIHsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50
MDsKLSAgICAgICAgICAgIFBhdGhQb2ludCBtX3BvaW50MTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBzdHJ1Y3QgQmV6aWVyQ3VydmVUbyB7Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDA7
Ci0gICAgICAgICAgICBQYXRoUG9pbnQgbV9wb2ludDE7Ci0gICAgICAgICAgICBQYXRoUG9pbnQg
bV9wb2ludDI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudCgpOiBt
X3R5cGUoUGF0aENsb3NlU3VicGF0aCkgeyBtX2RhdGEubV9wb2ludHNbMF0uc2V0KDAsIDApOyAg
ICB9Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgTW92ZVRvJiBkYXRhKTogbV90
eXBlKFBhdGhNb3ZlVG8pIHsgbV9kYXRhLm1fbW92ZVRvRGF0YSA9IGRhdGE7IH0KLSAgICAgICAg
UGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBMaW5lVG8mIGRhdGEpOiBtX3R5cGUoUGF0aExpbmVU
bykgeyBtX2RhdGEubV9saW5lVG9EYXRhID0gZGF0YTsgfQotICAgICAgICBQbGF0Zm9ybVBhdGhF
bGVtZW50KGNvbnN0IEFyY1RvJiBkYXRhKTogbV90eXBlKFBhdGhBcmNUbykgeyBtX2RhdGEubV9h
cmNUb0RhdGEgPSBkYXRhOyB9Ci0gICAgICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQoY29uc3QgUXVh
ZEN1cnZlVG8mIGRhdGEpOiBtX3R5cGUoUGF0aFF1YWRDdXJ2ZVRvKSB7IG1fZGF0YS5tX3F1YWRD
dXJ2ZVRvRGF0YSA9IGRhdGE7IH0KLSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudChjb25zdCBC
ZXppZXJDdXJ2ZVRvJiBkYXRhKTogbV90eXBlKFBhdGhCZXppZXJDdXJ2ZVRvKSB7IG1fZGF0YS5t
X2JlemllckN1cnZlVG9EYXRhID0gZGF0YTsgfQotCi0gICAgICAgIGNvbnN0IE1vdmVUbyYgbW92
ZVRvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fbW92ZVRvRGF0YTsgfQotICAgICAgICBjb25z
dCBMaW5lVG8mIGxpbmVUbygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5tX2xpbmVUb0RhdGE7IH0K
LSAgICAgICAgY29uc3QgQXJjVG8mIGFyY1RvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fYXJj
VG9EYXRhOyB9Ci0gICAgICAgIGNvbnN0IFF1YWRDdXJ2ZVRvJiBxdWFkQ3VydmVUbygpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5tX3F1YWRDdXJ2ZVRvRGF0YTsgfQotICAgICAgICBjb25zdCBCZXpp
ZXJDdXJ2ZVRvJiBiZXppZXJDdXJ2ZVRvKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLm1fYmV6aWVy
Q3VydmVUb0RhdGE7IH0KLSAgICAgICAgY29uc3QgUGF0aFBvaW50JiBsYXN0UG9pbnQoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbiA9IG51bVBvaW50cygpOwotICAgICAgICAg
ICAgcmV0dXJuIG4gPiAxID8gbV9kYXRhLm1fcG9pbnRzW24gLSAxXSA6IG1fZGF0YS5tX3BvaW50
c1swXTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBQYXRoUG9pbnQmIHBvaW50QXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2RhdGEubV9wb2ludHNbaW5kZXhdOyB9Ci0gICAgICAgIGlu
dCBudW1Qb2ludHMoKSBjb25zdDsKLSAgICAgICAgaW50IG51bUNvbnRyb2xQb2ludHMoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKLSAgICAgICAg
dm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgUGF0aEVs
ZW1lbnRUeXBlIHR5cGUoKSBjb25zdDsKLSAgICAgICAgUGxhZm9ybVBhdGhFbGVtZW50VHlwZSBw
bGF0Zm9ybVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgdm9pZCBpbmZs
YXRlUmVjdFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRQb2ludCYgbGFzdFBv
aW50KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5
cGUgbV90eXBlOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBNb3ZlVG8gbV9tb3ZlVG9E
YXRhOwotICAgICAgICAgICAgTGluZVRvIG1fbGluZVRvRGF0YTsKLSAgICAgICAgICAgIEFyY1Rv
IG1fYXJjVG9EYXRhOwotICAgICAgICAgICAgUXVhZEN1cnZlVG8gbV9xdWFkQ3VydmVUb0RhdGE7
Ci0gICAgICAgICAgICBCZXppZXJDdXJ2ZVRvIG1fYmV6aWVyQ3VydmVUb0RhdGE7Ci0gICAgICAg
ICAgICBQYXRoUG9pbnQgbV9wb2ludHNbNF07Ci0gICAgICAgIH0gbV9kYXRhOwotICAgIH07Ci0K
LSAgICB0eXBlZGVmIFZlY3RvcjxQbGF0Zm9ybVBhdGhFbGVtZW50PiBQbGF0Zm9ybVBhdGhFbGVt
ZW50czsKLQotICAgIGNsYXNzIFBsYXRmb3JtUGF0aCB7Ci0gICAgcHVibGljOgotICAgICAgICBQ
bGF0Zm9ybVBhdGgoKTsKLSAgICAgICAgY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudHMmIGVsZW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQotICAgICAgICB2b2lkIGFwcGVuZChj
b25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKTsKLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3Qg
UGxhdGZvcm1QYXRoJiBwKTsKLSAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmlzRW1wdHkoKTsgfQotCi0gICAgICAg
IHZvaWQgc3Ryb2tlUGF0aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0Owot
ICAgICAgICB2b2lkIGZpbGxQYXRoKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3JtKiB0cikgY29u
c3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgbGFzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50cy5pc0VtcHR5KCkgPyBGbG9hdFBvaW50KDAsIDApIDogbV9lbGVtZW50cy5sYXN0KCkubGFz
dFBvaW50KCk7IH0KLQotICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRpbmdSZWN0OyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0OwotICAgICAgICB2b2lk
IHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpOwotICAgICAgICB2b2lkIHRyYW5zZm9y
bShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotCi0gICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQ
b2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemllckN1
cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
Y29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZEFyY1Rv
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsKLSAg
ICAgICAgdm9pZCBjbG9zZVN1YnBhdGgoKTsKLSAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0
IEZsb2F0UG9pbnQmIHAsIGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBi
b29sIGFudGljbG9ja3dpc2UpOwotICAgICAgICB2b2lkIGFkZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKTsKLSAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcik7Ci0gICAg
ICAgIHZvaWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikg
Y29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGVuc3VyZVN1YnBhdGgoKTsKLSAg
ICAgICAgdm9pZCBhZGRUb1N1YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSk7Ci0K
LSAgICAgICAgUGxhdGZvcm1QYXRoRWxlbWVudHMgbV9lbGVtZW50czsKLSAgICAgICAgRmxvYXRS
ZWN0IG1fYm91bmRpbmdSZWN0OwotICAgICAgICBWZWN0b3I8UGF0aFBvbHlnb24+IG1fc3VicGF0
aHM7Ci0gICAgICAgIFBhdGhQb2ludCBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgYm9vbCBtX3Bl
bkxpZnRlZDsKLSAgICB9OwotCi19Ci0KLSNlbmRpZiAvLyBQbGF0Zm9ybVBhdGhXaW5DRV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRC
aXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVk
Qml0bWFwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5ODU4ZC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJpdG1h
cC5oIgotCi0jaW5jbHVkZSAiR0RJRXh0cmFzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCi0jaW5jbHVkZSAiV2luQ0VHcmFwaGljc0V4dHJhcy5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkTGVha0NvdW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNp
bmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOREVC
VUcKLXN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBzaGFyZWRCaXRtYXBMZWFrQ291
bnRlcigiU2hhcmVkQml0bWFwIik7Ci0jZW5kaWYKLQotCi1QYXNzUmVmUHRyPFNoYXJlZEJpdG1h
cD4gU2hhcmVkQml0bWFwOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQml0bWFwSW5mbzo6
Qml0Q291bnQgYml0Q291bnQsIGJvb2wgaW5pdFBpeGVscykKLXsKLSAgICBSZWZQdHI8U2hhcmVk
Qml0bWFwPiByZXN1bHRhbnRCaXRtYXAgPSBhZG9wdFJlZihuZXcgU2hhcmVkQml0bWFwKHNpemUs
IGJpdENvdW50LCBpbml0UGl4ZWxzKSk7Ci0gICAgaWYgKHJlc3VsdGFudEJpdG1hcCAmJiAhcmVz
dWx0YW50Qml0bWFwLT5ieXRlcygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcmVz
dWx0YW50Qml0bWFwLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IFNo
YXJlZEJpdG1hcDo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGRhdGEsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJpdG1hcD4g
cmVzdWx0ID0gY3JlYXRlKHNpemUsIEJpdG1hcEluZm86OkJpdENvdW50MzIsIGZhbHNlKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbWVtY3B5KHJlc3VsdC0+Ynl0
ZXMoKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAg
cmVzdWx0LT5zZXRIYXNBbHBoYShoYXNBbHBoYSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Ci19Ci0KLVNoYXJlZEJpdG1hcDo6U2hhcmVkQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUs
IEJpdG1hcEluZm86OkJpdENvdW50IGJpdENvdW50LCBib29sIGluaXRQaXhlbHMpCi0gICAgOiBt
X2JtcEluZm8oQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoc2l6ZSwgYml0Q291bnQpKQotICAg
ICwgbV9sb2NrZWQoZmFsc2UpCi0gICAgLCBtX3VzZXNUcmFuc3BhcmVudENvbG9yKGZhbHNlKQot
ICAgICwgbV90cmFuc3BhcmVudENvbG9yKFJHQigwLCAwLCAwKSkKLSAgICAsIG1fcGl4ZWxzKDAp
Ci0gICAgLCBtX2hhc0FscGhhKGZhbHNlKQotICAgICwgbV92YWxpZEhlaWdodChhYnMoc2l6ZS5o
ZWlnaHQoKSkpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIHNoYXJlZEJpdG1hcExlYWtDb3VudGVy
LmluY3JlbWVudCgpOwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gbV9ibXBJ
bmZvLm51bVBpeGVscygpOwotICAgIGlmIChiaXRDb3VudCA9PSBCaXRtYXBJbmZvOjpCaXRDb3Vu
dDE2KQotICAgICAgICBidWZmZXJTaXplIC89IDI7Ci0KLSAgICBtX3BpeGVsRGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8dW5zaWduZWRbXT4oYnVmZmVyU2l6ZSk7Ci0gICAgbV9waXhlbHMgPSBtX3Bp
eGVsRGF0YS5nZXQoKTsKLQotICAgIGlmIChpbml0UGl4ZWxzKQotICAgICAgICByZXNldFBpeGVs
cygpOwotfQotCi1TaGFyZWRCaXRtYXA6On5TaGFyZWRCaXRtYXAoKQotewotI2lmbmRlZiBOREVC
VUcKLSAgICBzaGFyZWRCaXRtYXBMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKLSNlbmRpZgotfQot
Ci12b2lkIFNoYXJlZEJpdG1hcDo6cmVzZXRQaXhlbHMoYm9vbCBibGFjaykKLXsKLSAgICBpZiAo
IW1fcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJTaXplID0g
bV9ibXBJbmZvLm51bVBpeGVscygpOwotICAgIGlmIChibGFjaykgewotICAgICAgICB1bnNpZ25l
ZCBidWZmZXJTaXplSW5CeXRlcyA9IGJ1ZmZlclNpemUgKiAoaXMxNmJpdCgpID8gMiA6IDQpOwot
ICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpczE2Yml0KCkpIHsKLSAgICAgICAgLy8gRmlsbCBp
dCB3aXRoIHdoaXRlIGNvbG9yCi0gICAgICAgIHdtZW1zZXQoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+
KG1fcGl4ZWxzKSwgMHhGRkZGLCBidWZmZXJTaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIE1ha2UgaXQgd2hpdGUgYnV0IHRyYW5zcGFyZW50Ci0gICAgdW5zaWduZWQqIHBp
eGVsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihtX3BpeGVscyk7Ci0gICAgY29uc3QgdW5zaWdu
ZWQqIGJ1ZmZlckVuZCA9IHBpeGVsICsgYnVmZmVyU2l6ZTsKLSAgICB3aGlsZSAocGl4ZWwgPCBi
dWZmZXJFbmQpCi0gICAgICAgICpwaXhlbCsrID0gMHgwMEZGRkZGRjsKLX0KLQotc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBzaG9ydCBjb252ZXJ0MzJUbzE2KHVuc2lnbmVkIHBpeGVsKQotewotICAg
IHVuc2lnbmVkIHNob3J0IHIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKHBpeGVsICYg
MHgwMEY4MDAwMCkgPj4gOCk7Ci0gICAgdW5zaWduZWQgc2hvcnQgZyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigocGl4ZWwgJiAweDAwMDBGQzAwKSA+PiA1KTsKLSAgICB1bnNpZ25lZCBz
aG9ydCBiID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChwaXhlbCAmIDB4MDAwMDAwRjgp
ID4+IDMpOwotICAgIHJldHVybiByIHwgZyB8IGI7Ci19Ci0KLWJvb2wgU2hhcmVkQml0bWFwOjp0
bzE2Yml0KCkKLXsKLSAgICBpZiAobV9sb2NrZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoaXMxNmJpdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEJpdG1hcEluZm8g
bmV3Qm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShtX2JtcEluZm8uc2l6ZSgpLCBCaXRtYXBJ
bmZvOjpCaXRDb3VudDE2KTsKLQotICAgIGludCB3aWR0aCA9IG5ld0JtcEluZm8ud2lkdGgoKTsK
LSAgICBpbnQgcGFkZGVkV2lkdGggPSBuZXdCbXBJbmZvLnBhZGRlZFdpZHRoKCk7Ci0gICAgaW50
IGJ1ZmZlclNpemUgPSBwYWRkZWRXaWR0aCAqIG5ld0JtcEluZm8uaGVpZ2h0KCk7Ci0gICAgYXV0
byBuZXdQaXhlbERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KGJ1ZmZlclNpemUg
LyAyKTsKLSAgICB2b2lkKiBuZXdQaXhlbHMgPSBuZXdQaXhlbERhdGEuZ2V0KCk7Ci0KLSAgICBp
ZiAoIW5ld1BpeGVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc2hv
cnQqIHAxNiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obmV3UGl4ZWxzKTsKLSAgICBj
b25zdCB1bnNpZ25lZCogcDMyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihtX3BpeGVs
cyk7Ci0KLSAgICBib29sIHNraXBzID0gcGFkZGVkV2lkdGggIT0gd2lkdGg7Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCogcDE2ZW5kID0gcDE2ICsgYnVmZmVyU2l6ZTsKLSAgICB3aGlsZSAo
cDE2IDwgcDE2ZW5kKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgc2hvcnQqIHAxNmxpbmVFbmQg
PSBwMTYgKyB3aWR0aDsgcDE2IDwgcDE2bGluZUVuZDsgKQotICAgICAgICAgICAgKnAxNisrID0g
Y29udmVydDMyVG8xNigqcDMyKyspOwotCi0gICAgICAgIGlmIChza2lwcykKLSAgICAgICAgICAg
ICpwMTYrKyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1faGJpdG1hcCkKLSAgICAgICAgbV9oYml0
bWFwID0gbnVsbHB0cjsKLSAgICBlbHNlCi0gICAgICAgIG1fcGl4ZWxEYXRhID0gbmV3UGl4ZWxE
YXRhLnJlbGVhc2UoKTsKLQotICAgIG1fcGl4ZWxzID0gbmV3UGl4ZWxzOwotICAgIG1fYm1wSW5m
byA9IG5ld0JtcEluZm87Ci0KLSAgICBzZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgU2hhcmVkQml0bWFwOjpmcmVlTWVtb3J5KCkKLXsKLSAgICBpZiAobV9s
b2NrZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2hiaXRtYXApIHsKLSAg
ICAgICAgbV9oYml0bWFwID0gbnVsbHB0cjsKLSAgICAgICAgbV9waXhlbHMgPSAwOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9waXhlbHMpIHsKLSAgICAgICAgbV9w
aXhlbERhdGEgPSBudWxscHRyOwotICAgICAgICBtX3BpeGVscyA9IDA7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR0RJT2JqZWN0PEhCSVRN
QVA+IFNoYXJlZEJpdG1hcDo6Y3JlYXRlSGFuZGxlKHZvaWQqKiBwaXhlbHMsIEJpdG1hcEluZm8q
IGJtcEluZm8sIGludCBoZWlnaHQsIGJvb2wgdXNlMTZiaXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3BpeGVscykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaGVpZ2h0ID09IC0x
KQotICAgICAgICBoZWlnaHQgPSB0aGlzLT5oZWlnaHQoKTsKLSAgICAqYm1wSW5mbyA9IEJpdG1h
cEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUod2lkdGgoKSwgaGVpZ2h0KSwgKHVzZTE2Yml0
IHx8IGlzMTZiaXQoKSkgPyBCaXRtYXBJbmZvOjpCaXRDb3VudDE2IDogQml0bWFwSW5mbzo6Qml0
Q291bnQzMik7Ci0KLSAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNl
Y3Rpb24oMCwgYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsIHBpeGVscywgMCwgMCkpOwotCi0gICAg
aWYgKCFoYm1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gYm1wREMgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgSEdESU9CSiBoT2xk
Qm1wID0gU2VsZWN0T2JqZWN0KGJtcERDLmdldCgpLCBoYm1wLmdldCgpKTsKLQotICAgIFN0cmV0
Y2hESUJpdHMoYm1wREMuZ2V0KCksIDAsIDAsIHdpZHRoKCksIGhlaWdodCwgMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0LCBtX3BpeGVscywgJm1fYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkp
OwotCi0gICAgU2VsZWN0T2JqZWN0KGJtcERDLmdldCgpLCBoT2xkQm1wKTsKLQotICAgIHJldHVy
biBoYm1wOwotfQotCi1ib29sIFNoYXJlZEJpdG1hcDo6ZW5zdXJlSGFuZGxlKCkKLXsKLSAgICBp
ZiAobV9oYml0bWFwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9waXhlbHMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2xvY2tlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQml0bWFwSW5mbyBibXBJbmZvOwotICAgIHZvaWQqIHBpeGVsczsK
LSAgICBtX2hiaXRtYXAgPSBjcmVhdGVIYW5kbGUoJnBpeGVscywgJmJtcEluZm8sIC0xLCAhaGFz
QWxwaGEoKSk7Ci0KLSAgICBpZiAoIW1faGJpdG1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9waXhlbERhdGEgPSBudWxscHRyOwotICAgIG1fcGl4ZWxzID0gcGl4ZWxzOwotICAg
IG1fYm1wSW5mbyA9IGJtcEluZm87Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFy
ZWRCaXRtYXA6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBJbnRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0g
ICAgaWYgKCFtX3BpeGVscykKLSAgICAgICAgcmV0dXJuOwotICAgIGN0eHQtPmRyYXdCaXRtYXAo
dGhpcywgZHN0UmVjdCwgc3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXcoSERDIGhkYywgY29uc3QgSW50
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKCFtX3BpeGVscykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpIHx8IHNyY1JlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIQklUTUFQIGhiaXRtYXAgPSAwOwot
ICAgIEdESU9iamVjdDxIQklUTUFQPiBoVGVtcEJpdG1hcDsKLSAgICBib29sIHVzaW5nSGFuZGxl
ID0gY29tcG9zaXRlT3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiAoaGFzQWxwaGEoKSAmJiBo
YXNBbHBoYUJsZW5kU3VwcG9ydCgpIHx8IHVzZXNUcmFuc3BhcmVudENvbG9yKCkpOwotCi0gICAg
aWYgKHVzaW5nSGFuZGxlKSB7Ci0gICAgICAgIGlmIChlbnN1cmVIYW5kbGUoKSkKLSAgICAgICAg
ICAgIGhiaXRtYXAgPSBtX2hiaXRtYXAuZ2V0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdm9pZCogcGl4ZWxzOwotICAgICAgICAgICAgQml0bWFwSW5mbyBibXBJbmZvOwotICAgICAg
ICAgICAgaFRlbXBCaXRtYXAgPSBjcmVhdGVIYW5kbGUoJnBpeGVscywgJmJtcEluZm8sIC0xLCB1
c2VzVHJhbnNwYXJlbnRDb2xvcigpKTsKLSAgICAgICAgICAgIGhiaXRtYXAgPSBoVGVtcEJpdG1h
cC5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWhiaXRtYXApIHsKLSAgICAgICAg
Ly8gRklYTUU6IGhhbmRsZSBvdGhlciBjb21wb3NpdGUgb3BlcmF0aW9uIHR5cGVzPwotICAgICAg
ICBEV09SRCByb3AgPSBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVDb3B5ID8gU1JDQ09QWQotICAg
ICAgICAgICAgOiBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVYT1IgPyBQQVRJTlZFUlQKLSAgICAg
ICAgICAgIDogY29tcG9zaXRlT3AgPT0gQ29tcG9zaXRlQ2xlYXIgPyBXSElURU5FU1MKLSAgICAg
ICAgICAgIDogU1JDQ09QWTsKLQotICAgICAgICBTdHJldGNoRElCaXRzKGhkYywgZHN0UmVjdC54
KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksCi0gICAg
ICAgICAgICBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVj
dC5oZWlnaHQoKSwgbV9waXhlbHMsICZtX2JtcEluZm8sIERJQl9SR0JfQ09MT1JTLCByb3ApOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBobWVtZGMgPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhoZGMpKTsKLSAgICBIR0RJT0JKIGhPbGRCbXAgPSBTZWxl
Y3RPYmplY3QoaG1lbWRjLmdldCgpLCBoYml0bWFwKTsKLQotICAgIGlmICghdXNlc1RyYW5zcGFy
ZW50Q29sb3IoKSAmJiBoYXNBbHBoYUJsZW5kU3VwcG9ydCgpKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBCTEVOREZVTkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwgMCwgMjU1LCBBQ19TUkNf
QUxQSEEgfTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gYWxwaGFCbGVuZElmU3VwcG9ydGVkKGhk
YywgZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVp
Z2h0KCksIGhtZW1kYy5nZXQoKSwKLSAgICAgICAgICAgIHNyY1JlY3QueCgpLCBzcmNSZWN0Lnko
KSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBibGVuZCk7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVHJh
bnNwYXJlbnRCbHQoaGRjLCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgo
KSwgZHN0UmVjdC5oZWlnaHQoKSwgaG1lbWRjLmdldCgpLAotICAgICAgICAgICAgc3JjUmVjdC54
KCksIHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIHRyYW5z
cGFyZW50Q29sb3IoKSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwg
aE9sZEJtcCk7Ci19Ci0KLUdESU9iamVjdDxIQklUTUFQPiBTaGFyZWRCaXRtYXA6OmNsaXBCaXRt
YXAoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSwgQml0bWFwSW5mbyYgYm1wSW5m
bywgdm9pZComIHBpeGVscykKLXsKLSAgICBpZiAoIWJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgaW50IG9sZFdpZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluPGludD4ocmVjdC53aWR0
aCgpLCBvbGRXaWR0aCAtIHJlY3QueCgpKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWlu
PGludD4ocmVjdC5oZWlnaHQoKSwgb2xkSGVpZ2h0IC0gcmVjdC55KCkpOwotICAgIGlmICghY29w
eVdpZHRoIHx8ICFjb3B5SGVpZ2h0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJt
cEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRTaXplKGNvcHlXaWR0aCwgY29w
eUhlaWdodCksICh1c2VBbHBoYSAmJiBpczMyYml0KCkpID8gQml0bWFwSW5mbzo6Qml0Q291bnQz
MiA6IEJpdG1hcEluZm86OkJpdENvdW50MTYpOwotICAgIGF1dG8gbmV3Qm1wID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBp
eGVscywgMCwgMCkpOwotCi0gICAgaWYgKCFuZXdCbXApCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byBkY05ldyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURD
KDApKTsKLSAgICBIR0RJT0JKIHRtcE5ldyA9IFNlbGVjdE9iamVjdChkY05ldy5nZXQoKSwgbmV3
Qm1wLmdldCgpKTsKLQotICAgIFN0cmV0Y2hESUJpdHMoZGNOZXcuZ2V0KCksIDAsIDAsIGNvcHlX
aWR0aCwgY29weUhlaWdodCwgcmVjdC54KCksIHJlY3QueSgpLCBjb3B5V2lkdGgsIGNvcHlIZWln
aHQsCi0gICAgICAgIGJ5dGVzKCksICZiaXRtYXBJbmZvKCksIERJQl9SR0JfQ09MT1JTLCBTUkND
T1BZKTsKLQotICAgIFNlbGVjdE9iamVjdChkY05ldy5nZXQoKSwgdG1wTmV3KTsKLSAgICByZXR1
cm4gbmV3Qm1wOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJpdG1hcD4gU2hhcmVkQml0bWFwOjpj
bGlwQml0bWFwKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgdXNlQWxwaGEpCi17Ci0gICAgaW50
IG9sZFdpZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7Ci0gICAg
aW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluPGludD4ocmVjdC53aWR0aCgpLCBvbGRXaWR0aCAtIHJl
Y3QueCgpKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluPGludD4ocmVjdC5oZWlnaHQo
KSwgb2xkSGVpZ2h0IC0gcmVjdC55KCkpOwotICAgIGlmICghY29weVdpZHRoIHx8ICFjb3B5SGVp
Z2h0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxTaGFyZWRCaXRtYXA+IG5ld0Jt
cCA9IGNyZWF0ZShJbnRTaXplKGNvcHlXaWR0aCwgY29weUhlaWdodCksIHVzZUFscGhhICYmIGlz
MzJiaXQoKSA/IEJpdG1hcEluZm86OkJpdENvdW50MzIgOiBCaXRtYXBJbmZvOjpCaXRDb3VudDE2
LCBmYWxzZSk7Ci0KLSAgICBpZiAoIW5ld0JtcCB8fCAhbmV3Qm1wLT5ieXRlcygpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIERDSG9sZGVyIGRjTmV3KG5ld0JtcC5nZXQoKSk7Ci0KLSAgICBT
dHJldGNoRElCaXRzKGRjTmV3LmdldCgpLCAwLCAwLCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQsIHJl
Y3QueCgpLCByZWN0LnkoKSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LAotICAgICAgICBieXRlcygp
LCAmYml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7Ci0KLSAgICByZXR1cm4g
bmV3Qm1wOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UGF0dGVyblNpbXBsZShIREMgaGRjLCBjb25z
dCBSRUNUJiBkZXN0UmVjdCwgSEJJVE1BUCBoYm1wLCBjb25zdCBQT0lOVCYgcGhhc2UpCi17Ci0g
ICAgYXV0byBoQnJ1c2ggPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBhdHRlcm5CcnVzaChoYm1w
KSk7Ci0gICAgaWYgKCFoQnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBPSU5UIG9sZE9y
ZzsKLSAgICBTZXRCcnVzaE9yZ0V4KGhkYywgZGVzdFJlY3QubGVmdCAtIHBoYXNlLngsIGRlc3RS
ZWN0LnRvcCAtIHBoYXNlLnksICZvbGRPcmcpOwotICAgIEZpbGxSZWN0KGhkYywgJmRlc3RSZWN0
LCBoQnJ1c2guZ2V0KCkpOwotICAgIFNldEJydXNoT3JnRXgoaGRjLCBvbGRPcmcueCwgb2xkT3Jn
LnksIDApOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3UGF0dGVyblNpbXBsZShIREMgaGRjLCBjb25z
dCBSRUNUJiBkZXN0UmVjdCwgY29uc3QgU2hhcmVkQml0bWFwKiBibXAsIGNvbnN0IFNJWkUmIGJt
cFNpemUsIGNvbnN0IFBPSU5UJiBwaGFzZSkKLXsKLSAgICBpbnQgZHN0WSA9IGRlc3RSZWN0LnRv
cDsKLSAgICBmb3IgKGludCBzb3VyY2VZID0gcGhhc2UueTsgZHN0WSA8IGRlc3RSZWN0LmJvdHRv
bTsgKSB7Ci0gICAgICAgIGludCBzb3VyY2VIID0gc3RkOjptaW48aW50PihibXBTaXplLmN5IC0g
c291cmNlWSwgZGVzdFJlY3QuYm90dG9tIC0gZHN0WSk7Ci0gICAgICAgIGludCBkc3RYID0gZGVz
dFJlY3QubGVmdDsKLSAgICAgICAgZm9yIChpbnQgc291cmNlWCA9IHBoYXNlLng7IGRzdFggPCBk
ZXN0UmVjdC5yaWdodDsgKSB7Ci0gICAgICAgICAgICBpbnQgc291cmNlVyA9IHN0ZDo6bWluPGlu
dD4oYm1wU2l6ZS5jeCAtIHNvdXJjZVgsIGRlc3RSZWN0LnJpZ2h0IC0gZHN0WCk7Ci0KLSAgICAg
ICAgICAgIFN0cmV0Y2hESUJpdHMoaGRjLCBkc3RYLCBkc3RZLCBzb3VyY2VXLCBzb3VyY2VILCBz
b3VyY2VYLCBzb3VyY2VZLCBzb3VyY2VXLCBzb3VyY2VILAotICAgICAgICAgICAgICAgIGJtcC0+
Ynl0ZXMoKSwgJmJtcC0+Yml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7Ci0K
LSAgICAgICAgICAgIGRzdFggKz0gc291cmNlVzsKLSAgICAgICAgICAgIHNvdXJjZVggPSAwOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZHN0WSArPSBzb3VyY2VIOwotICAgICAgICBzb3VyY2VZID0g
MDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBMT05HIG5vcm1hbGl6ZVBoYXNlKExPTkcgcGhhc2UsIGlu
dCBsaW1pdCkKLXsKLSAgICBpZiAoIXBoYXNlIHx8IGxpbWl0IDwgMikKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAobGltaXQgPT0gMikKLSAgICAgICAgcmV0dXJuIHBoYXNlICYgMTsKLQot
ICAgIGlmIChwaGFzZSA8IDApIHsKLSAgICAgICAgcGhhc2UgPSAtcGhhc2U7Ci0gICAgICAgIGlm
IChwaGFzZSA+IGxpbWl0KQotICAgICAgICAgICAgcGhhc2UgPSBzdGF0aWNfY2FzdDxMT05HPihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocGhhc2UpICUgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbWl0
KSk7Ci0gICAgICAgIGlmIChwaGFzZSkKLSAgICAgICAgICAgIHBoYXNlID0gbGltaXQgLSBwaGFz
ZTsKLSAgICAgICAgcmV0dXJuIHBoYXNlOwotICAgIH0KLQotICAgIGlmIChwaGFzZSA8IGxpbWl0
KQotICAgICAgICByZXR1cm4gcGhhc2U7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TE9ORz4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBoYXNlKSAlIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaW1p
dCkpOwotfQotCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3Vy
Y2VTaXplKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLSAgICBjdHh0
LT5kcmF3Qml0bWFwUGF0dGVybih0aGlzLCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIG9yaWdTb3VyY2VTaXplKTsKLX0K
LQotdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEhEQyBoZGMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNp
emUmIG9yaWdTb3VyY2VTaXplKQotewotICAgIGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICh0aWxlUmVjdEluLndpZHRoKCkgPD0gMCB8fCB0aWxlUmVjdEluLmhlaWdo
dCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgdXNlQWxwaGEgPSBvcCA9PSBD
b21wb3NpdGVTb3VyY2VPdmVyICYmIGhhc0FscGhhKCkgJiYgaXMzMmJpdCgpOwotCi0gICAgaW50
IGJtcFdpZHRoID0gd2lkdGgoKTsKLSAgICBpbnQgYm1wSGVpZ2h0ID0gaGVpZ2h0KCk7Ci0KLSAg
ICBGbG9hdFJlY3QgdGlsZVJlY3QodGlsZVJlY3RJbik7Ci0gICAgaWYgKGJtcFdpZHRoICE9IG9y
aWdTb3VyY2VTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZG91YmxlIHJhdGUgPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KGJtcFdpZHRoKSAvIG9yaWdTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgICAgIGRv
dWJsZSB0ZW1wID0gdGlsZVJlY3Qud2lkdGgoKSAqIHJhdGU7Ci0gICAgICAgIHRpbGVSZWN0LnNl
dFgodGlsZVJlY3QueCgpICogcmF0ZSk7Ci0gICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKHRlbXAp
OwotICAgICAgICB0ZW1wID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiByYXRlOwotICAgICAgICB0aWxl
UmVjdC5zZXRZKHRpbGVSZWN0LnkoKSAqIHJhdGUpOwotICAgICAgICB0aWxlUmVjdC5zZXRIZWln
aHQodGVtcCk7Ci0gICAgfQotCi0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGNsaXBwZWRCbXA7Ci0K
LSAgICBpZiAodGlsZVJlY3QueCgpIHx8IHRpbGVSZWN0LnkoKSB8fCB0aWxlUmVjdC53aWR0aCgp
ICE9IGJtcFdpZHRoIHx8IHRpbGVSZWN0LmhlaWdodCgpICE9IGJtcEhlaWdodCkgewotICAgICAg
ICBCaXRtYXBJbmZvIHBhdHRlcm5CbXBJbmZvOwotICAgICAgICB2b2lkKiBwYXR0ZXJuUGl4ZWxz
OwotICAgICAgICBjbGlwcGVkQm1wID0gY2xpcEJpdG1hcChJbnRSZWN0KHRpbGVSZWN0KSwgdXNl
QWxwaGEsIHBhdHRlcm5CbXBJbmZvLCBwYXR0ZXJuUGl4ZWxzKTsKLSAgICAgICAgaWYgKCFjbGlw
cGVkQm1wKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGJtcFdpZHRoID0gdGlsZVJl
Y3Qud2lkdGgoKTsKLSAgICAgICAgYm1wSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCk7Ci0gICAg
fQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRmID0gcGF0dGVyblRyYW5zZm9ybSAqIHRyYW5zZm9y
bTsKLQotICAgIEZsb2F0UmVjdCB0clJlY3QgPSB0Zi5tYXBSZWN0KGRlc3RSZWN0KTsKLQotICAg
IFJFQ1QgY2xpcEJveDsKLSAgICBpbnQgY2xpcFR5cGUgPSBHZXRDbGlwQm94KGhkYywgJmNsaXBC
b3gpOwotICAgIGlmIChjbGlwVHlwZSA9PSBTSU1QTEVSRUdJT04pCi0gICAgICAgIHRyUmVjdC5p
bnRlcnNlY3QoRmxvYXRSZWN0KGNsaXBCb3gubGVmdCwgY2xpcEJveC50b3AsIGNsaXBCb3gucmln
aHQgLSBjbGlwQm94LmxlZnQsIGNsaXBCb3guYm90dG9tIC0gY2xpcEJveC50b3ApKTsKLSAgICBl
bHNlIGlmIChjbGlwVHlwZSA9PSBDT01QTEVYUkVHSU9OKSB7Ci0gICAgICAgIGF1dG8gY2xpcFJn
biA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgICAg
IGlmIChHZXRDbGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSkgPiAwKSB7Ci0gICAgICAgICAgICBE
V09SRCByZWdpb25EYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEoY2xpcFJnbi5nZXQoKSwgc2l6ZW9m
KFJHTkRBVEEpLCAwKTsKLSAgICAgICAgICAgIGlmIChyZWdpb25EYXRhU2l6ZSkgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxSR05EQVRBPiByZWdpb25EYXRhKHJlZ2lvbkRhdGFTaXplKTsKLSAg
ICAgICAgICAgICAgICBHZXRSZWdpb25EYXRhKGNsaXBSZ24uZ2V0KCksIHJlZ2lvbkRhdGFTaXpl
LCByZWdpb25EYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgUkVDVCogcmVjdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UkVDVCo+KHJlZ2lvbkRhdGFbMF0uQnVmZmVyKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKERXT1JEIGkgPSAwOyBpIDwgcmVnaW9uRGF0YVswXS5yZGgubkNvdW50OyArK2ksICsr
cmVjdCkKLSAgICAgICAgICAgICAgICAgICAgdHJSZWN0LmludGVyc2VjdChGbG9hdFJlY3QocmVj
dC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRv
bSAtIHJlY3QtPnRvcCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHRyUmVjdC53aWR0aCgpIDw9IDAgfHwgdHJSZWN0LmhlaWdodCgpIDw9IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIHRyUmVjdC5pbmZsYXRlKDEpOwotICAgIEludFJlY3QgdmlzaWJsZURz
dFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRmLmludmVyc2UoKS5tYXBSZWN0KHRyUmVjdCkpOwot
ICAgIHZpc2libGVEc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KGRlc3RSZWN0KSk7Ci0KLSAgICBp
ZiAodmlzaWJsZURzdFJlY3Qud2lkdGgoKSA8PSAwIHx8IHZpc2libGVEc3RSZWN0LmhlaWdodCgp
IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyUmVjdCA9IHRmLm1hcFJlY3QodmlzaWJs
ZURzdFJlY3QpOwotICAgIFJFQ1QgZHN0UmVjdFdpbiA9IHsKLSAgICAgICAgc3RhYmxlUm91bmQo
dHJSZWN0LngoKSksCi0gICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC55KCkpLAotICAgICAgICBz
dGFibGVSb3VuZCh0clJlY3QubWF4WCgpKSwKLSAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0Lm1h
eFkoKSksCi0gICAgfTsKLSAgICBpZiAoZHN0UmVjdFdpbi5yaWdodCA8PSBkc3RSZWN0V2luLmxl
ZnQgfHwgZHN0UmVjdFdpbi5ib3R0b20gPD0gZHN0UmVjdFdpbi50b3ApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNJWkUgYm1wU2l6ZSA9IHsgYm1wV2lkdGgsIGJtcEhlaWdodCB9OwotCi0gICAg
Ly8gUmVsYXRpdmUgdG8gZGVzdGluYXRpb24sIGluIGJpdG1hcCBwaXhlbHMKLSAgICBQT0lOVCBw
aGFzZVdpbiA9IHsgc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueCgpIC0gcGhhc2UueCgpKSwg
c3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueSgpIC0gcGhhc2UueSgpKSB9OwotICAgIHBoYXNl
V2luLnggPSBub3JtYWxpemVQaGFzZShwaGFzZVdpbi54LCBibXBTaXplLmN4KTsKLSAgICBwaGFz
ZVdpbi55ID0gbm9ybWFsaXplUGhhc2UocGhhc2VXaW4ueSwgYm1wU2l6ZS5jeSk7Ci0KLSAgICBS
RUNUIHNyY1JlY3RXaW4gPSB7Ci0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIHN0YWJs
ZVJvdW5kKHZpc2libGVEc3RSZWN0Lm1heFgoKSkgLSBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVj
dC54KCkpLAotICAgICAgICBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC5tYXhZKCkpIC0gc3Rh
YmxlUm91bmQodmlzaWJsZURzdFJlY3QueSgpKQotICAgIH07Ci0gICAgaWYgKHNyY1JlY3RXaW4u
cmlnaHQgPD0gMCB8fCBzcmNSZWN0V2luLmJvdHRvbSA8PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBCaXRtYXBJbmZvIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRT
aXplKHNyY1JlY3RXaW4ucmlnaHQsIHNyY1JlY3RXaW4uYm90dG9tKSwgdXNlQWxwaGEgPyBCaXRt
YXBJbmZvOjpCaXRDb3VudDMyIDogQml0bWFwSW5mbzo6Qml0Q291bnQxNik7Ci0gICAgdm9pZCog
cGl4ZWxzOwotICAgIGF1dG8gaGJtcFRlbXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNl
Y3Rpb24oMCwgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7Ci0KLSAg
ICBpZiAoIWhibXBUZW1wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGhtZW1kYyA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkYykpOwotICAgIEhHRElPQkogb2xk
Qm1wID0gU2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgaGJtcFRlbXAuZ2V0KCkpOwotICAgIGlm
IChjbGlwcGVkQm1wKQotICAgICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNy
Y1JlY3RXaW4sIGNsaXBwZWRCbXAuZ2V0KCksIHBoYXNlV2luKTsKLSAgICBlbHNlIGlmICgob3Ag
IT0gQ29tcG9zaXRlU291cmNlT3ZlciB8fCBjYW5Vc2VESUJpdHMoKSkgJiYgc3JjUmVjdFdpbi5y
aWdodCA8PSBibXBTaXplLmN4ICogMiAmJiBzcmNSZWN0V2luLmJvdHRvbSA8PSBibXBTaXplLmN5
ICogMikKLSAgICAgICAgZHJhd1BhdHRlcm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2lu
LCB0aGlzLCBibXBTaXplLCBwaGFzZVdpbik7Ci0gICAgZWxzZSBpZiAoZW5zdXJlSGFuZGxlKCkp
Ci0gICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwgZ2V0
SGFuZGxlKCksIHBoYXNlV2luKTsKLSAgICBlbHNlIHsKLSAgICAgICAgdm9pZCogcGl4ZWxzOwot
ICAgICAgICBCaXRtYXBJbmZvIGJtcEluZm87Ci0gICAgICAgIGF1dG8gaGJtcCA9IGNyZWF0ZUhh
bmRsZSgmcGl4ZWxzLCAmYm1wSW5mbywgLTEsIGZhbHNlKTsKLSAgICAgICAgaWYgKGhibXApCi0g
ICAgICAgICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0KCksIHNyY1JlY3RXaW4sIGhi
bXAuZ2V0KCksIHBoYXNlV2luKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTZWxlY3RP
YmplY3QoaG1lbWRjLmdldCgpLCBvbGRCbXApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKHVzZUFscGhhICYmIGhhc0FscGhhQmxlbmRTdXBwb3J0KCkp
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEJMRU5ERlVOQ1RJT04gYmxlbmQgPSB7IEFDX1NSQ19P
VkVSLCAwLCAyNTUsIEFDX1NSQ19BTFBIQSB9OwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBhbHBo
YUJsZW5kSWZTdXBwb3J0ZWQoaGRjLCBkc3RSZWN0V2luLmxlZnQsIGRzdFJlY3RXaW4udG9wLCBk
c3RSZWN0V2luLnJpZ2h0IC0gZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2luLmJvdHRvbSAtIGRz
dFJlY3RXaW4udG9wLAotICAgICAgICAgICAgaG1lbWRjLmdldCgpLCAwLCAwLCBzcmNSZWN0V2lu
LnJpZ2h0LCBzcmNSZWN0V2luLmJvdHRvbSwgYmxlbmQpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIH0gZWxzZSBpZiAodXNlQWxwaGEgJiYgIWhhc0FscGhh
QmxlbmRTdXBwb3J0KCkgfHwgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiB1c2VzVHJhbnNw
YXJlbnRDb2xvcigpKSB7Ci0gICAgICAgIFRyYW5zcGFyZW50Qmx0KGhkYywgZHN0UmVjdFdpbi5s
ZWZ0LCBkc3RSZWN0V2luLnRvcCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwK
LSAgICAgICAgICAgIGRzdFJlY3RXaW4uYm90dG9tIC0gZHN0UmVjdFdpbi50b3AsIGhtZW1kYy5n
ZXQoKSwgMCwgMCwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20sIHRyYW5zcGFy
ZW50Q29sb3IoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRFdPUkQgYm1wT3AgPSBvcCA9PSBD
b21wb3NpdGVDb3B5ID8gU1JDQ09QWQotICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBv
c2l0ZVNvdXJjZU92ZXIgPyBTUkNDT1BZCi0gICAgICAgICAgICAgICAgICAgIDogb3AgPT0gQ29t
cG9zaXRlWE9SID8gUEFUSU5WRVJUCi0gICAgICAgICAgICAgICAgICAgIDogb3AgPT0gQ29tcG9z
aXRlQ2xlYXIgPyBXSElURU5FU1MKLSAgICAgICAgICAgICAgICAgICAgOiBTUkNDT1BZOyAvLyBG
SVhFTUU6IG90aGVyIHR5cGVzPwotCi0gICAgICAgIFN0cmV0Y2hESUJpdHMoaGRjLCBkc3RSZWN0
V2luLmxlZnQsIGRzdFJlY3RXaW4udG9wLCBkc3RSZWN0V2luLnJpZ2h0IC0gZHN0UmVjdFdpbi5s
ZWZ0LAotICAgICAgICAgICAgZHN0UmVjdFdpbi5ib3R0b20gLSBkc3RSZWN0V2luLnRvcCwgMCwg
MCwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20sCi0gICAgICAgICAgICBwaXhl
bHMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgYm1wT3ApOwotICAgIH0KLSAgICBTZWxlY3RP
YmplY3QoaG1lbWRjLmdldCgpLCBvbGRCbXApOwotfQotCi1TaGFyZWRCaXRtYXA6OkRDUHJvdmlk
ZXIqIFNoYXJlZEJpdG1hcDo6c19kY1Byb3ZpZGVyID0gbmV3IFNoYXJlZEJpdG1hcDo6RENQcm92
aWRlcjsKLQotSERDIFNoYXJlZEJpdG1hcDo6RENQcm92aWRlcjo6Z2V0REMoU2hhcmVkQml0bWFw
KiBibXAsIHVuc2lnbmVkKiBrZXkpCi17Ci0gICAgaWYgKCFibXAgfHwgIWJtcC0+ZW5zdXJlSGFu
ZGxlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSERDIGhkYyA9IENyZWF0ZUNvbXBhdGli
bGVEQygwKTsKLSAgICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqa2V5ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oU2VsZWN0T2JqZWN0KGhkYywgYm1wLT5nZXRIYW5k
bGUoKSkpOwotICAgIFJFQ1QgcmVjdCA9IHsgMCwgMCwgYm1wLT53aWR0aCgpLCBibXAtPmhlaWdo
dCgpIH07Ci0gICAgYXV0byBjbGlwUmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0Umdu
SW5kaXJlY3QoJnJlY3QpKTsKLSAgICBTZWxlY3RDbGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSk7
Ci0KLSAgICByZXR1cm4gaGRjOwotfQotCi12b2lkIFNoYXJlZEJpdG1hcDo6RENQcm92aWRlcjo6
cmVsZWFzZURDKFNoYXJlZEJpdG1hcCosIEhEQyBoZGMsIHVuc2lnbmVkIGtleTEpCi17Ci0gICAg
aWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNlbGVjdE9iamVjdChoZGMsIHJlaW50
ZXJwcmV0X2Nhc3Q8SEdESU9CSj4oa2V5MSkpOwotICAgIERlbGV0ZURDKGhkYyk7Ci19Ci0KLXZv
aWQgU2hhcmVkQml0bWFwOjpjbGVhclBpeGVscyhjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghbV9waXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgYm1wUmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgYm1wUmVjdC5pbnRlcnNlY3QocmVjdCk7Ci0g
ICAgaWYgKGlzMTZiaXQoKSkgewotICAgICAgICB1bnNpZ25lZCB3ID0gbV9ibXBJbmZvLnBhZGRl
ZFdpZHRoKCk7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0KiBkc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydCo+KG1fcGl4ZWxzKTsKLSAgICAgICAgZHN0ICs9IGJtcFJlY3QueSgpICogdyAr
IGJtcFJlY3QueCgpOwotICAgICAgICBpbnQgd29yZHNUb1NldCA9IGJtcFJlY3Qud2lkdGgoKTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIGRzdEVuZCA9IGRzdCArIGJtcFJlY3QuaGVp
Z2h0KCkgKiB3OwotICAgICAgICB3aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgICAgICB3
bWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KGRzdCksIDAsIHdvcmRzVG9TZXQpOwot
ICAgICAgICAgICAgZHN0ICs9IHc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIHcgPSB3aWR0aCgpOwotICAgIHVuc2lnbmVkKiBkc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCo+KG1fcGl4ZWxzKTsKLSAgICBkc3QgKz0gYm1wUmVjdC55KCkgKiB3ICsg
Ym1wUmVjdC54KCk7Ci0gICAgaW50IHdvcmRzVG9TZXQgPSBibXBSZWN0LndpZHRoKCkgKiAyOwot
ICAgIGNvbnN0IHVuc2lnbmVkKiBkc3RFbmQgPSBkc3QgKyBibXBSZWN0LmhlaWdodCgpICogdzsK
LSAgICB3aGlsZSAoZHN0IDwgZHN0RW5kKSB7Ci0gICAgICAgIHdtZW1zZXQocmVpbnRlcnByZXRf
Y2FzdDx3Y2hhcl90Kj4oZHN0KSwgMCwgd29yZHNUb1NldCk7Ci0gICAgICAgIGRzdCArPSB3Owot
ICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjY4OTViMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE0NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU2hh
cmVkQml0bWFwX2gKLSNkZWZpbmUgU2hhcmVkQml0bWFwX2gKLQotI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xh
c3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
LQotY2xhc3MgU2hhcmVkQml0bWFwOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCaXRtYXA+IHsK
LXB1YmxpYzoKLSAgICB+U2hhcmVkQml0bWFwKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkQml0bWFwPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEJpdG1hcEluZm86OkJpdENvdW50ID0g
Qml0bWFwSW5mbzo6Qml0Q291bnQzMiwgYm9vbCBpbml0UGl4ZWxzID0gdHJ1ZSk7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYsIGNvbnN0IEludFNpemUmLCBib29sIGhhc0FscGhhID0gdHJ1ZSk7Ci0KLSAgICBjb25zdCBC
aXRtYXBJbmZvJiBiaXRtYXBJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvOyB9Ci0gICAg
dm9pZCogYnl0ZXMoKSB7IHJldHVybiBtX3BpeGVsczsgfQotICAgIGNvbnN0IHZvaWQqIGJ5dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHM7IH0KLSAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm1wSW5mby53aWR0aCgpOyB9Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9ibXBJbmZvLmhlaWdodCgpOyB9Ci0gICAgdW5zaWduZWQgdmFsaWRIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRWYWxpZEhl
aWdodCh1bnNpZ25lZCB2YWxpZEhlaWdodCkgeyBtX3ZhbGlkSGVpZ2h0ID0gdmFsaWRIZWlnaHQ7
IH0KLSAgICB2b2lkIHJlc2V0UGl4ZWxzKGJvb2wgYmxhY2sgPSBmYWxzZSk7Ci0gICAgdm9pZCBj
bGVhclBpeGVscyhjb25zdCBJbnRSZWN0JiByKTsKLSAgICBib29sIGxvY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9ja2VkOyB9Ci0gICAgdm9pZCBsb2NrKCkgeyBtX2xvY2tlZCA9IHRydWU7IH0K
LSAgICB2b2lkIHVubG9jaygpIHsgbV9sb2NrZWQgPSBmYWxzZTsgfQotICAgIGJvb2wgZnJlZU1l
bW9yeSgpOwotICAgIGJvb2wgaXMxNmJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mby5pczE2
Yml0KCk7IH0KLSAgICBib29sIGlzMzJiaXQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8uaXMz
MmJpdCgpOyB9Ci0gICAgYm9vbCB0bzE2Yml0KCk7Ci0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KLSAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
IHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Ci0gICAgYm9vbCBlbnN1cmVIYW5kbGUoKTsKLSAgICBI
QklUTUFQIGdldEhhbmRsZSgpIHsgcmV0dXJuIG1faGJpdG1hcC5nZXQoKTsgfQotICAgIEdESU9i
amVjdDxIQklUTUFQPiBjcmVhdGVIYW5kbGUodm9pZCoqIHBpeGVscywgQml0bWFwSW5mbyogYm1w
SW5mbywgaW50IGggPSAtMSwgYm9vbCB1c2UxNmJpdCA9IHRydWUpIGNvbnN0OwotICAgIGJvb2wg
dXNlc1RyYW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNUcmFuc3BhcmVudENv
bG9yOyB9Ci0gICAgQ09MT1JSRUYgdHJhbnNwYXJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNwYXJlbnRDb2xvcjsgfQotICAgIHZvaWQgc2V0VHJhbnNwYXJlbnRDb2xvcihDT0xPUlJF
RiBjKQotICAgIHsKLSAgICAgICAgbV91c2VzVHJhbnNwYXJlbnRDb2xvciA9IHRydWU7Ci0gICAg
ICAgIG1fdHJhbnNwYXJlbnRDb2xvciA9IGM7Ci0gICAgfQotICAgIGJvb2wgY2FuVXNlRElCaXRz
KCkgY29uc3QgeyByZXR1cm4gIWhhc0FscGhhKCkgJiYgIXVzZXNUcmFuc3BhcmVudENvbG9yKCk7
IH0KLQotICAgIEdESU9iamVjdDxIQklUTUFQPiBjbGlwQml0bWFwKGNvbnN0IEludFJlY3QmLCBi
b29sIHVzZUFscGhhLCBCaXRtYXBJbmZvJiwgdm9pZComIHBpeGVscyk7Ci0KLSAgICBQYXNzUmVm
UHRyPFNoYXJlZEJpdG1hcD4gY2xpcEJpdG1hcChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIHVz
ZUFscGhhKTsKLQotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IElu
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7Ci0gICAgdm9p
ZCBkcmF3KEhEQywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwotCi0gICAgY2xh
c3MgRENQcm92aWRlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIEhEQyBnZXREQyhT
aGFyZWRCaXRtYXAqLCB1bnNpZ25lZCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURD
KFNoYXJlZEJpdG1hcCosIEhEQywgdW5zaWduZWQpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgRENQ
cm92aWRlciogc19kY1Byb3ZpZGVyOwotCi0gICAgSERDIGdldERDKHVuc2lnbmVkKiBrZXkxKSB7
IHJldHVybiBzX2RjUHJvdmlkZXItPmdldERDKHRoaXMsIGtleTEpOyB9Ci0gICAgdm9pZCByZWxl
YXNlREMoSERDIGhkYywgdW5zaWduZWQga2V5MSkgeyBzX2RjUHJvdmlkZXItPnJlbGVhc2VEQyh0
aGlzLCBoZGMsIGtleTEpOyB9Ci0KLSAgICBjbGFzcyBEQ0hvbGRlciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBEQ0hvbGRlcihTaGFyZWRCaXRtYXAqIGJtcCA9IDApIHsgc2V0SW50ZXJuYWwoYm1w
KTsgfQotICAgICAgICB+RENIb2xkZXIoKSB7IGNsZWFySW50ZXJuYWwoKTsgfQotICAgICAgICB2
b2lkIHNldChTaGFyZWRCaXRtYXAqIGJtcCA9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNs
ZWFySW50ZXJuYWwoKTsKLSAgICAgICAgICAgIHNldEludGVybmFsKGJtcCk7Ci0gICAgICAgIH0K
LSAgICAgICAgSERDIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faGRjOyB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgRENIb2xkZXImIG9wZXJhdG9yPShjb25zdCBEQ0hvbGRlciYpOwotICAgICAgICBE
Q0hvbGRlcihjb25zdCBEQ0hvbGRlciYpOwotICAgICAgICB2b2lkIGNsZWFySW50ZXJuYWwoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9oZGMpCi0gICAgICAgICAgICAgICAgbV9iaXRt
YXAtPnJlbGVhc2VEQyhtX2hkYywgbV9rZXkpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0
SW50ZXJuYWwoU2hhcmVkQml0bWFwKiBibXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYml0
bWFwID0gYm1wOwotICAgICAgICAgICAgbV9oZGMgPSBibXAgPyBibXAtPmdldERDKCZtX2tleSkg
OiAwOwotICAgICAgICB9Ci0gICAgICAgIFNoYXJlZEJpdG1hcCogbV9iaXRtYXA7Ci0gICAgICAg
IEhEQyBtX2hkYzsKLSAgICAgICAgdW5zaWduZWQgbV9rZXk7Ci0gICAgfTsKLQotcHJpdmF0ZToK
LSAgICBTaGFyZWRCaXRtYXAoY29uc3QgSW50U2l6ZSYsIEJpdG1hcEluZm86OkJpdENvdW50LCBi
b29sIGluaXRQaXhlbHMpOwotICAgIEJpdG1hcEluZm8gbV9ibXBJbmZvOwotICAgIEdESU9iamVj
dDxIQklUTUFQPiBtX2hiaXRtYXA7Ci0gICAgdm9pZCogbV9waXhlbHM7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPHVuc2lnbmVkW10+IG1fcGl4ZWxEYXRhOwotICAgIENPTE9SUkVGIG1fdHJhbnNwYXJl
bnRDb2xvcjsKLSAgICBpbnQgbV92YWxpZEhlaWdodDsKLSAgICBib29sIG1fbG9ja2VkOwotICAg
IGJvb2wgbV91c2VzVHJhbnNwYXJlbnRDb2xvcjsKLSAgICBib29sIG1faGFzQWxwaGE7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTaGFyZWRCaXRtYXBfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9u
dERhdGFXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9T
aW1wbGVGb250RGF0YVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNi
OGY4Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1leHRlcm4gSERDIGdf
c2NyZWVuREM7Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNv
bnN0IFRFWFRNRVRSSUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOwotICAgIG1faXNT
eXN0ZW1Gb250ID0gbV9wbGF0Zm9ybURhdGEuaXNTeXN0ZW1Gb250KCk7Ci0KLSAgICBmbG9hdCBh
c2NlbnQgPSAodG0udG1Bc2NlbnQgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3Mi4w
ZjsKLSAgICBmbG9hdCBkZXNjZW50ID0gKHRtLnRtRGVzY2VudCAqIG1fcGxhdGZvcm1EYXRhLnNp
emUoKSArIDM2KSAvIDcyLjBmOwotICAgIGZsb2F0IGxpbmVHYXAgPSAodG0udG1FeHRlcm5hbExl
YWRpbmcgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3Mi4wZjsKLSAgICBtX2ZvbnRN
ZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChk
ZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2Nl
bnQpICsgbHJvdW5kZihsaW5lR2FwKSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KGFz
Y2VudCAqIDAuNTZmKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzYyhmb250RGVzY3JpcHRpb24pOwotICAgIGZvbnREZXNjLnNldENvbXB1dGVkU2l6
ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2MuY29tcHV0ZWRTaXplKCkpKTsKLSAgICBm
b250RGVzYy5zZXRTcGVjaWZpZWRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVzYy5z
cGVjaWZpZWRTaXplKCkpKTsKLSAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6ZShscm91bmRmKHNj
YWxlRmFjdG9yICogZm9udERlc2Mua2V5d29yZFNpemUoKSkpOwotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIHJlc3VsdCA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2MsIG1fcGxhdGZvcm1EYXRhLmZhbWlseSgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7Ci19
Ci0KLURXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOwot
Ci1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLmlz
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBGSVhNRTogTWljcm9z
b2Z0IGRvY3VtZW50YXRpb24gc2VlbXMgdG8gaW1wbHkgdGhhdCBjaGFyYWN0ZXJzIGNhbiBiZSBv
dXRwdXQgdXNpbmcgYSBnaXZlbiBmb250IGFuZCBEQwotICAgIC8vIG1lcmVseSBieSB0ZXN0aW5n
IGNvZGUgcGFnZSBpbnRlcnNlY3Rpb24uICBUaGlzIHNlZW1zIHN1c3BlY3QgdGhvdWdoLiAgQ2Fu
J3QgYSBmb250IG9ubHkgcGFydGlhbGx5Ci0gICAgLy8gY292ZXIgYSBnaXZlbiBjb2RlIHBhZ2U/
Ci0KLSAgICAvLyBGSVhNRTogaW4gdGhlIGNhc2UgdGhhdCB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBp
bnRlcmZhY2UsIHN0aWxsIHVzZSB0aGUgZm9udC4KLSAgICBJTUxhbmdGb250TGlua1R5cGUqIGxh
bmdGb250TGluayA9IGZvbnRDYWNoZSgpLmdldEZvbnRMaW5rSW50ZXJmYWNlKCk7Ci0gICAgaWYg
KCFsYW5nRm9udExpbmspCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgRFdPUkQgZm9udENv
ZGVQYWdlcyA9IG1fcGxhdGZvcm1EYXRhLmNvZGVQYWdlcygpOwotICAgIGlmICghZm9udENvZGVQ
YWdlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdPUkQgYWNwQ29kZVBhZ2VzID0g
MDsKLSAgICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoQ1BfQUNQLCAmYWNwQ29k
ZVBhZ2VzKTsKLQotICAgIERXT1JEIGFjdHVhbENvZGVQYWdlczsKLSAgICBsb25nIG51bUNoYXJh
Y3RlcnNQcm9jZXNzZWQ7Ci0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICBsYW5nRm9udExp
bmstPkdldFN0ckNvZGVQYWdlcyhjaGFyYWN0ZXJzLCBsZW5ndGgsIGFjcENvZGVQYWdlcywgJmFj
dHVhbENvZGVQYWdlcywgJm51bUNoYXJhY3RlcnNQcm9jZXNzZWQpOwotICAgICAgICBpZiAoYWN0
dWFsQ29kZVBhZ2VzICYmICEoYWN0dWFsQ29kZVBhZ2VzICYgZm9udENvZGVQYWdlcykpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbGVuZ3RoIC09IG51bUNoYXJhY3RlcnNQ
cm9jZXNzZWQ7Ci0gICAgICAgIGNoYXJhY3RlcnMgKz0gbnVtQ2hhcmFjdGVyc1Byb2Nlc3NlZDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2goKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRh
Lm1ldHJpY3MoKTsKLQotICAgIC8vIFllcywgdGhpcyBsb29rcyBiYWNrd2FyZHMsIGJ1dCB0aGUg
Zml4ZWQgcGl0Y2ggYml0IGlzIGFjdHVhbGx5IHNldCBpZiB0aGUgZm9udAotICAgIC8vIGlzICpu
b3QqIGZpeGVkIHBpdGNoLiAgVW5iZWxpZXZhYmxlIGJ1dCB0cnVlLgotICAgIG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPSAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKTsKLX0K
LQotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBo
KSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLSAgICAKLWZsb2F0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fcGxhdGZvcm1EYXRhLmlzRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBIR0RJT0JKIGhPbGRGb250ID0gU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG1fcGxhdGZv
cm1EYXRhLmhmb250KCkpOwotCi0gICAgU0laRSBmb250U2l6ZTsKLSAgICB3Y2hhcl90IGMgPSBn
bHlwaDsKLSAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMihnX3NjcmVlbkRDLCAmYywgMSwgJmZvbnRT
aXplKTsKLQotICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBoT2xkRm9udCk7Ci0KLSAgICBy
ZXR1cm4gKGZsb2F0KWZvbnRTaXplLmN4ICogKGZsb2F0KW1fcGxhdGZvcm1EYXRhLnNpemUoKSAv
IDcyLmY7Ci19Ci0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0
KCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29uc3QgVEVYVE1FVFJJQyYgdG0gPSBtX3BsYXRmb3JtRGF0YS5tZXRyaWNzKCk7
Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAodG0udG1BdmVDaGFyV2lkdGggKiBtX3BsYXRmb3JtRGF0
YS5zaXplKCkgKyAzNikgLyA3MjsKLSAgICBtX21heENoYXJXaWR0aCA9ICh0bS50bU1heENoYXJX
aWR0aCAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDM2KSAvIDcyOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9XaW5DRUdyYXBoaWNzRXh0cmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9XaW5DRUdyYXBoaWNzRXh0cmFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRjYWIyMWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvV2luQ0VHcmFwaGljc0V4dHJhcy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXaW5DRUdyYXBoaWNzRXh0cmFzX2gKLSNkZWZpbmUg
V2luQ0VHcmFwaGljc0V4dHJhc19oCi0KLS8vIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGNvbnRhaW4g
c21hbGwgdXRpbGl0aWVzIHVzZWQgYnkgV0lOQ0UgZ3JhcGhpY3MgY29kZS4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIC8vIEFsd2F5cyByb3VuZCB0byBzYW1lIGRpcmVjdGlvbi4gMC41IGlz
IHJvdW5kZWQgdG8gMSwKLSAgICAvLyBhbmQgLTAuNSAoMC41IC0gMSkgaXMgcm91bmRlZCB0byAw
ICgxIC0gMSksIHNvIHRoYXQgaXQKLSAgICAvLyBpcyBjb25zaXN0ZW50IHdoZW4gdHJhbnNmb3Jt
YXRpb24gc2hpZnRzLgotICAgIHN0YXRpYyBpbmxpbmUgaW50IHN0YWJsZVJvdW5kKGRvdWJsZSBk
KQotICAgIHsKLSAgICAgICAgaWYgKGQgPiAwKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oZCArIDAuNSk7Ci0KLSAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQp
OwotICAgICAgICByZXR1cm4gaSAtIGQgPiAwLjUgPyBpIC0gMSA6IGk7Ci0gICAgfQotfQotCi0j
ZW5kaWYgV2luQ0VHcmFwaGljc0V4dHJhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmlu
ZGV4IGE0ZmE2ZDEuLjVmYzhjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCkBAIC0z
MSwxNSArMzEsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIE5lZWRlZCBieSBqcGVnbGliLmgg
Zm9yIEZJTEUuCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBS
ZW1vdmUgd2FybmluZzogJ0ZBUicgbWFjcm8gcmVkZWZpbml0aW9uCi0jdW5kZWYgRkFSCi0KLS8v
IGptb3JlY2ZnLmggaW4gbGlianBlZyBjaGVja3MgZm9yIFhNRF9IIHdpdGggdGhlIGNvbW1lbnQ6
ICJYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIiCi0vLyBmaXggSU5UMzIgcmVkZWZp
bml0aW9uIGVycm9yIGJ5IHByZXRlbmRpbmcgd2UgYXJlIFgxMS94bWQuaAotI2RlZmluZSBYTURf
SAotI2VuZGlmCi0KIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5v
dGlmaWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL05ldHdv
cmtTdGF0ZU5vdGlmaWVyV2luLmNwcAppbmRleCBkZGVkYWJmLi4wYTUxZjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3RpZmll
cldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29y
a1N0YXRlTm90aWZpZXJXaW4uY3BwCkBAIC0xMDcsMTQgKzEwNywxMSBAQCBOZXR3b3JrU3RhdGVO
b3RpZmllcjo6TmV0d29ya1N0YXRlTm90aWZpZXIoKQogCiAgICAgbWVtc2V0KCZtX292ZXJsYXBw
ZWQsIDAsIHNpemVvZihtX292ZXJsYXBwZWQpKTsKIAotLy8gRklYTUU6IENoZWNrIG1fb3Zlcmxh
cHBlZCBvbiBXaW5DRS4KLSNpZiAhT1MoV0lOQ0UpCiAgICAgbV9vdmVybGFwcGVkLmhFdmVudCA9
IDo6Q3JlYXRlRXZlbnQoMCwgZmFsc2UsIGZhbHNlLCAwKTsKIAogICAgIDo6UmVnaXN0ZXJXYWl0
Rm9yU2luZ2xlT2JqZWN0KCZtX3dhaXRIYW5kbGUsIG1fb3ZlcmxhcHBlZC5oRXZlbnQsIGFkZHJD
aGFuZ2VDYWxsYmFjaywgdGhpcywgSU5GSU5JVEUsIDApOwogCiAgICAgcmVnaXN0ZXJGb3JBZGRy
ZXNzQ2hhbmdlKCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oCmluZGV4IDc0MDQ4NTQuLmM2YjJlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgKQEAgLTM0LDEwICszNCw2IEBACiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogCi0jaWYgIU9T
KFdJTkNFKQotI2luY2x1ZGUgPGd1aWRkZWYuaD4KLSNlbmRpZgotCiB0eXBlZGVmIGxvbmcgSFJF
U1VMVDsKIAogLy8gRklYTUU6IFNob3VsZCB3ZSBwdXQgdGhpcyBpbnRvIHRoZSBXZWJDb3JlIG5h
bWVzcGFjZSBhbmQgdXNlICJ1c2luZyIgb24gaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKaW5kZXggMmJjY2YxYS4uN2Zk
YzZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFV0aWxpdGllc1dpbi5jcHAKQEAgLTMxLDE0ICszMSwxMiBAQAogI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPHNobG9iai5oPgorI2luY2x1
ZGUgPHNobHdhcGkuaD4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+IC8vIGZvciBJTlRFUk5FVF9NQVhf
VVJMX0xFTkdUSAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0j
aWYgIU9TKFdJTkNFKQotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNlbmRpZgogCiAjaWYgVVNFKENG
KQogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVJdGVtV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudUl0ZW1XaW4uY3BwCmluZGV4IDVm
OTU1YmYuLjNhNjRjYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
b250ZXh0TWVudUl0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
b250ZXh0TWVudUl0ZW1XaW4uY3BwCkBAIC0yOCwxOCArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnUuaCIKIAotI2lmIE9TKFdJTkNFKQotI2lmbmRlZiBNRlNfRElTQUJMRUQKLSNkZWZp
bmUgTUZTX0RJU0FCTEVEIE1GX0dSQVlFRAotI2VuZGlmCi0jaWZuZGVmIE1JSU1fRlRZUEUKLSNk
ZWZpbmUgTUlJTV9GVFlQRSBNSUlNX1RZUEUKLSNlbmRpZgotI2lmbmRlZiBNSUlNX1NUUklORwot
I2RlZmluZSBNSUlNX1NUUklORyAwCi0jZW5kaWYKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIENvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKGNvbnN0IE1FTlVJVEVNSU5G
TyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0
TWVudVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4u
Y3BwCmluZGV4IDM3NTVmMjQuLjQ1MDQ3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NvbnRleHRNZW51V2luLmNwcApAQCAtNTIsOSArNTIsNiBAQCBDb250ZXh0TWVudTo6
Q29udGV4dE1lbnUoSE1FTlUgbWVudSkKIAogdm9pZCBDb250ZXh0TWVudTo6Z2V0Q29udGV4dE1l
bnVJdGVtcyhITUVOVSBtZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCiB7Ci0j
aWYgT1MoV0lOQ0UpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgaW50IGNvdW50
ID0gOjpHZXRNZW51SXRlbUNvdW50KG1lbnUpOwogICAgIGlmIChjb3VudCA8PSAwKQogICAgICAg
ICByZXR1cm47CkBAIC04MCw3ICs3Nyw2IEBAIHZvaWQgQ29udGV4dE1lbnU6OmdldENvbnRleHRN
ZW51SXRlbXMoSE1FTlUgbWVudSwgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIGl0ZW1zCiAgICAg
ICAgIGlmICg6OkdldE1lbnVJdGVtSW5mbyhtZW51LCBpLCBUUlVFLCAmaW5mbykpCiAgICAgICAg
ICAgIGl0ZW1zLmFwcGVuZChDb250ZXh0TWVudUl0ZW0oaW5mbykpOwogICAgIH0KLSNlbmRpZgog
fQogCiBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21JdGVt
cyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCkBAIC05MiwzMSArODgsNiBA
QCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21JdGVtcyhj
b25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogCiAgICAgICAgIE1FTlVJVEVNSU5GTyBtZW51SXRl
bSA9IGl0ZW0ucGxhdGZvcm1Db250ZXh0TWVudUl0ZW0oKTsKIAotI2lmIE9TKFdJTkNFKQotICAg
ICAgICBVSU5UIGZsYWdzID0gTUZfQllQT1NJVElPTjsKLSAgICAgICAgVUlOVCBuZXdJdGVtID0g
MDsKLSAgICAgICAgTFBDV1NUUiB0aXRsZSA9IDA7Ci0KLSAgICAgICAgaWYgKGl0ZW0udHlwZSgp
ID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgICAgICBmbGFncyB8PSBNRl9TRVBBUkFUT1I7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxhZ3MgfD0gTUZfU1RSSU5HOwotICAgICAgICAg
ICAgZmxhZ3MgfD0gaXRlbS5jaGVja2VkKCkgPyBNRl9DSEVDS0VEIDogTUZfVU5DSEVDS0VEOwot
ICAgICAgICAgICAgZmxhZ3MgfD0gaXRlbS5lbmFibGVkKCkgPyBNRl9FTkFCTEVEIDogTUZfR1JB
WUVEOwotCi0gICAgICAgICAgICB0aXRsZSA9IG1lbnVJdGVtLmR3VHlwZURhdGE7Ci0gICAgICAg
ICAgICBtZW51SXRlbS5kd1R5cGVEYXRhID0gMDsKLQotICAgICAgICAgICAgaWYgKG1lbnVJdGVt
LmhTdWJNZW51KSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gTUZfUE9QVVA7Ci0gICAgICAg
ICAgICAgICAgbmV3SXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUlOVD4obWVudUl0ZW0uaFN1Yk1l
bnUpOwotICAgICAgICAgICAgICAgIG1lbnVJdGVtLmhTdWJNZW51ID0gMDsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBtZW51SXRlbS53SUQ7Ci0gICAgICAg
IH0KLQotICAgICAgICA6Okluc2VydE1lbnVXKG1lbnUsIGksIGZsYWdzLCBuZXdJdGVtLCB0aXRs
ZSk7Ci0jZWxzZQogICAgICAgICAvLyBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtQ29udGV4dE1l
bnVJdGVtIGRvZXNuJ3Qgc2V0IHRoZSB0aXRsZSBvZiB0aGUgTUVOVUlURU1JTkZPIHRvIG1ha2Ug
dGhlCiAgICAgICAgIC8vIGxpZmV0aW1lIGhhbmRsaW5nIGVhc2llciBmb3IgY2FsbGVycy4KICAg
ICAgICAgVmVjdG9yPFVDaGFyPiB3aWRlQ2hhclRpdGxlOyAvLyBSZXRhaW4gYnVmZmVyIGZvciBs
b25nIGVub3VnaCB0byBtYWtlIHRoZSBJbnNlcnRNZW51SXRlbSBjYWxsCkBAIC0xMzAsNyArMTAx
LDYgQEAgSE1FTlUgQ29udGV4dE1lbnU6OmNyZWF0ZVBsYXRmb3JtQ29udGV4dE1lbnVGcm9tSXRl
bXMoY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXQKICAgICAgICAgfQogCiAgICAgICAgIDo6SW5z
ZXJ0TWVudUl0ZW0obWVudSwgaSwgVFJVRSwgJm1lbnVJdGVtKTsKLSNlbmRpZgogICAgIH0KIAog
ICAgIHJldHVybiBtZW51OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
V2luLmNwcAppbmRleCAwZDhkNDQxLi5iNWE4MDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMTA1LDcgKzEwNSw2IEBAIGNvbnN0IGZsb2F0
IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsKIHN0YXRpYyBGb250IGRyYWdMYWJlbEZvbnQoaW50
IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKICAg
ICBGb250IHJlc3VsdDsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRy
aWNzOwogICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwogICAgIFN5c3RlbVBh
cmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1l
dHJpY3MsIDApOwpAQCAtMTE4LDcgKzExNyw2IEBAIHN0YXRpYyBGb250IGRyYWdMYWJlbEZvbnQo
aW50IHNpemUsIGJvb2wgYm9sZCwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKICAg
ICBkZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwogICAgIHJlc3Vs
dCA9IEZvbnQoZGVzY3JpcHRpb24sIDAsIDApOwogICAgIHJlc3VsdC51cGRhdGUoMCk7Ci0jZW5k
aWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggYzY1MjkzZC4uNWQ0OWI0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMTU2LDE5ICsxNTYs
NiBAQCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKIAogU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQogewotI2lmIE9TKFdJTkNFKQotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLQotICAgIGJ1aWxkZXIuYXBwZW5kKHBhdGgpOwotCi0gICAgVUNoYXIgbGFzdFBhdGhD
aGFyYWN0ZXIgPSBwYXRoW3BhdGgubGVuZ3RoKCkgLSAxXTsKLSAgICBpZiAobGFzdFBhdGhDaGFy
YWN0ZXIgIT0gTCdcXCcgJiYgbGFzdFBhdGhDaGFyYWN0ZXIgIT0gTCcvJyAmJiBjb21wb25lbnRb
MF0gIT0gTCdcXCcgJiYgY29tcG9uZW50WzBdICE9IEwnLycpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKFBsYXRmb3JtRmlsZVBhdGhTZXBhcmF0b3IpOwotCi0gICAgYnVpbGRlci5hcHBlbmQoY29t
cG9uZW50KTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0jZWxzZQogICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKIAogICAgIGlmIChwYXRoLmxlbmd0aCgpICsg
MSA+IGJ1ZmZlci5zaXplKCkpCkBAIC0xODMsNyArMTcwLDYgQEAgU3RyaW5nIHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50
KQogICAgIGJ1ZmZlci5zaHJpbmsod2NzbGVuKGJ1ZmZlci5kYXRhKCkpKTsKIAogICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci0jZW5kaWYKIH0KIAogI2lmICFVU0UoQ0YpCkBAIC0y
MjYsMjQgKzIxMiw3IEBAIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCiAKIFN0cmluZyBwYXRo
R2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotI2lmIE9TKFdJTkNFKQotICAgIHNp
emVfdCBwb3NpdGlvblNsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgnLycpOwotICAgIHNpemVfdCBw
b3NpdGlvbkJhY2tzbGFzaCA9IHBhdGgucmV2ZXJzZUZpbmQoJ1xcJyk7Ci0KLSAgICBzaXplX3Qg
cG9zaXRpb247Ci0gICAgaWYgKHBvc2l0aW9uU2xhc2ggPT0gbm90Rm91bmQpCi0gICAgICAgIHBv
c2l0aW9uID0gcG9zaXRpb25CYWNrc2xhc2g7Ci0gICAgZWxzZSBpZiAocG9zaXRpb25CYWNrc2xh
c2ggPT0gbm90Rm91bmQpCi0gICAgICAgIHBvc2l0aW9uID0gIHBvc2l0aW9uU2xhc2g7Ci0gICAg
ZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHN0ZDo6bWF4KHBvc2l0aW9uU2xhc2gsIHBvc2l0aW9u
QmFja3NsYXNoKTsKLQotICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0
dXJuIHBhdGg7Ci0gICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBvc2l0aW9uICsgMSk7Ci0jZWxz
ZQogICAgIHJldHVybiBTdHJpbmcoOjpQYXRoRmluZEZpbGVOYW1lKFN0cmluZyhwYXRoKS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkpOwotI2VuZGlmCiB9CiAKIFN0cmlu
ZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTI3OCw5ICsyNDcsNiBAQCBz
dGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogCiBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VEaXJlY3Rv
cnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCiB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJuIFN0
cmluZygpOwotI2Vsc2UKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CiAgICAg
aWYgKEZBSUxFRChTSEdldEZvbGRlclBhdGhXKDAsIHBhdGhJZGVudGlmaWVyIHwgQ1NJRExfRkxB
R19DUkVBVEUsIDAsIDAsIGJ1ZmZlci5kYXRhKCkpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwpAQCAtMjkzLDcgKzI1OSw2IEBAIHN0YXRpYyBTdHJpbmcgc3RvcmFnZURpcmVjdG9yeShEV09S
RCBwYXRoSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgcmV0dXJu
IGRpcmVjdG9yeTsKLSNlbmRpZgogfQogCiBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VEaXJl
Y3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
TG9nZ2luZ1dpbi5jcHAKaW5kZXggMmZhZTc3OC4uZjM2YTE0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcApAQCAtMzgsOSArMzgsNiBAQCBzdGF0aWMgY2hh
ciAqIGNvbnN0IGxvZ2dpbmdFbnZpcm9ubWVudFZhcmlhYmxlID0gIldlYkNvcmVMb2dnaW5nIjsK
IAogU3RyaW5nIGxvZ0xldmVsU3RyaW5nKCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKLSNlbHNlCiAgICAgRFdPUkQgbGVuZ3RoID0gR2V0RW52aXJvbm1lbnRW
YXJpYWJsZUEobG9nZ2luZ0Vudmlyb25tZW50VmFyaWFibGUsIDAsIDApOwogICAgIGlmICghbGVu
Z3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTUxLDcgKzQ4LDYgQEAgU3Ry
aW5nIGxvZ0xldmVsU3RyaW5nKCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3Rl
Ym9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCmluZGV4IGNlNWE3ZTIuLmMyYTA3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTc5LDEyICs3OSwxMCBAQCBzdGF0aWMgTFJFU1VM
VCBDQUxMQkFDSyBQYXN0ZWJvYXJkT3duZXJXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gdwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX0RFU1RST1k6CiAgICAgICAg
IGJyZWFrOwotI2lmICFPUyhXSU5DRSkKICAgICBjYXNlIFdNX0RSQVdDTElQQk9BUkQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV01fQ0hBTkdFQ0JDSEFJTjoKICAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBscmVzdWx0ID0gRGVmV2luZG93UHJvYyhoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTYsMTAgKzk0
LDggQEAgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKQogewogICAgIE93blB0cjxQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkID0gYWRvcHRQdHIo
bmV3IFBhc3RlYm9hcmQpOwogICAgIENPTVB0cjxJRGF0YU9iamVjdD4gY2xpcGJvYXJkRGF0YTsK
LSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYgKCFTVUNDRUVERUQoT2xlR2V0Q2xpcGJvYXJkKCZjbGlw
Ym9hcmREYXRhKSkpCiAgICAgICAgIGNsaXBib2FyZERhdGEgPSAwOwotI2VuZGlmCiAgICAgcGFz
dGVib2FyZC0+c2V0RXh0ZXJuYWxEYXRhT2JqZWN0KGNsaXBib2FyZERhdGEuZ2V0KCkpOwogICAg
IHJldHVybiBwYXN0ZWJvYXJkLnJlbGVhc2UoKTsKIH0KQEAgLTUyNSw3ICs1MjEsNiBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBs
YWNlT3B0aW9uIHNtYXJ0UmVwbAogICAgIHdyaXRlUGxhaW5UZXh0VG9EYXRhT2JqZWN0KHRleHQs
IHNtYXJ0UmVwbGFjZU9wdGlvbik7CiB9CiAKLSNpZiAhT1MoV0lOQ0UpCiBzdGF0aWMgaW5saW5l
IHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyhQV1NUUiBwc3osIHNpemVfdCBsZW5ndGgp
CiB7CiAgICAgc2l6ZV90IHdyaXRlVG8gPSAwOwpAQCAtNTM5LDE0ICs1MzQsOSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgcGF0aFJlbW92ZUJhZEZTQ2hhcmFjdGVycyhQV1NUUiBwc3osIHNpemVfdCBs
ZW5ndGgpCiAgICAgfQogICAgIHBzelt3cml0ZVRvXSA9IDA7CiB9Ci0jZW5kaWYKIAogc3RhdGlj
IFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21VcmxPclRpdGxlKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBVQ2hhciogZXh0ZW5zaW9uLCBib29sIGlzTGluaykK
IHsKLSNpZiBPUyhXSU5DRSkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLSNlbHNlCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmc1BhdGhNYXhMZW5ndGhFeGNs
dWRpbmdOdWxsVGVybWluYXRvciA9IE1BWF9QQVRIIC0gMTsKICAgICBib29sIHVzZWRVUkwgPSBm
YWxzZTsKICAgICBXQ0hBUiBmc1BhdGhCdWZmZXJbTUFYX1BBVEhdOwpAQCAtNTg5LDcgKzU3OSw2
IEBAIHN0YXRpYyBTdHJpbmcgZmlsZXN5c3RlbVBhdGhGcm9tVXJsT3JUaXRsZShjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsCiAgICAgfQogCiAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihmc1BhdGhCdWZmZXIpLCBleHRlbnNpb24pOwot
I2VuZGlmCiB9CiAKIC8vIHdyaXRlRmlsZVRvRGF0YU9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2Yg
ZmlsZURlc2NyaXB0b3IgYW5kIGZpbGVDb250ZW50CkBAIC05NjYsMTAgKzk1NSw2IEBAIHN0YXRp
YyBIR0xPQkFMIGNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudChjb25zdCBVUkwmIHVybCwgU3RyaW5n
JiBmaWxlTmFtZSwgU2hhcmVkCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgIH0gZWxzZSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotI2Vsc2UKICAgICAgICAgV0NIQVIgdGVtcFBhdGhbTUFYX1BBVEhd
OwogICAgICAgICBXQ0hBUiBleHRlbnNpb25bTUFYX1BBVEhdOwogICAgICAgICBpZiAoITo6R2V0
VGVtcFBhdGgoV1RGX0FSUkFZX0xFTkdUSCh0ZW1wUGF0aCksIHRlbXBQYXRoKSkKQEAgLTEwMDEs
NyArOTg2LDYgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KGNvbnN0
IFVSTCYgdXJsLCBTdHJpbmcmIGZpbGVOYW1lLCBTaGFyZWQKICAgICAgICAgQ2xvc2VIYW5kbGUo
dGVtcEZpbGVIYW5kbGUpOwogICAgICAgICBpZiAoIXRlbXBXcml0ZVN1Y2NlZWRlZCkKICAgICAg
ICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgfQogCiAgICAgU0laRV9UIGRyb3BGaWxlc1Np
emUgPSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogKHdjc2xlbihmaWxlUGF0
aCkgKyAyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZv
cm1Nb3VzZUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9y
bU1vdXNlRXZlbnRXaW4uY3BwCmluZGV4IDE0M2JiYWEuLmYxOTUzMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCkBA
IC02Niw5ICs2Niw3IEBAIHN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIG1lc3NhZ2VUb0V2ZW50
VHlwZShVSU5UIG1lc3NhZ2UpCiAgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgogICAgICAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQ7CiAKLSNpZiAhT1MoV0lOQ0Up
CiAgICAgICAgIGNhc2UgV01fTU9VU0VMRUFWRToKLSNlbmRpZgogICAgICAgICBjYXNlIFdNX01P
VVNFTU9WRToKICAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwog
CkBAIC0xMDQsOSArMTAyLDcgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZl
bnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIEwKICAgICAgICAgICAg
IG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgV01fTU9VU0VNT1ZFOgotI2lmICFPUyhXSU5DRSkKICAgICAgICAgY2FzZSBXTV9NT1VTRUxF
QVZFOgotI2VuZGlmCiAgICAgICAgICAgICBpZiAod1BhcmFtICYgTUtfTEJVVFRPTikKICAgICAg
ICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247CiAgICAgICAgICAgICBlbHNlIGlmICh3
UGFyYW0gJiBNS19NQlVUVE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
bGF0Zm9ybVNjcmVlbldpbi5jcHAKaW5kZXggY2M5YTAyMy4uZGVhOTU0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCkBAIC01NSwx
MyArNTUsOCBAQCBzdGF0aWMgREVWTU9ERSBkZXZpY2VJbmZvRm9yV2lkZ2V0KFdpZGdldCogd2lk
Z2V0KQogICAgIERFVk1PREUgZGV2aWNlSW5mbzsKICAgICBkZXZpY2VJbmZvLmRtU2l6ZSA9IHNp
emVvZihERVZNT0RFKTsKICAgICBkZXZpY2VJbmZvLmRtRHJpdmVyRXh0cmEgPSAwOwotI2lmIE9T
KFdJTkNFKQotICAgIGlmICghRW51bURpc3BsYXlTZXR0aW5ncygwLCBFTlVNX0NVUlJFTlRfU0VU
VElOR1MsICZkZXZpY2VJbmZvKSkKLSAgICAgICAgZGV2aWNlSW5mby5kbUJpdHNQZXJQZWwgPSAx
NjsKLSNlbHNlCiAgICAgTU9OSVRPUklORk9FWCBtb25pdG9ySW5mbyA9IG1vbml0b3JJbmZvRm9y
V2lkZ2V0KHdpZGdldCk7CiAgICAgRW51bURpc3BsYXlTZXR0aW5ncyhtb25pdG9ySW5mby5zekRl
dmljZSwgRU5VTV9DVVJSRU5UX1NFVFRJTkdTLCAmZGV2aWNlSW5mbyk7Ci0jZW5kaWYKIAogICAg
IHJldHVybiBkZXZpY2VJbmZvOwogfQpAQCAtODUsMTMgKzgwLDggQEAgaW50IHNjcmVlbkRlcHRo
UGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9tZShX
aWRnZXQqIHdpZGdldCkKIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAvLyBFbnVtRGlzcGxheVNldHRp
bmdzIGRvZXNuJ3Qgc2V0IGRtQ29sb3IgaW4gREVWTU9ERS4KLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZWxzZQogICAgIERFVk1PREUgZGV2aWNlSW5mbyA9IGRldmljZUluZm9Gb3JXaWRnZXQod2lkZ2V0
KTsKICAgICByZXR1cm4gZGV2aWNlSW5mby5kbUNvbG9yID09IERNQ09MT1JfTU9OT0NIUk9NRTsK
LSNlbmRpZgogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggNWYxMmU3ZS4u
NTU0NmJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5j
cHAKQEAgLTQ5LDEwICs0OSw2IEBACiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8
d2luZG93c3guaD4KLSNpZiBPUyhXSU5DRSkKLSNpbmNsdWRlIDxSZXNEZWZDRS5oPgotI2RlZmlu
ZSBNQUtFUE9JTlRTKGwpICgqKChQT0lOVFMgRkFSICopJihsKSkpCi0jZW5kaWYKIAogI2RlZmlu
ZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4ODAwMAogCkBAIC0xNjQsNyArMTYwLDYgQEAgdm9pZCBQ
b3B1cE1lbnVXaW46OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2aWV3LCBpbnQg
aW5kZXgpCiAgICAgICAgICAgICBzZXRGb2N1c2VkSW5kZXgoaW5kZXgpOwogICAgIH0KIAotI2lm
ICFPUyhXSU5DRSkKICAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRDT01CT0JPWEFO
SU1BVElPTiwgMCwgJnNob3VsZEFuaW1hdGUsIDApOwogCiAgICAgaWYgKHNob3VsZEFuaW1hdGUp
IHsKQEAgLTE3Myw5ICsxNjgsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hvdyhjb25zdCBJbnRS
ZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAgaWYgKCE6OklzUmVj
dEVtcHR5KCZ2aWV3UmVjdCkpCiAgICAgICAgICAgICA6OkFuaW1hdGVXaW5kb3cobV9wb3B1cCwg
ZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uLCBBV19CTEVORCk7CiAgICAgfSBlbHNlCi0jZW5kaWYK
LQotICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJVkFURSk7CisgICAgICAg
IDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJVkFURSk7CiAKICAgICBtX3Nob3dQ
b3B1cCA9IHRydWU7CiAKQEAgLTE5OSw3ICsxOTIsNiBAQCB2b2lkIFBvcHVwTWVudVdpbjo6c2hv
dyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gU3RlYWwgbW91c2UgbWVzc2FnZXMuCi0j
aWYgIU9TKFdJTkNFKQogICAgICAgICAgICAgY2FzZSBXTV9OQ01PVVNFTU9WRToKICAgICAgICAg
ICAgIGNhc2UgV01fTkNMQlVUVE9ORE9XTjoKICAgICAgICAgICAgIGNhc2UgV01fTkNMQlVUVE9O
VVA6CkBAIC0yMTAsNyArMjAyLDYgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnNob3coY29uc3QgSW50
UmVjdCYgciwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICBjYXNlIFdN
X05DTUJVVFRPTkRPV046CiAgICAgICAgICAgICBjYXNlIFdNX05DTUJVVFRPTlVQOgogICAgICAg
ICAgICAgY2FzZSBXTV9OQ01CVVRUT05EQkxDTEs6Ci0jZW5kaWYKICAgICAgICAgICAgIGNhc2Ug
V01fTU9VU0VXSEVFTDoKICAgICAgICAgICAgICAgICBtc2cuaHduZCA9IG1fcG9wdXA7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC02MDEsMTEgKzU5Miw3IEBAIHZvaWQgUG9wdXBNZW51V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICAgICAg
bV9ibXAuY2xlYXIoKTsKICAgICB9CiAgICAgaWYgKCFtX2JtcCkgewotI2lmIE9TKFdJTkNFKQot
ICAgICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21V
cChjbGllbnRSZWN0KCkuc2l6ZSgpLCBCaXRtYXBJbmZvOjpCaXRDb3VudDE2KTsKLSNlbHNlCiAg
ICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVw
KGNsaWVudFJlY3QoKS5zaXplKCkpOwotI2VuZGlmCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7
CiAgICAgICAgIG1fYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKG1fREMu
Z2V0KCksICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpOwogICAg
ICAgICBpZiAoIW1fYm1wKQpAQCAtNzY3LDE0ICs3NTQsMTAgQEAgdm9pZCBQb3B1cE1lbnVXaW46
OnJlZ2lzdGVyQ2xhc3MoKQogICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQogICAg
ICAgICByZXR1cm47CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBXTkRDTEFTUyB3Y2V4OwotI2Vsc2UK
ICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NF
WCk7CiAgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CiAgICAgd2NleC5zdHlsZSAgICAgICAg
ICA9IENTX0RST1BTSEFET1c7Ci0jZW5kaWYKIAogICAgIHdjZXgubHBmblduZFByb2MgICAgPSBQ
b3B1cE1lbnVXbmRQcm9jOwogICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwpAQCAtNzg4LDEx
ICs3NzEsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcygpCiAKICAgICBoYXZl
UmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKIAotI2lmIE9TKFdJTkNFKQotICAgIFJlZ2lz
dGVyQ2xhc3MoJndjZXgpOwotI2Vsc2UKICAgICBSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotI2Vu
ZGlmCiB9CiAKIApAQCAtODE5LDEwICs3OTgsOCBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6d25k
UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYQog
ICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CiAKICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSNpZiAh
T1MoV0lOQ0UpCiAgICAgICAgIGNhc2UgV01fTU9VU0VBQ1RJVkFURToKICAgICAgICAgICAgIHJl
dHVybiBNQV9OT0FDVElWQVRFOwotI2VuZGlmCiAgICAgICAgIGNhc2UgV01fU0laRTogewogICAg
ICAgICAgICAgaWYgKCFzY3JvbGxiYXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk2
Niw5ICs5NDMsNyBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYQogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBCT09MIHNob3VsZEhvdFRyYWNrID0gRkFMU0U7Ci0jaWYgIU9TKFdJTkNFKQog
ICAgICAgICAgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUSE9UVFJBQ0tJTkcsIDAs
ICZzaG91bGRIb3RUcmFjaywgMCk7Ci0jZW5kaWYKIAogICAgICAgICAgICAgUkVDVCBib3VuZHM7
CiAgICAgICAgICAgICBHZXRDbGllbnRSZWN0KHBvcHVwSGFuZGxlKCksICZib3VuZHMpOwpAQCAt
MTA3MCwxMSArMTA0NSw5IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFdu
ZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhCiAgICAgICAgICAgICBs
UmVzdWx0ID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jaWYgIU9TKFdJTkNF
KQogICAgICAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgogICAgICAgICAgICAgcGFpbnQoY2xpZW50
UmVjdCgpLCAoSERDKXdQYXJhbSk7CiAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgbFJlc3VsdCA9IERlZldpbmRvd1Byb2MoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCmluZGV4IGRkYTU5ZTEuLmM0NmM4NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNw
cApAQCAtMjk0LDkgKzI5NCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50QnV0dG9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllCiAgICAgICAgIGlm
IChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKSB7
CiAgICAgICAgICAgICB4cFN0YXRlICs9IFRTX0FDVElWRTsKICAgICAgICAgICAgIGNsYXNzaWNT
dGF0ZSB8PSBERkNTX1BVU0hFRDsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgICAgICAgICBjbGFzc2lj
U3RhdGUgfD0gREZDU19GTEFUOwotI2VuZGlmCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
eHBTdGF0ZSArPSBUU19IT1ZFUjsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZEJ1ZmZlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcAppbmRleCA4YTgzN2Q2Li5mNWRkMjI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcApA
QCAtMzEsMTEgKzMxLDYgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKLS8vIElOVkFMSURfRklMRV9TSVpFIGlzIG5vdCBkZWZpbmVk
IG9uIFdpbkNFLgotI2lmbmRlZiBJTlZBTElEX0ZJTEVfU0laRQotI2RlZmluZSBJTlZBTElEX0ZJ
TEVfU0laRSAweGZmZmZmZmZmCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZp
bGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU2hhcmVkVGltZXJXaW4uY3BwCmluZGV4IGNmOTI0YjQuLjMyN2MyZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVyV2luLmNwcApAQCAtNjMsNyArNjMs
NiBAQCBzdGF0aWMgSEFORExFIHRpbWVyOwogc3RhdGljIEhXTkQgdGltZXJXaW5kb3dIYW5kbGUg
PSAwOwogY29uc3QgTFBDV1NUUiBrVGltZXJXaW5kb3dDbGFzc05hbWUgPSBMIlRpbWVyV2luZG93
Q2xhc3MiOwogCi0jaWYgIU9TKFdJTkNFKQogc3RhdGljIFVJTlQgdGltZXJGaXJlZE1lc3NhZ2Ug
PSAwOwogc3RhdGljIEhBTkRMRSB0aW1lclF1ZXVlOwogc3RhdGljIGJvb2wgaGlnaFJlc1RpbWVy
QWN0aXZlOwpAQCAtNzMsNyArNzIsNiBAQCBzdGF0aWMgTE9ORyBwZW5kaW5nVGltZXJzOwogY29u
c3QgaW50IHRpbWVyUmVzb2x1dGlvbiA9IDE7IC8vIFRvIGltcHJvdmUgdGltZXIgcmVzb2x1dGlv
biwgd2UgY2FsbCB0aW1lQmVnaW5QZXJpb2QvdGltZUVuZFBlcmlvZCB3aXRoIHRoaXMgdmFsdWUg
dG8gaW5jcmVhc2UgdGltZXIgcmVzb2x1dGlvbiB0byAxbXMuCiBjb25zdCBpbnQgaGlnaFJlc29s
dXRpb25UaHJlc2hvbGRNc2VjID0gMTY7IC8vIE9ubHkgYWN0aXZhdGUgaGlnaC1yZXMgdGltZXIg
Zm9yIHN1Yi0xNm1zIHRpbWVycyAoV2luZG93cyBjYW4gZmlyZSB0aW1lcnMgYXQgMTZtcyBpbnRl
cnZhbHMgd2l0aG91dCBjaGFuZ2luZyB0aGUgc3lzdGVtIHJlc29sdXRpb24pLgogY29uc3QgaW50
IHN0b3BIaWdoUmVzVGltZXJJbk1zZWMgPSAzMDA7IC8vIFN0b3AgaGlnaC1yZXMgdGltZXIgYWZ0
ZXIgMC4zIHNlY29uZHMgdG8gbGVzc2VuIHBvd2VyIGNvbnN1bXB0aW9uICh3ZSBkb24ndCB1c2Ug
YSBzbWFsbGVyIHRpbWUgc2luY2Ugb3NjaWxsYXRpbmcgYmV0d2VlbiBoaWdoIGFuZCBsb3cgcmVz
b2x1dGlvbiBicmVha3MgdGltZXIgYWNjdXJhY3kgb24gWFApLgotI2VuZGlmCiAKIGVudW0gewog
ICAgIHNoYXJlZFRpbWVySUQgPSAxMDAwLApAQCAtOTgsNyArOTYsNiBAQCBMUkVTVUxUIENBTExC
QUNLIFRpbWVyV2luZG93V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUgogICAgICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxlLCBzaGFy
ZWRUaW1lcklEKTsKICAgICAgICAgICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwogICAg
ICAgICB9Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBlbHNlIGlmICh3UGFyYW0gPT0gZW5kSGln
aFJlc1RpbWVySUQpIHsKICAgICAgICAgICAgIEtpbGxUaW1lcih0aW1lcldpbmRvd0hhbmRsZSwg
ZW5kSGlnaFJlc1RpbWVySUQpOwogICAgICAgICAgICAgaGlnaFJlc1RpbWVyQWN0aXZlID0gZmFs
c2U7CkBAIC0xMDksNyArMTA2LDYgQEAgTFJFU1VMVCBDQUxMQkFDSyBUaW1lcldpbmRvd1duZFBy
b2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVIKICAgICAgICAg
cHJvY2Vzc2luZ0N1c3RvbVRpbWVyTWVzc2FnZSA9IHRydWU7CiAgICAgICAgIHNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbigpOwogICAgICAgICBwcm9jZXNzaW5nQ3VzdG9tVGltZXJNZXNzYWdlID0g
ZmFsc2U7Ci0jZW5kaWYKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2Mo
aFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCkBAIC0xMjEsMzAgKzExNywxOSBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplT2ZmU2NyZWVuVGltZXJXaW5kb3coKQogICAgIGlmICh0aW1l
cldpbmRvd0hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgV05E
Q0xBU1Mgd2NleDsKLSAgICBtZW1zZXQoJndjZXgsIDAsIHNpemVvZihXTkRDTEFTUykpOwotI2Vs
c2UKICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgbWVtc2V0KCZ3Y2V4LCAwLCBzaXplb2YoV05E
Q0xBU1NFWCkpOwogICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwotI2VuZGlm
CiAKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gVGltZXJXaW5kb3dXbmRQcm9jOwogICAgIHdj
ZXguaEluc3RhbmNlICAgICAgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOwogICAgIHdjZXgu
bHBzekNsYXNzTmFtZSAgPSBrVGltZXJXaW5kb3dDbGFzc05hbWU7Ci0jaWYgT1MoV0lOQ0UpCi0g
ICAgUmVnaXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAgIFJlZ2lzdGVyQ2xhc3NFeCgmd2Nl
eCk7Ci0jZW5kaWYKIAogICAgIHRpbWVyV2luZG93SGFuZGxlID0gQ3JlYXRlV2luZG93KGtUaW1l
cldpbmRvd0NsYXNzTmFtZSwgMCwgMCwKICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VE
RUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDAp
OwogCi0jaWYgIU9TKFdJTkNFKQogICAgIHRpbWVyRmlyZWRNZXNzYWdlID0gUmVnaXN0ZXJXaW5k
b3dNZXNzYWdlKEwiY29tLmFwcGxlLldlYktpdC5UaW1lckZpcmVkIik7Ci0jZW5kaWYKIH0KIAog
dm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCkBAIC0xNTIsMTMg
KzEzNywxMSBAQCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkK
ICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwogfQogCi0jaWYgIU9TKFdJTkNFKQog
c3RhdGljIHZvaWQgTlRBUEkgcXVldWVUaW1lclByb2MoUFZPSUQsIEJPT0xFQU4pCiB7CiAgICAg
aWYgKEludGVybG9ja2VkSW5jcmVtZW50KCZwZW5kaW5nVGltZXJzKSA9PSAxKQogICAgICAgICBQ
b3N0TWVzc2FnZSh0aW1lcldpbmRvd0hhbmRsZSwgdGltZXJGaXJlZE1lc3NhZ2UsIDAsIDApOwog
fQotI2VuZGlmCiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVy
dmFsKQogewpAQCAtMTc0LDcgKzE1Nyw2IEBAIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2
YWwoZG91YmxlIGludGVydmFsKQogICAgIGluaXRpYWxpemVPZmZTY3JlZW5UaW1lcldpbmRvdygp
OwogICAgIGJvb2wgdGltZXJTZXQgPSBmYWxzZTsKIAotI2lmICFPUyhXSU5DRSkKICAgICBpZiAo
U2V0dGluZ3M6OnNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKCkpIHsKICAgICAgICAgaWYg
KGludGVydmFsIDwgaGlnaFJlc29sdXRpb25UaHJlc2hvbGRNc2VjKSB7CiAgICAgICAgICAgICBp
ZiAoIWhpZ2hSZXNUaW1lckFjdGl2ZSkgewpAQCAtMjA2LDcgKzE4OCw2IEBAIHZvaWQgc2V0U2hh
cmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotI2VuZGlmIC8vICFPUyhXSU5DRSkKIAogICAgIGlmICh0aW1lclNldCkg
ewogICAgICAgICBpZiAodGltZXJJRCkgewpAQCAtMjIxLDEyICsyMDIsMTAgQEAgdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiAKIHZvaWQgc3RvcFNoYXJl
ZFRpbWVyKCkKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgaWYgKHRpbWVyUXVldWUgJiYgdGltZXIp
IHsKICAgICAgICAgRGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyUXVldWUsIHRpbWVyLCAwKTsK
ICAgICAgICAgdGltZXIgPSAwOwogICAgIH0KLSNlbmRpZgogCiAgICAgaWYgKHRpbWVySUQpIHsK
ICAgICAgICAgS2lsbFRpbWVyKHRpbWVyV2luZG93SGFuZGxlLCB0aW1lcklEKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKaW5kZXggMDc5ZjA1YS4uY2QwZDZkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NvZnRMaW5raW5nLmgKQEAgLTM5LDEyICsz
OSw3IEBACiAgICAgICAgIHJldHVybiBsaWJyYXJ5OyBcCiAgICAgfQogCi0jaWYgT1MoV0lOQ0Up
Ci0jZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBHZXRQcm9jQWRkcmVzc0EKLSNlbHNl
CiAjZGVmaW5lIFNPRlRfTElOS19HRVRQUk9DQUREUkVTUyBHZXRQcm9jQWRkcmVzcwotI2VuZGlm
Ci0KICNkZWZpbmUgU09GVF9MSU5LX0xJQlJBUlkobGliKSBTT0ZUX0xJTktfTElCUkFSWV9IRUxQ
RVIobGliLCBMIi5kbGwiKQogI2RlZmluZSBTT0ZUX0xJTktfREVCVUdfTElCUkFSWShsaWIpIFNP
RlRfTElOS19MSUJSQVJZX0hFTFBFUihsaWIsIEwiX2RlYnVnLmRsbCIpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAppbmRleCBjOWVkY2EwLi40NDM5OGU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1N5c3RlbUluZm8uY3BwCkBAIC0zOSwyMyAr
MzksMTMgQEAgV2luZG93c1ZlcnNpb24gd2luZG93c1ZlcnNpb24oaW50KiBtYWpvciwgaW50KiBt
aW5vcikKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOwotI2lmIE9TKFdJTkNFKQotICAgICAgICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZvOwot
I2Vsc2UKICAgICAgICAgT1NWRVJTSU9OSU5GT0VYIHZlcnNpb25JbmZvOwotI2VuZGlmCiAgICAg
ICAgIFplcm9NZW1vcnkoJnZlcnNpb25JbmZvLCBzaXplb2YodmVyc2lvbkluZm8pKTsKICAgICAg
ICAgdmVyc2lvbkluZm8uZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXJzaW9uSW5mbyk7
CiAgICAgICAgIEdldFZlcnNpb25FeChyZWludGVycHJldF9jYXN0PE9TVkVSU0lPTklORk8qPigm
dmVyc2lvbkluZm8pKTsKICAgICAgICAgbWFqb3JWZXJzaW9uID0gdmVyc2lvbkluZm8uZHdNYWpv
clZlcnNpb247CiAgICAgICAgIG1pbm9yVmVyc2lvbiA9IHZlcnNpb25JbmZvLmR3TWlub3JWZXJz
aW9uOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIGlmIChtYWpvclZlcnNpb24gPj0gMSAmJiBt
YWpvclZlcnNpb24gPD0gNykKLSAgICAgICAgICAgIHZlcnNpb24gPSBzdGF0aWNfY2FzdDxXaW5k
b3dzVmVyc2lvbj4oV2luZG93c0NFMSArIChtYWpvclZlcnNpb24gLSAxKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JWZXJzaW9uIDwgMSkgPyBXaW5kb3dzQ0Ux
IDogV2luZG93c0NFNzsKLSNlbHNlCiAgICAgICAgIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3Jt
SWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykKICAgICAgICAgICAgIHZlcnNpb24gPSBXaW5kb3dz
M18xOwogICAgICAgICBlbHNlIGlmICh2ZXJzaW9uSW5mby5kd1BsYXRmb3JtSWQgPT0gVkVSX1BM
QVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKQEAgLTc3LDcgKzY3LDYgQEAgV2luZG93c1ZlcnNpb24g
d2luZG93c1ZlcnNpb24oaW50KiBtYWpvciwgaW50KiBtaW5vcikKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHZlcnNpb24gPSAobWFqb3JWZXJzaW9uID09IDQpID8gV2luZG93
c05UNCA6IFdpbmRvd3NOVDM7CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAogICAgIGlmICht
YWpvcikKQEAgLTExNCw3ICsxMDMsNiBAQCBzdGF0aWMgU3RyaW5nIG9zVmVyc2lvbkZvclVBU3Ry
aW5nKCkKICAgICByZXR1cm4gZmFtaWx5TmFtZSArIFN0cmluZzo6bnVtYmVyKG1ham9yKSArICcu
JyArIFN0cmluZzo6bnVtYmVyKG1pbm9yKTsKIH0KIAotI2lmICFPUyhXSU5DRSkKIHN0YXRpYyBi
b29sIGlzV09XNjQoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CkBA
IC0xNTgsMTggKzE0NiwxNSBAQCBzdGF0aWMgV09SRCBwcm9jZXNzb3JBcmNoaXRlY3R1cmUoKQog
CiAgICAgcmV0dXJuIGFyY2hpdGVjdHVyZTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgU3RyaW5nIGFy
Y2hpdGVjdHVyZVRva2VuRm9yVUFTdHJpbmcoKQogewotI2lmICFPUyhXSU5DRSkKICAgICBpZiAo
aXNXT1c2NCgpKQogICAgICAgICByZXR1cm4gIjsgV09XNjQiOwogICAgIGlmIChwcm9jZXNzb3JB
cmNoaXRlY3R1cmUoKSA9PSBQUk9DRVNTT1JfQVJDSElURUNUVVJFX0FNRDY0KQogICAgICAgICBy
ZXR1cm4gIjsgV2luNjQ7IHg2NCI7CiAgICAgaWYgKHByb2Nlc3NvckFyY2hpdGVjdHVyZSgpID09
IFBST0NFU1NPUl9BUkNISVRFQ1RVUkVfSUE2NCkKICAgICAgICAgcmV0dXJuICI7IFdpbjY0OyBJ
QTY0IjsKLSNlbmRpZgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCBjNzkzN2I4Li45NDY5M2U0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAtMjc5
LDcgKzI3OSw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1l
ZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDCiB7CiAgICAgc3dpdGNoKHBNZWRT
cmMtPnR5bWVkKQogICAgIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgY2FzZSBUWU1FRF9IR0xPQkFM
OgogICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IChIR0xPQkFMKU9sZUR1cGxpY2F0ZURhdGEo
cE1lZFNyYy0+aEdsb2JhbCxwRm10U3JjLT5jZkZvcm1hdCwgMCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMjk1LDcgKzI5NCw2IEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElV
TSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDCiAgICAgY2FzZSBUWU1F
RF9GSUxFOgogICAgICAgICBwTWVkU3JjLT5scHN6RmlsZU5hbWUgPSAoTFBPTEVTVFIpT2xlRHVw
bGljYXRlRGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUscEZtdFNyYy0+Y2ZGb3JtYXQsIDApOwog
ICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgVFlNRURfSVNUUkVBTToKICAgICAgICAg
cE1lZERlc3QtPnBzdG0gPSBwTWVkU3JjLT5wc3RtOwogICAgICAgICBwTWVkU3JjLT5wc3RtLT5B
ZGRSZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXgg
OThkMGE5Ny4uZmJhMmNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHAKQEAgLTM3NSw3ICszNzUsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjphZGREaXNhYmxl
ZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKICAgICByZXR1cm4gbV9kaXNhYmxl
ZFBsdWdpbkZpbGVzLmFkZChmaWxlTmFtZSkuaXNOZXdFbnRyeTsKIH0KIAotI2lmICghT1MoV0lO
Q0UpKSAmJiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCisj
aWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpKQogLy8gRm9y
IFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAog
Ly8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNv
bnN0cnVjdHMKIC8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJl
IHVuZGVyIFhQX1dJTj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGE4
OGFkZjkuLmUxY2MyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAt
MzQwLDE3ICszNDAsMTAgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICNpZiBkZWZpbmVkKFhQ
X1dJTikgJiYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cKICAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIFdORFBST0MgY3Vy
cmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIEdXTF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2lu
Vmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORyltX3BsdWdpblduZFByb2MpOwotI2Vsc2UKICAgICAg
ICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKIAogICAgICAgICBpZiAoY3VycmVu
dFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCiAgICAgICAgICAgICBTZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1
Z2luV25kUHJvYyk7Ci0jZW5kaWYKICAgICB9CiAjZW5kaWYgLy8gIWRlZmluZWQoWFBfV0lOKSB8
fCBQTEFURk9STShHVEspCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCmluZGV4IGRmNzlkYzkuLmE5
NzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCkBAIC0x
MzIsNyArMTMyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKIC8v
IHBvcnRzIHVzaW5nIFBsdWdpblZpZXcsIGJ1dCB1bnRpbCB0aGVuLCBpZiBuZXcgZnVuY3Rpb25z
IGxpa2UgdGhpcyBhcmUgCiAvLyBhZGRlZCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGV5IGhhdmUgdGhl
IHByb3BlciBwbGF0Zm9ybSAjaWZzIHNvIHRoYXQgY2hhbmdlcwogLy8gZG8gbm90IGJyZWFrIHBv
cnRzIHdobyBjb21waWxlIGJvdGggdGhpcyBmaWxlIGFuZCBQbHVnaW5WaWV3LmNwcC4gICAKLSNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IE9T
KFdJTkNFKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JN
KEdUSykKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIHZvaWQgUGx1Z2luVmlldzo6
a2VlcEFsaXZlKE5QUCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
bkRhdGFiYXNlV2luLmNwcAppbmRleCBlMjUwZTEzLi5jZGM2Y2YzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0zMywzOCArMzMs
NiBAQAogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlIDx3dGYvV2luZG93c0V4
dHJhcy5oPgogCi0jaWYgT1MoV0lOQ0UpCi0vLyBXSU5DRSBkb2Vzbid0IHN1cHBvcnQgUmVnaXN0
cnkgS2V5IEFjY2VzcyBSaWdodHMuIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGFsd2F5cyBiZSAwCi0j
aWZuZGVmIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMKLSNkZWZpbmUgS0VZX0VOVU1FUkFURV9TVUJf
S0VZUyAwCi0jZW5kaWYKLQotQk9PTCBQYXRoUmVtb3ZlRmlsZVNwZWMoTFBXU1RSIG1vZHVsZUZp
bGVOYW1lU3RyKQotewotICAgIGlmICghKm1vZHVsZUZpbGVOYW1lU3RyKQotICAgICAgICByZXR1
cm4gRkFMU0U7Ci0KLSAgICBMUFdTVFIgbGFzdFBvcyA9IDA7Ci0gICAgTFBXU1RSIGN1clBvcyA9
IG1vZHVsZUZpbGVOYW1lU3RyOwotICAgIGRvIHsKLSAgICAgICAgaWYgKCpjdXJQb3MgPT0gTCcv
JyB8fCAqY3VyUG9zID09IEwnXFwnKQotICAgICAgICAgICAgbGFzdFBvcyA9IGN1clBvczsKLSAg
ICB9IHdoaWxlICgqKytjdXJQb3MpOwotCi0gICAgaWYgKGxhc3RQb3MgPT0gY3VyUG9zIC0gMSkK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKGxhc3RQb3MpCi0gICAgICAgICpsYXN0
UG9zID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbW9kdWxlRmlsZU5hbWVTdHJbMF0gPSBMJ1xc
JzsKLSAgICAgICAgbW9kdWxlRmlsZU5hbWVTdHJbMV0gPSAwOwotICAgIH0KLQotICAgIHJldHVy
biBUUlVFOwotfQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGlu
ZSB2b2lkIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgSGFzaFNldDxT
dHJpbmc+JiBwYXRocykKQEAgLTIzOCwxNCArMjA2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5
KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKIHsKLSNpZiAhT1MoV0lOQ0UpCiAgICAgLy8g
VGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lu
cyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCiAgICAgV0NIQVIgcGx1Z2lu
RGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwogICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNp
emUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZp
bGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVn
aW5EaXJlY3RvcnlTdHIpKTsKIAogICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBw
bHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5U3Ry
KSkKICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIs
IHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0jZW5kaWYKIAogICAgIERXT1JEIHR5cGU7CiAg
ICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07CkBAIC0zNzcsNyAr
MzQzLDYgQEAgZXhpdDoKIAogc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5E
aXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCiB7Ci0jaWYgIU9TKFdJTkNF
KQogICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07CiAKICAgICBpZiAoIUdl
dFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgoc3lz
dGVtRGlyZWN0b3J5U3RyKSkpCkBAIC0zOTAsNyArMzU1LDYgQEAgc3RhdGljIGlubGluZSB2b2lk
IGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3Jp
ZXMpCiAKICAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJl
Y3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CiAgICAgZGlyZWN0b3Jp
ZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotI2VuZGlmCiB9CiAKIFZlY3RvcjxT
dHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAppbmRleCA2N2Nj
NzY0Li5hODUyNTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5QYWNrYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5Q
YWNrYWdlV2luLmNwcApAQCAtMjM3LDkgKzIzNyw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9h
ZCgpCiAgICAgICAgIG1fbG9hZENvdW50Kys7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
ZWxzZSB7Ci0jaWYgT1MoV0lOQ0UpCi0gICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeVco
bV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKTsKLSNlbHNlCiAg
ICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsKIAogICAgICAgICBpZiAoITo6R2V0
Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQYXRoKSkKQEAgLTI1OCw3ICsyNTUs
NiBAQCBib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAgICAgICAgICAgICAgIDo6RnJlZUxp
YnJhcnkobV9tb2R1bGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0j
ZW5kaWYKICAgICB9CiAKICAgICBpZiAoIW1fbW9kdWxlKQpAQCAtMjcwLDE1ICsyNjYsOSBAQCBi
b29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQogICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0lu
aXRpYWxpemUgPSAwOwogICAgIE5QRXJyb3IgbnBFcnI7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICBO
UF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9k
dWxlLCBMIk5QX0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRF
bnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsIEwiTlBfR2V0RW50cnlQ
b2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFBy
b2NBZGRyZXNzKG1fbW9kdWxlLCBMIk5QX1NodXRkb3duIik7Ci0jZWxzZQogICAgIE5QX0luaXRp
YWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJO
UF9Jbml0aWFsaXplIik7CiAgICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2lu
dHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsK
ICAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNz
KG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKLSNlbmRpZgogCiAgICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCiAgICAgICAgIGdv
dG8gYWJvcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3Bw
CmluZGV4IDZiMjlkM2IuLmUwMDY1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblZpZXdXaW4uY3BwCkBAIC03MywxMyArNzMsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKLSNpZiBPUyhX
SU5DRSkKLSN1bmRlZiBMT0dfTlBFUlJPUgotI2RlZmluZSBMT0dfTlBFUlJPUih4KQotI3VuZGVm
IExPR19QTFVHSU5fTkVUX0VSUk9SCi0jZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkKLSNl
bmRpZgotCiAjaWYgVVNFKENBSVJPKQogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTExOCw3ICsxMTEsNiBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSA9IEwiV2ViUGx1Z2luVmlldyI7CiBjb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CiAKLSNpZiAhT1MoV0lOQ0UpCiAvLyBUaGUg
Y29kZSB1c2VkIHRvIGhvb2sgQmVnaW5QYWludC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUgZnJv
bQogLy8gPGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPi4KIC8v
IENvcHlyaWdodCAoQykgMjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgpAQCAt
MjcwLDcgKzI2Miw2IEBAIHN0YXRpYyB2b2lkIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhI
REMgKFdJTkFQSSpob29rZWRCZWdpblBhaW50KShIV05ELCBQQUlOCiAgICAgaG9vaygidXNlcjMy
LmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5k
UGFpbnQpKSk7CiAKIH0KLSNlbmRpZgogCiBzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXco
KQogewpAQCAtMjg2LDE4ICsyNzcsMTAgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3
KCkKIAogICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKIAotI2lmIE9TKFdJ
TkNFKQotICAgIFdORENMQVNTIHdjZXggPSB7IDAgfTsKLSNlbHNlCiAgICAgV05EQ0xBU1NFWCB3
Y2V4OwogICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwogICAgIHdjZXguaElj
b25TbSAgICAgICAgPSAwOwotI2VuZGlmCi0KICAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1Nf
REJMQ0xLUzsKLSNpZiBPUyhXSU5DRSkKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgIHw9IENTX1BB
UkVOVERDOwotI2VuZGlmCiAgICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldpbmRvd1Byb2M7
CiAgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CiAgICAgd2NleC5jYlduZEV4dHJhICAgICA9
IDA7CkBAIC0zMDgsMTEgKzI5MSw3IEBAIHN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygp
CiAgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CiAgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9
IGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lOwogCi0jaWYgT1MoV0lOQ0UpCi0gICAgcmV0dXJu
ICEhUmVnaXN0ZXJDbGFzcygmd2NleCk7Ci0jZWxzZQogICAgIHJldHVybiAhIVJlZ2lzdGVyQ2xh
c3NFeCgmd2NleCk7Ci0jZW5kaWYKIH0KIAogTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3OjpQ
bHVnaW5WaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSkKQEAgLTM5NCw3ICszNzMsNiBAQCBQbHVnaW5WaWV3Ojp3bmRQcm9jKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
ICAgICBtX3BvcFBvcHVwc1N0YXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIH0KIAotI2lm
ICFPUyhXSU5DRSkKICAgICBpZiAobWVzc2FnZSA9PSBXTV9QUklOVENMSUVOVCkgewogICAgICAg
ICAvLyBNb3N0IChhbGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0IHJlc3BvbmQgdG8gV01fUFJJ
TlRDTElFTlQsIHNvIHdlCiAgICAgICAgIC8vIGNoYW5nZSB0aGUgbWVzc2FnZSB0byBXTV9QQUlO
VCBhbmQgcmVseSBvbiBvdXIgaG9va2VkIHZlcnNpb25zIG9mCkBAIC00MDIsNyArMzgwLDYgQEAg
UGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgbWVzc2FnZSA9IFdNX1BBSU5UOwogICAgICAgICBt
X3dtUHJpbnRIREMgPSByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKTsKICAgICB9Ci0jZW5k
aWYKIAogICAgIC8vIENhbGwgdGhlIHBsdWctaW4ncyB3aW5kb3cgcHJvYy4KICAgICBMUkVTVUxU
IHJlc3VsdCA9IDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5XbmRQcm9jLCBoV25kLCBtZXNzYWdl
LCB3UGFyYW0sIGxQYXJhbSk7CkBAIC00MjUsMTEgKzQwMiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRv
d1JlY3Q7CiAgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CiAKLSNpZiBPUyhX
SU5DRSkKLSAgICBtX3dpbmRvd1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJh
bWVSZWN0KCkpOwotI2Vsc2UKICAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6
ZSgpKTsKLSNlbmRpZgogICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOwogICAgIG1f
Y2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwogCkBA
IC01MjksOSArNTAyLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dCYgbnBFdmVudCkKIHZvaWQgUGx1Z2luVmlldzo6cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0
KEhEQyBoZGMpCiB7CiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewotI2lmICFPUyhXSU5DRSkKICAg
ICAgICAgU2VuZE1lc3NhZ2UocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgV01fUFJJTlRDTElFTlQs
IHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFNPihoZGMpLCBQUkZfQ0xJRU5UIHwgUFJGX0NISUxEUkVO
IHwgUFJGX09XTkVEKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NDEs
NyArNjEyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQgdGhlIHBs
dWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVz
LgogICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGluIGFuIG9m
ZnNjcmVlbiBidWZmZXIgYW5kIHRoZXJlZm9yZSBuZWVkCiAgICAgLy8gdG8gcHJlc2VydmUgdGhl
IHRyYW5zbGF0aW9uIHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNpZiAhUExBVEZPUk0oR1RL
KSAmJiAhT1MoV0lOQ0UpCisjaWYgIVBMQVRGT1JNKEdUSykKICAgICBpZiAoIWNvbnRleHQtPmlz
SW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CiAgICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKICAgICAg
ICAgR2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwpA
QCAtNjc5LDkgKzY1MCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiB9CiAKLSNpZiAhT1MoV0lOQ0UpCiBleHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwot
I2VuZGlmCiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKIHsKQEAgLTc0OSw3ICs3MTgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiAgICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKLSNpZiAhUExBVEZPUk0o
R1RLKSAmJiAhT1MoV0lOQ0UpCisjaWYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBDdXJyZW50bHks
IFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBp
biBFdmVudEhhbmRsZXIuY3BwCiAgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3
ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0Lgog
ICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOwpAQCAtNzYyLDE1ICs3MzEsNiBAQCB2b2lk
IFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiB7CiAgICAgV2lkZ2V0
OjpzZXRQYXJlbnQocGFyZW50KTsKIAotI2lmIE9TKFdJTkNFKQotICAgIGlmIChwYXJlbnQpIHsK
LSAgICAgICAgaW5pdCgpOwotICAgICAgICBpZiAocGFyZW50LT5pc1Zpc2libGUoKSkKLSAgICAg
ICAgICAgIHNob3coKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGlkZSgpOwotICAgIH0K
LSNlbHNlCiAgICAgaWYgKHBhcmVudCkKICAgICAgICAgaW5pdCgpOwogICAgIGVsc2UgewpAQCAt
Nzg0LDcgKzc0NCw2IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKICAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRv
dyB8fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCiAg
ICAgICAgICAgICA6OlNldEZvY3VzKDApOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFBsdWdp
blZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtODA3LDE4ICs3NjYsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQog
ICAgIGlmICghbV9pc1N0YXJ0ZWQpCiAgICAgICAgIHJldHVybjsKIAotI2lmIE9TKFdJTkNFKQot
ICAgIEludFJlY3QgciA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhy
ZWN0KTsKLSAgICBtX25wV2luZG93LnggPSByLngoKTsKLSAgICBtX25wV2luZG93LnkgPSByLnko
KTsKLQotICAgIG1fbnBXaW5kb3cud2lkdGggPSByLndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5o
ZWlnaHQgPSByLmhlaWdodCgpOwotCi0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHIu
d2lkdGgoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHIuaGVpZ2h0KCk7Ci0j
ZWxzZQotICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGRyYXcgaW4gYW4gb2Zmc2Ny
ZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdworICAgIC8vIEluIHRo
ZSBHVEsgcG9ydCB3ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIGRvbid0IHdhbnQg
dG8gdXNlIHRoZSB3aW5kb3cKICAgICAvLyBjb29yZGluYXRlcy4KICMgaWYgUExBVEZPUk0oR1RL
KQogICAgIEludFBvaW50IHAgPSByZWN0LmxvY2F0aW9uKCk7CkBAIC04MzMsNyArNzgxLDYgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAog
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CiAgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwotI2VuZGlmCiAgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7
CiAKQEAgLTg1MCwxNyArNzk3LDkgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKIAogICAgICAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CiAKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgaWYgKCFtX3BsdWdpblduZFByb2MpIHsK
LSAgICAgICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dM
b25nKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DKTsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgICAgICBt
X3BsdWdpblduZFByb2MgPSAoV05EUFJPQylTZXRXaW5kb3dMb25nKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylQbHVnaW5WaWV3V25kUHJvYyk7Ci0gICAgICAgIH0K
LSNlbHNlCiAgICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5k
b3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7CiAgICAgICAg
IGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKICAgICAgICAgICAgIG1f
cGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1Z2luVmlld1duZFByb2MpOwotI2Vu
ZGlmCiAgICAgfQogfQogCkBAIC05ODgsOSArOTI3LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybVN0YXJ0KCkKIAogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKICAgICAgICAgcmVnaXN0ZXJQ
bHVnaW5WaWV3KCk7Ci0jaWYgIU9TKFdJTkNFKQogICAgICAgICBzZXRVcE9mZnNjcmVlblBhaW50
aW5nSG9va3MoaG9va2VkQmVnaW5QYWludCwgaG9va2VkRW5kUGFpbnQpOwotI2VuZGlmCiAKICAg
ICAgICAgRFdPUkQgZmxhZ3MgPSBXU19DSElMRDsKICAgICAgICAgaWYgKGlzU2VsZlZpc2libGUo
KSkKQEAgLTEwMTAsOCArOTQ3LDYgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkK
ICAgICAgICAgLy8gdGhlIFNob2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgogI2lmIE9TKFdJTkRP
V1MpICYmIENQVShYODZfNjQpCiAgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOwot
I2VsaWYgT1MoV0lOQ0UpCi0gICAgICAgIDo6U2V0V2luZG93TG9uZyhwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcpRGVmV2luZG93UHJvYyk7CiAjZWxzZQogICAgICAg
ICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9D
LCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzI1MTk4Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTIgKzAsMCBAQAotLyoKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhl
bWVXaW5DRS5oIgotCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnRNZXRy
aWNzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaWYgRU5BQkxFKFZJREVPKQot
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0KLS8qIAotICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5l
IGhvdyBhIHdpZGdldCBpcyBkcmF3biB1c2luZwotICogV2luZG93cycgVGhlbWUgQVBJLiBGb3Ig
bW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVtZSBwYXJ0cyBhbmQgc3RhdGVzIHNlZQotICogaHR0cDov
L21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11
cy9zaGVsbGNjL3BsYXRmb3JtL2NvbW1jdGxzL3VzZXJleC90b3BpY3MvcGFydHNhbmRzdGF0ZXMu
YXNwCi0gKi8KLSNkZWZpbmUgVEhFTUVfQ09MT1IgMjA0Ci0jZGVmaW5lIFRIRU1FX0ZPTlQgIDIx
MAotCi0vLyBHZW5lcmljIHN0YXRlIGNvbnN0YW50cwotI2RlZmluZSBUU19OT1JNQUwgICAgMQot
I2RlZmluZSBUU19IT1ZFUiAgICAgMgotI2RlZmluZSBUU19BQ1RJVkUgICAgMwotI2RlZmluZSBU
U19ESVNBQkxFRCAgNAotI2RlZmluZSBUU19GT0NVU0VEICAgNQotCi0vLyBCdXR0b24gY29uc3Rh
bnRzCi0jZGVmaW5lIEJQX0JVVFRPTiAgICAxCi0jZGVmaW5lIEJQX1JBRElPICAgICAyCi0jZGVm
aW5lIEJQX0NIRUNLQk9YICAzCi0KLS8vIFRleHRmaWVsZCBjb25zdGFudHMKLSNkZWZpbmUgVEZQ
X1RFWFRGSUVMRCAxCi0jZGVmaW5lIFRGU19SRUFET05MWSAgNgotCi10eXBlZGVmIEhBTkRMRSAo
V0lOQVBJKm9wZW5UaGVtZURhdGFQdHIpKEhXTkQgaHduZCwgTFBDV1NUUiBwc3pDbGFzc0xpc3Qp
OwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqY2xvc2VUaGVtZURhdGFQdHIpKEhBTkRMRSBoVGhl
bWUpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZHJhd1RoZW1lQmFja2dyb3VuZFB0cikoSEFO
RExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGNvbnN0IFJFQ1QgKnBSZWN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVCogcENsaXBS
ZWN0KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmRyYXdUaGVtZUVkZ2VQdHIpKEhBTkRMRSBo
VGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUICpwUmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVFZGdlLCB1bnNpZ25l
ZCB1RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSRUNUKiBwQ2xpcFJlY3QpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkqZ2V0VGhlbWVDb250
ZW50UmVjdFB0cikoSEFORExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGNvbnN0IFJF
Q1QqIHBSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVD
VCogcENvbnRlbnRSZWN0KTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lUGFydFNp
emVQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBSRUNUKiBwcmMsIGludCB0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUqIHBzeik7Ci10
eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZVN5c0ZvbnRQdHIpKEhBTkRMRSBoVGhlbWUs
IGludCBpRm9udElkLCBPVVQgTE9HRk9OVCogcEZvbnQpOwotdHlwZWRlZiBIUkVTVUxUIChXSU5B
UEkqZ2V0VGhlbWVDb2xvclB0cikoSEFORExFIGhUaGVtZSwgSERDIGhkYywgaW50IGlQYXJ0SWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgaW50IGlQ
cm9wSWQsIE9VVCBDT0xPUlJFRiogcEZvbnQpOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgZHJvcERvd25CdXR0b25XaWR0aCA9IDE3Owotc3RhdGljIGNvbnN0IGlu
dCB0cmFja1dpZHRoID0gNDsKLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVX
aW5DRTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lV2lu
Q0UpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQ
YWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiB3aW5jZVRoZW1lID0g
UmVuZGVyVGhlbWVXaW5DRTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiB3aW5jZVRo
ZW1lOwotfQotCi1SZW5kZXJUaGVtZVdpbkNFOjpSZW5kZXJUaGVtZVdpbkNFKCkKLXsKLX0KLQot
UmVuZGVyVGhlbWVXaW5DRTo6flJlbmRlclRoZW1lV2luQ0UoKQotewotfQotCi1Db2xvciBSZW5k
ZXJUaGVtZVdpbkNFOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQp
OwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBH
ZXRCVmFsdWUoY29sb3IpLCAyNTUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVdpbkNFOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBDT0xP
UlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhUKTsKLSAgICByZXR1cm4gQ29s
b3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwg
MjU1KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVXaW5DRTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lz
Q29sb3IoQ09MT1JfSElHSExJR0hUVEVYVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShj
b2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDI1NSk7Ci19Ci0KLUNv
bG9yIFJlbmRlclRoZW1lV2luQ0U6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6d2hpdGU7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVXaW5DRTo6c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKSBjb25z
dAotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6
Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNl
IFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSAqc3R5
bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2Uo
KSk7Ci19Ci0KLXVuc2lnbmVkIFJlbmRlclRoZW1lV2luQ0U6OmRldGVybWluZUNsYXNzaWNTdGF0
ZShSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBpZiAo
IWlzRW5hYmxlZChvKSB8fCBpc1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgcmVzdWx0ID0g
REZDU19JTkFDVElWRTsKLSAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpIC8vIEFjdGl2ZSBzdXBl
cnNlZGVzIGhvdmVyCi0gICAgICAgIHJlc3VsdCA9IERGQ1NfUFVTSEVEOwotCi0gICAgaWYgKGlz
Q2hlY2tlZChvKSkKLSAgICAgICAgcmVzdWx0IHw9IERGQ1NfQ0hFQ0tFRDsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1UaGVtZURhdGEgUmVuZGVyVGhlbWVXaW5DRTo6Z2V0VGhlbWVEYXRhKFJl
bmRlck9iamVjdCogbykKLXsKLSAgICBUaGVtZURhdGEgcmVzdWx0OwotICAgIHN3aXRjaCAoby0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNh
c2UgQnV0dG9uUGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0JVVFRPTjsKLSAgICAg
ICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlID0gREZDU19CVVRUT05QVVNIOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NI
RUNLQk9YOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JVVFRPTkNIRUNL
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmVzdWx0Lm1f
cGFydCA9IEJQX1JBRElPOwotICAgICAgICByZXN1bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JV
VFRPTlJBRElPOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpc3Rib3hQYXJ0OgotICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRB
cmVhUGFydDoKLSAgICAgICAgcmVzdWx0Lm1fcGFydCA9IFRGUF9URVhURklFTEQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSB8PSBkZXRlcm1pbmVD
bGFzc2ljU3RhdGUobyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRh
IGZvciBhIGJ1dHRvbgotICAgIFRoZW1lRGF0YSB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7
Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhlIGJ1dHRvbi4KLSAgICBpLmNvbnRleHQtPmRyYXdGcmFt
ZUNvbnRyb2wociwgREZDX0JVVFRPTiwgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlKTsKLSAgICBp
ZiAoaXNGb2N1c2VkKG8pKSB7Ci0gICAgICAgIGlmICh0aGVtZURhdGEubV9wYXJ0ID09IEJQX0JV
VFRPTikgewotICAgICAgICAgICAgSW50UmVjdCBmb2N1c1JlY3Qocik7Ci0gICAgICAgICAgICBm
b2N1c1JlY3QuaW5mbGF0ZSgtMik7Ci0gICAgICAgICAgICBpLmNvbnRleHQtPmRyYXdGb2N1c1Jl
Y3QoZm9jdXNSZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpLmNvbnRleHQtPmRy
YXdGb2N1c1JlY3Qocik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJl
bmRlclRoZW1lV2luQ0U6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAg
VGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3gu
Ci0gICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWluZyB0
aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IKLSAgICAv
LyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBz
ZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MKLSAgICAv
LyBtZXRyaWNzLgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEzLCBGaXhlZCkpOwotICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEz
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHRmaWVsZAotICAgIFRo
ZW1lRGF0YSB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7Ci0KLSAgICAvLyBOb3cgcGFpbnQg
dGhlIHRleHQgZmllbGQuCi0gICAgaS5jb250ZXh0LT5wYWludFRleHRGaWVsZChyLCB0aGVtZURh
dGEubV9jbGFzc2ljU3RhdGUpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOwotICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUZXh0RmllbGQocmVuZGVyZXIsIHBhaW50
SW5mbywgcmVjdCk7Ci0gICAgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVy
LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRvbldp
ZHRoIC0gMSwgcmVjdC55KCksIGRyb3BEb3duQnV0dG9uV2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoLTEpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
RnJhbWVDb250cm9sKGJ1dHRvblJlY3QsIERGQ19TQ1JPTEwsIERGQ1NfU0NST0xMQ09NQk9CT1gg
fCBkZXRlcm1pbmVDbGFzc2ljU3RhdGUocmVuZGVyZXIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6dGhlbWVDaGFuZ2VkKCkKLXsKLX0KLQotU3Ry
aW5nIFJlbmRlclRoZW1lV2luQ0U6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgUmVuZGVy
VGhlbWVXaW5DRTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpz
dXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vIE1hcCBhIENTU1ZhbHVlKiBzeXN0ZW0gY29sb3IgdG8gYW4gaW5kZXggdW5k
ZXJzdG9vZCBieSBHZXRTeXNDb2xvcgotc3RhdGljIGludCBjc3NWYWx1ZUlkVG9TeXNDb2xvcklu
ZGV4KENTU1ZhbHVlSUQgY3NzVmFsdWVJZCkKLXsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsK
LSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlYm9yZGVyOiByZXR1cm4gQ09MT1JfQUNUSVZFQk9SREVS
OwotICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0aW9uOiByZXR1cm4gQ09MT1JfQUNUSVZFQ0FQ
VElPTjsKLSAgICBjYXNlIENTU1ZhbHVlQXBwd29ya3NwYWNlOiByZXR1cm4gQ09MT1JfQVBQV09S
S1NQQUNFOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNrZ3JvdW5kOiByZXR1cm4gQ09MT1JfQkFDS0dS
T1VORDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uZmFjZTogcmV0dXJuIENPTE9SX0JUTkZBQ0U7
Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hsaWdodDogcmV0dXJuIENPTE9SX0JUTkhJR0hM
SUdIVDsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uc2hhZG93OiByZXR1cm4gQ09MT1JfQlROU0hB
RE9XOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OiByZXR1cm4gQ09MT1JfQlROVEVYVDsK
LSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6IHJldHVybiBDT0xPUl9DQVBUSU9OVEVYVDsK
LSAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6IHJldHVybiBDT0xPUl9HUkFZVEVYVDsKLSAgICBj
YXNlIENTU1ZhbHVlSGlnaGxpZ2h0OiByZXR1cm4gQ09MT1JfSElHSExJR0hUOwotICAgIGNhc2Ug
Q1NTVmFsdWVIaWdobGlnaHR0ZXh0OiByZXR1cm4gQ09MT1JfSElHSExJR0hUVEVYVDsKLSAgICBj
YXNlIENTU1ZhbHVlSW5hY3RpdmVib3JkZXI6IHJldHVybiBDT0xPUl9JTkFDVElWRUJPUkRFUjsK
LSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9uOiByZXR1cm4gQ09MT1JfSU5BQ1RJVkVD
QVBUSU9OOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb250ZXh0OiByZXR1cm4gQ09M
T1JfSU5BQ1RJVkVDQVBUSU9OVEVYVDsKLSAgICBjYXNlIENTU1ZhbHVlSW5mb2JhY2tncm91bmQ6
IHJldHVybiBDT0xPUl9JTkZPQks7Ci0gICAgY2FzZSBDU1NWYWx1ZUluZm90ZXh0OiByZXR1cm4g
Q09MT1JfSU5GT1RFWFQ7Ci0gICAgY2FzZSBDU1NWYWx1ZU1lbnU6IHJldHVybiBDT0xPUl9NRU5V
OwotICAgIGNhc2UgQ1NTVmFsdWVNZW51dGV4dDogcmV0dXJuIENPTE9SX01FTlVURVhUOwotICAg
IGNhc2UgQ1NTVmFsdWVTY3JvbGxiYXI6IHJldHVybiBDT0xPUl9TQ1JPTExCQVI7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVRocmVlZGRhcmtzaGFkb3c6IHJldHVybiBDT0xPUl8zRERLU0hBRE9XOwotICAg
IGNhc2UgQ1NTVmFsdWVUaHJlZWRmYWNlOiByZXR1cm4gQ09MT1JfM0RGQUNFOwotICAgIGNhc2Ug
Q1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ6IHJldHVybiBDT0xPUl8zREhJR0hMSUdIVDsKLSAgICBj
YXNlIENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6IHJldHVybiBDT0xPUl8zRExJR0hUOwotICAg
IGNhc2UgQ1NTVmFsdWVUaHJlZWRzaGFkb3c6IHJldHVybiBDT0xPUl8zRFNIQURPVzsKLSAgICBj
YXNlIENTU1ZhbHVlV2luZG93OiByZXR1cm4gQ09MT1JfV0lORE9XOwotICAgIGNhc2UgQ1NTVmFs
dWVXaW5kb3dmcmFtZTogcmV0dXJuIENPTE9SX1dJTkRPV0ZSQU1FOwotICAgIGNhc2UgQ1NTVmFs
dWVXaW5kb3d0ZXh0OiByZXR1cm4gQ09MT1JfV0lORE9XVEVYVDsKLSAgICBkZWZhdWx0OiByZXR1
cm4gLTE7IC8vIFVuc3VwcG9ydGVkIENTU1ZhbHVlCi0gICAgfQotfQotCi1Db2xvciBSZW5kZXJU
aGVtZVdpbkNFOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0g
ICAgaW50IHN5c0NvbG9ySW5kZXggPSBjc3NWYWx1ZUlkVG9TeXNDb2xvckluZGV4KGNzc1ZhbHVl
SWQpOwotICAgIGlmIChzeXNDb2xvckluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotCi0gICAgQ09MT1JSRUYgY29sb3IgPSBH
ZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNv
bG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7Ci19Ci0KLWNvbnN0IGlu
dCBzbGlkZXJUaHVtYldpZHRoID0gNzsKLWNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1
OwotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsK
LSAgICB9Ci19Ci0KLSNpZiAwCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdEJ1dHRvbklu
bmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIFRoaXMgaW5uZXIg
cGFkZGluZyBtYXRjaGVzIEZpcmVmb3guCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KDEsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoMywgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDMsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8g
T3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgot
ICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi1ib29sIFJl
bmRlclRoZW1lV2luQ0U6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBDb2xvciBidXR0b25Db2xvciA9IChvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkgJiYgdG9FbGVtZW50KG8tPm5vZGUoKSktPmFjdGl2ZSgpKSA/IENvbG9yKDEzOCwgMTM4
LCAxMzgpIDogQ29sb3IoMTg2LCAxODYsIDE4Nik7Ci0KLSAgICBJbnRTaXplIGNhbmNlbFNpemUo
MTAsIDEwKTsKLSAgICBJbnRTaXplIGNhbmNlbFJhZGl1cyhjYW5jZWxTaXplLndpZHRoKCkgLyAy
LCBjYW5jZWxTaXplLmhlaWdodCgpIC8gMik7Ci0gICAgaW50IHggPSByLngoKSArIChyLndpZHRo
KCkgLSBjYW5jZWxTaXplLndpZHRoKCkpIC8gMjsKLSAgICBpbnQgeSA9IHIueSgpICsgKHIuaGVp
Z2h0KCkgLSBjYW5jZWxTaXplLmhlaWdodCgpKSAvIDIgKyAxOwotICAgIEludFJlY3QgY2FuY2Vs
Qm91bmRzKEludFBvaW50KHgsIHkpLCBjYW5jZWxTaXplKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3QoUm91bmRl
ZFJlY3QoY2FuY2VsQm91bmRzLCBjYW5jZWxSYWRpdXMsIGNhbmNlbFJhZGl1cywgY2FuY2VsUmFk
aXVzLCBjYW5jZWxSYWRpdXMpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoY2Fu
Y2VsQm91bmRzLCBidXR0b25Db2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICAvLyBE
cmF3IHRoZSAneCcKLSAgICBJbnRTaXplIHhTaXplKDMsIDMpOwotICAgIEludFJlY3QgeEJvdW5k
cyhjYW5jZWxCb3VuZHMubG9jYXRpb24oKSArIEludFNpemUoMywgMyksIHhTaXplKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoeEJvdW5kcy5sb2Nh
dGlvbigpLCAgeEJvdW5kcy5sb2NhdGlvbigpICsgeEJvdW5kcy5zaXplKCkpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh4Qm91bmRzLm1heFgoKSwgeEJvdW5kcy55
KCkpLCAgSW50UG9pbnQoeEJvdW5kcy54KCksIHhCb3VuZHMubWF4WSgpKSk7Ci0KLSAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIElu
dFNpemUgY2FuY2VsU2l6ZSgxMywgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2Fu
Y2VsU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNh
bmNlbFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgZW1wdHlTaXpl
KDEsIDExKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEp
OwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUuaGVpZ2h0KCks
IEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KG8sIHBhaW50SW5mbywgcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRl
clRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gVGhlc2UgYXJlIHRo
ZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2Vs
ZWN0PiBib3gKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKLSAg
ICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRpcmVjdGlvbigp
ID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKLSAgICBjb25zdCBpbnQgZHJv
cERvd25Cb3hQYWRkaW5nQm90dG9tID0gMjsKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRk
aW5nTGVmdCAgID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IDQgOiA0ICsgZHJvcERvd25C
dXR0b25XaWR0aDsKLSAgICAvLyBUaGUgPHNlbGVjdD4gYm94IG11c3QgYmUgYXQgbGVhc3QgMTJw
eCBoaWdoIGZvciB0aGUgYnV0dG9uIHRvIHJlbmRlciBuaWNlbHkgb24gV2luZG93cwotICAgIGNv
bnN0IGludCBkcm9wRG93bkJveE1pbkhlaWdodCA9IDEyOwotCi0gICAgLy8gUG9zaXRpb24gdGhl
IHRleHQgY29ycmVjdGx5IHdpdGhpbiB0aGUgc2VsZWN0IGJveCBhbmQgbWFrZSB0aGUgYm94IHdp
ZGUgZW5vdWdoIHRvIGZpdCB0aGUgZHJvcGRvd24gYnV0dG9uCi0gICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdSaWdodCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nQm90
dG9tLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoZHJvcERvd25C
b3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKLQotICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0
bwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLQotICAgIC8vIENhbGN1bGF0
ZSBvdXIgbWluLWhlaWdodAotICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKLSAgICBtaW5IZWlnaHQgPSBzdGQ6Om1heChtaW5IZWlnaHQsIGRyb3BEb3du
Qm94TWluSGVpZ2h0KTsKLQotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdo
dCwgRml4ZWQpKTsKLQotICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICBz
dHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotCi0gICAgRFdPUkQgY29sb3JNZW51ID0gR2V0U3lz
Q29sb3IoQ09MT1JfTUVOVSk7Ci0gICAgRFdPUkQgY29sb3JNZW51VGV4dCA9IEdldFN5c0NvbG9y
KENPTE9SX01FTlVURVhUKTsKLSAgICBDb2xvciBiZ0NvbG9yKEdldFJWYWx1ZShjb2xvck1lbnUp
LCBHZXRHVmFsdWUoY29sb3JNZW51KSwgR2V0QlZhbHVlKGNvbG9yTWVudSksIDI1NSk7Ci0gICAg
Q29sb3IgdGV4dENvbG9yKEdldFJWYWx1ZShjb2xvck1lbnVUZXh0KSwgR2V0R1ZhbHVlKGNvbG9y
TWVudVRleHQpLCBHZXRCVmFsdWUoY29sb3JNZW51VGV4dCksIDI1NSk7Ci0gICAgaWYgKGJnQ29s
b3IgPT0gdGV4dENvbG9yKQotICAgICAgICB0ZXh0Q29sb3Iuc2V0UkdCKCh+YmdDb2xvci5yZ2Io
KSkgfCAweEZGMDAwMDAwKTsKLSAgICBzdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0g
ICAgc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKS0+c2V0Q2xpcChDb250ZW50RmlsbEJv
eCk7Ci0gICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihiZ0NvbG9yKTsKLSAgICBzdHlsZS0+
c2V0Q29sb3IodGV4dENvbG9yKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQg
dG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIDAgaWYg
b25lIGNhbm5vdCBiZSBmb3VuZC4KLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnRQYXJlbnQoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIW1l
ZGlhTm9kZSkKLSAgICAgICAgbWVkaWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8
fCAhbWVkaWFOb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIXRvRWxlbWVudChtZWRpYU5vZGUpLT5p
c01lZGlhRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB0b0hUTUxN
ZWRpYUVsZW1lbnQobWVkaWFOb2RlKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lV2lu
Q0U6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9IFJlbmRlclRoZW1lOjpwYWludFNs
aWRlclRyYWNrKG8sIGksIHIpOwotICAgIEludFBvaW50IGxlZnQgPSBJbnRQb2ludChyLngoKSAr
IDIsIChyLnkoKSArIHIubWF4WSgpKSAvIDIpOwotICAgIGkuY29udGV4dC0+c2F2ZSgpOwotICAg
IGkuY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmdyYXksIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwotICAgIGkuY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICBpLmNvbnRleHQtPmZpbGxSZWN0KHIpOwotI2lmIEVOQUJMRShWSURF
TykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJl
bnQoby0+bm9kZSgpKTsKLSAgICBpZiAobWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGkuY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMHhmZiwgMCkpOwotICAgICAgICBJbnRQb2ludCBy
aWdodCA9IEludFBvaW50KGxlZnQueCgpICsgbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkg
KiAoci5tYXhYKCkgLSByLngoKSAtIDQpLCAoci55KCkgKyByLm1heFkoKSkgLyAyKTsKLSAgICAg
ICAgaS5jb250ZXh0LT5kcmF3TGluZShsZWZ0LCByaWdodCk7Ci0gICAgICAgIGxlZnQgPSByaWdo
dDsKLSAgICB9Ci0jZW5kaWYKLSAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpi
bGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgaS5jb250ZXh0LT5kcmF3TGluZShsZWZ0
LCBJbnRQb2ludChyLm1heFgoKSAtIDIsIGxlZnQueSgpKSk7Ci0gICAgaS5jb250ZXh0LT5yZXN0
b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgYm9vbCByYyA9IFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRo
dW1iKG8sIGksIHIpOwotICAgIGkuY29udGV4dC0+c2F2ZSgpOwotICAgIGkuY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBpLmNv
bnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgIGkuY29udGV4dC0+ZmlsbFJlY3Qocik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkp
OwotICAgIGlmIChtZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgZmxvYXQgcHQgPSBtZWRpYUVsZW1l
bnQtPmN1cnJlbnRUaW1lKCkgLyBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0gICAgICAgIEZs
b2F0UmVjdCBpbnRSZWN0ID0gcjsKLSAgICAgICAgaW50UmVjdC5zZXRYKGludFJlY3QueCgpICsg
aW50UmVjdC53aWR0aCgpICogcHQgLSAyKTsKLSAgICAgICAgaW50UmVjdC5zZXRXaWR0aCg1KTsK
LSAgICAgICAgaS5jb250ZXh0LT5maWxsUmVjdChpbnRSZWN0KTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBpLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgcGFkZGlu
ZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci19Ci0KLSNpZiBF
TkFCTEUoVklERU8pCi0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZv
LCByKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMik7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpncmF5KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3Qo
aW1SZWN0KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBy
YzsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2Rl
KCkpOwotICAgIGJvb2wgbXV0ZWQgPSAhbWVkaWFFbGVtZW50IHx8IG1lZGlhRWxlbWVudC0+bXV0
ZWQoKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMik7
Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgRmxvYXRQb2ludCBwdHNbNl0gPSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0
KCkgLyAzLjApLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0Lndp
ZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAotICAgICAg
ICBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3QueSgpKSwKLSAgICAgICAgRmxv
YXRQb2ludChpbVJlY3QubWF4WCgpIC0gMSwgaW1SZWN0Lm1heFkoKSksCi0gICAgICAgIEZsb2F0
UG9pbnQoaW1SZWN0LngoKSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSAr
IDIuMCAqIGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0
LngoKSArIDEsIGltUmVjdC55KCkgKyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCi0gICAg
fTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oNiwgcHRzKTsKLSAg
ICBpZiAobXV0ZWQpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2lu
dChpbVJlY3QubWF4WCgpLCBpbVJlY3QueSgpKSwgSW50UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0
Lm1heFkoKSkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJu
IHJjOwotfQotCi1ib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAg
RmxvYXRSZWN0IGltUmVjdCA9IHI7Ci0gICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwotICAgIGJvb2wgcGF1c2VkID0gIW1lZGlhRWxlbWVu
dCB8fCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpOwotICAgIGlmIChwYXVzZWQpIHsKLSAgICAgICAg
ZmxvYXQgd2lkdGggPSBpbVJlY3Qud2lkdGgoKTsKLSAgICAgICAgaW1SZWN0LnNldFdpZHRoKHdp
ZHRoIC8gMy4wKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7
Ci0gICAgICAgIGltUmVjdC5tb3ZlKDIuMCAqIHdpZHRoIC8gMy4wLCAwKTsKLSAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSks
IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAv
IDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0cyk7Ci0gICAgfQotICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1ib29s
IFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBp
bVJlY3QgPSByOwotICAgIGltUmVjdC5pbmZsYXRlKC0zKTsKLSAgICBGbG9hdFBvaW50IHB0c1sz
XSA9IHsgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJl
Y3QueSgpKSwgRmxvYXRQb2ludChpbVJlY3QueCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZ
KCkpIC8gMi4wKSwgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4w
LCBpbVJlY3QubWF4WSgpKSB9OwotICAgIEZsb2F0UG9pbnQgcHRzMlszXSA9IHsgRmxvYXRQb2lu
dChpbVJlY3QubWF4WCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludCgoaW1SZWN0LngoKSArIGlt
UmVjdC5tYXhYKCkpIC8gMi4wLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwg
RmxvYXRQb2ludChpbVJlY3QubWF4WCgpLCBpbVJlY3QubWF4WSgpKSB9OwotICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBw
dHMpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBwdHMyKTsK
LSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiByYzsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBGbG9h
dFJlY3QgaW1SZWN0ID0gcjsKLSAgICBpbVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2lu
dCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSksIEZsb2F0UG9p
bnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJl
Y3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkg
fTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBp
bVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgo
KSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoKGltUmVj
dC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgcHRzKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRz
Mik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gcmM7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgcmV0dXJuIHBhaW50U2xpZGVyVHJhY2sobywgcGFpbnRJbmZvLCByKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBy
ZXR1cm4gcGFpbnRTbGlkZXJUaHVtYihvLCBwYWludEluZm8sIHIpOwotfQotI2VuZGlmCi0KLXZv
aWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgaW50IHdp
ZHRoID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7Ci0gICAgaWYgKHdpZHRoIDw9
IDApCi0gICAgICAgIHdpZHRoID0gMTc7IC8vIFZpc3RhJ3MgZGVmYXVsdC4KLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRJ
bm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBXZSBzcGxpdCB0aGUgc3BlY2lmaWVkIHJl
Y3RhbmdsZSBpbnRvIHR3byB2ZXJ0aWNhbGx5LiBXZSBjYW4ndCBkcmF3IGEKLSAgICAvLyBzcGlu
IGJ1dHRvbiBvZiB3aGljaCBoZWlnaHQgaXMgbGVzcyB0aGFuIDJweC4KLSAgICBpZiAoci5oZWln
aHQoKSA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbnRSZWN0IHVwUmVjdChyKTsK
LSAgICB1cFJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLyAyKTsKLSAgICBJbnRSZWN0IGRvd25S
ZWN0KHIpOwotICAgIGRvd25SZWN0LnNldFkodXBSZWN0Lm1heFkoKSk7Ci0gICAgZG93blJlY3Qu
c2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLSB1cFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgdW5zaWduZWQg
c3RhdGVVcCA9IERGQ1NfU0NST0xMVVA7Ci0gICAgdW5zaWduZWQgc3RhdGVEb3duID0gREZDU19T
Q1JPTExET1dOOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykgfHwgaXNSZWFkT25seUNvbnRyb2wo
bykpIHsKLSAgICAgICAgc3RhdGVVcCB8PSBERkNTX0lOQUNUSVZFOwotICAgICAgICBzdGF0ZURv
d24gfD0gREZDU19JTkFDVElWRTsKLSAgICB9IGVsc2UgaWYgKGlzUHJlc3NlZChvKSkgewotICAg
ICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKLSAgICAgICAgICAgIHN0YXRl
VXAgfD0gREZDU19QVVNIRUQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlRG93biB8
PSBERkNTX1BVU0hFRDsKLSAgICB9Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ZyYW1l
Q29udHJvbCh1cFJlY3QsIERGQ19TQ1JPTEwsIHN0YXRlVXApOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3RnJhbWVDb250cm9sKGRvd25SZWN0LCBERkNfU0NST0xMLCBzdGF0ZURvd24pOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDBkNjFkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW5DRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUmVuZGVyVGhlbWVXaW5DRV9oCi0jZGVmaW5l
IFJlbmRlclRoZW1lV2luQ0VfaAotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLQotdHlwZWRl
ZiB2b2lkKiBIQU5ETEU7Ci10eXBlZGVmIHN0cnVjdCBISU5TVEFOQ0VfXyogSElOU1RBTkNFOwot
dHlwZWRlZiBISU5TVEFOQ0UgSE1PRFVMRTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
c3RydWN0IFRoZW1lRGF0YSB7Ci0gICAgICAgIFRoZW1lRGF0YSgpIDptX3BhcnQoMCksIG1fc3Rh
dGUoMCksIG1fY2xhc3NpY1N0YXRlKDApIHt9Ci0gICAgICAgIFRoZW1lRGF0YShpbnQgcGFydCwg
aW50IHN0YXRlKQotICAgICAgICAgICAgOiBtX3BhcnQocGFydCkKLSAgICAgICAgICAgICwgbV9z
dGF0ZShzdGF0ZSkKLSAgICAgICAgICAgICwgbV9jbGFzc2ljU3RhdGUoMCkKLSAgICAgICAgeyB9
Ci0KLSAgICAgICAgdW5zaWduZWQgbV9wYXJ0OwotICAgICAgICB1bnNpZ25lZCBtX3N0YXRlOwot
ICAgICAgICB1bnNpZ25lZCBtX2NsYXNzaWNTdGF0ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgUmVu
ZGVyVGhlbWVXaW5DRSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7Ci0gICAgICAgIH5SZW5k
ZXJUaGVtZVdpbkNFKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQo
KTsKLQotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMg
YWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAg
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0K
LSAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9u
dChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBD
b2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKLSAgICAgICAgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotICAgICAgICB7IHJldHVybiBwYWlu
dEJ1dHRvbihvLCBpLCByKTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gc2V0Q2hlY2tib3hTaXpl
KHN0eWxlKTsgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLSAgICAg
ICAgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFy
dChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0IHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QgeyB9Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRXZWJLaXRJc0JlaW5nVW5sb2FkZWQoKTsKLQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdDsKLQotICAgICNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3
YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVuZGVyVGhlbWVXaW5DRSgpOwotCi0gICAgICAgIHVuc2lnbmVkIGRldGVybWluZUNsYXNzaWNT
dGF0ZShSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0KSBjb25zdDsKLQotICAgICAgICBUaGVtZURhdGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVj
dCopOwotICAgIH07Ci0KLX07Ci0KLSNlbmRpZiAvLyBSZW5kZXJUaGVtZVdpbkNFX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODExNDVkLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkK
LTogbV90aW1lcih0aGlzLCAmRGF0YWJhc2VUaHJlYWQ6OnRpbWVyRmlyZWQpCi17Ci19Ci0KLURh
dGFiYXNlVGhyZWFkOjp+RGF0YWJhc2VUaHJlYWQoKQotewotfQotCi12b2lkIERhdGFiYXNlVGhy
ZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oKQotewotICAgIG1fcXVldWUuY2xlYXIoKTsKLX0KLQot
Ym9vbCBEYXRhYmFzZVRocmVhZDo6dGVybWluYXRpb25SZXF1ZXN0ZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6dGlt
ZXJGaXJlZChUaW1lcjxEYXRhYmFzZVRocmVhZD4qKQotewotICAgIGlmICghbV9xdWV1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzayA9IG1fcXVldWUuZmly
c3QoKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLSAgICAgICAgbV9xdWV1ZS5yZW1v
dmVGaXJzdCgpOwotICAgICAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotfQotCi12b2lkIERhdGFiYXNlVGhyZWFk
OjpzY2hlZHVsZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAgbV9x
dWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hl
ZHVsZUltbWVkaWF0ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAg
dGFzay0+cGVyZm9ybVRhc2soKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6dW5zY2hlZHVs
ZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIERlcXVlPFJlZlB0cjxE
YXRhYmFzZVRhc2s+ID4gcmVzZXJ2ZWRUYXNrczsKLSAgICBmb3IgKERlcXVlPFJlZlB0cjxEYXRh
YmFzZVRhc2s+ID46OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3F1ZXVlLmJlZ2luKCk7IGkgIT0gbV9x
dWV1ZS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmICgoKmkpLT5kYXRhYmFzZSgpICE9IGRhdGFi
YXNlKQotICAgICAgICAgICAgcmVzZXJ2ZWRUYXNrcy5hcHBlbmQoKmkpOwotICAgIH0KLQotICAg
IG1fcXVldWUuc3dhcChyZXNlcnZlZFRhc2tzKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6
cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChE
YXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5j
ZS9EYXRhYmFzZVRocmVhZFdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0Rh
dGFiYXNlVGhyZWFkV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyMWNj
MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhy
ZWFkV2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGkgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgRGF0YWJhc2VUaHJlYWRXaW5DRV9o
Ci0jZGVmaW5lIERhdGFiYXNlVGhyZWFkV2luQ0VfaAotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0g
ICAgY2xhc3MgRGF0YWJhc2U7Ci0gICAgY2xhc3MgRGF0YWJhc2VUYXNrOwotCi0gICAgY2xhc3Mg
RGF0YWJhc2VUaHJlYWQ6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRocmVhZCk7IH0KLSAgICAg
ICAgfkRhdGFiYXNlVGhyZWFkKCk7Ci0KLSAgICAgICAgYm9vbCBzdGFydCgpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgICAgdm9pZCByZXF1ZXN0VGVybWluYXRpb24oKTsKLSAgICAgICAgYm9vbCB0
ZXJtaW5hdGlvblJlcXVlc3RlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2NoZWR1bGVUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlh
dGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7Ci0gICAgICAgIHZvaWQgdW5zY2hlZHVs
ZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRhYmFzZU9w
ZW4oRGF0YWJhc2UqKTsKLSAgICAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFz
ZSopOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKTsgfQotI2VuZGlmCi0KLSAgICBwcml2
YXRlOgotICAgICAgICBEYXRhYmFzZVRocmVhZCgpOwotCi0gICAgICAgIHZvaWQgdGltZXJGaXJl
ZChUaW1lcjxEYXRhYmFzZVRocmVhZD4qKTsKLQotICAgICAgICBEZXF1ZTxSZWZQdHI8RGF0YWJh
c2VUYXNrPiA+IG1fcXVldWU7Ci0gICAgICAgIFRpbWVyPERhdGFiYXNlVGhyZWFkPiBtX3RpbWVy
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFiYXNl
VGhyZWFkV2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9T
dG9yYWdlVGhyZWFkV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9TdG9y
YWdlVGhyZWFkV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWU4OTZm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRocmVh
ZFdpbkNFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGkgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdG9yYWdlVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJTdG9yYWdlVGFzay5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhU3luYy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0b3JhZ2VUaHJl
YWQ6OlN0b3JhZ2VUaHJlYWQoKQotOiBtX3RpbWVyKHRoaXMsICZTdG9yYWdlVGhyZWFkOjp0aW1l
ckZpcmVkKQotewotfQotCi1TdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCgpCi17Ci19Ci0K
LWJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFN0b3JhZ2VUaHJlYWQ6OnRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZVRocmVhZD4qKQotewot
ICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VUYXNr
PiB0YXNrID0gbV9xdWV1ZS5maXJzdCgpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwot
ICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIGlmICghbV9xdWV1ZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YVN5bmM+IGFyZWEpCi17Ci0gICAgbV9xdWV1ZS5hcHBlbmQoU3RvcmFnZVRhc2s6OmNyZWF0ZUlt
cG9ydChhcmVhKSk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGlt
ZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3lu
YyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gYXJlYSkKLXsKLSAgICBtX3F1ZXVlLmFwcGVu
ZChTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhhcmVhKSk7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFN0b3Jh
Z2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCi17Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotICAgIG1fdGlt
ZXIuc3RvcCgpOwotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQot
ewotICAgIG1fcXVldWUuY2xlYXIoKTsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5j
ZS9TdG9yYWdlVGhyZWFkV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvU3Rv
cmFnZVRocmVhZFdpbkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTczYWUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFk
V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBTdG9yYWdlVGhyZWFkV2luQ0VfaAot
I2RlZmluZSBTdG9yYWdlVGhyZWFkV2luQ0VfaAotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgU3RvcmFnZUFyZWFTeW5jOwotICAgIGNsYXNzIFN0b3JhZ2VUYXNrOwotCi0gICAgY2xh
c3MgU3RvcmFnZVRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VUaHJlYWQ+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VUaHJlYWQ+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlVGhyZWFkKTsgfQotCi0gICAgICAgIH5T
dG9yYWdlVGhyZWFkKCk7Ci0gICAgICAgIGJvb2wgc3RhcnQoKTsKLSAgICAgICAgdm9pZCBzY2hl
ZHVsZUltcG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwotICAgICAgICB2b2lkIHNj
aGVkdWxlU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwotICAgICAgICB2b2lkIHRl
cm1pbmF0ZSgpOwotICAgICAgICB2b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFN0b3JhZ2VUaHJlYWQoKTsKLQotICAgICAgICB2b2lkIHRpbWVyRmlyZWQo
VGltZXI8U3RvcmFnZVRocmVhZD4qKTsKLQotICAgICAgICBEZXF1ZTxSZWZQdHI8U3RvcmFnZVRh
c2s+ID4gbV9xdWV1ZTsKLSAgICAgICAgVGltZXI8U3RvcmFnZVRocmVhZD4gbV90aW1lcjsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVGhyZWFk
V2luQ0VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBlNjBiOWJjLi4xZTI3OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMwIEBACisyMDE0LTA5LTI0ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0cnVuaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTUxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNFLmNtYWtlOiBS
ZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRl
eHRNZW51Q2xpZW50V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5j
ZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHdpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9y
dC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdp
bmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3aW5jZS9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdp
bmNlL1dlYlZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdpbmNlL1dlYlZpZXcuaDogUmVt
b3ZlZC4KKwogMjAxNC0wOS0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBbV2luXSA2NC1iaXQgQnVpbGQgZml4IGFmdGVyIHIxNzM4ODIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luQ0UuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtV2luQ0UuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGMwMWIu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbkNFLmNtYWtlCisrKyAvZGV2
L251bGwKQEAgLTEsMjcgKzAsMCBAQAotbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNU
T1JJRVMKLSAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS93aW4iCi0gICAgIiR7V0VC
Q09SRV9ESVJ9L3BhZ2Uvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vd2luIgotCi0gICAgd2luY2UKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydAot
KQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIHdpbmNlL1dlYlZpZXcuY3BwCi0g
ICAgd2luY2UvV2ViVmlldy5oCi0KLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdp
bkNFLmNwcAotICAgIHdpbmNlL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAKLSAg
ICB3aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAotICAgIHdpbmNlL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHAKLSAgICB3aW5jZS9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKLSkKLQotc2V0KFdlYktpdF9MSUJSQVJZ
X1RZUEUgU1RBVElDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jZi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZwppbmRleCBiZDhjNjc3Li5jODk2YmQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2NmL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2NmL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA5LTI0ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIFdpbkNFIHBvcnQgZnJvbSB0cnVu
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTUx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHA6CisKIDIwMTQtMDItMTcgIFNlcmdp
byBDb3JyZWlhICA8c2VyZ2lvLmNvcnJlaWFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXBs
YWNlIHVzZXMgb2YgUGFzc093blB0ci9Pd25QdHIgd2l0aCBzdGQ6OnVuaXF1ZV9wdHIgaW4gV2Vi
Q29yZS9pbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2YvV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGIvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKaW5kZXggNjIzMzNkOS4uMDRmZTczMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnRDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnRDRi5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgogCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpCisjaWYgUExBVEZPUk0oV0lO
KQogI2lmbmRlZiBXVEZfVVNFX0NHCiAjZGVmaW5lIFdURl9VU0VfQ0cgMQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2lu
Y2UvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWQ4ZTFkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCisrKyAvZGV2L251bGwKQEAg
LTEsMjI4MyArMCwwIEBACi0yMDE0LTAzLTEyICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxh
ckBpZ2FsaWEuY29tPgotCi0gICAgICAgIFJlbmFtZSBERUZJTkVfU1RBVElDX0xPQ0FMIHRvIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NjEyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCi0KLSAgICAgICAgRm9yIG5ldyBjb2RlIHVzZSBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VD4gaW5zdGVhZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp1c2Vy
QWdlbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
LmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0aWFsaXplKToKLQot
MjAxNC0wMy0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgotCi0gICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEV4cG9zZSB0aGUgY29uc29sZSBvYmplY3QgaW4gSlNDb250ZXh0
cyB0byBpbnRlcmFjdCB3aXRoIFdlYiBJbnNwZWN0b3IKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk0NAotCi0gICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaDoKLSAgICAgICAgVXBkYXRlIG5hbWVzcGFjZXMuCi0KLTIwMTQtMDItMjQgIFJlbmF0YSBI
b2RvdmFuICA8cmhvZG92YW4udS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotICAgICAg
ICBHZXQgcmlkIG9mIHRoZSB1bnVzZWQgJ2ltbWVkaWF0ZScgcGFyYW1ldGVycyBmcm9tIHJlcGFp
bnQgcmVsYXRlZCBmdW5jdGlvbnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyOTExMQotCi0gICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
LQotICAgICAgICBSZW1vdmluZyB0aGUgJ2ltbWVkaWF0ZScgcGFyYW1ldGVycyBmcm9tIHJlcGFp
bnQgcmVsYXRlZCBmdW5jdGlvbnMgLSBhY2NvcmluZwotICAgICAgICB0byB0aGUgRklYTUUgaW4g
UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoKSAtIHNpbmNlIHRoZXkgaGF2ZSBubyBl
ZmZlY3QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlUm9vdFZpZXcp
OgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRz
QW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxp
ZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6Ci0KLTIwMTQtMDItMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgotCi0g
ICAgICAgIENoYW5nZSBUZXh0SXRlcmF0b3IgdG8gdXNlIFN0cmluZ1ZpZXcsIHByZXBhcmluZyB0
byB3ZWFuIGl0IGZyb20gZGVwcmVjYXRlZENoYXJhY3RlcnMKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODIzMwotCi0gICAgICAgIFJldmlld2VkIGJ5
IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyk6IFVzZSBTdHJpbmdWaWV3LgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnRXaW5DRTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOiBEaXR0by4KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOiBEaXR0by4KLQotMjAxNC0wMi0wNiAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgotCi0gICAgICAgIFdlYiBJbnNwZWN0
b3I6IEFkZCBDb25zb2xlIHN1cHBvcnQgdG8gSlNDb250ZXh0IEluc3BlY3Rpb24KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk0MQotCi0gICAgICAg
IFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3Vy
QGFkb2JlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
IGZsYWcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
NzgzMwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgotCi0gICAgICAgIFJl
bW92ZSB0aGUgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSBjb25kaXRpb25hbHMgZnJvbSB0
aGUgY29kZSBiYXNlIGFuZCBtYWtlIEFDCi0gICAgICAgIG1hbmRhdG9yeS4KLQotICAgICAgICBB
bm90aGVyIHBhdGNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gcmVtb3ZlIHRoZSBmbGFnIHN1cHBvcnQg
ZnJvbSB0aGUgV2luQ0UgYnVpbGQgc3lzdGVtLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5D
RTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOgotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTQtMDEtMjUgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgYW4gdW51c2VkIEZyYW1lTG9h
ZGVyQ2xpZW50IGZ1bmN0aW9uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjc2MjgKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDE0
LTAxLTE3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAg
UmVtb3ZlIGFub3RoZXIgdW51c2VkIEZyYW1lTG9hZGVyQ2xpZW50IGNhbGxiYWNrCi0gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcxOTIKLQotICAgICAg
ICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDE0LTAxLTE3ICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIGRpZFBlcmZvcm1GaXJzdE5hdmln
YXRpb24gZnJvbSBhbGwgRnJhbWVMb2FkZXJDbGllbnQgc3ViY2xhc3NlcwotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTkwCi0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxNC0wMS0xNiAgUGV0ZXIgTW9sbmFyICA8cG1vbG5hci51
LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0gICAgICAgIFJlbW92ZSB3b3JrYXJvdW5k
IGZvciBjb21waWxlcnMgbm90IHN1cHBvcnRpbmcgZXhwbGljaXQgb3ZlcnJpZGUgY29udHJvbAot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTExCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgIE5vdyBhbGwg
Y29tcGlsZXJzIHN1cHBvcnQgZXhwbGljaXQgb3ZlcnJpZGUgY29udHJvbCwgdGhpcyB3b3JrYXJv
dW5kIGNhbiBiZSByZW1vdmVkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdp
bkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmg6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEzLTEyLTAzICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogUHVzaCBSZW1v
dGUgSW5zcGVjdG9yIGRlYnVnZ2luZyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaW50byBKYXZhU2Ny
aXB0Q29yZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0NjEzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0xMS0wNCAg
Wmh1YW5nIFpoaWdhbmcgIDx6aHVhbmd6Z0Bjbi5mdWppdHN1LmNvbT4KLQotICAgICAgICBDaGFu
Z2Ugc3RydWN0dXJlIG9mIGZyYW1lIHRyZWUgaW4gV0lOQ0UgcG9ydC4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTA3OQotCi0gICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZp
ZXc6OmNyZWF0ZUZyYW1lKToKLSAgICAgICAgKiBXZWJWaWV3Lmg6Ci0KLTIwMTMtMTEtMDMgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTkNFXSBS
ZXBsYWNlIE93blB0ciB3aXRoIEdESU9iamVjdAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjcwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojpw
YWludCk6Ci0gICAgICAgIChXZWJWaWV3OjpoYW5kbGVQYWludCk6Ci0gICAgICAgICogV2ViVmll
dy5oOgotCi0yMDEzLTExLTAyICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIEFkZCBPVkVSUklERSBrZXl3b3JkIHRvIFdlYkNvcmVTdXBwb3J0IGNsYXNz
ZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
MgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIEFsc28gYWxp
Z24gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgd2l0aCB0aGUgYmFzZSBjbGFzc2VzCi0gICAgICAg
IGFuZCByZW1vdmUgdXNlbGVzcyBmdW5jdGlvbnMuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdp
bkNFLmg6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudFdpbkNFOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbik6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRXaW5DRTo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudFdpbkNFOjphY3Rp
b25NYXNrRm9yRHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRXaW5DRTo6c3RhcnRE
cmFnKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaDoKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToK
LSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgotICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJtaXRG
b3JtKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmg6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLQotMjAxMy0xMS0wMiAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBWYXJpb3Vz
IHNtYWxsIFdpbkNFIGJ1aWxkIGZpeGVzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnRXaW5DRTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6Ci0gICAgICAgICogV2Vi
Vmlldy5jcHA6Ci0KLTIwMTMtMTAtMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQot
ICAgICAgICBSZW1vdmUgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uIGZyb20gdGhlIFdLQnVu
ZGxlUGFnZVVJQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjIzMDkKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0xMC0w
MSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIENUVEU6IERPTVdyYXBw
ZXJXb3JsZHMgc2hvdWxkIGJlIHBhc3NlZCBhcm91bmQgYnkgcmVmZXJlbmNlCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyMDYKLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDktMzAg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZp
ZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE1MzkyNy4KLQotICAgICAgICAqIFdlYlZpZXcu
Y3BwOgotICAgICAgICAoV2ViVmlldzo6V2ViVmlldyk6Ci0KLTIwMTMtMDktMzAgIFBhdHJpY2sg
R2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5D
RSBidWlsZCBmaXggYWZ0ZXIgcjE1NTI4OS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKLSAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24pOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgotICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKLQotMjAx
My0wOS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAg
ICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTU0MTc4LgotCi0gICAgICAgICog
V2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojp3bmRQcm9jKToKLQotMjAxMy0wOS0yNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgcmVuYW1lIEtVUkwgdG8g
VVJMCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIx
NAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAgICAgICAgKiBtYW55
IGZpbGVzOiBSZW5hbWVkLCB1c2luZyBzY3JpcHQuCi0KLTIwMTMtMDktMTYgIEVucmljYSBDYXN1
Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmUgdW51c2VkIGZ1bmN0aW9u
IGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCBmcm9tIEVkaXRvckNsaWVudC4KLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTQ2NAotCi0g
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDgtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgotCi0gICAgICAgIEZyYW1lOjp0cmVlIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UgaW5z
dGVhZCBvZiBhIHBvaW50ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDI1OQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0K
LSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmNyZWF0ZUZyYW1lKToK
LSAgICAgICAgVXNlIHRyZWUoKS4gaW5zdGVhZCBvZiB0cmVlKCktPi4KLQotMjAxMy0wOC0xOSAg
UHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+Ci0KLSAgICAgICAgPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzExOTkxOD4gRnJhbWU6OnNlbGVjdGlvbigpIHNob3VsZCByZXR1cm4gYSBy
ZWZlcmVuY2UKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBt
X3NlbGVjdGlvbiBpcyBuZXZlciBOVUxMIHNvIHJldHVybiBhIHJlZmVyZW5jZSBmcm9tIEZyYW1l
OjpzZWxlY3Rpb24oKS4gQWxzbyByZW1vdmVkIHNvbWUKLSAgICAgICAgdW5uZWNlc3NhcnkgbnVs
bCBjaGVja3MgYW5kIGFzc2VydCBkaWZmIHRzIGV4cG9zZWQgYXMgYSByZXN1bHQuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0KLTIw
MTMtMDgtMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAg
ICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5ODU5PiBGcmFtZTo6bG9hZGVyKCkgc2hvdWxkIHJl
dHVybiBhIHJlZmVyZW5jZQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JSZXNwb25zZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKLSAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKToKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlz
cGF0Y2hXaWxsU3VibWl0Rm9ybSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3
b3JraW5nQ29udGV4dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5n
Q29udGV4dFdpbkNFOjpyZWZlcnJlcik6Ci0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAg
IChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLSAgICAg
ICAgKFdlYlZpZXc6OnJlbG9hZCk6Ci0gICAgICAgIChXZWJWaWV3OjpzdG9wKToKLQotMjAxMy0w
Ny0yNSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+Ci0KLSAgICAgICAgQ2hyb21l
Q2xpZW50Ojpmb2N1c2VkTm9kZUNoYW5nZWQoKSBzaG91bGQgYmUgZm9jdXNlZEVsZW1lbnRDaGFu
Z2VkKCkuCi0gICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzExOTExMD4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDYtMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIg
cjE1MjA2NS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OkFYU3RhcnRGcmFtZUxvYWQp
OgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6QVhGaW5pc2hGcmFtZUxvYWQp
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTMt
MDUtMTkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBS
ZW1vdmUgQ2hyb21lQ2xpZW50Ojp3ZWJWaWV3KCkKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjA1NAotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgotCi0gICAgICAgIFRoaXMgYmxhdGFudGx5IGhvcnJpYmxlIGxheWVyIHZpb2xhdGlv
biB3YXMgb25seSB1c2VkIHRvIGtub3cgaWYgYSBDaHJvbWVDbGllbnQgaXMgYW4gZW1wdHkKLSAg
ICAgICAgY2xpZW50IG9yIG5vdC4gV2UgYWxyZWFkeSBoYXZlIGEgKHNsaWdodGx5IGxlc3MgaG9y
cmlibGUpIHdheSB0byBkbyB0aGF0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMy0wNS0x
MyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgotCi0gICAgICAgIEZyYW1l
OjplZGl0b3IoKSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYwMzcKLQotICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRp
bmdLZXlib2FyZEV2ZW50KToKLQotMjAxMy0wNC0yOSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOiBBZGRlZCBtaXNz
aW5nIGhlYWRlci4KLSAgICAgICAgKiBXZWJWaWV3Lmg6IERpdHRvLgotCi0yMDEzLTA0LTI1ICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+Ci0KLSAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQ29uc29sZU1lc3NhZ2Ugc2hvdWxkIGluY2x1ZGUgbGluZSBhbmQgY29sdW1uIG51bWJl
ciB3aGVyZSBwb3NzaWJsZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE0OTI5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6YWRkTWVzc2FnZVRvQ29uc29sZSk6Ci0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMy0wNC0xOCAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBVbnJldmll
d2VkIFdpbkNFIGJ1aWxkIGZpeCBhZnRlciByMTQ4NTQ1LgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYlZpZXcuY3BwOgotCi0y
MDEzLTA0LTE1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAg
ICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFmdGVyIHIxNDgzNzMuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0KLTIwMTMtMDQtMDYgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjE0NTg0OS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLQotMjAxMy0wMy0xNSAgTmF0ZSBDaGFwaW4gIDxq
YXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEhpZGUgTWFpblJlc291cmNlTG9hZGVyIGZy
b20gdGhlIG91dHNpZGUgd29ybGQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTk3MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmg6Ci0gICAgICAgIChGcmFtZUxvYWRlckNsaWVudFdpbkNFKToKLQotMjAxMy0w
My0xNSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJl
cGxhY2Ugc3RhdGljX2Nhc3RzIHdpdGggdG8qIGhlbHBlciBmdW5jdGlvbnMuCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI0MDEKLQotICAgICAgICBS
ZXZpZXdlZCBieSBTdGVwaGVuIENoZW5uZXkuCi0KLSAgICAgICAgdG8qIGhlbHBlciBmdW5jdGlv
bnMgYXJlIHByZWZlcnJlZCBvdmVyIHN0YXRpY19jYXN0IGNhbGxzIHNpbmNlIHRoZXkKLSAgICAg
ICAgaGVscCB0byBjYXRjaCBiYWQgY2FzdHMgZWFzaWx5IG9uIHRoZSB0ZXN0aW5nIGluZnJhc3Ry
dWN0dXJlLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlZGlyZWN0
RGF0YVRvUGx1Z2luKToKLQotMjAxMy0wMy0xNCAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJl
Z29AaWdhbGlhLmNvbT4KLQotICAgICAgICBBZGQgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZCBzZXR0aW5nIHRvIFdlYkNvcmU6OlBhZ2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTQwNAotCi0gICAgICAgIFJldmlld2VkIGJ5IFRvbnkg
Q2hhbmcuCi0KLSAgICAgICAgVXNlIG5ldyBzZXR0aW5ncyBmb3Igc21hcnRJbnNlcnREZWxldGVF
bmFibGVkIGFuZAotICAgICAgICBzZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkLgotCi0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZCk6Ci0KLTIwMTMtMDItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgRGlzYWJsZSBkZWxldGUgYnV0dG9uIGNvbnRyb2xsZXIgb24gbm9uLU1h
YyBwb3J0cyBhbmQgZGVsZXRlIEVkaXRvckNsaWVudDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFj
ZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NTM0
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0KToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoRWRp
dG9yQ2xpZW50V2luQ0UpOgotCi0yMDEzLTAyLTAzICBLd2FuZ1lvbmcgQ2hvaSAgPGt5MC5jaG9p
QHNhbXN1bmcuY29tPgotCi0gICAgICAgIEZpeCBidWlsZCB3YXJuaW5nIGFmdGVyIHIxNDE0NzMK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODc4Mgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4KLQotICAgICAgICBGaXggLVd1bnVz
ZWQtcGFyYW1ldGVyIGJ1aWxkIHdhcm5pbmcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNF
OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKLQotMjAxMy0wMS0zMSAgRW5yaWNh
IENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgotCi0gICAgICAgIFdlYktpdDI6IHByb3ZpZGUg
bmV3IGJ1bmRsZSBBUElzIHRvIGFsbG93IGJ1bmRsZSBjbGllbnRzIHRvIGJlIG5vdGlmaWVkIG9m
IHBhc3RlYm9hcmQgYWNjZXNzLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4Mzk2LgotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI5MjA0NjE+Ci0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICBBZGRz
IHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdCBvZiB0aGUgbmV3IEVkaXRvckNsaWVudCBt
ZXRob2RzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3Bw
OgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmdldENs
aWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTMtMDEtMjQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0
ZXIgcjEzOTA3OC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNF
Lmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTMtMDEtMjIgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBVc2UgYSBwbGF0Zm9yb20g
c3RyYXRlZ3kgZm9yIGxvY2FsIHN0b3JhZ2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzYwMAotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMg
S2xpbmcuCi0KLSAgICAgICAgVXBkYXRlIGZvciBuZXcgc3RvcmFnZSBzdHJhdGVneS4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAg
ICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVTdG9yYWdlU3RyYXRlZ3kpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0gICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTMtMDEtMTggIFNlb2tqdSBLd29uICA8
c2Vva2p1Lmt3b25AZ21haWwuY29tPgotCi0gICAgICAgIEFkZCBleHBsaWNpdCBrZXl3b3JkIHRv
IGNvbnN0cnVjdG9ycyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBJbnNwZWN0b3JDbGllbnQKLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzI1NQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IEtlbnRhcm8gSGFyYS4KLQotICAgICAgICBBZGQgZXhwbGljaXQga2V5
d29yZCB0byBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIG9uZSBhcmd1bWVudAotICAgICAgICBpbiBw
bGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0b3JDbGllbnQuCi0gICAg
ICAgIEFuZCBmaXggc29tZSBjb2Rpbmcgc3R5bGUuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoSW5zcGVjdG9yQ2xpZW50V2luQ0Up
OgotCi0yMDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KLQotICAgICAg
ICBSZW1vdmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWREYXRhYmFzZSBtZWNoYW5pc20uCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyOTIuCi0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKENocm9tZUNsaWVudFdpbkNFKToKLQotMjAx
Mi0xMi0yMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTI4MDgzNzc+IE5ldHdvcmsgcHJvY2VzcyBzaG91bGQgcmVzcGVjdCBj
b29raWUgYWNjZXB0IHBvbGljeQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA1Njg0Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAg
ICBDb29raWVzU3RyYXRlZ3kgbm8gbG9uZ2VyIGhhcyBub3RpZnlDb29raWVzQ2hhbmdlZCgpLiBU
aGlzIHBvcnQgZGlkbid0IHVzZSBpdCBhbnl3YXkuCi0KLTIwMTItMTItMjIgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgQWRkIGEgc2VwYXJhdGUgY2xhc3Mg
Zm9yIG5ldHdvcmtpbmcgcmVsYXRlZCBzdG9yYWdlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU2NzYKLQotICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNGb3JET00p
OgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKToK
LSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5hYmxlZCk6Ci0gICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUpOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFJhd0Nvb2tpZXMpOgot
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZSk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgQ29v
a2llIGZ1bmN0aW9ucyBub3cgdGFrZSBhIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbm90IGEgTmV0
d29ya2luZ0NvbnRleHQuCi0KLTIwMTItMTItMTggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+Ci0KLSAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9ucyBmcm9tIENv
b2tpZXNTdHJhdGVneQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MzY5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTItMTIt
MTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW5h
bWUgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkIHRvIGNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA1MTIyCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQotICAgICAg
ICBVcGRhdGUgZm9yIFdlYkNvcmUgY2hhbmdlcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudFdpbkNFOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0UpOgotCi0yMDEyLTEyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KLQotICAgICAgICBSZS1sYW5kaW5nIHBhdGNoIGZvciAiSW50cm9kdWNpbmcg
dGhlIERhdGFiYXNlU3RyYXRlZ3kgYW5kIGRhdGFiYXNlIHNlcnZlcnMiLgotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTM0LgotCi0gICAgICAgIE5v
dCByZXZpZXdlZC4KLQotICAgICAgICBNZXJnZWQgZnJvbSByMTM3NzY3LiBQcmV2aW91c2x5IHJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Y3JlYXRlRGF0YWJhc2VTdHJhdGVneSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFKToK
LQotMjAxMi0xMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNzc2Ny4KLSAgICAgICAgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM3NzY3Ci0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUwNjIKLQotICAgICAgICBCcm9rZSBNYWMg
YnVpbGRzLiAoUmVxdWVzdGVkIGJ5IG1sYW0gb24gI3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaDoKLSAgICAgICAgKFBsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFKToKLQotMjAxMi0xMi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+Ci0KLSAgICAgICAgSW50cm9kdWNpbmcgdGhlIERhdGFiYXNlU3RyYXRlZ3kgYW5kIGRhdGFi
YXNlIHNlcnZlcnMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDQ5MzQuCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KLQotICAgICAg
ICBUaGUgZGF0YWJhc2Ugc2VydmVyIGlzIGN1cnJlbnRseSBhIHBsYWNlaG9sZGVyIHRoYXQgZG9l
cyBub3RoaW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZURhdGFi
YXNlU3RyYXRlZ3kpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmg6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRSk6Ci0KLTIwMTItMTIt
MTEgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KLQotICAgICAgICBXZWIgSW5zcGVj
dG9yOiBDb25zb2xlVHlwZXMgc2hvdWxkIG5vdCBleHBvc2UgTWVzc2FnZVR5cGUgLSBpdCBzaG91
bGQgYmUgcHJpdmF0ZSB0byBpbnNwZWN0b3IuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjM3MQotCi0gICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZl
bGRtYW4uCi0KLSAgICAgICAgRHJvcHMgV2ViQ29yZTo6TWVzc2FnZVR5cGUgZnJvbSB0aGUgYWRk
TWVzc2FnZVRvQ29uc29sZSBtZXRob2QuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjph
ZGRNZXNzYWdlVG9Db25zb2xlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTExLTI5ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgotCi0gICAgICAgIFtXSzJdIEZvcndh
cmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcwotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2ll
c0ZvckRPTSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6c2V0Q29va2llc0Zy
b21ET00pOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNFbmFibGVk
KToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UmF3Q29v
a2llcyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29va2llKToK
LSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVBbGxDb29r
aWVzKToKLQotMjAxMi0xMS0yNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5v
cmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6OmxvYWQoKSBpbnRvIG9uZSBm
dW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEKLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3Ojps
b2FkKToKLQotMjAxMi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFp
bC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4KLSAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTM1Nzg2Ci0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMzNzkKLQotICAgICAgICBJdCBt
YWRlIDMgcGx1Z2luIHRlc3RzIHRpbWVvdXQgb24gc2V2ZXJhbCBwbGF0Zm9ybXMgKFJlcXVlc3Rl
ZAotICAgICAgICBieSBPc3N5IG9uICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6
Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yNiAgSmFtZXMgU2ltb25zZW4g
IDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2Fk
ZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0Ci0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTEKLQot
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6
Ci0gICAgICAgIChXZWJWaWV3Ojpsb2FkKToKLQotMjAxMi0xMS0yMCAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEzNTI5NS4KLSAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MTM1Mjk1Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDI4MzQKLQotICAgICAgICBUaGlzIHBhdGNoIGNhdXNlcyBhc3NlcnRpb24gdG8gc29tZSBsYXlv
dXQgdGVzdHMgb24gY2hyb21pdW0KLSAgICAgICAgKFJlcXVlc3RlZCBieSBqaWFubGkgb24gI3dl
YmtpdCkuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmxvYWQp
OgotCi0yMDEyLTExLTIwICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBDb25zb2xpZGF0ZSBGcmFtZUxvYWRlcjo6bG9hZCgpIGludG8gb25lIGZ1bmN0
aW9uIHRha2luZyBhIEZyYW1lTG9hZFJlcXVlc3QKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1MQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OmxvYWQp
OgotCi0yMDEyLTEwLTI0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KLQotICAg
ICAgICBBZGQgYSBzdHJhdGVneSBmb3IgbG9hZGVyIGN1c3RvbWl6YXRpb24uCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyNzgKLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0U6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UpOgotCi0yMDEyLTEwLTIzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgotCi0gICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBzaGFyZWQgd29ya2VycwotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTY1Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6Y3JlYXRlU2hhcmVkV29ya2VyU3RyYXRlZ3kpOgotICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3kpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTItMTAtMTAgIEpv
biBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFtXSzJdIEFjdGl2YXRlIHBsdWdp
bnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBzbmFwc2hvdAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgzMjgKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEy
NDI2NjgxPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6cmVjcmVhdGVQbHVnaW4pOiBTdHViIGltcGxlbWVu
dGF0aW9uIG9mIHJlY3JlYXRlUGx1Z2luKCkuCi0KLTIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBk
ZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KLQotICAgICAg
ICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKLQot
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKLQotMjAxMi0xMC0wNCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KLQotICAgICAgICBTdGFuZGFyZGl6ZSBvbiAiZmx1c2gi
IHRlcm1pbm9sb2d5IGZvciBjb21wb3NpdGluZyBsYXllciBmbHVzaGluZy9zeW5jaW5nCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODMyMQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICBSZW5hbWUgY29tcG9zaXRp
bmctcmVsYXRlZCBtZXRob2RzIHRoYXQgcmVmZXIgdG8gInN5bmNpbmciIHRvIGluc3RlYWQKLSAg
ICAgICAgcmVmZXIgdG8gImZsdXNoaW5nIi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6
OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21lQ2xpZW50V2luQ0UpOgotCi0y
MDEyLTA5LTI4ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwu
Y29tPgotCi0gICAgICAgIENvZGUgaW5zaWRlIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlN
RVR5cGUoKSBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgV0sg
cG9ydHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3
NTQ3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICBOZXdseSBh
ZGRlZCBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpjYW5TaG93TUlNRVR5cGUoKSBmdW5jdGlv
biBpcyB1c2VkCi0gICAgICAgIGluc2lkZSBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmNhblNob3dNSU1FVHlwZSgpLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmNhblNob3dNSU1FVHlwZSk6Ci0KLTIwMTItMDktMjUgIEJldGggRGFraW4gIDxiZGFraW5A
YXBwbGUuY29tPgotCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NTM5NwotICAgICAgICBOZWVkIHRvIG1lcmdlIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dCBhbmQgCi0gICAgICAgIGRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dAot
ICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDc5
MTY4MD4KLQotICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgIFJlbW92
ZSBkaXNwYXRjaERpZEZpcnN0TGF5b3V0LCAKLSAgICAgICAgZGlzcGF0Y2hEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQsIGFuZCAKLSAgICAgICAgZGlzcGF0Y2hEaWROZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQuIFRoZWlyIGZ1bmN0aW9uYWxpdHkgCi0gICAgICAgIGlzIG5vdyBy
ZXBsYWNlZCBieSBkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzKQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZExheW91dCk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotICAgICAgICAoRnJh
bWVMb2FkZXJDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDgtMjggIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMjY5MTQuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyNjkx
NAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyMzkK
LQotICAgICAgICBpdCBicmVha3MgZXZlcnl0aGluZyBhbmQgZml4ZXMgbm90aGluZyAoUmVxdWVz
dGVkIGJ5IHBpemxvIG9uCi0gICAgICAgICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEyLTA4LTI4ICBDYWlvIE1hcmNlbG8g
ZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+Ci0KLSAgICAg
ICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0Ci0K
LSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTItMDgtMjcgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMjY4MzYuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzEyNjgzNgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTUxNjMKLQotICAgICAgICBCcm9rZSBhbGwgQXBwbGUgcG9ydHMsIEVGTCwgYW5kIFF0LiAoUmVx
dWVzdGVkIGJ5IHRrZW50IG9uCi0gICAgICAgICN3ZWJraXQpLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgotCi0yMDEyLTA4LTI3ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+Ci0KLSAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6Ci0KLTIwMTItMDgtMTMgIFRvbSBTZXBleiAg
PHRzZXBlekBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW2Nocm9taXVtXSByZWxlYXNlIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQgcmVmcHRyIHVwb24gUGx1Z2luIERvY3Vt
ZW50IGRldGFjaC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzMjgzCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAg
Q2hhbmdlIHRoZSBjbGllbnQgcmVkaXJlY3REYXRhVG9QbHVnaW4gbWV0aG9kKHMpIHRvIGV4cGVj
dCB0aGUgcG9zc2liaWxpdHkgb2YKLSAgICAgICAgYSBOVUxMIGFyZ3VtZW50LCBrZWVwaW5nIGV4
aXN0aW5nIGJlaGF2aW91ciBvdGhlcndpc2UuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgotCi0yMDEyLTA3LTIzICBQaWVycmUg
Um9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgotCi0gICAgICAgIFVuaWZ5IG51bVRvdWNo
RXZlbnRIYW5kbGVyc0NoYW5nZWQgYW5kIG5lZWRUb3VjaEV2ZW50cyBpbiB0aGUgY2hyb21lIGNs
aWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEw
MDYKLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVtb3Zl
IG51bVRvdWNoRXZlbnRIYW5kbGVyc0NoYW5nZWQgc3R1Yi4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTItMDctMTcgIFZpdmVrIEdhbGF0YWdl
ICA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogcmVm
YWN0b3IgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkgdG8gYWNjZXB0IElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkxMTk2Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1h
bi4KLQotICAgICAgICBSZWZhY3RvcmluZyBJbnNwZWN0b3JDbGllbnRzLiBJbnNwZWN0b3JDbGll
bnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZAotICAgICAgICBub3cgcmV0dXJuaW5nIHRoZSBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdpbkNF
OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChJbnNwZWN0b3JDbGllbnRXaW5DRSk6Ci0KLTIw
MTItMDUtMzEgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+Ci0KLSAgICAg
ICAgUkVHUkVTU0lPTihyMTE3NTcyKTogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFzeW5j
LXJlbW92ZS1mcmFtZS5odG1sIGNyYXNoZXMgb24gTWFjCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Njg1OQotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5
b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNF
Lmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpyZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyk6Ci0KLTIwMTItMDUtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjExNTky
Ni4KLQotICAgICAgICAqIFdlYlZpZXcuY3BwOgotCi0yMDEyLTA1LTMwICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVp
bGQgZml4IGFmdGVyIHIxMTc0NzAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRXaW5DRS5oOgotICAgICAgICAoRWRpdG9yQ2xpZW50V2luQ0UpOgotCi0yMDEyLTA1LTE4
ICBNT1JJVEEgSGFqaW1lIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgQW5vdGhlciB1
bnJldmlld2VkIGF0dGVtcHQgdG8gZml4IGJ1aWxkIGJyZWFrYWdlIG9uIHIxMTc1NzIuCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6ZnJhbWVXaWxsRGV0YWNoUGFnZSk6Ci0KLTIwMTItMDUt
MTggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTE1Ci0gICAgICAgIFN0YWxlIGZy
YW1lIGluIFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkZWQKLQotICAgICAg
ICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6
ZnJhbWVXaWxsRGV0YWNoUGFnZSk6Ci0KLTIwMTItMDUtMTcgIEhpcm9ub3JpIEJvbm8gIDxoYm9u
b0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgW1JlZmFjdG9yaW5nXSBNb3ZlIHBsYXRmb3JtLXNw
ZWNpZmljIGNvZGUgaW4gRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uIHRvIHRoZSBX
ZWJLaXQgbGF5ZXIKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2NTkxCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAgICAg
IFRoaXMgY2hhbmdlIGFkZHMgYSBUZXh0Q2hlY2tlckNsaWVudDo6c2hvdWxkRXJhc2VNYXJrZXJz
QWZ0ZXJDaGFuZ2VTZWxlY3Rpb24KLSAgICAgICAgZnVuY3Rpb24gdG8gcmVtb3ZlIHBsYXRmb3Jt
LXNwZWNpZmljIGNvZGUgZnJvbSBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24KLSAg
ICAgICAgZnVuY3Rpb24uCi0KLSAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRFcmFzZU1hcmtlcnNB
ZnRlckNoYW5nZVNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRXaW5D
RSk6Ci0KLTIwMTItMDUtMDQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KLQot
ICAgICAgICBEb24ndCByZXF1aXJlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIG1hbnVmYWN0dXJlIGEg
Y29tbWl0RGF0YSgpIGNhbGwgZm9yIGVtcHR5IGRvY3VtZW50cy4KLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTMzCi0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEyLTA0LTE4ICBKb24gSG9uZXljdXR0ICA8
amhvbmV5Y3V0dEBhcHBsZS5jb20+Ci0KLSAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFNlbmRTdWJtaXRFdmVudCgpIHNob3VsZCBiZSBnaXZlbiBtb3JlCi0gICAgICAgIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtIGJlaW5nIHN1Ym1pdHRlZAotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyOTcKLQotICAgICAgICBSZXZpZXdl
ZCBieSBBbmR5IEVzdGVzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpk
aXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQpOgotICAgICAgICBVcGRhdGVkIG1ldGhvZCBkZWNs
YXJhdGlvbi4KLQotMjAxMi0wMy0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KLQotICAgICAgICBbV2luQ0VdIENvcnJlY3QgPHd0Zi8qLmg+IGluY2x1ZGUgcGF0aHMu
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjcxMwot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIE1vZGlmeSB0aGUg
I2luY2x1ZGUgZGVjbGFyYXRpb25zIGZvciBzZXZlcmFsIFdpbkNFLXJlbGF0ZWQgZmlsZXMKLSAg
ICAgICAgc28gdGhhdCB0aGUgd3RmIHR5cGVzIGFyZSBpbmNsdWRlZCB1c2luZyB0aGUgZnVsbCBw
YXRoLgotCi0gICAgICAgICogV2ViVmlldy5jcHA6Ci0gICAgICAgICogV2ViVmlldy5oOgotCi0y
MDEyLTAzLTI4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAg
UmVtb3ZlIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZSBjYWxsYmFjaywgc2luY2Ugbm8KLSAg
ICAgICAgcG9ydCBpbXBsZW1lbnRzIGl0LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODI1MzkKLQotICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJv
c2t1cnlha292LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50V2luQ0Up
OgotCi0yMDEyLTAzLTE5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgUmVtb3ZlIHN1cHBvcnQgZm9yICJtYWdpYyIgaWZyYW1lCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTU5MAotCi0gICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbW92ZSBGcmFtZUxvYWRlckNsaWVudCBtZXRob2Rz
IHRoYXQgbm8gbG9uZ2VyIGV4aXN0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
LQotICAgICAgICBTZXBhcmF0ZSBOT1RJRklDQVRJT05TIGFuZCBMRUdBQ1lfTk9USUZJQ0FUSU9O
UwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA5MjIK
LSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDM1MDgyPgotCi0gICAgICAgIFJldmlld2VkIGJ5
IEppYW4gTGkuCi0KLSAgICAgICAgWW91IGNhbiBpbmNsdWRlIGVpdGhlciBOT1RJRklDQVRJT05T
IG9yIExFR0FDWV9OT1RJRklDQVRJT05TIGFuZCBoYXZlIGEgY29tcGxldGUgQVBJLgotICAgICAg
ICBMRUdBQ1lfTk9USUZJQ0FUSU9OUyBzaG91bGQgY292ZXIgYWxsIG9mIHRoZSBwcmV2aW91cyBm
dW5jdGlvbmFsaXR5LCBhbmQgTk9USUZJQ0FUSU9OUyB3aWxsIGNvdmVyIHRoZQotICAgICAgICBu
ZXcgQVBJLiBUaGVyZWZvcmUsIEFQSXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gdGhlIHR3byB3
aWxsIGhhdmU6Ci0gICAgICAgICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExF
R0FDWV9OT1RJRklDQVRJT05TKQotCi0gICAgICAgIFRoaXMgcGF0Y2ggaW5pdGlhbGx5IHNldHMg
Ym90aCB0byBiZSBleGFjdGx5IHRoZSBzYW1lLiBBcyBvdGhlciBidWdzIHdpdGggcGF0Y2hlcyBi
ZWdpbiB0byBtaWdyYXRlIHRvCi0gICAgICAgIHRoZSBuZXcgQVBJLCB0aGUgZGVmaW5lcyB3aWxs
IGJlZ2luIHRvIHNwbGl0LiBUaGlzIGFsbG93cyBwb3J0cyB0byBkZWNpZGUgd2hpY2ggc2V0IG9m
IEFQSXMgdG8gaW5jbHVkZS4KLQotICAgICAgICBVcGRhdGUgZXZlcnl0aGluZyB0byBiZSAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hy
b21lQ2xpZW50V2luQ0UpOgotCi0yMDEyLTAzLTEzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+ICYmIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+Ci0KLSAgICAg
ICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4NTMKLQotICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgIChDaHJvbWVDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDMtMDkgIEpv
biBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgotCi0gICAgICAgIFJlbmFtZSBOb3RpZmljYXRpb25Q
cmVzZW50ZXIgdG8gTm90aWZpY2F0aW9uQ2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDQ4OAotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5
NjU1NTg+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFybyBIYXJhLgotCi0gICAgICAgIFJl
ZmFjdG9yIHRvIHVzZSByZW5hbWVkIFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkNsaWVudC4KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICAoQ2hyb21l
Q2xpZW50V2luQ0UpOgotCi0yMDEyLTAyLTI2ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAY2hy
b21pdW0ub3JnPgotCi0gICAgICAgIE1vdmUgQ2hyb21lQ2xpZW50OjpzaG93Q29udGV4dE1lbnUo
KSB0byBDb250ZXh0TWVudUNsaWVudAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzk0MjcKLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAg
KENocm9tZUNsaWVudFdpbkNFKToKLQotMjAxMi0wMi0yNCAgU2hpbnlhIEthd2FuYWthICA8c2hp
bnlha0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgU3BlbGxDaGVja1JlcXVlc3QgbmVlZHMgdG8g
a25vdyB0aGUgY29udGV4dCB3aGVyZSB0aGUgc3BlbGxjaGVjayBoYXBwZW5lZC4KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MzIwCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpy
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6Ci0KLTIwMTItMDItMjMgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBm
aXggYWZ0ZXIgcjEwODQ2Mi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dFdpbkNFLmg6Ci0gICAgICAgIChFZGl0b3JDbGllbnRXaW5DRSk6Ci0KLTIwMTItMDItMjEgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVtb3ZlIHRoZSByZW1h
aW5pbmcgdXNlcyBvZiBDU1NTdHlsZURlY2xhcmF0aW9uIGluIEVkaXRvcgotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5MzkKLQotICAgICAgICBSZXZp
ZXdlZCBieSBFbnJpY2EgQ2FzdWNjaS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnNo
b3VsZEFwcGx5U3R5bGUpOgotCi0yMDEyLTAyLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgotCi0gICAgICAgIFJlbW92ZSB0aGUgcmVtYWluaW5nIHVzZXMgb2YgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiBpbiBFZGl0b3IKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4OTM5Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRW5yaWNhIENhc3VjY2ku
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRBcHBseVN0eWxlKToKLQotMjAx
Mi0wMi0yMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgR2V0IHJpZCBvZiB0aGUgTG9jYWxpemF0aW9uU3RyYXRlZ3kKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzI0Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZy4KLQotICAgICAgICBSZW1vdmUgYSB1c2VsZXNzICNpbmNsdWRlIG9mIExv
Y2FsaXphdGlvblN0cmF0ZWd5LmguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDEyLTAyLTE1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGFm
dGVyIHIxMDc2MDYuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlUGFz
dGVib2FyZFN0cmF0ZWd5KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5oOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UpOgotCi0yMDEy
LTAyLTE1ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KLQot
ICAgICAgICBOb3RpZnkgQ2hyb21lQ2xpZW50IHdoZW4gdG91Y2gtZXZlbnQgaGFuZGxlcnMgYXJl
IGluc3RhbGxlZC9yZW1vdmVkLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzc0NDAKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIgYW5k
IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpudW1Ub3VjaEV2ZW50
SGFuZGxlcnNDaGFuZ2VkKToKLQotMjAxMS0xMi0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgotCi0gICAgICAgIE1vcmUgUGxhdGZvcm1FdmVudCBjbGVhbnVwCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDgzMQotCi0gICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAg
KFdlYlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgotICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBu
YW1lcywgYWNjZXNzIHN0eWxlLgotCi0yMDExLTEyLTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFJlbmFtZSByZWdpc3RlckNvbW1hbmRGb3IoVW5kb3xSZWRv
KSB0byByZWdpc3RlcihVbmRvfFJlZG8pU3RlcAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDgKLQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lzdGVyVW5kb1N0ZXApOgot
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVnaXN0ZXJSZWRvU3RlcCk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMi0x
NiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIEdpdmUgUGxhdGZvcm1F
dmVudHMgYSBiYXNlIGNsYXNzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDY4NQotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4K
LQotICAgICAgICBBZGQgYSBiYXNlIGNsYXNzIGZvciBQbGF0Zm9ybU1vdXNlRXZlbnQsIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCwgUGxhdGZvcm1XaGVlbEV2ZW50Ci0gICAgICAgIGFuZCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCBhbmQgbW92ZSBUeXBlIGVudW1lcmF0aW9uIGFuZCBtb2RpZmllcnMgZG93
biB0byBpdC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNw
cDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXli
b2FyZEV2ZW50KToKLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6Omhh
bmRsZUtleURvd24pOgotICAgICAgICAoV2ViVmlldzo6aGFuZGxlS2V5UHJlc3MpOgotICAgICAg
ICAoV2ViVmlldzo6aGFuZGxlS2V5VXApOgotCi0yMDExLTEyLTE2ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIE9ubHkgRWRpdENvbW1hbmRDb21wb3NpdGlvbiBz
aG91bGQgaW1wbGVtZW50IHVuYXBwbHkgYW5kIHJlYXBwbHkKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDkwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpyZWdpc3RlckNvbW1h
bmRGb3JVbmRvKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlZ2lzdGVy
Q29tbWFuZEZvclJlZG8pOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmg6Ci0KLTIwMTEtMTItMTQgIEppbmcgWmhhbyAgPGppbmd6aGFvQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBPcGVuaW5nIHR3byBwb3B1cCBtZW51cyBieSBkaXNwYXRjaEV2ZW50KCkgbWFr
ZXMgcHJvYmxlbXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MzMwNAotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50V2luQ0U6Omhhc09wZW5lZFBvcHVwKTogTm90IGltcGxlbWVudGVkLgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6IE92ZXJyaWRlcyBo
YXNPcGVuZWRQb3B1cCgpLgotCi0yMDExLTExLTMwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgotCi0gICAgICAgIFJlbW92ZSBhbiB1bm5lZWRlZCBhcmd1bWVudCBmcm9tIEZy
YW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzM0ODYKLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEts
aW5nLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5j
cHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRvd25sb2FkKToK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0gICAg
ICAgIFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2UuCi0KLTIwMTEtMTEtMjYgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMDExOTMuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzEwMTE5MwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzMxNTgKLQotICAgICAgICBCcmVha3MgV2luZG93cyBhbmQgUXQgbWluaW1hbC4gKFJlcXVlc3Rl
ZCBieSBwZmVsZG1hbiBvbgotICAgICAgICAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgotCi0yMDExLTExLTIyICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AZ29vZ2xlLmNvbT4KLQotICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgSW5z
cGVjdG9yOjpicmluZ1RvRnJvbnQgZnJvbSB0aGUgcHJvdG9jb2wuCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzNwotCi0gICAgICAgIFJldmlld2Vk
IGJ5IFl1cnkgU2VtaWtoYXRza3kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudFdpbkNF
OjpicmluZ0Zyb250ZW5kVG9Gcm9udCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0xMS0yMSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdl
YmtpdC5vcmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjEw
MDg3NC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnRXaW5DRTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6Ci0K
LSAgICAgICAgICAgIEFkZCBXZWJDb3JlOjpGcmFtZSogcGFyYW1ldGVyIHRvIHJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oKS4KLQotMjAxMS0xMS0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgotCi0gICAgICAgIEhvc3RXaW5kb3cgc2NyZWVuVG9XaW5kb3cvd2luZG93
VG9TY3JlZW4gc2hvdWxkIGJlIHNjcmVlblRvUm9vdFZpZXcvcm9vdFZpZXdUb1NjcmVlbgotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzOTcKLQotICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6cm9vdFZpZXdUb1NjcmVlbik6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjpzY3JlZW5Ub1Jvb3RWaWV3KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5oOgotCi0yMDExLTExLTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+Ci0KLSAgICAgICAgSG9zdFdpbmRvdyBpbnZhbGlkYXRpb24gZnVuY3Rpb25zIHNo
b3VsZCB1c2Ugcm9vdCB2aWV3IGNvb3JkaW5hdGVzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMzOAotCi0gICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5j
cHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlUm9vdFZp
ZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kUm9vdFZpZXcpOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbCk6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudFdpbkNFOjpzY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmg6Ci0KLTIwMTEtMTEtMDQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgW1dJTkNFXSBVc2UgZGVmYXVsdCBMb2NhbGl6YXRpb25TdHJhdGVn
eQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0OTUK
LQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFVzZSBMb2NhbGl6
YXRpb25TdHJhdGVneSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiB1c2luZyBhIGNvcHkgb2YgdGhl
IHN0cmluZ3MgaW4gV2ViS2l0LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMTEtMDIgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1
bS5vcmc+Ci0KLSAgICAgICAgWFNTQXVkaXRvciBpcyBzaWxlbnQKLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTczCi0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpk
aWREZXRlY3RYU1MpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0xMS0wMiAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+Ci0KLSAg
ICAgICAgPGlucHV0PWZpbGUgbXVsdGlwbGU+IGRlZmF1bHQgdGV4dCB1c2VzIHNpbmd1bGFyIGlu
c3RlYWQgb2YgcGx1cmFsCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTMxOQotICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAzNzkwMjE+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6ZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTEwLTI4ICBKb2NoZW4g
RWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJlbmFtZSBhIG51bWJl
ciBvZiBtZXRob2RzIG1lbnRpb25pbmcgSmF2YVNjcmlwdCB0byBqdXN0IFNjcmlwdCBpbnN0ZWFk
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEwNQot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgKiBXZWJWaWV3LmNw
cDoKLSAgICAgICAgKFdlYlZpZXc6OldlYlZpZXcpOgotCi0yMDExLTEwLTA3ICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgYnVpbGQg
Zml4IGFmdGVyIHI5NTYwNC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmNwcDoKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppc0xp
bmtWaXNpdGVkKToKLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjphZGRWaXNpdGVk
TGluayk6Ci0KLTIwMTEtMDktMjQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KLQot
ICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0g
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc2NwotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wOS0yMSAgQW5kcmFzIEJl
Y3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KLQotICAgICAgICBbUXRdIFJlbW92ZSBRdCBz
cGVjaWZpYyBjb2RlIGZyb20gY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzAyCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmFkZFZpc2l0ZWRMaW5rKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5oOgotCi0yMDExLTA5LTE3ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBA
Y2hyb21pdW0ub3JnPgotCi0gICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50IEJhY2tGb3J3YXJkTGlz
dC1yZWxhdGVkIG1ldGhvZHMgYXJlIHVuc3VlZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTMKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KLQotICAgICAgICBSZW1vdmUgRnJhbWVMb2FkZXJDbGllbnQgbWV0aG9kcyB0aGF0IHdl
cmUgYWRkZWQgYnkgcjUxNjI5LCBzaW5jZSBvbmx5ICAgICAgICAKLSAgICAgICAgdGhlIG9sZCAo
c2luY2UtZGVsZXRlZCkgQW5kcm9pZCBwb3J0IG5lZWRlZCB0aGVtLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA5LTE1ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVuYW1lIEVOQUJMRShEQVRBQkFT
RSkgdG8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY4MjA1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wOC0z
MCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBXaW5DRSBidWls
ZCBmaXggYXR0ZW1wdCBhZnRlciByOTQwODAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNF
OjpzY3JvbGxSZWN0SW50b1ZpZXcpOgotCi0yMDExLTA4LTMwICBLYXVzdHViaCBBdHJhd2Fsa2Fy
ICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgotCi0gICAgICAgIFRoZSB1bnVzZWQgU2Nyb2xsVmll
dyogYXJndW1lbnQgY2FuIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgIHNjcm9s
bFJlY3RJbnRvVmlldy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3MTE3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTE3ICBB
ZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KLQotICAgICAgICBNYWtlIFdlYkNvcmUga2Vl
cCB0cmFjayBvZiB0aGUgY3VycmVudCBkZXZpY2Ugc2NhbGUgZmFjdG9yCi0KLSAgICAgICAgRml4
ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvNjY0MTM+IFdlYkNvcmUgcmVxdWlyZXMgZXZlcnkgV2Vi
S2l0IHBvcnQgdG8ga2VlcCB0cmFjayBvZiB0aGUKLSAgICAgICAgZGV2aWNlIHNjYWxlIGZhY3Rv
cgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIFJlbW92ZWQgZGV2aWNlU2NhbGVGYWN0b3Iu
Ci0KLTIwMTEtMDgtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+Ci0KLSAg
ICAgICAgRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBhZ2Ug
ZG9lcyBub3QgaGF2ZSBlbm91Z2ggcGFyYW1ldGVycwotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjUKLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBGaXNoZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJhbnNm
ZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA4LTEwICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KLQotICAgICAgICBDbGVhciB1cCBzY2FsZSBmYWN0b3IgdGVybWlub2xvZ3kK
LQotICAgICAgICBXZWJLaXQgYnkgYW5kIGxhcmdlIGRlYWxzIHdpdGggdHdvIHNjYWxlIGZhY3Rv
cnM6IG9uZSBpbnRyaW5zaWMgdG8gdGhlIGRldmljZSBvbiB3aGljaCB0aGUKLSAgICAgICAgc29m
dHdhcmUgaXMgcnVubmluZywgYW5kIG9uZSB0aGF0IGlzIHBlci1QYWdlIGFuZCBjYW4gYmUgY29u
dHJvbGxlZCB2aWEgQVBJIGNhbGxzLiBUaGlzCi0gICAgICAgIHBhdGNoIG5hbWVzIHRoZSBmb3Jt
ZXIgImRldmljZVNjYWxlRmFjdG9yIiBhbmQgdGhlIGxhdHRlciAicGFnZVNjYWxlRmFjdG9yIiwg
YW5kIG1ha2VzIHRoZQotICAgICAgICBjb2RlIHVzZSB0aG9zZSBuYW1lcy4gSXQgc2hvdWxkIGlu
dHJvZHVjZSBubyBiZWhhdmlvciBjaGFuZ2VzLgotCi0gICAgICAgIEZpeGVzIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzU1Nzg3PiBXZWJLaXQgdXNlcyBtdWx0aXBsZSBjb25mbGljdGluZyBuYW1lcyB0
byByZWZlciB0byB0aGUKLSAgICAgICAgZGV2aWNlIHNjYWxlIGZhY3RvcgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5oOgotCi0yMDExLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0u
b3JnPgotCi0gICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBOb2RlIHBhcmFtZXRlciBmcm9t
IHRoZSBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1NDkKLQotICAgICAgICBSZXZpZXdlZCBieSBZdXJ5
IFNlbWlraGF0c2t5LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRXaW5DRTo6aGlnaGxp
Z2h0KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5oOgot
Ci0yMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9y
Zz4KLQotICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBhdHRyaWJ1
dGUgaW4gYW5jaG9ycy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0NTgwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzdGFydERvd25sb2FkKToKLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDctMTUg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQotICAgICAgICBSRUdSRVNTSU9OOiBN
b3VzZSBjdXJzb3IgZG9lc27igJl0IGhpZGUgd2hlbiBmdWxsIHNjcmVlbiB2aWRlbyBIVUQgaGlk
ZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjE1
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJv
bWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKTogQWRkZWQgdGhp
cyBzdHViLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0K
LTIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KLQotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwg
d2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE3NwotCi0gICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVkQXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5oOgotCi0yMDExLTA2LTMwICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGdv
b2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCi0KLSAgICAgICAg
Q2hhbmdlIHRoZSBsYWJlbCBvZiBhbiBIVE1MNSBmaWxlIGNob29zZXIgYnV0dG9uIHRvICJDaG9v
c2UgRmlsZXMiCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00OTI0NQotCi0gICAgICAgIFdlIHNob3VsZCBub3RpZnkgY2FwYWJpbGl0eSBvZiBtdWx0aXBs
ZSBmaWxlcyB0byB1c2Vycy4KLQotICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2lucHV0LWZpbGUt
bGFiZWwuaHRtbAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmZpbGVCdXR0b25D
aG9vc2VGaWxlTGFiZWwpOiBVcGRhdGVkIHRoZSBkZXNjcmlwdGlvbiBmb3IgIkNob29zZSBGaWxl
Ii4KLSAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpmaWxlQnV0dG9uQ2hvb3NlTXVs
dGlwbGVGaWxlc0xhYmVsKTogUmV0dXJucyBhICJDaG9vc2UgRmlsZXMiIGxhYmVsLgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMDYt
MjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgV2luQ0UgYnVp
bGQgZml4IGFmdGVyIHI4OTI5My4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRs
ZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLQotMjAxMS0wNi0xOCAgRGltaXRyaSBHbGF6a292ICA8
ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgotCi0gICAgICAgIFNlcGFyYXRlIGNvbmNlcm5zIG9mIGxvYWRpbmcgZmlsZSBpY29ucyBhbmQg
Y2hvb3NpbmcgZmlsZXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MjkzMQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6bG9hZEljb25Gb3JG
aWxlcyk6IFJlbmFtZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaDoKLQotMjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgUmVuYW1l
IEZyYW1lTG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvciB0byB1c2Ug
dGhlIHBhc3QgdGVuc2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyNTE2Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6aW50
ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oOgotCi0yMDExLTA1LTEzICBKb24gTGVlICA8am9ubGVl
QGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCi0KLSAgICAg
ICAgQ2FuJ3QgaG9yaXpvbnRhbGx5IHNjcm9sbCBpZnJhbWVzIGFuZCBvdmVyZmxvdyBiZWNhdXNl
IHdoZWVsIGV2ZW50cyBhcmUgYWx3YXlzIGFjY2VwdGVkCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDc3OQotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2lu
Q0U6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbik6IERlZmF1bHQgaW1wbCBvZiBuZXcgQ2hy
b21lQ2xpZW50IG1ldGhvZAotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6bnVt
V2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6IERlZmF1bHQgaW1wbCBvZiBuZXcgQ2hyb21lQ2xp
ZW50IG1ldGhvZAotCi0yMDExLTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbmFtZSBT
ZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9uCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRXaW5DRTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgotCi0yMDExLTA1LTA0ICBDcmlz
IE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KLQotICAgICAgICBFeHBvc2UgV2ViVmlldyBkaXJlY3RseSB0aHJvdWdoIENocm9tZUNs
aWVudC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
OTAyCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6d2ViVmlldyk6Ci0KLTIwMTEtMDUtMDQg
IFRhbyBCYWkgIDxtaWNoYWVsYmFpQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBLaWx6ZXIuCi0KLSAgICAgICAgUG9wdWxhdGUgdG91Y2gtaWNvbiB1cmwgdG8gRnJh
bWVMb2FkZXJDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU5MTQzCi0KLSAgICAgICAgUmVzcGVjdCB0aGUgaW50ZXJmYWNlIGNoYW5nZSBpbiBG
cmFtZUxvYWRlckNsaWVudC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERpZENoYW5nZUljb25zKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDUtMDEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8
cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgW1dJTl0gVW5yZXZpZXdlZCBidWlsZGZpeCBh
ZnRlciByODU0MzQuCi0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6
OnBhaW50KToKLQotMjAxMS0wNC0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBXaW5DRSBidWlsZCBmaXggYWZ0ZXIgcjg0NTc0LgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRXaW5DRTo6Y2FuQ29weUN1dCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dFdpbkNFOjpjYW5QYXN0ZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
V2luQ0UuaDoKLQotMjAxMS0wNC0xOSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVt
Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgotCi0gICAgICAgIFdl
YiBJbnNwZWN0b3I6IFJlbmFtZSBsZW5ndGhSZWNlaXZlZCB0byBlbmNvZGVkRGF0YUxlbmd0aC9k
YXRhTGVuZ3RoCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01ODg4MwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5oOgotCi0yMDExLTA0LTA0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBbUmVmYWN0b3Jp
bmddIFNwZWxsQ2hlY2tpbmdSZXN1bHQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggVGV4dENoZWNr
aW5nUmVzdWx0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NjA4NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKLQotMjAxMS0wNC0wNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
LQotICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgIFJFR1JFU1NJ
T04gKFdlYktpdDIpOiBDYXBzLUxvY2sgaW5kaWNhdG9yIHNvbWV0aW1lcyBkb2Vzbid0IGFwcGVh
ciBpbiBXZWJLaXQyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MTIzMAotICAgICAgICA8cmRhcjovL3Byb2JsZW0vODc4MDk4OT4KLQotICAgICAgICAq
IFdlYlZpZXcuY3BwOiAoV2ViVmlldzo6aGFuZGxlS2V5RG93bik6IE1vdmVkIENhcHMgTG9jayBo
YW5kbGluZyBmcm9tIFdlYktpdHMgdG8gV2ViQ29yZSwKLSAgICAgICAgYmVjYXVzZSBXZWJLaXQg
c2hvdWxkbid0IGJlIHNtYXJ0LgotCi0yMDExLTAzLTMxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGZv
ciByODI1ODAuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmg6IFN0cmluZ1dpdGhEaXJlY3Rpb24gaXMgaW4gV2ViQ29yZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpbiBXVEYgbmFtZXNw
YWNlLgotCi0yMDExLTAzLTMxICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIDx0aXRsZT4gc2hvdWxk
IHN1cHBvcnQgZGlyIGF0dHJpYnV0ZQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA5NjEKLQotICAgICAgICBVcGRhdGUgdG8gbmV3IEZyYW1lTG9hZGVy
Q2xpZW50IGludGVyZmFjZS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnNldFRpdGxlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KLQot
ICAgICAgICBbV0lOQ0VdIFVzZSBhIGFwcHJvcHJpYXRlIHVzZXIgYWdlbnQgc3RyaW5nCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3NQotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnVzZXJBZ2VudCk6Ci0KLTIwMTEtMDMt
MjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgVW5y
ZXZpZXdlZCBXaW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAgKiBDTWFrZUxpc3RzV2luQ0UudHh0
OiBBZGRlZCBtaXNzaW5nIGluY2x1ZGUgZGlyZWN0b3J5LgotCi0yMDExLTAzLTI1ICBBbmR5IEVz
dGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRl
cnNvbi4KLQotICAgICAgICBSRUdSRVNTSU9OIChyNzA3NDgpOiBsYXRlc3QgbmlnaHRseSBidWls
ZHMga2lsbHMgQUNfUXVpY2tUaW1lLmpzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTAxNgotCi0gICAgICAgIFVwZGF0ZSBvYmplY3RDb250ZW50VHlw
ZSgpIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aGUKLSAgICAgICAgc2hvdWxkUHJlZmVyUGx1
Z0luc0ZvckltYWdlcyBmbGFnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6Om9iamVjdENvbnRlbnRUeXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4
MTkxNiBhbmQgcjgxOTE3LgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC84MTkxNgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC84MTkxNwot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNzEKLQot
ICAgICAgICBicm9rZSBhIHRlc3Qgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgUXVpY2tU
aW1lIGluc3RhbGxlZAotICAgICAgICAoUmVxdWVzdGVkIGJ5IGVzdGVzIG9uICN3ZWJraXQpLgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0g
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Om9iamVjdENvbnRlbnRUeXBl
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0K
LTIwMTEtMDMtMjQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJFR1JFU1NJT04gKHI3MDc0OCk6IGxh
dGVzdCBuaWdodGx5IGJ1aWxkcyBraWxscyBBQ19RdWlja1RpbWUuanMKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MDE2Ci0KLSAgICAgICAgVXBkYXRl
IG9iamVjdENvbnRlbnRUeXBlKCkgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIHRoZQotICAgICAg
ICBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzIGZsYWcuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6b2JqZWN0Q29udGVudFR5cGUpOgotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0wNyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KLQotICAgICAgICBSZXBsYWNlIFdlYktpdDIncyBkZWNpZGVQb2xpY3lGb3JNSU1FVHlw
ZSB3aXRoIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTgyNwotCi0gICAgICAgIFJlbmFtZWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUgdG8gZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JSZXNwb25zZQotICAgICAgICBhbmQgcGFzcyB0aGUgZW50aXJlIHJlc3BvbnNl
LCBpbnN0ZWFkIG9mIGp1c3QgdGhlIE1JTUVUeXBlLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMy0w
MyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZW1vdmlu
ZyBhbiBpbmNsdWRlIG9mIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oIHRoYXQgSXZlIGp1c3QgYWRk
ZWQuIEl0J3MgYWxyZWFkeSBpbmNsdWRlZAotICAgICAgICB2aWEgQ2hyb21lQ2xpZW50LmgKLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTEtMDMt
MDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0Mik6IFRhYiBr
ZXlzIG5vIGxvbmdlciBvYnNlcnZlIEZ1bGwgS2V5Ym9hcmQgQWNjZXNzCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTYzMwotICAgICAgICA8cmRhcjov
L3Byb2JsZW0vODk2MzAyMz4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFdpbkNFLmNwcDogKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmtleWJvYXJkVUlNb2RlKToK
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgotICAgICAgICBJ
bXBsZW1lbnQga2V5Ym9hcmRVSU1vZGUoKSBpbnN0ZWFkIG9mIHRhYnNUb0xpbmtzKCkuIE5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBzaW5jZQotICAgICAgICB0aGlzIHBsYXRmb3JtIGRvZXNu
J3Qgb2JzZXJ2ZSBvciBoYXZlIGZ1bGwga2V5Ym9hcmQgYWNjZXNzIHN0YXRlLgotCi0yMDExLTAz
LTAyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KLQotICAgICAgICBX
aW5DRSBidWlsZCBmaXguCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5oOiBBZGQgYSBuZWVkZWQgaW5jbHVkZS4KLQotMjAxMS0wMy0wMiAgQnJpYW4g
V2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgV2luQ0UgYnVpbGQg
Zml4LiBIYXZlIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFIGluaGVyaXQgZnJvbSBDb29raWVzU3Ry
YXRlZ3ksCi0gICAgICAgIGFuZCBpbXBsZW1lbnQgdGhlIG5lZWRlZCBtZXRob2RzLgotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAg
ICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSk6Ci0gICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6bm90aWZ5Q29va2llc0NoYW5nZWQpOgotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEt
MDItMjggIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBSeW9zdWtlIE5pd2EuCi0KLSAgICAgICAgUmVtb3ZlIHRoZSBzdXBwb3J0IG9mIEZyYW1lOjpp
c0NvbnRlbnRFZGl0YWJsZSBhbmQgaXRzIGRlcGVuZGVuY2llcy4KLSAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkyCi0KLSAgICAgICAgUmVtb3ZlIHRo
ZSBXZWJLaXQgc2lkZSBpbXBsZW1lbnRhdGlvbi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTE5ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJvbWl1
bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgotCi0gICAgICAg
IEVuc3VyZSBsb2FkaW5nIGhhcyBzdG9wcGVkIGluIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRl
bQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ1MTcK
LQotICAgICAgICBBZGQgYSBGcmFtZUxvYWRlckNsaWVudCBjYWxsYmFjayBmb3Igd2hldGhlciB0
byBzdG9wIGxvYWRpbmcgYmVmb3JlIGdvVG9JdGVtLgotCi0gICAgICAgIFRlc3Q6IGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9mb3J3YXJkLXRvLWZyYWdtZW50LWZpcmVzLW9ubG9hZC5odG1sCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkU3RvcExvYWRpbmdGb3JI
aXN0b3J5SXRlbSk6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMi0xMCAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3Rp
bmlAb3BlbmJvc3NhLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0g
ICAgICAgIEhUTUw1IDxkZXRhaWxzPiBhbmQgPHN1bW1hcnk+OiBsb2NhbGl6ZWQgdGV4dAotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyNjAKLQotICAg
ICAgICBUaGUgbWV0aG9kIGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQgd2FzIGFkZGVkIHRvIExv
Y2FsaXphdGlvblN0cmF0ZWd5IGNsYXNzLiBJdCBpcyB1c2VkIHRvCi0gICAgICAgIHByb3ZpZGUg
dGhlIGRlZmF1bHQgbGFiZWwgdG8gYmUgdXNlZCBieSBhIDxkZXRhaWxzPiB0YWcgdGhhdCBoYXMg
bm8gPHN1bW1hcnk+IGNoaWxkLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuY3BwOgotICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRl
ZmF1bHREZXRhaWxzU3VtbWFyeVRleHQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmg6Ci0KLTIwMTEtMDEtMjYgIE1PUklUQSBIYWppbWUgIDxtb3Jy
aXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0g
ICAgICAgIFJlZmFjdG9yaW5nOiBFeHRyYWN0IFRleHRDaGVja2VyQ2xpZW50IGZyb20gRWRpdG9y
Q2xpZW50Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzIxMwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OnRleHRDaGVja2VyKToKLQotMjAxMS0w
Mi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIEFkZCBFZGl0b3JDbGllbnQgY2FsbGJhY2tzIHRv
IG92ZXJyaWRlIGlzRE9NUGFzdGVBbGxvd2VkIGFuZCBqYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjQx
NwotCi0gICAgICAgIEFkZGVkIHR3byBjYWxsYmFjayBmdW5jdGlvbnMsIGNhbkNvcHlDdXQgYW5k
IGNhblBhc3RlIHRvIEVkaXRvckNsaWVudC4gVGhleSBhcmUgY3VycmVudGx5Ci0gICAgICAgIG5v
dCBpbXBsZW1lbnRlZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdp
bkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlDdXQp
OiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50V2luQ0U6OmNhblBhc3RlKTog
QWRkZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQot
MjAxMS0wMi0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3Vt
ZW50V3JpdGVyLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA0ODkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hl
ZExvYWRpbmcpOgotCi0yMDExLTAyLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgUmVtb3ZlIG9y
cGhhbiBjb2RlIGZyb20gb2xkIHBhcnNlcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTM5ODQKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5oOgotCi0yMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQgRGFyaW4gQWRsZXIuCi0KLSAgICAg
ICAgV2ViS2l0MjogZHJhZyBhbmQgZHJvcCBzdXBwb3J0IG9uIFdpbmRvd3MuCi0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjc3NQotCi0gICAgICAgIFJl
bW92ZWQgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayBmcm9tIERyYWdDbGllbnQuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0RyYWdDbGllbnRXaW5DRS5oOgotCi0yMDExLTAyLTA2ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2Jp
bnNvbi4KLQotICAgICAgICBbV0lOQ0VdIEZyYW1lTG9hZGVyQ2xpZW50IGNhbGxzIGxvYWRVUkxJ
bkNoaWxkRnJhbWUgb24gdGhlIGNoaWxkJ3MgZnJhbWUgbG9hZGVyCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5NgotCi0gICAgICAgICogV2ViVmll
dy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpjcmVhdGVGcmFtZSk6IFVzZSBjb3JlRnJhbWUgaW5z
dGVhZCBvZiBjaGlsZEZyYW1lLgotCi0yMDExLTAyLTAzICBBZGFtIExhbmdsZXkgIDxhZ2xAY2hy
b21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAg
UGx1bWIgbWl4ZWQgc2NyaXB0IFVSTCB0byBGcmFtZUxvYWRlckNsaWVudAotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzODQKLQotICAgICAgICBSZWdy
ZXNzaW9ucyBjb3ZlcmVkIGJ5IGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50LyoKLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRSdW5JbnNlY3VyZUNvbnRl
bnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoK
LQotMjAxMS0wMi0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQot
ICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Igcjc3Mzk4LgotCi0gICAgICAg
ICogV2ViVmlldy5jcHA6Ci0gICAgICAgIChXZWJWaWV3OjpwYWludCk6Ci0KLTIwMTEtMDEtMjgg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgotCi0gICAgICAgIDxzZWxlY3Q+IGNhbid0IGRpc3BsYXkgcmlnaHQtdG8tbGVm
dCAocnRsKSBsYW5ndWFnZXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5Nzg1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpzZWxlY3RJdGVt
QWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKTogQWRkZWQuCi0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMS0wMS0yNSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gRW5zdXJlIGxheW91dGVkIGZyYW1lIHdoZW4g
cGFpbnRpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMTA4Ci0KLSAgICAgICAgKiBXZWJWaWV3LmNwcDoKLSAgICAgICAgKFdlYlZpZXc6OnBhaW50
KToKLQotMjAxMS0wMS0wNCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
LQotICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeC4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50V2luQ0U6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6IEFkZGVkIG1pc3Npbmcgc2VtaWNv
bG9uLgotICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50V2luQ0UuaDoKLQotMjAxMC0xMi0yOSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KLQotICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3IgV2luQ0UgYWZ0ZXIg
cjczODAyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5D
RS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50V2luQ0U6OmN1c3RvbWl6
ZU1lbnUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0Uu
aDoKLQotMjAxMC0xMi0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFdlYktpdDIgbmVlZHMgdG8gbWly
cm9yIHRoZSBmcmFtZSB0cmVlIGluIHRoZSBVSVByb2Nlc3MKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTQ2Ci0KLSAgICAgICAgLSBBZGQgY2xpZW50
IGZ1bmN0aW9ucyB0byBub3RpZnkgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGFkZGVkIG9yCi0gICAg
ICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlIGNhY2hlLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpZFNhdmVUb1BhZ2VDYWNoZSk6Ci0gICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKToKLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTIt
MjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgRWRpdG9yLmggZG9lc24ndCBuZWVkIHRvIGluY2x1
ZGUgU2VsZWN0aW9uQ29udHJvbGxlci5oCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MTQ0MQotCi0gICAgICAgIFJlbmFtZWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6RURpcmVjdGlvbiB0byBTZWxlY3Rpb25EaXJlY3Rpb24uCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTAtMTAtMjgg
IE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQg
YnkgT2phbiBWYWZhaS4KLQotICAgICAgICBzcGVsbGNoZWNrIGRvZXMgbm90IGNoZWNrIHBhc3Rl
ZCB0ZXh0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MDA5MgotCi0gICAgICAgIEFkZGVkIGEgc3R1YiBpbXBsZW1lbW50YXRpb24uCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5oOgotICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMC0xMi0wNyAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjczMzkyLgotICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC83MzM5MgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA0ODkKLQotICAgICAgICBUaGlzIGNvbW1pdCBjYXVzZWQgY3Jhc2hlcyBvbiB0aGUg
R1RLKyBib3RzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdp
bkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNo
ZWRMb2FkaW5nKToKLQotMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0u
b3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCi0KLSAgICAgICAgVXBkYXRl
IGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuY3BwOgotICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpmaW5pc2hlZExvYWRpbmcpOgotCi0yMDEwLTEyLTA2ICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xp
bmcuCi0KLSAgICAgICAgW1dJTkNFXSBBZGQgYnVpbGQgc3lzdGVtCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDUyMgotCi0gICAgICAgICogQ01ha2VM
aXN0c1dpbkNFLnR4dDogQWRkZWQuCi0KLTIwMTAtMTItMDEgIEppYSBQdSAgPGpwdUBhcHBsZS5j
b20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgU3VwcG9y
dCBtdWx0aXBsZSBjb3JyZWN0aW9uIGNhbmRpZGF0ZXMgcGFuZWwgZm9yIG1pc3NwZWxsZWQgd29y
ZCBvbiBNYWMgT1MgWC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwMTM3Ci0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTY4MDU5PgotCi0gICAgICAg
IEFkb3B0ZWQgbmV3IGZ1bmN0aW9uIHNpZ25hdHVyZSBkZWZpbmVkIGluIGJhc2UgY2xhc3MuCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpnZXRHdWVzc2VzRm9yV29yZCk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMS0zMCAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gQWRkIFdlYlZpZXcKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMjE2Ci0KLSAgICAgICAgKiBX
ZWJWaWV3LmNwcDogQWRkZWQuCi0gICAgICAgICogV2ViVmlldy5oOiBBZGRlZC4KLQotMjAxMC0x
MS0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBV
bnJldmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjcxNTQxLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0xMS0wOCAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
LQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg2ODUK
LSAgICAgICAgTm90aWZ5IFVJIHByb2Nlc3MgYWJvdXQgZm9jdXNlZCBmcmFtZQotCi0gICAgICAg
IEFkZGVkIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgQ2hyb21lQ2xpZW50IG1l
dGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OmZvY3VzZWRGcmFtZUNoYW5nZWQp
OgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0KLTIwMTAt
MTEtMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAg
VW5yZXZpZXdlZCwgYnVpbGQgZml4IGFmdGVyIHI3MTA0MS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6Ci0gICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dFdpbkNFOjpzaG93Q29udGV4dE1lbnUpOgotCi0yMDEwLTEwLTMwICBQYXRyaWNrIEdhbnN0ZXJl
ciAgPHBhcm9nYUB3ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBh
ZnRlciByNzA1NzQuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJh
bnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZSk6Ci0KLTIwMTAtMTAtMjkgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTc2Ci0gICAgICAgIExldCBXZWJLaXQyIGNsaWVudCBrbm93IHdoZW4gYSBmcmFtZSBpcyBhIGZy
YW1lc2V0Ci0KLSAgICAgICAgQWRkZWQgYSBibGFuayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3
IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldCk6Ci0KLTIwMTAtMTAtMjYgIEplbm4gQnJh
aXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRG1p
dHJ5IFRpdG92LgotCi0gICAgICAgIFJlc291cmNlIHRyYWNraW5nIGZhaWx1cmUgd2hlbiB0cnlp
bmcgdG8gbW92ZSBhIGZyYW1lIGJldHdlZW4gZG9jdW1lbnRzCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcxMwotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OnRyYW5zZmVyTG9hZGluZ1Jlc291cmNlRnJvbVBhZ2UpOgotICAg
ICAgICBFbXB0eSBtZXRob2QuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5oOgotCi0yMDEwLTEwLTI1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KLQotICAgICAg
ICBSZXBsYWNlIF9jb3VudG9mIHdpdGggV1RGX0FSUkFZX0xFTkdUSAotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyMjkKLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLQotMjAxMC0xMC0yMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nv
bi4KLQotICAgICAgICBXZWJLaXQyIG5lZWRzIHRvIHBhc3MgdGhlIGN1cnJlbnQgZXZlbnQgbW9k
aWZpZXIgZmxhZ3Mgd2hlbiByZXF1ZXN0aW5nIGEgbmV3IHdpbmRvdwotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDAKLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRvdyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50V2luQ0UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZGlzcGF0Y2hDcmVhdGVQYWdlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFdpbkNFLmg6Ci0gICAgICAgIEFkZCBOYXZpZ2F0aW9uQWN0aW9uIHBhcmFtZXRlci4K
LQotMjAxMC0xMC0yMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQot
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIFtXSU5DRV0gSW1wbGVt
ZW50IEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudAotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTgKLQotICAgICAgICBDb3B5IHRoZSBp
bXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBFRkwgcG9ydC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
V2luQ0U6OmludGVycHJldEtleUV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50V2luQ0U6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAtMTAtMTUgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBT
Y2h1bHplLgotCi0gICAgICAgIFJlcGxhY2Ugc29tZSBTdHJpbmc6OmZvcm1hdCgpIHVzYWdlcyBi
eSBTdHJpbmdDb25jYXRlbmF0ZSBpbiBXZWJLaXQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzE0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6aW1hZ2VUaXRsZSk6Ci0gICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6bXVs
dGlwbGVGaWxlVXBsb2FkVGV4dCk6Ci0KLTIwMTAtMDktMjggIEplbm4gQnJhaXRod2FpdGUgIDxq
ZW5uYkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92Lgot
Ci0gICAgICAgIEFkZGVkIG9sZFBhZ2UgcGFyYW0gdG8gRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFRy
YW5zZmVyQ2hpbGRGcmFtZVRvTmV3RG9jdW1lbnQuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjY2MwotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmRpZFRyYW5zZmVyQ2hpbGRGcmFtZVRvTmV3RG9jdW1lbnQpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDoKLQotMjAxMC0wOS0y
MyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIFJvYmVuLgotCi0gICAgICAgIEFkZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYzNzEK
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDog
Q29waWVkIGZyb20gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
Lmg6IENvcGllZCBmcm9tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmguCi0KLTIwMTAtMDktMjMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQg
Q2hyb21lQ2xpZW50V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ2Mjk0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRX
aW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmg6IEFkZGVkLgotCi0yMDEwLTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgotCi0gICAgICAgIFVucmV2aWV3ZWQuCi0KLSAgICAgICAgQnVpbGQgZml4IGZv
ciBGcmFtZUxvYWRlckNsaWVudFdpbkNFLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTCk6IEFkZCBtaXNzaW5nIG1ldGhvZC4KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmg6Ci0KLTIwMTAt
MDktMjEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgIldpbkNFIiB0byBjbGFzc25h
bWUgZm9yIGFsbCBXZWJDb3JlU3VwcG9ydCBjbGFzc2VzIHRvIG1hdGNoIGZpbGVuYW1lLgotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYxNzUKLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwOiBSZW5hbWUg
Q29udGV4dE1lbnVDbGllbnQgdG8gQ29udGV4dE1lbnVDbGllbnRXaW5DRS4KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmg6IERpdHRvLgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IFJlbmFtZSBEcmFnQ2xpZW50IHRv
IERyYWdDbGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2lu
Q0UuaDogRGl0dG8uCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0Uu
Y3BwOiBSZW5hbWUgRWRpdG9yQ2xpZW50IHRvIEVkaXRvckNsaWVudFdpbkNFLgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFdpbkNFLmg6IERpdHRvLgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmNwcDogUmVuYW1lIEluc3BlY3RvckNs
aWVudCB0byBJbnNwZWN0b3JDbGllbnRXaW5DRS4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRXaW5DRS5oOiBEaXR0by4KLQotMjAxMC0wOS0yMCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJv
YmVuLgotCi0gICAgICAgIEFkZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTY4MgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAt
MDktMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBbV0lOQ0VdIEFkZCBtaXNzaW5nIEZy
YW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6YmxvY2tlZEVycm9yCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTY4MAotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcDoKLSAgICAgICAgKFdlYktp
dDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpibG9ja2VkRXJyb3IpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oOgotCi0yMDEwLTA5
LTEzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ1NDc0Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZU5l
dHdvcmtpbmdDb250ZXh0V2luQ0UuY3BwOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RnJhbWVO
ZXR3b3JraW5nQ29udGV4dFdpbkNFOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UpOgotICAg
ICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnVzZXJBZ2VudCk6Ci0g
ICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6cmVmZXJyZXIpOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oOiBB
ZGRlZC4KLSAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFOjpjcmVh
dGUpOgotCi0yMDEwLTA4LTMxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJvZ2EuY29t
PgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgotCi0g
ICAgICAgIEFkZCBFZGl0b3JDbGllbnRXaW5DRQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MjIKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFdpbkNFLmNwcDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dDo6RWRpdG9yQ2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp+RWRpdG9y
Q2xpZW50KToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhvZFN0
YXRlKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZSk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFj
ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3VsZEJl
Z2luRWRpdGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRp
dGluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZSk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUp
OgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZyk6Ci0gICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToK
LSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKToKLSAgICAgICAg
KFdlYktpdDo6RWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6ZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0
ZWJvYXJkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojppc0VkaXRhYmxlKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2FuVW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudDo6Y2FuUmVkbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6
dW5kbyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6cmVkbyk6Ci0gICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZSk6Ci0gICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudDo6cGFnZURlc3Ryb3llZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgotICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcpOgotICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bik6Ci0gICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKToKLSAgICAg
ICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgotICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudCk6
Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRG
aWVsZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4
dEFyZWEpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNwZWxs
RG9jdW1lbnQpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmxlYXJuV29yZCk6Ci0g
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKLSAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JN
aXNzcGVsbGVkV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6Y2hlY2tHcmFt
bWFyT2ZTdHJpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyk6Ci0gICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6Ci0gICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgotICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OmdldEd1ZXNzZXNGb3JXb3JkKToKLSAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50Ojp3aWxs
U2V0SW5wdXRNZXRob2RTdGF0ZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50V2luQ0UuaDogQWRkZWQuCi0KLTIwMTAtMDgtMzEgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHBhcm9nYS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCi0KLSAgICAgICAgQWRkIERyYWdDbGllbnRXaW5DRQotICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4MjEKLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6Ci0gICAgICAgIChX
ZWJLaXQ6OkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6Ci0gICAgICAg
IChXZWJLaXQ6OkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToKLSAgICAgICAgKFdlYktp
dDo6RHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludCk6Ci0gICAgICAgIChX
ZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6Ci0gICAgICAgIChXZWJLaXQ6OkRyYWdDbGll
bnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgotICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50
OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudFdpbkNFLmg6IEFkZGVkLgotCi0yMDEwLTA4LTMxICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuLgotCi0gICAgICAgIEFkZCBDb250ZXh0TWVudUNsaWVudFdpbkNFCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDgyMAotCi0gICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRXaW5DRS5jcHA6IEFkZGVkLgot
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Q29udGV4dE1lbnVDbGllbnQpOgot
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVEZXN0cm95ZWQp
OgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21E
ZWZhdWx0SXRlbXMpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6
ZG93bmxvYWRVUkwpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6Y29weUlt
YWdlVG9DbGlwYm9hcmQpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6c2Vh
cmNoV2l0aEdvb2dsZSk6Ci0gICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50Ojpsb29r
VXBJbkRpY3Rpb25hcnkpOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6c3Bl
YWspOgotICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6c3RvcFNwZWFraW5nKToK
LSAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6OmlzU3BlYWtpbmcpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaDogQWRkZWQuCi0KLTIw
MTAtMDgtMjggIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICBBZGQgSW5zcGVjdG9yQ2xpZW50
V2luQ0UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
ODE5Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXaW5DRS5jcHA6
IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNsaWVu
dCk6Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6fkluc3BlY3RvckNsaWVudCk6
Ci0gICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKToK
LSAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQp
OgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnJlbGVhc2VGcm9udGVuZFBhZ2Up
OgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6Ci0gICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6Ci0gICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKToKLSAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgotICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaDogQWRkZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODFiMWY3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBH
YW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
aHJvbWVDbGllbnRXaW5DRS5oIgotCi0jaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKLSNpbmNsdWRl
ICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkljb24uaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRlICJQb3B1
cE1lbnVXaW4uaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVXaW4uaCIKLSNpbmNsdWRlICJX
ZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNocm9tZUNsaWVudFdpbkNFOjpD
aHJvbWVDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCi17Ci0gICAgQVNTRVJUKG1fd2ViVmlldyk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2lu
Q0U6OmNocm9tZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLUZsb2F0UmVj
dCBDaHJvbWVDbGllbnRXaW5DRTo6d2luZG93UmVjdCgpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcp
Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICBtX3dl
YlZpZXctPmZyYW1lUmVjdCgmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OnBhZ2VS
ZWN0KCkKLXsKLSAgICByZXR1cm4gd2luZG93UmVjdCgpOwotfQotCi12b2lkIENocm9tZUNsaWVu
dFdpbkNFOjpmb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6dW5mb2N1cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
UGFnZSogQ2hyb21lQ2xpZW50V2luQ0U6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IE5hdmlnYXRpb25BY3Rp
b24mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50V2luQ0U6OnNob3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OmNhblJ1bk1vZGFsKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6
cnVuTW9kYWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xp
ZW50V2luQ0U6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnRvb2xiYXJzVmlzaWJsZSgpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRTdGF0dXNi
YXJWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJv
bWVDbGllbnRXaW5DRTo6c3RhdHVzYmFyVmlzaWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFNj
cm9sbGJhcnNWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9v
bCBDaHJvbWVDbGllbnRXaW5DRTo6c2Nyb2xsYmFyc1Zpc2libGUoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNF
OjpzZXRNZW51YmFyVmlzaWJsZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6Om1lbnViYXJWaXNpYmxlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5D
RTo6c2V0UmVzaXphYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBDaHJvbWVDbGllbnRXaW5DRTo6Y2xvc2VXaW5kb3dTb29uKCkKLXsKLSAgICBQb3N0TWVzc2Fn
ZVcobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUoKSwgV01fQ0xPU0UsIDAsIDApOwotfQotCi1ib29s
IENocm9tZUNsaWVudFdpbkNFOjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCi17Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnRha2VGb2N1cyhGb2N1
c0RpcmVjdGlvbikKLXsKLSAgICB1bmZvY3VzKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2lu
Q0U6OmZvY3VzZWRFbGVtZW50Q2hhbmdlZChFbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZy
YW1lKikKLXsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRXaW5DRTo6Y2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDaHJvbWVDbGll
bnRXaW5DRTo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBydW5KYXZhU2NyaXB0Q29uZmlybShmcmFt
ZSwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fd2ViVmlldy0+cnVuSmF2YVNjcmlwdEFsZXJ0
KG1lc3NhZ2UpOwotfQotCi1ib29sIENocm9tZUNsaWVudFdpbkNFOjpydW5KYXZhU2NyaXB0Q29u
ZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gbV93ZWJW
aWV3LT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsKLX0KLQotYm9vbCBDaHJvbWVDbGll
bnRXaW5DRTo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KQotewotICAgIHJl
dHVybiBtX3dlYlZpZXctPnJ1bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZSwgZGVmYXVsdFZhbHVl
LCByZXN1bHQpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzZXRTdGF0dXNiYXJUZXh0
KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJv
bWVDbGllbnRXaW5DRTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUtleWJvYXJkVUlNb2RlIENocm9t
ZUNsaWVudFdpbkNFOjprZXlib2FyZFVJTW9kZSgpCi17Ci0gICAgcmV0dXJuIEtleWJvYXJkQWNj
ZXNzVGFic1RvTGlua3M7Ci19Ci0KLUludFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OndpbmRvd1Jl
c2l6ZXJSZWN0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJ
bnRSZWN0KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmludmFsaWRhdGVSb290Vmll
dyhjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudFdpbkNFOjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0KQotewotICAgIFJFQ1QgcmVjdCA9IHVwZGF0ZVJlY3Q7Ci0gICAgSW52
YWxpZGF0ZVJlY3QobV93ZWJWaWV3LT53aW5kb3dIYW5kbGUoKSwgJnJlY3QsIEZBTFNFKTsKLX0K
LQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9s
bChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQotewotICAgIGludmFsaWRhdGVDb250ZW50c0Fu
ZFJvb3RWaWV3KHVwZGF0ZVJlY3QpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzY3Jv
bGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcocmVjdFRvU2Nyb2xs
KTsKLX0KLQotSW50UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6cm9vdFZpZXdUb1NjcmVlbihjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IENocm9tZUNsaWVudFdpbkNFOjpzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotUGxhdGZvcm1QYWdlQ2xpZW50IENocm9tZUNsaWVu
dFdpbkNFOjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmNvbnRlbnRz
U2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpzY3JvbGxiYXJzTW9kZURp
ZENoYW5nZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJv
bWVDbGllbnRXaW5DRTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21l
Q2xpZW50V2luQ0U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpwcmlu
dChGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqLCBjb25zdCBTdHJpbmcmLCBEYXRhYmFzZURldGFpbHMpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpyZWFjaGVkTWF4
QXBwQ2FjaGVTaXplKGludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBDaHJvbWVDbGllbnRXaW5DRTo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShT
ZWN1cml0eU9yaWdpbiosIGludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIENocm9tZUNsaWVudFdpbkNFOjpuZWVkVG91
Y2hFdmVudHMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLXZv
aWQgQ2hyb21lQ2xpZW50V2luQ0U6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3Jh
cGhpY3NMYXllciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVD
bGllbnRXaW5DRTo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8
RmlsZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXIqIGxvYWRlcikKLXsKLSAgICBsb2Fk
ZXItPm5vdGlmeUZpbmlzaGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsK
LX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0TGFzdFNldEN1cnNvclRvQ3VycmVu
dEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGll
bnRXaW5DRTo6QVhTdGFydEZyYW1lTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6QVhGaW5pc2hGcmFtZUxvYWQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNlbGVjdEl0ZW1X
cml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQ2hyb21lQ2xpZW50V2luQ0U6OnNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRp
bmdEaXJlY3Rpb24oKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDaHJvbWVDbGll
bnRXaW5DRTo6aGFzT3BlbmVkUG9wdXAoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFBvcHVwTWVudT4gQ2hyb21lQ2xp
ZW50V2luQ0U6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgY29uc3QK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTWVudVdpbihjbGllbnQpKTsKLX0KLQot
UGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IENocm9tZUNsaWVudFdpbkNFOjpjcmVhdGVTZWFy
Y2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVXaW4oY2xpZW50KSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
YzU2OGE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50V2luQ0UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENocm9tZUNsaWVudFdpbkNFX2gKLSNkZWZpbmUgQ2hyb21lQ2xpZW50V2luQ0VfaAot
Ci0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0KLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBDaHJvbWVDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpD
aHJvbWVDbGllbnQgewotcHVibGljOgotICAgIENocm9tZUNsaWVudFdpbkNFKFdlYlZpZXcqIHdl
YlZpZXcpOwotCi0gICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBmb2N1cygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCB1bmZvY3VzKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZv
Y3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
dGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKFdlYkNvcmU6OkZyYW1lKikg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBUaGUgRnJhbWUgcG9pbnRlciBwcm92aWRlcyB0aGUgQ2hyb21l
Q2xpZW50IHdpdGggY29udGV4dCBhYm91dCB3aGljaAotICAgIC8vIEZyYW1lIHdhbnRzIHRvIGNy
ZWF0ZSB0aGUgbmV3IFBhZ2UuICBBbHNvLCB0aGUgbmV3bHkgY3JlYXRlZCB3aW5kb3cKLSAgICAv
LyBzaG91bGQgbm90IGJlIHNob3duIHRvIHRoZSB1c2VyIHVudGlsIHRoZSBDaHJvbWVDbGllbnQg
b2YgdGhlIG5ld2x5Ci0gICAgLy8gY3JlYXRlZCBQYWdlIGhhcyBpdHMgc2hvdyBtZXRob2QgY2Fs
bGVkLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlV2luZG93KFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6Oldp
bmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
Y2FuUnVuTW9kYWwoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIHRvb2xiYXJzVmlzaWJsZSgpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHN0YXR1c2JhclZpc2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsYmFyc1Zpc2libGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNZW51
YmFyVmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbWVudWJhclZpc2li
bGUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNpemFibGUoYm9vbCkgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShKU0M6Ok1lc3Nh
Z2VTb3VyY2UsIEpTQzo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwg
dW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBXVEY6OlN0
cmluZyYgc291cmNlSUQpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9y
ZVVubG9hZENvbmZpcm1QYW5lbCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkNvcmU6
OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3dTb29uKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
cnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBk
ZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIC8vIE1ldGhvZHMgdXNlZCBieSBIb3N0V2luZG93LgotICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVu
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2Vk
KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sKSBvdmVycmlkZTsKLSAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cu
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpU
ZXh0RGlyZWN0aW9uKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJDb3Jl
OjpGcmFtZSopIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB2aXJ0
dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RG
OjpTdHJpbmcmIGRhdGFiYXNlTmFtZSwgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzKSBvdmVycmlk
ZTsKLSNlbmRpZgotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlv
biBjYWNoZSBmYWlscyB0byBzYXZlIGEgY2FjaGUgb2JqZWN0Ci0gICAgLy8gYmVjYXVzZSBzdG9y
aW5nIGl0IHdvdWxkIGdyb3cgdGhlIGRhdGFiYXNlIGZpbGUgcGFzdCBpdHMgZGVmaW5lZCBtYXhp
bXVtCi0gICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBvbiB0aGUg
ZGV2aWNlLgotICAgIC8vIFRoZSBjaHJvbWUgY2xpZW50IHdvdWxkIG5lZWQgdG8gdGFrZSBzb21l
IGFjdGlvbiBzdWNoIGFzIGV2aWN0aW5nIHNvbWUKLSAgICAvLyBvbGQgY2FjaGVzLgotICAgIHZp
cnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpIG92
ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBj
YWNoZSBvcmlnaW4gcXVvdGEgaXMgcmVhY2hlZC4gVGhpcwotICAgIC8vIG1lYW5zIHRoYXQgdGhl
IHJlc291cmNlcyBhdHRlbXB0aW5nIHRvIGJlIGNhY2hlZCB2aWEgdGhlIG1hbmlmZXN0IGFyZQot
ICAgIC8vIG1vcmUgdGhhbiBhbGxvd2VkIG9uIHRoaXMgb3JpZ2luLiBUaGlzIGNhbGxiYWNrIGFs
bG93cyB0aGUgY2hyb21lIGNsaWVudAotICAgIC8vIHRvIHRha2UgYWN0aW9uLCBzdWNoIGFzIHBy
b21wdGluZyB0aGUgdXNlciB0byBhc2sgdG8gaW5jcmVhc2UgdGhlIHF1b3RhCi0gICAgLy8gZm9y
IHRoaXMgb3JpZ2luLgotICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCB0b3RhbFNwYWNlTmVl
ZGVkKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6
RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPikgb3ZlcnJpZGU7Ci0gICAg
Ly8gQXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbG9hZCBhbiBpY29uIGZvciBzcGVjaWZpZWQgZmls
ZW5hbWVzLgotICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxX
VEY6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopIG92ZXJyaWRlOwotCi0gICAg
Ly8gUGFzcyAwIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIu
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1l
KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIC8vIFNldHMgYSBmbGFn
IHRvIHNwZWNpZnkgdGhhdCB0aGUgbmV4dCB0aW1lIGNvbnRlbnQgaXMgZHJhd24gdG8gdGhlIHdp
bmRvdywKLSAgICAvLyB0aGUgY2hhbmdlcyBhcHBlYXIgb24gdGhlIHNjcmVlbiBpbiBzeW5jaHJv
bnkgd2l0aCB1cGRhdGVzIHRvIEdyYXBoaWNzTGF5ZXJzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgLy8gU2V0
cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSB2aWV3IG5lZWRzIHRvIGJlIHVwZGF0ZWQsIHNv
IHdlIG5lZWQKLSAgICAvLyB0byBkbyBhbiBlYWdlciBsYXlvdXQgYmVmb3JlIHRoZSBkcmF3aW5n
LgotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3Io
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgQVhTdGFydEZyYW1lTG9hZCgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBBWEZpbmlzaEZyYW1lTG9hZCgpIG92ZXJyaWRlOwotCi0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJv
b2wpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRp
bmdEaXJlY3Rpb25Jc05hdHVyYWwoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0
SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShXZWJDb3Jl
OjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQ29y
ZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
bnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBDaHJvbWVDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuY3BwIGIv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNF
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZTdmMy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2lu
Q0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50V2luQ0UuaCIKLQotI2luY2x1ZGUgIkNv
bnRleHRNZW51LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db250ZXh0TWVudUNsaWVudFdp
bkNFOjpDb250ZXh0TWVudUNsaWVudFdpbkNFKFdlYlZpZXcgKndlYlZpZXcpCi0gICAgOiBtX3dl
YlZpZXcod2ViVmlldykKLXsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpjb250
ZXh0TWVudURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLVBhc3NPd25QdHI8
Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q2xpZW50V2luQ0U6OmN1c3RvbWl6ZU1lbnUoUGFzc093
blB0cjxDb250ZXh0TWVudT4gbWVudSkKLXsKLSAgICByZXR1cm4gbWVudTsKLX0KLQotdm9pZCBD
b250ZXh0TWVudUNsaWVudFdpbkNFOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVu
dUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpkb3dubG9hZFVSTChjb25zdCBVUkwmIHVy
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50
V2luQ0U6OnNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRXaW5DRTo6bG9va1VwSW5EaWN0aW9u
YXJ5KEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRN
ZW51Q2xpZW50V2luQ0U6OnNwZWFrKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudFdpbkNFOjpzdG9wU3BlYWtpbmcoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ29udGV4dE1lbnVDbGllbnRXaW5D
RTo6aXNTcGVha2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFdpbkNFLmggYi9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1NTVlNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50V2luQ0UuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29udGV4dE1lbnVDbGllbnRX
aW5DRV9oCi0jZGVmaW5lIENvbnRleHRNZW51Q2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiQ29u
dGV4dE1lbnVDbGllbnQuaCIKLQotY2xhc3MgV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIENvbnRleHRNZW51Q2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGV4
dE1lbnVDbGllbnQgewotcHVibGljOgotICAgIENvbnRleHRNZW51Q2xpZW50V2luQ0UoV2ViVmll
dyopOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q29udGV4dE1lbnU+IGN1c3RvbWl6
ZU1lbnUoUGFzc093blB0cjxXZWJDb3JlOjpDb250ZXh0TWVudT4pIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb3JlOjpDb250ZXh0TWVudUl0
ZW0qLCBjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudSopIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGljdGlvbmFyeShXZWJDb3JlOjpGcmFtZSop
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzcGVhayhjb25zdCBXVEY6OlN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtpbmcoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTcGVha2luZygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdlYlZp
ZXcqIG1fd2ViVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
Q29udGV4dE1lbnVDbGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRXaW5DRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJiNDM5MTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dh
QHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdDbGllbnRXaW5DRS5o
IgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIERyYWdDbGllbnRXaW5DRTo6d2lsbFBl
cmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0
YSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEcmFnQ2xpZW50V2luQ0U6
OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQ
b2ludCYsIENsaXBib2FyZCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uIERyYWdDbGllbnRXaW5DRTo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0Rh
dGEmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdEZXN0aW5hdGlv
bkFjdGlvbkFueTsKLX0KLQotRHJhZ1NvdXJjZUFjdGlvbiBEcmFnQ2xpZW50V2luQ0U6OmRyYWdT
b3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7Ci19Ci0KLXZvaWQgRHJh
Z0NsaWVudFdpbkNFOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRHJhZ0NsaWVudFdpbkNFOjpkcmFnQ29udHJvbGxlckRlc3Ry
b3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFdp
bkNFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTFjNDMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50V2luQ0UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRHJhZ0NsaWVudFdpbkNF
X2gKLSNkZWZpbmUgRHJhZ0NsaWVudFdpbkNFX2gKLQotI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERyYWdDbGllbnRXaW5DRSA6IHB1YmxpYyBX
ZWJDb3JlOjpEcmFnQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZv
cm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBX
ZWJDb3JlOjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9y
bURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3Jl
OjpEcmFnRGF0YSYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNl
QWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJh
Z0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJhbWUmLCBib29sID0gZmFsc2Up
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkg
b3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERyYWdD
bGllbnRXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3ZWJjODJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0g
KiAgQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQotICogIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50V2lu
Q0UuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVbmRvU3RlcC5o
IgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1FZGl0b3JDbGllbnRXaW5DRTo6RWRpdG9yQ2xpZW50V2luQ0Uo
V2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotewotfQotCi1FZGl0
b3JDbGllbnRXaW5DRTo6fkVkaXRvckNsaWVudFdpbkNFKCkKLXsKLX0KLQotdm9pZCBFZGl0b3JD
bGllbnRXaW5DRTo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGREZWxldGVS
YW5nZShSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgRWRpdG9y
Q2xpZW50V2luQ0U6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91
bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEVu
ZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEluc2VydFRl
eHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRX
aW5DRTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmluaXR5
LCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OnNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0eVNldCosIFdlYkNvcmU6OlJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVkaXRvckNs
aWVudFdpbkNFOjpkaWRCZWdpbkVkaXRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6ZGlkRW5kRWRpdGluZygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6ZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBF
ZGl0b3JDbGllbnRXaW5DRTo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3Jl
OjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+ID4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xp
ZW50V2luQ0U6OnJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9T
dGVwPikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdp
bkNFOjpyZWdpc3RlclJlZG9TdGVwKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4p
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6
Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmNhbkNvcHlDdXQoV2ViQ29yZTo6RnJhbWUqLCBib29s
IGRlZmF1bHRWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotfQotCi1i
b29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5QYXN0ZShXZWJDb3JlOjpGcmFtZSosIGJvb2wgZGVm
YXVsdFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci19Ci0KLWJvb2wg
RWRpdG9yQ2xpZW50V2luQ0U6OmNhblVuZG8oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpjYW5S
ZWRvKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dW5kbygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cmVkbygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6cGFn
ZURlc3Ryb3llZCgpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50
V2luQ0U6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1f
d2ViVmlldy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwot
fQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXctPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3Mo
KS5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xp
ZW50V2luQ0U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0b2dnbGVHcmFtbWFyQ2hl
Y2tpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSA9IDEg
PDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtleSA9IDEgPDwgMjsKLQotc3RydWN0
IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWduZWQgdmlydHVhbEtleTsKLSAgICB1bnNpZ25lZCBt
b2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0cnVjdCBLZXlQcmVzc0Vu
dHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0g
ICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlEb3duRW50cnkga2V5
RG93bkVudHJpZXNbXSA9IHsKLSAgICB7IFZLX0xFRlQsICAgMCwgICAgICAgICAgICAgICAgICAi
TW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgQ3RybEtleSwgICAgICAgICAg
ICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgMCwgICAgICAgICAgICAg
ICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVJpZ2h0QW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSwgICAg
ICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVdvcmRSaWdodEFuZE1v
ZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgMCwgICAgICAg
ICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9SLCAgU2hpZnRL
ZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX0RPV04sICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZURvd24iICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgU2hp
ZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VE
b3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9SLCAg
MCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBh
Z2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUs
ICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92
ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwKLSAgICB7IFZLX0hP
TUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAi
TW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKLQotICAgIHsg
VktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAgICAg
ICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAotICAg
IHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwgU2hp
ZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAot
Ci0gICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgIFNoaWZ0S2V5
LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgIEN0cmxL
ZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19ERUxFVEUsIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRG
b3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICB7ICdCJywgICAgICAg
Q3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xl
SXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgVktfRVND
QVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJ
bnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
VEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAgICAg
ICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgLy8gSXQncyBub3QgcXVpdGUgY2xlYXIg
d2hldGhlciBjbGlwYm9hcmQgc2hvcnRjdXRzIGFuZCBVbmRvL1JlZG8gc2hvdWxkIGJlIGhhbmRs
ZWQKLSAgICAvLyBpbiB0aGUgYXBwbGljYXRpb24gb3IgaW4gV2ViS2l0LiBXZSBjaG9zZSBXZWJL
aXQgZm9yIG5vdy4KLSAgICB7ICdDJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiQ29weSIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdWJywgICAg
ICAgQ3RybEtleSwgICAgICAgICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7ICdYJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiQ3V0
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdBJywg
ICAgICAgQ3RybEtleSwgICAgICAgICAgICAiU2VsZWN0QWxsIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwgQ3RybEtleSwgICAgICAgICAgICAi
Q29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0RFTEVURSwgU2hpZnRLZXksICAgICAgICAgICAiQ3V0IiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwgU2hpZnRLZXksICAgICAgICAg
ICAiUGFzdGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
ICdaJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVW5kbyIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdaJywgICAgICAgQ3RybEtleSB8IFNoaWZ0
S2V5LCAiUmVkbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotfTsK
LQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7Ci0gICAg
eyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAgICAgICAg
Ikluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAn
XHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAgICAgIklu
c2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHIn
LCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLX07Ci0KLWNvbnN0IGNo
YXIqIEVkaXRvckNsaWVudFdpbkNFOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2
ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpOwotCi0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21t
YW5kc01hcCA9IDA7Ci0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVBy
ZXNzQ29tbWFuZHNNYXAgPSAwOwotCi0gICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsKLSAg
ICAgICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47
Ci0gICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNo
YXIqPjsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgo
a2V5RG93bkVudHJpZXMpOyArK2kpCi0gICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAtPnNl
dChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3duRW50cmllc1tpXS52
aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKLQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa2V5UHJlc3NFbnRyaWVzKTsgKytpKQotICAg
ICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5tb2Rp
ZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVByZXNzRW50cmll
c1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlm
IChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAg
IGlmIChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7Ci0gICAg
aWYgKGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OwotCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewotICAg
ICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZlbnQtPmtleUNvZGUoKTsKLSAg
ICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAw
OwotICAgIH0KLQotICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldmVudC0+Y2hh
ckNvZGUoKTsKLSAgICByZXR1cm4gbWFwS2V5ID8ga2V5UHJlc3NDb21tYW5kc01hcC0+Z2V0KG1h
cEtleSkgOiAwOwotfQotCi1ib29sIEVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBOb2RlKiBub2RlID0gZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgRnJhbWUqIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAg
ICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50
KCk7Ci0gICAgaWYgKCFrZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9v
bCBjYXJldEJyb3dzaW5nID0gZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKLSAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBzd2l0Y2ggKGtleUV2ZW50LT53
aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbkxlZnQsCi0gICAgICAgICAgICAg
ICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJH
cmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwK
LSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uUmlnaHQsCi0gICAgICAgICAgICAgICAgICAg
IGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxh
cml0eSwKLSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKLSAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aW9uQmFja3dhcmQsCi0gICAgICAgICAgICAgICAgICAgIGtleUV2
ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwK
LSAgICAgICAgICAgICAgICAgICAgVXNlclRyaWdnZXJlZCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLAotICAgICAgICAgICAg
ICAgICAgICBEaXJlY3Rpb25Gb3J3YXJkLAotICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+
Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAg
ICAgICAgICAgICAgICAgIFVzZXJUcmlnZ2VyZWQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1l
LT5lZGl0b3IoKS5jb21tYW5kKGludGVycHJldEtleUV2ZW50KGV2ZW50KSk7Ci0KLSAgICBpZiAo
a2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAg
IC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8g
ZGVjaWRlIGhvdyBjb21tYW5kcyB0aGF0IGp1c3QgaW5zZXJ0IHRleHQgaWYgZXhlY3V0ZWQgdmlh
IEVkaXRvciBzaG91bGQgYmUgdHJlYXRlZCwKLSAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdXBv
biBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhh
dCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKLSAg
ICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVudGVy
KS4KLSAgICAgICAgcmV0dXJuICFjb21tYW5kLmlzVGV4dEluc2VydGlvbigpICYmIGNvbW1hbmQu
ZXhlY3V0ZShldmVudCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbW1hbmQuZXhlY3V0ZShldmVudCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29u
dHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91
cgotICAgIGlmIChldmVudC0+Y2hhckNvZGUoKSA8ICcgJykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3Nl
ZAotICAgIGlmIChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5pbnNlcnRU
ZXh0KGV2ZW50LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2ZW50KTsKLX0KLQotdm9pZCBFZGl0b3JD
bGllbnRXaW5DRTo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsK
LSAgICBpZiAoaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQpKQotICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6aGFu
ZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OnRleHRGaWVsZERpZEJl
Z2luRWRpdGluZyhFbGVtZW50KikKLXsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6dGV4
dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KikKLXsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRX
aW5DRTo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKQotewotfQotCi1ib29sIEVk
aXRvckNsaWVudFdpbkNFOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCosIEtl
eWJvYXJkRXZlbnQqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFZGl0b3JDbGll
bnRXaW5DRTo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNFOjp0ZXh0RGlkQ2hh
bmdlSW5UZXh0QXJlYShFbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIEVkaXRvckNsaWVudFdpbkNFOjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVj
dGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEVkaXRvckNsaWVudFdpbkNFOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0
cmluZyYgdGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNs
aWVudFdpbkNFOjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxp
bmdMZW5ndGgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNs
aWVudFdpbkNFOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmIGlucHV0V29yZCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgaW1wbGVt
ZW50ZWQgdXNpbmcgY3VzdG9taXplZCBhbGdvcml0aG1zIGZvciB0aGUgcGFydGljdWxhciBicm93
c2VyLgotICAgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRXaW5DRTo6Y2hlY2tHcmFt
bWFyT2ZTdHJpbmcoU3RyaW5nVklldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50
KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFdpbkNF
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3Qg
R3JhbW1hckRldGFpbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0
b3JDbGllbnRXaW5DRTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBT
dHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50
V2luQ0U6OnNob3dTcGVsbGluZ1VJKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotYm9vbCBFZGl0b3JDbGllbnRXaW5DRTo6c3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xp
ZW50V2luQ0U6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3Ry
aW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50V2luQ0U6OndpbGxTZXRJbnB1dE1l
dGhvZFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQxODRk
My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBFZGl0b3JDbGllbnRXaW5DRV9oCi0jZGVmaW5lIEVkaXRvckNsaWVudFdpbkNFX2gKLQotI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0K
LWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBFZGl0b3JDbGll
bnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpU
ZXh0Q2hlY2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRWRpdG9yQ2xpZW50V2luQ0UoV2ViVmll
dyopOwotICAgIH5FZGl0b3JDbGllbnRXaW5DRSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VE
ZXN0cm95ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5n
ZShXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBzcGVs
bENoZWNrZXJEb2N1bWVudFRhZygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiwg
V2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2Vi
Q29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKiwg
V2ViQ29yZTo6RUFmZmluaXR5LCBib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQqLCBXZWJDb3JlOjpSYW5n
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gPiYgcGFzdGVib2FyZERhdGEpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OlVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUmVkb1N0ZXAo
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgY2FuQ29weUN1dChXZWJDb3JlOjpGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUGFzdGUoV2ViQ29yZTo6RnJhbWUqLCBi
b29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNhblVu
ZG8oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHVuZG8oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVkbygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJk
RXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJDb3Jl
OjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVuZEVk
aXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0ZXh0
RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVudCopIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoV2ViQ29yZTo6RWxlbWVudCos
IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGV4
dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChXZWJDb3JlOjpFbGVtZW50Kikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKFdlYkNvcmU6OkVsZW1lbnQq
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNo
YW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBXVEY6OlN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV1RGOjpT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5n
KFN0cmluZ1ZpZXcsIGludCosIGludCopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV1RGOjpTdHJp
bmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmco
U3RyaW5nVmlldywgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqLCBp
bnQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFp
bCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNob3dTcGVsbGluZ1VJKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwg
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVj
a2luZ1JlcXVlc3Q+KSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlRleHRDaGVj
a2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KLQotcHJp
dmF0ZToKLSAgICBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJD
b3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0KLSAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVkaXRvckNsaWVudFdpbkNFX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzYx
ZGJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9n
YS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFdpbkNFLmgi
Ci0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgot
I2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKLSNpbmNsdWRlICJXZWJLaXRWZXJzaW9uLmgiCi0jaW5j
bHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRShXZWJWaWV3KiB2aWV3
KQotICAgIDogbV93ZWJWaWV3KHZpZXcpCi0gICAgLCBtX3BsdWdpblZpZXcoMCkKLXsKLSAgICBB
U1NFUlQobV93ZWJWaWV3KTsKLX0KLQotRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6fkZyYW1lTG9h
ZGVyQ2xpZW50V2luQ0UoKQotewotfQotCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
dXNlckFnZW50KGNvbnN0IFVSTCYpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgdXNlckFnZW50U3RyaW5nLCAoKSk7Ci0KLSAgICBpZiAodXNlckFnZW50U3Ry
aW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyB3ZWJLaXRWZXJzaW9uID0gU3RyaW5nOjpm
b3JtYXQoIiVkLiVkIiwgV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9O
KTsKLSAgICAgICAgdXNlckFnZW50U3RyaW5nID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIs
IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKSwgIikgQXBwbGVXZWJLaXQvIiwgd2ViS2l0VmVy
c2lvbiwgIiAoS0hUTUwsIGxpa2UgR2Vja28pIE1vYmlsZSBTYWZhcmkvIiwgd2ViS2l0VmVyc2lv
bik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVzZXJBZ2VudFN0cmluZzsKLX0KLQotUGFzc1JlZlB0
cjxEb2N1bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlRG9jdW1lbnRM
b2FkZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJz
dGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCi17Ci0gICAgcmV0dXJuIERvY3VtZW50TG9hZGVy
OjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAobV9wbHVnaW5WaWV3KSB7Ci0gICAg
ICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewotICAgICAgICAgICAgbV9wbHVn
aW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKLSAgICAgICAg
ICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbG9hZGVyLT5jb21taXREYXRhKGRhdGEsIGxlbmd0aCk7Ci19Ci0KLWJvb2wgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDYW5j
ZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoV2lsbFNlbmRSZXF1
ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjphc3NpZ25JZGVudGlm
aWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBEb2N1bWVudExvYWRlciosIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZp
Y2F0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNF
Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmcmFtZUxvYWRlckRlc3Ry
b3llZCgpCi17Ci0gICAgbV93ZWJWaWV3ID0gMDsKLSAgICBtX2ZyYW1lID0gMDsKLSAgICBkZWxl
dGUgdGhpczsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFJl
Y2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0
aW9uKQotewotICAgIGlmIChjYW5TaG93TUlNRVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkpCi0g
ICAgICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci0gICAgZWxzZQotICAgICAgICBwb2xp
Y3lGdW5jdGlvbihQb2xpY3lEb3dubG9hZCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oY29uc3QgTmF2aWdh
dGlvbkFjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiwgRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5j
dGlvbikKLXsKLSAgICBwb2xpY3lGdW5jdGlvbihQb2xpY3lVc2UpOwotfQotCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0
aW9uKQotewotICAgIHBvbGljeUZ1bmN0aW9uKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24pCi17Ci0gICAgcG9saWN5
RnVuY3Rpb24oUG9saWN5VXNlKTsKLX0KLQotUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1l
bnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1Jl
ZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3JlYXRlRnJhbWUoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVs
ZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5X
aWR0aCwgaW50IG1hcmdpbkhlaWdodCkKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3LT5jcmVhdGVG
cmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgcmVmZXJyZXIsIGFsbG93c1Njcm9sbGluZywg
bWFyZ2luV2lkdGgsIG1hcmdpbkhlaWdodCwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQp
Ci17Ci0gICAgbV9wbHVnaW5WaWV3ID0gdG9QbHVnaW5WaWV3KHBsdWdpbldpZGdldCk7Ci0gICAg
aWYgKHBsdWdpbldpZGdldCkKLSAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZh
bHNlOwotfQotCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y3Jl
YXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1lbnQqLCBj
b25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1PYmplY3RDb250
ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpvYmplY3RDb250ZW50VHlwZShjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBzaG91bGRQcmVmZXJQbHVnSW5z
Rm9ySW1hZ2VzKQotewotICAgIHJldHVybiBGcmFtZUxvYWRlcjo6ZGVmYXVsdE9iamVjdENvbnRl
bnRUeXBlKHVybCwgbWltZVR5cGUsIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpOwotfQot
Ci1TdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKERPTVdyYXBwZXJXb3JsZCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
Ym9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6Omhhc1dlYlZpZXco
KSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmcmFtZUxvYWRDb21wbGV0ZWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpyZXN0b3JlVmlld1N0YXRl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKLXsK
LSAgICByZXR1cm4gaXRlbTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRE
aXNwbGF5SW5zZWN1cmVDb250ZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpZFJ1bkluc2VjdXJlQ29udGVudChTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFVSTCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9vbCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6Om1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmb3JjZUxheW91dCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpmb3JjZUxheW91dEZvck5vbkhUTUwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6c2V0Q29waWVzT25TY3JvbGwoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6
ZGV0YWNoZWRGcm9tUGFyZW50MigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkZXRhY2hlZEZyb21QYXJlbnQzKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3Bh
dGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3QoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXaW5DRTo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IFVSTCYs
IGRvdWJsZSwgZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkUmVw
bGFjZVN0YXRlV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpkaXNwYXRjaFdpbGxDbG9zZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZENoYW5nZUlj
b25zKFdlYkNvcmU6Okljb25UeXBlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRp
c3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkTGF5b3V0KExheW91
dE1pbGVzdG9uZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaFNob3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuY2VsUG9saWN5Q2hlY2soKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OndpbGxDaGFu
Z2VUaXRsZShEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRl
ciogZG9jdW1lbnRMb2FkZXIpCi17Ci0gICAgc2V0VGl0bGUoZG9jdW1lbnRMb2FkZXItPnRpdGxl
KCksIGRvY3VtZW50TG9hZGVyLT51cmwoKSk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRX
aW5DRTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gKE1JTUVUeXBlUmVnaXN0cnk6OmNhblNob3dNSU1F
VHlwZSh0eXBlKQotICAgICAgICAgICAgfHwgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdp
bnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQodHlwZSkpOwotfQotCi1ib29sIEZyYW1lTG9hZGVy
Q2xpZW50V2luQ0U6OmNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcmKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZy
YW1lTG9hZGVyQ2xpZW50V2luQ0U6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpnZW5lcmF0ZWRNSU1F
VHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
V2luQ0U6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopCi17Ci0gICAgaWYgKCFtX3Bs
dWdpblZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNo
TG9hZGluZygpOwotICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbiA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlkRmluaXNoTG9hZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpwcmVwYXJlRm9yRGF0
YVNvdXJjZVJlcGxhY2VtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rp
b24mLCBjb25zdCBVUkwmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoRGlkRmluaXNoTG9h
ZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpkaXNwYXRjaERpZEZhaWxM
b2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VFcnJv
ciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExv
YWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZGlzcGF0Y2hEaWRG
YWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGRp
c3BhdGNoRGlkRmFpbExvYWQoZXJyb3IpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0U6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjb252ZXJ0
TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1SZXNvdXJjZUVycm9yIEZyYW1l
TG9hZGVyQ2xpZW50V2luQ0U6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VF
cnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwotfQotCi1S
ZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmNhbm5vdFNob3dVUkxFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6aW50ZXJy
dXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLVJlc291cmNlRXJyb3IgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0K
LQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaWxlRG9lc05vdEV4aXN0
RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFdpbkNF
OjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci19Ci0KLWJvb2wgRnJhbWVMb2Fk
ZXJDbGllbnRXaW5DRTo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgcmV0dXJuICEoZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7Ci19Ci0KLWJvb2wgRnJh
bWVMb2FkZXJDbGllbnRXaW5DRTo6Y2FuQ2FjaGVQYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNoQ3JlYXRl
UGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmRpc3BhdGNo
VW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzZXRNYWlu
RG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQotewotICAgIGlmICghbV9wbHVnaW5WaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bs
dWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOwotICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAgbV9o
YXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWROYW1lICovKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dXBkYXRlR2xvYmFsSGlzdG9y
eSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFdpbkNFOjp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpzYXZlUGxhdGZv
cm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjp0cmFuc2l0aW9uVG9Db21taXR0
ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6dHJhbnNpdGlvblRvQ29tbWl0dGVk
Rm9yTmV3UGFnZSgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAgICBB
U1NFUlQocGFnZSk7Ci0KLSAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZSA9PSBwYWdlLT5t
YWluRnJhbWUoKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7Ci0KLSAgICBSZWZQdHI8RnJh
bWVWaWV3PiBmcmFtZVZpZXc7Ci0gICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAgICAgIFJFQ1Qg
cmVjdDsKLSAgICAgICAgbV93ZWJWaWV3LT5mcmFtZVJlY3QoJnJlY3QpOwotICAgICAgICBmcmFt
ZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSgqbV9mcmFtZSwgSW50UmVjdChyZWN0KS5zaXplKCkp
OwotICAgIH0gZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSgqbV9m
cmFtZSk7Ci0KLSAgICBtX2ZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7Ci0KLSAgICBpZiAobV9m
cmFtZS0+b3duZXJSZW5kZXJlcigpKQotICAgICAgICBtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCkt
PnNldFdpZGdldChmcmFtZVZpZXcpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6
OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5D
RTo6ZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKQotewotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V2luQ0U6OmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBGcmFtZUxvYWRlckNsaWVudFdp
bkNFOjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIEZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRTo6Y3JlYXRlKG1fZnJhbWUsIHVzZXJBZ2VudChVUkwoKSkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNmYTE3MzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRXaW5DRV9oCi0j
ZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRSA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVMb2FkZXJDbGllbnRXaW5DRShXZWJWaWV3Kik7Ci0gICAg
dmlydHVhbCB+RnJhbWVMb2FkZXJDbGllbnRXaW5DRSgpOwotICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZUxvYWRlckRlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAgV2ViVmlldyogd2ViVmlldygpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXco
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24o
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9y
Y2VMYXlvdXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25I
VE1MKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQyKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSBvdmVycmlkZTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
ICBpZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBp
bnQgbGVuZ3RoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRs
ZU9ubG9hZEV2ZW50cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBX
ZWJDb3JlOjpVUkwmLCBkb3VibGUsIGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFdlYkNvcmU6OlN0
cmluZ1dpdGhEaXJlY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpJY29uVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkTGF5b3V0KFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCBXZWJDb3JlOjpGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6
Ok5hdmlnYXRpb25BY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hT
aG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPiwgY29uc3Qg
V1RGOjpTdHJpbmcmIGZyYW1lTmFtZSwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4sIFdl
YkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxQb2xpY3lDaGVjaygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
VW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudChX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPikgb3ZlcnJpZGUgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkZvcm1TdGF0ZT4sIFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJv
cihXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZp
Y2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGltYXRl
Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJv
Z3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpVUkwmLCBj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kiwg
Y29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1h
cmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29u
c3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjcmVhdGVQbHVnaW4oV2ViQ29yZTo6V2lkZ2V0Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lk
Z2V0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBj
cmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpI
VE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFdlYkNvcmU6OlVSTCYgYmFzZVVSTCwgY29uc3QgV1RG
OjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mIHBhcmFtVmFsdWVzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5n
IG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbihib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6T2JqZWN0Q29udGVu
dFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RGOjpT
dHJpbmcmIG1pbWVUeXBlLCBib29sIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUgPSBTdHJpbmco
KSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRp
dGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBp
bnQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9i
YWxIaXN0b3J5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3Rv
cnlSZWRpcmVjdExpbmtzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEdvVG9I
aXN0b3J5SXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERl
dGVjdFhTUyhjb25zdCBXZWJDb3JlOjpVUkwmLCBib29sIGRpZEJsb2NrRW50aXJlUGFnZSkgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJy
b3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJy
b3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZv
clBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1F
VHlwZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRmFsbEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotCi0g
ICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlw
ZShjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBj
YW5TaG93TUlNRVR5cGVBc0hUTUwoY29uc3QgV1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3Qg
V1RGOjpTdHJpbmcmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGdl
bmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkQ29tcGxldGVkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0
ZW0qKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURv
Y3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlN1YnN0aXR1dGVEYXRhJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRpdGxl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdl
YkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURh
dGFUb0NhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3JlOjpD
YWNoZWRGcmFtZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21t
aXR0ZWRGb3JOZXdQYWdlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2F2ZVRv
UGFnZUNhY2hlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVGcm9tUGFn
ZUNhY2hlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVG
cmFtZXNldChib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2Uo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxv
YWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEZy
YW1lKFdlYkNvcmU6OkZyYW1lICpmcmFtZSkgeyBtX2ZyYW1lID0gZnJhbWU7IH0KLSAgICBXZWJD
b3JlOjpGcmFtZSAqZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAg
V2ViVmlldyogbV93ZWJWaWV3OwotICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwotICAgIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLQotICAgIC8vIFBsdWdpbiB2aWV3
IHRvIHJlZGlyZWN0IGRhdGEgdG8KLSAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZp
ZXc7Ci0gICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBGcmFtZUxvYWRlckNsaWVudFdpbkNFX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5n
Q29udGV4dFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJh
bWVOZXR3b3JraW5nQ29udGV4dFdpbkNFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjJiNmNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFdpbkNFLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlJlc291cmNlRXJyb3IuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OkZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQot
ICAgIDogRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkKLSAgICAsIG1fdXNlckFnZW50KHVz
ZXJBZ2VudCkKLXsKLX0KLQotU3RyaW5nIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRTo6dXNl
ckFnZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2VyQWdlbnQ7Ci19Ci0KLVN0cmluZyBG
cmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OnJlZmVycmVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZnJhbWUoKS0+bG9hZGVyKCkucmVmZXJyZXIoKTsKLX0KLQotV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0U6OmJsb2NrZWRFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTU3NzU1Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5DRS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0Vf
aAotI2RlZmluZSBGcmFtZU5ldHdvcmtpbmdDb250ZXh0V2luQ0VfaAotCi0jaW5jbHVkZSAiRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRnJh
bWVOZXR3b3JraW5nQ29udGV4dFdpbkNFIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHRXaW5DRT4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcmIHVzZXJBZ2VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJh
bWVOZXR3b3JraW5nQ29udGV4dFdpbkNFKGZyYW1lLCB1c2VyQWdlbnQpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIFdURjo6U3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgV1RGOjpTdHJpbmcgcmVmZXJyZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZyYW1lTmV0d29y
a2luZ0NvbnRleHRXaW5DRShXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiB1c2VyQWdlbnQpOwotCi0gICAgV1RGOjpTdHJpbmcgbV91c2VyQWdlbnQ7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEZyYW1lTmV0d29ya2luZ0NvbnRleHRXaW5D
RV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YTcwYjkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9n
YS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFdpbkNFLmgi
Ci0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUluc3BlY3RvckNsaWVudFdpbkNFOjpJbnNwZWN0
b3JDbGllbnRXaW5DRShXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV9pbnNwZWN0ZWRXZWJWaWV3
KHdlYlZpZXcpCi17Ci19Ci0KLUluc3BlY3RvckNsaWVudFdpbkNFOjp+SW5zcGVjdG9yQ2xpZW50
V2luQ0UoKQotewotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjppbnNwZWN0b3JEZXN0
cm95ZWQoKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCi1JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIEluc3BlY3RvckNsaWVudFdpbkNFOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpjbG9zZUluc3BlY3RvckZy
b250ZW5kKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudFdpbkNFOjpicmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXaW5DRTo6aGlnaGxpZ2h0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFdpbkNFOjpoaWRlSGln
aGxpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEluc3BlY3RvckNs
aWVudFdpbkNFOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDg2NDZkNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFdpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FA
cGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEluc3BlY3RvckNsaWVudFdpbkNFX2gKLSNkZWZpbmUgSW5zcGVjdG9y
Q2xpZW50V2luQ0VfaAotCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yRm9yd2FyZGluZy5oIgotCi1jbGFzcyBXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgSW5zcGVjdG9yQ2xpZW50V2luQ0UgOiBwdWJsaWMgV2ViQ29yZTo6SW5z
cGVjdG9yQ2xpZW50LCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIHsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnNwZWN0b3JDbGllbnRXaW5DRShXZWJWaWV3Kik7Ci0g
ICAgfkluc3BlY3RvckNsaWVudFdpbkNFKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9y
RGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbnNwZWN0b3JGcm9u
dGVuZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0K
LXByaXZhdGU6Ci0gICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRXaW5DRV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjUx
OTM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dh
LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0Uu
aCIKLQotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLCBwbGF0Zm9ybVN0cmF0ZWdp
ZXMsICgpKTsKLX0KLQotUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OlBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFKCkKLXsKLSAgICBzZXRQbGF0Zm9ybVN0cmF0ZWdpZXModGhpcyk7Ci19Ci0KLUNvb2tp
ZXNTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZUNvb2tpZXNTdHJhdGVn
eSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLURhdGFiYXNlU3RyYXRlZ3kqIFBsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFOjpjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4g
dGhpczsKLX0KLQotTG9hZGVyU3RyYXRlZ3kqIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjcmVh
dGVMb2FkZXJTdHJhdGVneSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVBhc3RlYm9hcmRT
dHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVn
eSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBsdWdpblN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6Y3JlYXRlUGx1Z2luU3RyYXRlZ3koKQotewotICAgIHJldHVybiB0aGlzOwot
fQotCi1TaGFyZWRXb3JrZXJTdHJhdGVneSogUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0
ZVNoYXJlZFdvcmtlclN0cmF0ZWd5KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotU3RvcmFn
ZVN0cmF0ZWd5KiBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y3JlYXRlU3RvcmFnZVN0cmF0ZWd5
KCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotVmlzaXRlZExpbmtTdHJhdGVneSogUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKQotewotICAgIHJl
dHVybiB0aGlzOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVz
Rm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBjb29raWVTdHJpbmcpCi17Ci0gICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00o
c2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOwotfQotCi1ib29sIFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24sIGZpcnN0UGFydHks
IHVybCk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBj
b25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBXZWJD
b3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1
cmwpOwotfQotCi1ib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRSYXdDb29raWVzKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCByYXdD
b29raWVzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQ29va2ll
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoc2Vz
c2lvbiwgdXJsLCBjb29raWVOYW1lKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6cmVmcmVzaFBsdWdpbnMoKQotewotICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVn
aW5zKCktPnJlZnJlc2goKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0
UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdpbkluZm8+JiBvdXRQbHVnaW5zKQot
ewotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7Ci0KLSAgICBvdXRQbHVnaW5zLnJl
c2l6ZShwbHVnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdp
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdp
bnNbaV07Ci0KLSAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5hbWUgPSBw
YWNrYWdlLT5uYW1lKCk7Ci0gICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7
Ci0gICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7Ci0KLSAgICAgICAg
Y29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdl
LT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKLQotICAgICAgICBpbmZvLm1pbWVzLnJlc2VydmVDYXBh
Y2l0eShtaW1lVG9EZXNjcmlwdGlvbnMuc2l6ZSgpKTsKLQotICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsK
LSAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgTWltZUNsYXNzSW5mbyBtaW1lOwotCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5
OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwot
Ci0gICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG91dFBsdWdpbnNbaV0gPSBpbmZvOwotICAgIH0KLX0KLQotYm9vbCBQbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRTo6aXNMaW5rVmlzaXRlZChQYWdlKiBwYWdlLCBMaW5rSGFzaCBoYXNoLCBjb25z
dCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmKQotewotICAgIHJldHVybiBwYWdlLT5ncm91cCgp
LmlzTGlua1Zpc2l0ZWQoaGFzaCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmFkZFZpc2l0ZWRMaW5rKFBhZ2UqIHBhZ2UsIExpbmtIYXNoIGhhc2gpCi17Ci0gICAgcGFnZS0+
Z3JvdXAoKS5hZGRWaXNpdGVkTGlua0hhc2goaGFzaCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmggYi9T
b3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNzllOWMuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRV9oCi0jZGVmaW5lIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFX2gKLQotI2lu
Y2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3RyYXRlZ3kuaCIK
LSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2ll
cy5oIgotI2luY2x1ZGUgIlBsdWdpblN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2Vy
U3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJWaXNp
dGVkTGlua1N0cmF0ZWd5LmgiCi0KLWNsYXNzIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFIDogcHVi
bGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVz
U3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6RGF0YWJhc2VTdHJhdGVneSwgcHJpdmF0ZSBXZWJD
b3JlOjpMb2FkZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSwgcHJp
dmF0ZSBXZWJDb3JlOjpTaGFyZWRXb3JrZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpTdG9y
YWdlU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi1wcml2YXRlOgotICAgIFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFKCk7Ci0KLSAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdp
ZXMKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0
cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpEYXRhYmFzZVN0cmF0ZWd5
KiBjcmVhdGVEYXRhYmFzZVN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0
ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3Jl
YXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNoYXJl
ZFdvcmtlclN0cmF0ZWd5KiBjcmVhdGVTaGFyZWRXb3JrZXJTdHJhdGVneSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RvcmFnZVN0cmF0ZWd5KiBjcmVhdGVTdG9yYWdlU3RyYXRl
Z3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRlZ3kq
IGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkNvcmU6
OkNvb2tpZXNTdHJhdGVneQotICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oY29uc3Qg
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29va2llc0Zyb21ET00oY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OlVSTCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViQ29yZTo6RGF0YWJhc2VTdHJhdGVneQotICAgIC8v
IC0gVXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQotICAgIC8vIFdlYkNvcmU6OlBsdWdp
blN0cmF0ZWd5Ci0gICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSosIFZlY3Rv
cjxXZWJDb3JlOjpQbHVnaW5JbmZvPiYpIG92ZXJyaWRlOwotCi0gICAgLy8gV2ViQ29yZTo6Vmlz
aXRlZExpbmtTdHJhdGVneQotICAgIHZpcnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKFdlYkNvcmU6
OlBhZ2UqLCBXZWJDb3JlOjpMaW5rSGFzaCwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV1RG
OjpBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRlZExp
bmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBvdmVycmlkZTsKLX07Ci0KLSNl
bmRpZiAvLyBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmZTAzOC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBw
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlICJDaHJvbWVDbGllbnRXaW5DRS5oIgotI2luY2x1
ZGUgIkNvbnRleHRNZW51Q2xpZW50V2luQ0UuaCIKLSNpbmNsdWRlICJEcmFnQ2xpZW50V2luQ0Uu
aCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxl
ci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JDbGllbnRXaW5DRS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJNYWluRnJh
bWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlZpZXdXaW5kb3dD
bGFzc05hbWUgPSBMIldlYlZpZXdXaW5kb3dDbGFzcyI7Ci0KLQotTFJFU1VMVCBDQUxMQkFDSyBX
ZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBpZiAoV2ViVmlldyogd2ViVmlldyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KEdldFdpbmRvd0xvbmcoaFduZCwgMCkpKQotICAgICAgICBy
ZXR1cm4gd2ViVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0K
LSAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VJbnRvQnVmZmVyKGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotCi1XZWJWaWV3OjpXZWJWaWV3KEhXTkQgaHduZCwgdW5zaWduZWQgZmVhdHVyZXMpCi0g
ICAgOiBtX2ZyYW1lKDApCi0gICAgLCBtX3BhZ2UoMCkKLSAgICAsIG1fcGFyZW50V2luZG93SGFu
ZGxlKGh3bmQpCi0gICAgLCBtX2VuYWJsZURvdWJsZUJ1ZmZlcihmZWF0dXJlcyAmIEVuYWJsZURv
dWJsZUJ1ZmZlcmluZykKLXsKLSAgICBSRUNUIHJjQ2xpZW50OwotICAgIEdldENsaWVudFJlY3Qo
aHduZCwgJnJjQ2xpZW50KTsKLQotICAgIG1fd2luZG93SGFuZGxlID0gQ3JlYXRlV2luZG93KGtX
ZWJWaWV3V2luZG93Q2xhc3NOYW1lLCAwLCBXU19DSElMRCwKLSAgICAgICAgQ1dfVVNFREVGQVVM
VCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgaHduZCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUo
KSwgMCk7Ci0KLSAgICBTZXRXaW5kb3dMb25nKG1fd2luZG93SGFuZGxlLCAwLCByZWludGVycHJl
dF9jYXN0PExPTkc+KHRoaXMpKTsKLQotICAgIE1vdmVXaW5kb3cobV93aW5kb3dIYW5kbGUsIDAs
IDAsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20sIFRSVUUpOwotICAgIFNob3dXaW5k
b3cobV93aW5kb3dIYW5kbGUsIFNXX1NIT1cpOwotCi0gICAgUGFnZTo6UGFnZUNsaWVudHMgcGFn
ZUNsaWVudHM7Ci0gICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gbmV3IFdlYktpdDo6Q2hy
b21lQ2xpZW50V2luQ0UodGhpcyk7Ci0gICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQg
PSBuZXcgV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudFdpbkNFKHRoaXMpOwotICAgIHBhZ2VDbGll
bnRzLmVkaXRvckNsaWVudCA9IG5ldyBXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFKHRoaXMpOwot
ICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBuZXcgV2ViS2l0OjpEcmFnQ2xpZW50V2luQ0Uo
KTsKLSAgICBwYWdlQ2xpZW50cy5pbnNwZWN0b3JDbGllbnQgPSBuZXcgV2ViS2l0OjpJbnNwZWN0
b3JDbGllbnRXaW5DRSh0aGlzKTsKLSAgICBtX3BhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7
Ci0KLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3BhZ2UtPnNldHRpbmdzKCk7Ci0gICAgc2V0
dGluZ3Muc2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLnNldERlZmF1
bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3Muc2V0TWluaW11bUZvbnRTaXplKDgpOwotICAg
IHNldHRpbmdzLnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoOCk7Ci0gICAgc2V0dGluZ3Muc2V0
U2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkodHJ1ZSk7Ci0KLSAgICBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UqIGxvYWRl
ckNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0UodGhpcyk7Ci0gICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUobV9wYWdlLCAwLCBsb2FkZXJDbGll
bnQpOwotICAgIG1fZnJhbWUgPSBmcmFtZS5nZXQoKTsKLSAgICBsb2FkZXJDbGllbnQtPnNldEZy
YW1lKG1fZnJhbWUpOwotCi0gICAgbV9wYWdlLT5tYWluRnJhbWUoKS5pbml0KCk7Ci0KLSAgICBp
ZiAodmlldygpKSB7Ci0gICAgICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICAgICAgZnJhbWVSZWN0
KCZ3aW5kb3dSZWN0KTsKLSAgICAgICAgdmlldygpLT5yZXNpemUoSW50UmVjdCh3aW5kb3dSZWN0
KS5zaXplKCkpOwotICAgIH0KLX0KLQotV2ViVmlldzo6fldlYlZpZXcoKQotewotICAgIGRlbGV0
ZSBtX3BhZ2U7Ci0gICAgRGVzdHJveVdpbmRvdyhtX3dpbmRvd0hhbmRsZSk7Ci19Ci0KLXZvaWQg
V2ViVmlldzo6aW5pdGlhbGl6ZShISU5TVEFOQ0UgaW5zdGFuY2VIYW5kbGUpCi17Ci0gICAgSlND
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OwotICAgIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjppbml0aWFsaXplKCk7Ci0KLSAgICBXZWJD
b3JlOjpzZXRJbnN0YW5jZUhhbmRsZShpbnN0YW5jZUhhbmRsZSk7Ci0KLSAgICBXTkRDTEFTUyB3
YzsKLSAgICB3Yy5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2MubHBmblduZFBy
b2MgICAgPSBXZWJWaWV3Ojp3ZWJWaWV3V25kUHJvYzsKLSAgICB3Yy5jYkNsc0V4dHJhICAgICA9
IDA7Ci0gICAgd2MuY2JXbmRFeHRyYSAgICAgPSBzaXplb2Yodm9pZCAqKTsKLSAgICB3Yy5oSW5z
dGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlOwotICAgIHdjLmhJY29uICAgICAgICAgID0gMDsK
LSAgICB3Yy5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3
Yy5oYnJCYWNrZ3JvdW5kICA9IDA7Ci0gICAgd2MubHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdj
Lmxwc3pDbGFzc05hbWUgID0ga1dlYlZpZXdXaW5kb3dDbGFzc05hbWU7Ci0KLSAgICBSZWdpc3Rl
ckNsYXNzKCZ3Yyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYW51cCgpCi17Ci0gICAgVW5yZWdp
c3RlckNsYXNzKGtXZWJWaWV3V2luZG93Q2xhc3NOYW1lLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRs
ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxGcmFtZT4gV2ViVmlldzo6Y3JlYXRlRnJhbWUoY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsCi0gICAgYm9vbCAvKmFsbG93c1Njcm9s
bGluZyovLCBpbnQgLyptYXJnaW5XaWR0aCovLCBpbnQgLyptYXJnaW5IZWlnaHQqLywgRnJhbWUq
IHBhcmVudEZyYW1lKQotewotICAgIFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRSAqbG9h
ZGVyQ2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRSh0aGlzKTsKLSAg
ICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZSwgb3duZXJF
bGVtZW50LCBsb2FkZXJDbGllbnQpOwotICAgIGxvYWRlckNsaWVudC0+c2V0RnJhbWUoY2hpbGRG
cmFtZS5nZXQoKSk7Ci0KLSAgICBwYXJlbnRGcmFtZS0+dHJlZSgpLmFwcGVuZENoaWxkKGNoaWxk
RnJhbWUpOwotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS5zZXROYW1lKG5hbWUpOwotICAgIGNoaWxk
RnJhbWUtPmluaXQoKTsKLQotICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhh
dmUgcnVuIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBwYWdl
IGFscmVhZHkuCi0gICAgaWYgKCFjaGlsZEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmws
IHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsKLQotICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9h
ZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAgaWYg
KCFjaGlsZEZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnJ1bkphdmFT
Y3JpcHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotYm9vbCBXZWJWaWV3OjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgV2ViVmlldzo6cnVuSmF2YVNjcmlwdFByb21wdChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpm
cmFtZVJlY3QoUkVDVCogcmVjdCkgY29uc3QKLXsKLSAgICBHZXRXaW5kb3dSZWN0KG1fd2luZG93
SGFuZGxlLCByZWN0KTsKLX0KLQotRnJhbWVWaWV3KiBXZWJWaWV3Ojp2aWV3KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnZpZXcoKSA6IDA7Ci19Ci0KLXZvaWQgV2Vi
Vmlldzo6bG9hZChMUENXU1RSIHVybCkKLXsKLSAgICBsb2FkKFN0cmluZyh1cmwpKTsKLX0KLQot
dm9pZCBXZWJWaWV3Ojpsb2FkKGNvbnN0IFN0cmluZyAmdXJsKQotewotICAgIGxvYWQoV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0KHVybCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmxvYWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0ICZyZXF1ZXN0KQotewotICAgIGZyYW1lKCktPmxvYWRl
cigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdChmcmFtZSgpLCByZXF1ZXN0KSk7Ci19Ci0KLXZvaWQg
V2ViVmlldzo6cmVsb2FkKCkKLXsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS5yZWxvYWQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpzdG9wKCkKLXsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS5zdG9wQWxs
TG9hZGVycygpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBoREMsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdmlldygpOwotICAg
IGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNsaXBSZ24gPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCks
IGNsaXBSZWN0Lm1heFgoKSwgY2xpcFJlY3QubWF4WSgpKSk7Ci0gICAgU2VsZWN0Q2xpcFJnbiho
REMsIGNsaXBSZ24uZ2V0KCkpOwotCi0gICAgZnJhbWVWaWV3LT51cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoaERDKTsKLSAg
ICBmcmFtZVZpZXctPnBhaW50KCZnYywgY2xpcFJlY3QpOwotfQotCi1ib29sIFdlYlZpZXc6Omhh
bmRsZVBhaW50KEhXTkQgaFduZCkKLXsKLSAgICBSRUNUIHVwZGF0ZVJlY3Q7Ci0gICAgaWYgKCFH
ZXRVcGRhdGVSZWN0KGhXbmQsICZ1cGRhdGVSZWN0LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFBBSU5UU1RSVUNUIHBzOwotICAgIEhEQyBoREMgPSBCZWdpblBhaW50KG1f
d2luZG93SGFuZGxlLCAmcHMpOwotCi0gICAgSW50UmVjdCBjbGlwUmVjdCh1cGRhdGVSZWN0KTsK
LQotICAgIGlmIChtX2VuYWJsZURvdWJsZUJ1ZmZlcikgewotICAgICAgICBpZiAoIW1fZG91Ymxl
QnVmZmVyREMpIHsKLSAgICAgICAgICAgIFJFQ1QgcmNDbGllbnQ7Ci0gICAgICAgICAgICBHZXRD
bGllbnRSZWN0KG1fd2luZG93SGFuZGxlLCAmcmNDbGllbnQpOwotCi0gICAgICAgICAgICBtX2Rv
dWJsZUJ1ZmZlckRDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoaERDKSk7
Ci0gICAgICAgICAgICBtX2RvdWJsZUJ1ZmZlckJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlQ29tcGF0aWJsZUJpdG1hcChoREMsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20p
KTsKLSAgICAgICAgICAgIFNlbGVjdE9iamVjdChtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBtX2Rv
dWJsZUJ1ZmZlckJpdG1hcC5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYWludChtX2Rv
dWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVjdCk7Ci0KLSAgICAgICAgQml0Qmx0KGhEQywgY2xp
cFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdo
dCgpLCBtX2RvdWJsZUJ1ZmZlckRDLmdldCgpLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwg
U1JDQ09QWSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhaW50KGhEQywgY2xpcFJlY3QpOwotCi0g
ICAgRW5kUGFpbnQobV93aW5kb3dIYW5kbGUsICZwcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzdGF0aWMgTE9ORyBnbG9iYWxD
bGlja0NvdW50OwotICAgIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQcmV2UG9pbnQ7Ci0gICAgc3Rh
dGljIE1vdXNlQnV0dG9uIGdsb2JhbFByZXZCdXR0b247Ci0gICAgc3RhdGljIExPTkcgZ2xvYmFs
UHJldk1vdXNlRG93blRpbWU7Ci0KLSAgICAvLyBDcmVhdGUgb3VyIGV2ZW50LgotICAgIC8vIE9u
IFdNX01PVVNFTEVBVkUgd2UgbmVlZCB0byBjcmVhdGUgYSBtb3VzZW91dCBldmVudCwgc28gd2Ug
Zm9yY2UgdGhlIHBvc2l0aW9uCi0gICAgLy8gb2YgdGhlIGV2ZW50IHRvIGJlIGF0IChNSU5TSE9S
VCwgTUlOU0hPUlQpLgotICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50KGhXbmQsIG1l
c3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIGJvb2wgaW5zaWRlVGhyZXNob2xkID0gYWJz
KGdsb2JhbFByZXZQb2ludC54KCkgLSBtb3VzZUV2ZW50LnBvc2l0aW9uKCkueCgpKSA8IDo6R2V0
U3lzdGVtTWV0cmljcyhTTV9DWERPVUJMRUNMSykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGFicyhnbG9iYWxQcmV2UG9pbnQueSgpIC0gbW91c2VFdmVudC5wb3NpdGlvbigpLnkoKSkg
PCA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1lET1VCTEVDTEspOwotICAgIExPTkcgbWVzc2FnZVRp
bWUgPSAwOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKG1lc3NhZ2UgPT0g
V01fTEJVVFRPTkRPV04gfHwgbWVzc2FnZSA9PSBXTV9NQlVUVE9ORE9XTiB8fCBtZXNzYWdlID09
IFdNX1JCVVRUT05ET1dOKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IHN1cmUgaWYgdGhp
cyBpcyB0aGUgInJpZ2h0IiB3YXkgdG8gZG8gdGhpcwotICAgICAgICAvLyBidXQgd2l0aG91dCB0
aGlzIGNhbGwsIHdlIG5ldmVyIGJlY29tZSBmb2N1c2VkIHNpbmNlIHdlIGRvbid0IGFsbG93Ci0g
ICAgICAgIC8vIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIG1vdXNlIGV2ZW50cy4KLSAgICAgICAg
U2V0Rm9jdXMobV93aW5kb3dIYW5kbGUpOwotCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBt
b3ZlRXZlbnQoaFduZCwgV01fTU9VU0VNT1ZFLCAwLCBsUGFyYW0sIGZhbHNlKTsKLSAgICAgICAg
bW92ZUV2ZW50LnNldENsaWNrQ291bnQoMCk7Ci0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQobW92ZUV2ZW50KTsKLQotICAgICAg
ICAvLyBBbHdheXMgc3RhcnQgY2FwdHVyaW5nIGV2ZW50cyB3aGVuIHRoZSBtb3VzZSBnb2VzIGRv
d24gaW4gb3VyIEhXTkQuCi0gICAgICAgIFNldENhcHR1cmUobV93aW5kb3dIYW5kbGUpOwotCi0g
ICAgICAgIGlmIChpbnNpZGVUaHJlc2hvbGQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9PSBnbG9i
YWxQcmV2QnV0dG9uKQotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCsrOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgY2xpY2sgY291bnQuCi0gICAgICAgICAgICBn
bG9iYWxDbGlja0NvdW50ID0gMTsKLSAgICAgICAgZ2xvYmFsUHJldk1vdXNlRG93blRpbWUgPSBt
ZXNzYWdlVGltZTsKLSAgICAgICAgZ2xvYmFsUHJldkJ1dHRvbiA9IG1vdXNlRXZlbnQuYnV0dG9u
KCk7Ci0gICAgICAgIGdsb2JhbFByZXZQb2ludCA9IG1vdXNlRXZlbnQucG9zaXRpb24oKTsKLQot
ICAgICAgICBtb3VzZUV2ZW50LnNldENsaWNrQ291bnQoZ2xvYmFsQ2xpY2tDb3VudCk7Ci0gICAg
ICAgIGhhbmRsZWQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhhbmRsZU1v
dXNlUHJlc3NFdmVudChtb3VzZUV2ZW50KTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgPT0gV01f
TEJVVFRPTkRCTENMSyB8fCBtZXNzYWdlID09IFdNX01CVVRUT05EQkxDTEsgfHwgbWVzc2FnZSA9
PSBXTV9SQlVUVE9OREJMQ0xLKSB7Ci0gICAgICAgIGdsb2JhbENsaWNrQ291bnQrKzsKLSAgICAg
ICAgbW91c2VFdmVudC5zZXRDbGlja0NvdW50KGdsb2JhbENsaWNrQ291bnQpOwotICAgICAgICBo
YW5kbGVkID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZVBy
ZXNzRXZlbnQobW91c2VFdmVudCk7Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlID09IFdNX0xCVVRU
T05VUCB8fCBtZXNzYWdlID09IFdNX01CVVRUT05VUCB8fCBtZXNzYWdlID09IFdNX1JCVVRUT05V
UCkgewotICAgICAgICAvLyBSZWNvcmQgdGhlIGdsb2JhbCBwb3NpdGlvbiBhbmQgdGhlIGJ1dHRv
biBvZiB0aGUgdXAuCi0gICAgICAgIGdsb2JhbFByZXZCdXR0b24gPSBtb3VzZUV2ZW50LmJ1dHRv
bigpOwotICAgICAgICBnbG9iYWxQcmV2UG9pbnQgPSBtb3VzZUV2ZW50LnBvc2l0aW9uKCk7Ci0g
ICAgICAgIG1vdXNlRXZlbnQuc2V0Q2xpY2tDb3VudChnbG9iYWxDbGlja0NvdW50KTsKLSAgICAg
ICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChtb3VzZUV2ZW50KTsKLSAgICAgICAgUmVsZWFzZUNhcHR1cmUoKTsKLSAgICB9IGVsc2Ug
aWYgKG1lc3NhZ2UgPT0gV01fTU9VU0VNT1ZFKSB7Ci0gICAgICAgIGlmICghaW5zaWRlVGhyZXNo
b2xkKQotICAgICAgICAgICAgZ2xvYmFsQ2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIG1vdXNlRXZl
bnQuc2V0Q2xpY2tDb3VudChnbG9iYWxDbGlja0NvdW50KTsKLSAgICAgICAgaGFuZGxlZCA9IG1f
cGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91c2VNb3ZlZChtb3VzZUV2ZW50KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVN
b3VzZVdoZWVsKEhXTkQgaFduZCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCBp
c0hvcml6b250YWwpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoaFduZCwg
d1BhcmFtLCBsUGFyYW0sIGlzSG9yaXpvbnRhbCk7Ci0gICAgcmV0dXJuIGZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci19Ci0KLWJvb2wgV2ViVmll
dzo6aGFuZGxlS2V5RG93bihXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRhLCBi
b29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgdmlydHVhbEtleUNvZGUsIGtleURhdGEsIFBs
YXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIHN5c3RlbUtleURvd24pOwotICAgIGJvb2wgaGFuZGxl
ZCA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGtleUV2ZW50KTsKLQotICAgIC8vIFRo
ZXNlIGV2ZW50cyBjYW5ub3QgYmUgY2FuY2VsZWQsIGFuZCB3ZSBoYXZlIG5vIGRlZmF1bHQgaGFu
ZGxpbmcgZm9yIHRoZW0uCi0gICAgLy8gRklYTUU6IG1hdGNoIElFIGxpc3QgbW9yZSBjbG9zZWx5
LCBzZWUgPGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY5Mzgu
YXNweD4uCi0gICAgaWYgKHN5c3RlbUtleURvd24gJiYgdmlydHVhbEtleUNvZGUgIT0gVktfUkVU
VVJOKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFuZGxlZCkgewotICAgICAg
ICBNU0cgbXNnOwotICAgICAgICBpZiAoIXN5c3RlbUtleURvd24pCi0gICAgICAgICAgICA6OlBl
ZWtNZXNzYWdlKCZtc2csIG1fd2luZG93SGFuZGxlLCBXTV9DSEFSLCBXTV9DSEFSLCBQTV9SRU1P
VkUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlZDsK
LX0KLQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlQcmVzcyhXUEFSQU0gY2hhckNvZGUsIExQQVJB
TSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgY2hhckNvZGUsIGtleURh
dGEsIFBsYXRmb3JtRXZlbnQ6OkNoYXIsIHN5c3RlbUtleURvd24pOwotICAgIC8vIElFIGRvZXMg
bm90IGRpc3BhdGNoIGtleXByZXNzIGV2ZW50IGZvciBXTV9TWVNDSEFSLgotICAgIGlmIChzeXN0
ZW1LZXlEb3duKQotICAgICAgICByZXR1cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlQWNj
ZXNzS2V5KGtleUV2ZW50KTsKLSAgICBpZiAoZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQo
a2V5RXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBXZWJWaWV3OjpoYW5kbGVLZXlVcChXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJB
TSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCi17Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50IGtleUV2ZW50KG1fd2luZG93SGFuZGxlLCB2aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwgUGxh
dGZvcm1FdmVudDo6S2V5VXAsIHN5c3RlbUtleURvd24pOwotCi0gICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICByZXR1
cm4gZnJhbWUuZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoa2V5RXZlbnQpOwotfQotCi1MUkVTVUxU
IFdlYlZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCi17Ci0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICBpZiAo
dmlldygpKSB7Ci0gICAgICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgICAgICBjYXNlIFdNX1BB
SU5UOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZVBhaW50KGhXbmQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0gICAgICAgIGNhc2UgV01f
TEJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046Ci0gICAgICAgIGNhc2Ug
V01fUkJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoKLSAgICAgICAg
Y2FzZSBXTV9NQlVUVE9OREJMQ0xLOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6Ci0g
ICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAg
ICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICBpZiAodmlldygpLT5kaWRGaXJz
dExheW91dCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVNb3VzZUV2ZW50KGhX
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKLSAgICAgICAgICAgIGlmICh2aWV3KCktPmRpZEZpcnN0
TGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZU1vdXNlV2hlZWwoaFdu
ZCwgd1BhcmFtLCBsUGFyYW0sIHdQYXJhbSAmIE1LX1NISUZUKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBo
YW5kbGVLZXlEb3duKHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgV01fS0VZRE9XTjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVL
ZXlEb3duKHdQYXJhbSwgbFBhcmFtLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUtleVVw
KHdQYXJhbSwgbFBhcmFtLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgV01fS0VZVVA6Ci0gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5VXAod1BhcmFtLCBs
UGFyYW0sIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fU1lT
Q0hBUjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSBoYW5kbGVLZXlQcmVzcyh3UGFyYW0sIGxQYXJh
bSwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX0NIQVI6Ci0g
ICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlS2V5UHJlc3Mod1BhcmFtLCBsUGFyYW0sIGZhbHNl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAg
ICAgICBQb3N0TWVzc2FnZShtX3BhcmVudFdpbmRvd0hhbmRsZSwgV01fQ0xPU0UsIHdQYXJhbSwg
bFBhcmFtKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGhhbmRsZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIERl
ZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dl
YlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkNjk2Ni4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdfaAotI2RlZmluZSBXZWJWaWV3X2gKLQotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLWNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJh
bWU7Ci1jbGFzcyBQYWdlOwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgSFRNTEZyYW1lT3duZXJF
bGVtZW50OwotY2xhc3MgVVJMOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotfQotCi1jbGFzcyBX
ZWJWaWV3IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZlYXR1cmVzIHsKLSAgICAgICAgTm9GZWF0dXJl
ID0gMCwKLSAgICAgICAgRW5hYmxlRG91YmxlQnVmZmVyaW5nID0gMSA8PCAwCi0gICAgfTsKLQot
ICAgIFdlYlZpZXcoSFdORCBod25kLCB1bnNpZ25lZCBmZWF0dXJlcyA9IEVuYWJsZURvdWJsZUJ1
ZmZlcmluZyk7Ci0gICAgfldlYlZpZXcoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUo
SElOU1RBTkNFIGluc3RhbmNlSGFuZGxlKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7Ci0K
LSAgICBIV05EIHdpbmRvd0hhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93SGFuZGxlOyB9
Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQot
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KLSAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKLQotICAgIHZvaWQgbG9hZChMUENXU1RS
IHVybCk7Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFdURjo6U3RyaW5nICZ1cmwpOwotICAgIHZvaWQg
bG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgJnJlcXVlc3QpOwotICAgIHZvaWQg
cmVsb2FkKCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICB2b2lkIGZyYW1lUmVjdChSRUNUKiBy
ZWN0KSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNyZWF0ZUZyYW1l
KGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpI
VE1MRnJhbWVPd25lckVsZW1lbnQqLCAKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVy
cmVyLCBib29sIGFsbG93U2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWln
aHQsIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IERp
YWxvZwotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFdURjo6U3RyaW5nJiBtZXNz
YWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFdURjo6U3RyaW5nJiBt
ZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgV1RGOjpTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiBy
ZXN1bHQpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHdlYlZpZXdX
bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
cmFtKTsKLSAgICBMUkVTVUxUIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwot
Ci0gICAgYm9vbCBoYW5kbGVQYWludChIV05EIGhXbmQpOwotICAgIGJvb2wgaGFuZGxlTW91c2VF
dmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSk7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVdoZWVsKEhXTkQgaFduZCwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSwgYm9vbCBpc0hvcml6b250YWwpOwotICAgIGJvb2wgaGFuZGxlS2V5RG93
bihXUEFSQU0gdmlydHVhbEtleUNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURv
d24pOwotICAgIGJvb2wgaGFuZGxlS2V5UHJlc3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5
RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKTsKLSAgICBib29sIGhhbmRsZUtleVVwKFdQQVJBTSB2
aXJ0dWFsS2V5Q29kZSwgTFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bik7Ci0KLSAg
ICB2b2lkIHBhaW50KEhEQyBoREMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
LQotICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwotICAgIFdlYkNvcmU6OlBhZ2UqIG1fcGFn
ZTsKLSAgICBIV05EIG1fcGFyZW50V2luZG93SGFuZGxlOwotICAgIEhXTkQgbV93aW5kb3dIYW5k
bGU7Ci0gICAgYm9vbCBtX2VuYWJsZURvdWJsZUJ1ZmZlcjsKLSAgICBHRElPYmplY3Q8SERDPiBt
X2RvdWJsZUJ1ZmZlckRDOwotICAgIEdESU9iamVjdDxIQklUTUFQPiBtX2RvdWJsZUJ1ZmZlckJp
dG1hcDsKLX07Ci0KLSNlbmRpZiAvLyBXZWJWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zV2luQ0UuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNFLmNtYWtlCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3YTQ4Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zV2luQ0UuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBA
Ci1pbmNsdWRlKE9wdGlvbnNXaW5kb3dzKQotCi1zZXQoUE9SVF9GQUxMQkFDSyBXaW4pCi0KLWFk
ZF9kZWZpbml0aW9ucygtRF9DRV9DUlRfQUxMT1dfV0lOX01JTk1BWCkKLWFkZF9kZWZpbml0aW9u
cygtRFdURl9VU0VfRVhQT1JUX01BQ1JPUz0wKQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9X
SU5HREk9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfV0lOSU5FVD0xKQotYWRkX2RlZmlu
aXRpb25zKC1EV0lOQ0VCQVNJQykKLWFkZF9kZWZpbml0aW9ucygtREpTX05PX0VYUE9SVCkKLWFk
ZF9kZWZpbml0aW9ucygtREhBVkVfQUNDRVNTSUJJTElUWT0wKQotYWRkX2RlZmluaXRpb25zKC1E
SlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT049MHgyMDAwMDApCi0KLWlmIChOT1Qg
M1JEUEFSVFlfRElSKQotICAgIGlmIChFWElTVFMgJEVOVntXRUJLSVRUSElSRFBBUlRZRElSfSkK
LSAgICAgICAgc2V0KDNSRFBBUlRZX0RJUiAkRU5We1dFQktJVFRISVJEUEFSVFlESVJ9KQotICAg
IGVsc2UgKCkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiWW91IG11c3QgcHJvdmlkZSBh
IHRoaXJkIHBhcnR5IGRpcmVjdG9yeSBmb3IgV2luQ0UgcG9ydC4iKQotICAgIGVuZGlmICgpCi1l
bmRpZiAoKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7M1JEUEFSVFlfRElSfS9jZS1jb21wYXQp
Ci1hZGRfc3ViZGlyZWN0b3J5KCR7M1JEUEFSVFlfRElSfSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFS
WV9ESVJ9LzNyZHBhcnR5IikKLQotV0VCS0lUX09QVElPTl9CRUdJTigpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQT1JUIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVFBESVIgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOU1BFQ1RPUiBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBPTikKLVdFQktJVF9PUFRJT05fRU5E
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvV2ViS2l0UGFja2FnaW5nLmNtYWtlCmluZGV4IDVmOWIzMTguLjk2OWRjMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGlmIChOT1Qg
REVGSU5FRCBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTKQogICAgICAgICAgICAgIi9xdC8iICIv
UXQvIiAicXRcXFxcLiIgIlF0XFxcXC4iCiAgICAgICAgICAgICAiL3F0NC8iICIvUXQ0LyIgInF0
NFxcXFwuIiAiUXQ0XFxcXC4iCiAgICAgICAgICAgICAiL3dpbi8iICIvV2luLyIgIndpblxcXFwu
IiAiV2luXFxcXC4iCi0gICAgICAgICAgICAiL3dpbmNlLyIgIi9XaW5jZS8iICJ3aW5jZVxcXFwu
IiAiV2luY2VcXFxcLiIKICAgICAgICAgICAgICIvd3hjb2RlLyIgIi9XeGNvZGUvIiAid3hjb2Rl
XFxcXC4iICJXeGNvZGVcXFxcLiIKICAgICAgICAgICAgICIvV2ViS2l0TGlicmFyaWVzLyIKICAg
ICAgICAgICAgICIvRW5nbGlzaFxcXFwubHByb2ovIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5weSBiL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQucHkKaW5kZXgg
NDQxZmExOS4uZDNjYTkxYiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvd2tidWlsZC5weQorKysgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkLnB5CkBAIC01MSw3ICs1MSw2IEBA
IGRlZiBfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJnZXRfcGxhdGZvcm0sIGZpbGUpOgog
ICAgICAgICAoIm9wZW5nbCIsIFtdKSwKICAgICAgICAgKCJvcGVudHlwZSIsIFtdKSwKICAgICAg
ICAgKCJvcGVudmciLCBbXSksCi0gICAgICAgICgid2luY2UiLCBbXSksCiAgICAgICAgICgid3gi
LCBbXSksCiAKICAgICAgICAgIyBEaXJlY3RvcmllcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGJ1aWxk
cyBvbiBvbmx5IHNvbWUgYm90cy4KQEAgLTg0LDcgKzgzLDYgQEAgZGVmIF9zaG91bGRfZmlsZV90
cmlnZ2VyX2J1aWxkKHRhcmdldF9wbGF0Zm9ybSwgZmlsZSk6CiAgICAgICAgIChyIi9MSUNFTlNF
W14vXSskIiwgW10pLAogICAgICAgICAociJBUk0oPzp2Nyk/XC4oPzpjcHB8aCkkIiwgW10pLAog
ICAgICAgICAociJNSVBTXC4oPzpjcHB8aCkkIiwgW10pLAotICAgICAgICAociJXaW5DRVwuKD86
Y3BwfGh8bW0pJCIsIFtdKSwKICAgICAgICAgKHIiXC4oPzpia2x8bWspJCIsIFtdKSwKIAogICAg
ICAgICAjIFBhdHRlcm5zIHRoYXQgc2hvdWxkIHRyaWdnZXIgYnVpbGRzIG9uIG9ubHkgc29tZSBi
b3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGRfdW5pdHRlc3QucHkKaW5kZXggNTI2M2QzYy4u
OTk4NzdjNyAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weQorKysgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy93a2J1aWxkX3VuaXR0ZXN0LnB5CkBAIC00OSw3
ICs0OSw2IEBAIGNsYXNzIFNob3VsZEJ1aWxkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIChbIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9mb28iXSwgWyJtYWMt
bGVvcGFyZCIsICJtYWMtbGlvbiIsICAibWFjLW1vdW50YWlubGlvbiIsICJtYWMtc25vd2xlb3Bh
cmQiXSksCiAgICAgICAgIChbIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4v
Zm9vIl0sIFtdKSwKICAgICAgICAgKFsiU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tIiwgIlNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIl0s
IFsibWFjLWxlb3BhcmQiLCAibWFjLWxpb24iLCAgIm1hYy1tb3VudGFpbmxpb24iLCAibWFjLXNu
b3dsZW9wYXJkIl0pLAotICAgICAgICAoWyJTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW5DRS5oIl0sIFtdKSwKICAgICAgICAgKFsiVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvTGVha3NWaWV3ZXIvTGVha3NWaWV3
ZXIuanMiXSwgW10pLAogICAgIF0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ01ha2VMaXN0cy50eHQg
Yi9Ub29scy9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2ZiMDk2Li40ZDRkNTk3IDEwMDY0NAotLS0g
YS9Ub29scy9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9DTWFrZUxpc3RzLnR4dApAQCAtMTYs
OCArMTYsNiBAQCBlbHNlaWYgKCIke1BPUlR9IiBTVFJFUVVBTCAiR1RLIikKICAgICBpZiAoRU5B
QkxFX1gxMV9UQVJHRVQpCiAgICAgICAgIGFkZF9zdWJkaXJlY3RvcnkoRHVtcFJlbmRlclRyZWUv
VGVzdE5ldHNjYXBlUGx1Z0luKQogICAgIGVuZGlmICgpCi1lbHNlaWYgKCIke1BPUlR9IiBTVFJF
UVVBTCAiV2luQ0UiKQotICAgIGFkZF9zdWJkaXJlY3RvcnkoV2luQ0VMYXVuY2hlcikKIGVuZGlm
ICgpCiAKIGlmIChFTkFCTEVfV0VCS0lUMiBBTkQgRU5BQkxFX0FQSV9URVNUUykKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YjIzOTkzLi4wMmFk
MGUwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTQtMDktMjQgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgV2luQ0UgcG9ydCBmcm9tIHRydW5rCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3drYnVpbGQucHk6CisgICAgICAgIChfc2hvdWxk
X2ZpbGVfdHJpZ2dlcl9idWlsZCk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvd2tidWlsZF91bml0dGVzdC5weToKKyAgICAgICAgKFNob3VsZEJ1
aWxkVGVzdCk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29w
eU1lZGl1bSk6CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0ZGly
cy5wbToKKyAgICAgICAgKGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoYnVp
bHREeWxpYlBhdGhGb3JOYW1lKToKKyAgICAgICAgKGlzQXBwbGVXaW5XZWJLaXQpOgorICAgICAg
ICAobGF1bmNoZXJQYXRoKToKKyAgICAgICAgKGxhdW5jaGVyTmFtZSk6CisgICAgICAgIChzaG91
bGRSZW1vdmVDTWFrZUNhY2hlKToKKyAgICAgICAgKGNtYWtlQmFzZWRQb3J0QXJndW1lbnRzKToK
KyAgICAgICAgKGNtYWtlQmFzZWRQb3J0TmFtZSk6CisgICAgICAgIChpc0NNYWtlQnVpbGQpOgor
ICAgICAgICAoaXNXaW5DRSk6IERlbGV0ZWQuCisgICAgICAgIChkZXRlcm1pbmVJc1dpbkNFKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHk6CisgICAgICAg
ICh0ZXN0X2FwYWNoZV9jb25maWdfZmlsZV9uYW1lX2Zvcl9wbGF0Zm9ybSk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb25maWcuaDoKKyAgICAgICAgKiBXaW5DRUxhdW5jaGVyL0NNYWtlTGlz
dHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIFdpbkNFTGF1bmNoZXIvbWFpbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogZ3RrL21hbmlmZXN0LnR4dDoKKwogMjAxNC0wOS0yMyAgUm9nZXIgRm9u
ZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5kb3dzXSBNb3JlIGRlYnVn
Z2luZyBmb3IgdGhlIFdpbmRvd3MgYm90cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlRE
YXRhT2JqZWN0LmNwcAppbmRleCBhMzMwMzZiLi4yMzVkNDg5IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCkBAIC0yNjksNyArMjY5LDYgQEAgU1RETUVUSE9E
SU1QIERSVERhdGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjLCBTVEdNRURJ
VU0qIHBtZWRpdW0sIEIKIHZvaWQgRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0q
IHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKIHsKICAg
ICBzd2l0Y2ggKHBNZWRTcmMtPnR5bWVkKSB7Ci0jaWYgIU9TKFdJTkNFKQogICAgIGNhc2UgVFlN
RURfSEdMT0JBTDoKICAgICAgICAgcE1lZERlc3QtPmhHbG9iYWwgPSBzdGF0aWNfY2FzdDxIR0xP
QkFMPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhHbG9iYWwsIHBGbXRTcmMtPmNmRm9ybWF0
LCAwKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjg1LDcgKzI4NCw2IEBAIHZvaWQgRFJURGF0YU9i
amVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMs
IEZPUk1BVEVUCiAgICAgY2FzZSBUWU1FRF9GSUxFOgogICAgICAgICBwTWVkU3JjLT5scHN6Rmls
ZU5hbWUgPSBzdGF0aWNfY2FzdDxMUE9MRVNUUj4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5s
cHN6RmlsZU5hbWUsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CiAgICAgICAgIGJyZWFrOwotI2Vu
ZGlmCiAgICAgY2FzZSBUWU1FRF9JU1RSRUFNOgogICAgICAgICBwTWVkRGVzdC0+cHN0bSA9IHBN
ZWRTcmMtPnBzdG07CiAgICAgICAgIHBNZWRTcmMtPnBzdG0tPkFkZFJlZigpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dAppbmRleCA0NTdhN2UwLi5iZjJjNzI5IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtOTYsNyArOTYsNiBA
QCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxk
IHN5c3RlbV0KICAgLS1lZmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBF
RkwgcG9ydAogICAtLWd0ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIEdU
SysgcG9ydAogICAtLXdpbmNhaXJvICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdXNpbmcg
Q2Fpcm8gKHJhdGhlciB0aGFuIENvcmVHcmFwaGljcykgb24gV2luZG93cwotICAtLXdpbmNlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIFdpbkNFIHBvcnQKIAogICAtLWluc3Bl
Y3Rvci1mcm9udGVuZCAgICAgICAgICAgICAgQ29weSBXZWIgSW5zcGVjdG9yIHVzZXIgaW50ZXJm
YWNlIHJlc291cmNlcyB0byB0aGUgYnVpbGQgZGlyZWN0b3J5CiAKQEAgLTIzMCwxMSArMjI5LDkg
QEAgaWYgKGlzSW5zcGVjdG9yRnJvbnRlbmQoKSkgewogaWYgKGlzQ01ha2VCdWlsZCgpKSB7CiAK
ICAgICAjIEJ5IGRlZmF1bHQgd2UgYnVpbGQgdXNpbmcgYWxsIG9mIHRoZSBhdmFpbGFibGUgQ1BV
cy4KLSAgICBpZiAoIWlzV2luQ0UoKSkgewotICAgICAgICAkbWFrZUFyZ3MgLj0gKCRtYWtlQXJn
cyA/ICIgIiA6ICIiKSAuICItaiIgLiBudW1iZXJPZkNQVXMoKSBpZiAkbWFrZUFyZ3MgIX4gLy1q
XHMqXGQrLzsKLSAgICAgICAgbXkgJG1heENQVUxvYWQgPSBtYXhDUFVMb2FkKCkgaWYgJG1ha2VB
cmdzICF+IC8tbFxzKlxkK1wuP1xkKi87Ci0gICAgICAgICRtYWtlQXJncyAuPSAiIC1sIiAuIG1h
eENQVUxvYWQoKSBpZiBkZWZpbmVkICRtYXhDUFVMb2FkOwotICAgIH0KKyAgICAkbWFrZUFyZ3Mg
Lj0gKCRtYWtlQXJncyA/ICIgIiA6ICIiKSAuICItaiIgLiBudW1iZXJPZkNQVXMoKSBpZiAkbWFr
ZUFyZ3MgIX4gLy1qXHMqXGQrLzsKKyAgICBteSAkbWF4Q1BVTG9hZCA9IG1heENQVUxvYWQoKSBp
ZiAkbWFrZUFyZ3MgIX4gLy1sXHMqXGQrXC4/XGQqLzsKKyAgICAkbWFrZUFyZ3MgLj0gIiAtbCIg
LiBtYXhDUFVMb2FkKCkgaWYgZGVmaW5lZCAkbWF4Q1BVTG9hZDsKIAogICAgICMgV2UgcmVtb3Zl
IENNYWtlQ2FjaGUgdG8gYXZvaWQgdGhlIGJvdHMgdG8gcmV1c2UgY2FjaGVkIGZsYWdzIHdoZW4K
ICAgICAjIHdlIGVuYWJsZSBuZXcgZmVhdHVyZXMuIFRoaXMgZm9yY2VzIGEgcmVjb25maWd1cmF0
aW9uLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5CmluZGV4IDBhMjA3ZmMuLjc1YTAw
ZmZmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdC1idWlsZC1kaXJlY3RvcnkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXQtYnVpbGQtZGlyZWN0b3J5CkBAIC01MCw3ICs1MCw2IEBA
IFVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdCiAgIC0tZWZsICAgICAgICAgICAgICAgICBG
aW5kIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBFRkwgcG9ydAogICAtLWd0ayAgICAgICAg
ICAgICAgICAgRmluZCB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciB0aGUgR1RLKyBwb3J0CiAgIC0t
d2luY2Fpcm8gICAgICAgICAgICBGaW5kIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHVzaW5nIENh
aXJvIChyYXRoZXIgdGhhbiBDb3JlR3JhcGhpY3MpIG9uIFdpbmRvd3MKLSAgLS13aW5jZSAgICAg
ICAgICAgICAgIEZpbmQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIFdpbkNFIHBvcnQKIAog
RWl0aGVyIC0tY29uZmlndXJhdGlvbiBvciAtLXRvcC1sZXZlbCBpcyByZXF1aXJlZC4KIEVPRgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCmluZGV4IDg5ODBlM2IuLjI4YjRkNjIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KQEAg
LTEwNiw3ICsxMDYsNiBAQCBteSAkbm1QYXRoOwogbXkgJG9zWFZlcnNpb247CiBteSAkZ2VuZXJh
dGVEc3ltOwogbXkgJGlzR3RrOwotbXkgJGlzV2luQ0U7CiBteSAkaXNXaW5DYWlybzsKIG15ICRp
c1dpbjY0OwogbXkgJGlzRWZsOwpAQCAtMzk3LDcgKzM5Niw2IEBAIHN1YiBhcmd1bWVudHNGb3JD
b25maWd1cmF0aW9uKCkKICAgICBwdXNoKEBhcmdzLCAnLS1ndGsnKSBpZiBpc0d0aygpOwogICAg
IHB1c2goQGFyZ3MsICctLWVmbCcpIGlmIGlzRWZsKCk7CiAgICAgcHVzaChAYXJncywgJy0td2lu
Y2Fpcm8nKSBpZiBpc1dpbkNhaXJvKCk7Ci0gICAgcHVzaChAYXJncywgJy0td2luY2UnKSBpZiBp
c1dpbkNFKCk7CiAgICAgcHVzaChAYXJncywgJy0taW5zcGVjdG9yLWZyb250ZW5kJykgaWYgaXNJ
bnNwZWN0b3JGcm9udGVuZCgpOwogICAgIHJldHVybiBAYXJnczsKIH0KQEAgLTgxMSw5ICs4MDks
NiBAQCBzdWIgYnVpbHREeWxpYlBhdGhGb3JOYW1lCiAgICAgaWYgKGlzRWZsKCkpIHsKICAgICAg
ICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1Y3REaXIvbGliL2xpYmV3ZWJraXQyLnNvIjsK
ICAgICB9Ci0gICAgaWYgKGlzV2luQ0UoKSkgewotICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0
aW9uUHJvZHVjdERpci8kbGlicmFyeU5hbWUiOwotICAgIH0KICAgICBpZiAoaXNJT1NXZWJLaXQo
KSkgewogICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci8kbGlicmFyeU5h
bWUuZnJhbWV3b3JrLyRsaWJyYXJ5TmFtZSI7CiAgICAgfQpAQCAtOTYyLDE4ICs5NTcsNiBAQCBz
dWIgaXNHdGsoKQogICAgIHJldHVybiAkaXNHdGs7CiB9CiAKLXN1YiBpc1dpbkNFKCkKLXsKLSAg
ICBkZXRlcm1pbmVJc1dpbkNFKCk7Ci0gICAgcmV0dXJuICRpc1dpbkNFOwotfQotCi1zdWIgZGV0
ZXJtaW5lSXNXaW5DRSgpCi17Ci0gICAgcmV0dXJuIGlmIGRlZmluZWQoJGlzV2luQ0UpOwotICAg
ICRpc1dpbkNFID0gY2hlY2tGb3JBcmd1bWVudEFuZFJlbW92ZUZyb21BUkdWKCItLXdpbmNlIik7
Ci19Ci0KICMgRGV0ZXJtaW5lIGlmIHRoaXMgaXMgZGViaWFuLCB1YnVudHUsIGxpbnNwaXJlLCBv
ciBzb21ldGhpbmcgc2ltaWxhci4KIHN1YiBpc0RlYmlhbkJhc2VkKCkKIHsKQEAgLTExMTAsNyAr
MTA5Myw3IEBAIHN1YiBpc0FwcGxlTWFjV2ViS2l0KCkKIAogc3ViIGlzQXBwbGVXaW5XZWJLaXQo
KQogewotICAgIHJldHVybiAoaXNDeWd3aW4oKSB8fCBpc1dpbmRvd3MoKSkgJiYgIWlzV2luQ2Fp
cm8oKSAmJiAhaXNHdGsoKSAmJiAhaXNXaW5DRSgpOworICAgIHJldHVybiAoaXNDeWd3aW4oKSB8
fCBpc1dpbmRvd3MoKSkgJiYgIWlzV2luQ2Fpcm8oKSAmJiAhaXNHdGsoKTsKIH0KIAogc3ViIGlP
U1NpbXVsYXRvckRldmljZXNQYXRoCkBAIC0xMzQzLDcgKzEzMjYsNyBAQCBzdWIgcmVsYXRpdmVT
Y3JpcHRzRGlyKCkKIHN1YiBsYXVuY2hlclBhdGgoKQogewogICAgIG15ICRyZWxhdGl2ZVNjcmlw
dHNQYXRoID0gcmVsYXRpdmVTY3JpcHRzRGlyKCk7Ci0gICAgaWYgKGlzR3RrKCkgfHwgaXNFZmwo
KSB8fCBpc1dpbkNFKCkpIHsKKyAgICBpZiAoaXNHdGsoKSB8fCBpc0VmbCgpKSB7CiAgICAgICAg
IHJldHVybiAiJHJlbGF0aXZlU2NyaXB0c1BhdGgvcnVuLWxhdW5jaGVyIjsKICAgICB9IGVsc2lm
IChpc0FwcGxlV2ViS2l0KCkpIHsKICAgICAgICAgcmV0dXJuICIkcmVsYXRpdmVTY3JpcHRzUGF0
aC9ydW4tc2FmYXJpIjsKQEAgLTEzNTgsOCArMTM0MSw2IEBAIHN1YiBsYXVuY2hlck5hbWUoKQog
ICAgICAgICByZXR1cm4gIlNhZmFyaSI7CiAgICAgfSBlbHNpZiAoaXNBcHBsZVdpbldlYktpdCgp
KSB7CiAgICAgICAgIHJldHVybiAiV2luTGF1bmNoZXIiOwotICAgIH0gZWxzaWYgKGlzV2luQ0Uo
KSkgewotICAgICAgICByZXR1cm4gIldpbkNFTGF1bmNoZXIiOwogICAgIH0KIH0KIApAQCAtMTcw
MCw5ICsxNjgxLDYgQEAgc3ViIGNtYWtlQ2FjaGVQYXRoKCkKIHN1YiBzaG91bGRSZW1vdmVDTWFr
ZUNhY2hlKEApCiB7CiAgICAgbXkgKCRjYWNoZUZpbGVQYXRoLCBAYnVpbGRBcmdzKSA9IEBfOwot
ICAgIGlmIChpc1dpbkNFKCkpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgaWYg
KCFpc0d0aygpKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMTg5NCwyMSArMTg3MiwxOSBAQCBz
dWIgYnVpbGRDTWFrZVByb2plY3RPckV4aXQoJCQkJEApCiAKIHN1YiBjbWFrZUJhc2VkUG9ydEFy
Z3VtZW50cygpCiB7Ci0gICAgcmV0dXJuICgnLUcgIlZpc3VhbCBTdHVkaW8gOCAyMDA1IFNUQU5E
QVJEU0RLXzUwMCAoQVJNVjRJKSInKSBpZiBpc1dpbkNFKCk7CiAgICAgcmV0dXJuICgpOwogfQog
CiBzdWIgY21ha2VCYXNlZFBvcnROYW1lKCkKIHsKICAgICByZXR1cm4gIkVmbCIgaWYgaXNFZmwo
KTsKLSAgICByZXR1cm4gIldpbkNFIiBpZiBpc1dpbkNFKCk7CiAgICAgcmV0dXJuICJHVEsiIGlm
IGlzR3RrKCk7CiAgICAgcmV0dXJuICIiOwogfQogCiBzdWIgaXNDTWFrZUJ1aWxkKCkKIHsKLSAg
ICByZXR1cm4gaXNFZmwoKSB8fCBpc1dpbkNFKCkgfHwgaXNHdGsoKTsKKyAgICByZXR1cm4gaXNF
ZmwoKSB8fCBpc0d0aygpOwogfQogCiBzdWIgcHJvbXB0VXNlcgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
ZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDM3YTJhNGUuLmExNGU2ODEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTIzMSw3ICsyMzEsNyBAQCBteSBAZmVhdHVy
ZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GT05UX0xPQURfRVZFTlRTIiwgZGVmYXVs
dCA9PiAwLCB2YWx1ZSA9PiBcJGZvbnRMb2FkRXZlbnRzU3VwcG9ydCB9LAogCiAgICAgeyBvcHRp
b24gPT4gImZ0cGRpciIsIGRlc2MgPT4gIlRvZ2dsZSBGVFAgRGlyZWN0b3J5IHN1cHBvcnQiLAot
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRlRQRElSIiwgZGVmYXVsdCA9PiAhaXNXaW5DRSgpLCB2
YWx1ZSA9PiBcJGZ0cERpclN1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0ZUUERJ
UiIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRmdHBEaXJTdXBwb3J0IH0sCiAKICAgICB7IG9w
dGlvbiA9PiAiZnVsbHNjcmVlbi1hcGkiLCBkZXNjID0+ICJUb2dnbGUgRnVsbHNjcmVlbiBBUEkg
c3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVUxMU0NSRUVOX0FQSSIsIGRlZmF1
bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSB8fCBpc0VmbCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9
PiBcJGZ1bGxzY3JlZW5BUElTdXBwb3J0IH0sCkBAIC0yNzYsNyArMjc2LDcgQEAgbXkgQGZlYXR1
cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5QVVRfVFlQRV9XRUVLIiwgZGVmYXVs
dCA9PiAwLCB2YWx1ZSA9PiBcJGlucHV0VHlwZVdlZWtTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlv
biA9PiAiaW5zcGVjdG9yIiwgZGVzYyA9PiAiVG9nZ2xlIEluc3BlY3RvciBzdXBwb3J0IiwKLSAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0lOU1BFQ1RPUiIsIGRlZmF1bHQgPT4gIWlzV2luQ0UoKSwg
dmFsdWUgPT4gXCRpbnNwZWN0b3JTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9J
TlNQRUNUT1IiLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkaW5zcGVjdG9yU3VwcG9ydCB9LAog
CiAgICAgeyBvcHRpb24gPT4gImxlZ2FjeS1ub3RpZmljYXRpb25zIiwgZGVzYyA9PiAiVG9nZ2xl
IExlZ2FjeSBOb3RpZmljYXRpb25zIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
TEVHQUNZX05PVElGSUNBVElPTlMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkbGVnYWN5Tm90
aWZpY2F0aW9uc1N1cHBvcnQgfSwKQEAgLTM3OCw3ICszNzgsNyBAQCBteSBAZmVhdHVyZXMgPSAo
CiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkdfRk9OVFMiLCBkZWZhdWx0ID0+IDEsIHZhbHVl
ID0+IFwkc3ZnRm9udHNTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAic3lzdGVtLW1hbGxv
YyIsIGRlc2MgPT4gIlRvZ2dsZSBzeXN0ZW0gYWxsb2NhdG9yIGluc3RlYWQgb2YgVENtYWxsb2Mi
LAotICAgICAgZGVmaW5lID0+ICJVU0VfU1lTVEVNX01BTExPQyIsIGRlZmF1bHQgPT4gaXNXaW5D
RSgpLCB2YWx1ZSA9PiBcJHN5c3RlbU1hbGxvY1N1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAi
VVNFX1NZU1RFTV9NQUxMT0MiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3lzdGVtTWFsbG9j
U3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInRlbXBsYXRlLWVsZW1lbnQiLCBkZXNjID0+
ICJUb2dnbGUgSFRNTFRlbXBsYXRlRWxlbWVudCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQiLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkdGVtcGxh
dGVFbGVtZW50U3VwcG9ydCB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3BvcnRfdGVzdGNhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90
ZXN0Y2FzZS5weQppbmRleCA2NGNjN2YyLi5lZTAyNWViIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQpAQCAtNTcwLDcgKzU3MCw3IEBAIE1PQ0sgb3V0
cHV0IG9mIGNoaWxkIHByb2Nlc3MKICAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19maWxlX2Zv
cl9wbGF0Zm9ybShwb3J0LCAnbGludXgyJywgJ2RlYmlhbi1odHRwZC0yLjIuY29uZicpCiAKICAg
ICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19maWxlX2Zvcl9wbGF0Zm9ybShwb3J0LCAnbWFjJywg
J2FwYWNoZTIuMi1odHRwZC5jb25mJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19maWxl
X2Zvcl9wbGF0Zm9ybShwb3J0LCAnd2luMzInLCAnYXBhY2hlMi4yLWh0dHBkLmNvbmYnKSAgIyB3
aW4zMiBpc24ndCBhIHN1cHBvcnRlZCBzeXMucGxhdGZvcm0uICBBcHBsZVdpbi9XaW5DYWlyby9X
aW5DRSBwb3J0cyBhbGwgdXNlIGN5Z3dpbi4KKyAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19m
aWxlX2Zvcl9wbGF0Zm9ybShwb3J0LCAnd2luMzInLCAnYXBhY2hlMi4yLWh0dHBkLmNvbmYnKSAg
IyB3aW4zMiBpc24ndCBhIHN1cHBvcnRlZCBzeXMucGxhdGZvcm0uICBBcHBsZVdpbi9XaW5DYWly
byBwb3J0cyBhbGwgdXNlIGN5Z3dpbi4KICAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19maWxl
X2Zvcl9wbGF0Zm9ybShwb3J0LCAnYmFyZicsICdhcGFjaGUyLjItaHR0cGQuY29uZicpCiAKICAg
ICBkZWYgdGVzdF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29uZmlnLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvbmZp
Zy5oCmluZGV4IGU1ZjE5ZWYuLjU3OTA5YWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29uZmlnLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaApAQCAtNTMsNyAr
NTMsNyBAQAogI2lmbmRlZiBfV0lOU09DS0FQSV8KICNkZWZpbmUgX1dJTlNPQ0tBUElfIC8vIFBy
ZXZlbnQgaW5jbHVzaW9uIG9mIHdpbnNvY2suaCBpbiB3aW5kb3dzLmgKICNlbmRpZgotI2VsaWYg
IU9TKFdJTkNFKQorI2Vsc2UKICNkZWZpbmUgV1RGX1VTRV9DRyAxCiAjdW5kZWYgV1RGX1VTRV9D
QUlSTwogI3VuZGVmIFdURl9VU0VfQ1VSTApkaWZmIC0tZ2l0IGEvVG9vbHMvV2luQ0VMYXVuY2hl
ci9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1dpbkNFTGF1bmNoZXIvQ01ha2VMaXN0cy50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOWZjNjEuLjAwMDAwMDAKLS0tIGEvVG9vbHMv
V2luQ0VMYXVuY2hlci9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAg
QEAKLXNldChXaW5DRUxhdW5jaGVyX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRf
RElSfS93aW5jZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yayIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vdGV4dCIKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9IgotICAgICIke0RFUklWRURfU09V
UkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9IgotICAgICIke1dURl9ESVJ9IgotICAgICIke0RFUklW
RURfU09VUkNFU19ESVJ9IgotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9IgotKQotCi1zZXQoV2lu
Q0VMYXVuY2hlcl9TT1VSQ0VTCi0gICAgJHtUT09MU19ESVJ9L1dpbkNFTGF1bmNoZXIvbWFpbi5j
cHAKLSkKLQotc2V0KFdpbkNFTGF1bmNoZXJfTElCUkFSSUVTCi0gICAgV2ViS2l0Ci0pCi0KLWlu
Y2x1ZGVfZGlyZWN0b3JpZXMoJHtXaW5DRUxhdW5jaGVyX0lOQ0xVREVfRElSRUNUT1JJRVN9KQot
YWRkX2V4ZWN1dGFibGUoV2luQ0VMYXVuY2hlciBXSU4zMiAke1dpbkNFTGF1bmNoZXJfU09VUkNF
U30pCi1hZGRfZGVwZW5kZW5jaWVzKFdpbkNFTGF1bmNoZXIgV2ViS2l0KQotdGFyZ2V0X2xpbmtf
bGlicmFyaWVzKFdpbkNFTGF1bmNoZXIgJHtXaW5DRUxhdW5jaGVyX0xJQlJBUklFU30pCi1zZXRf
dGFyZ2V0X3Byb3BlcnRpZXMoV2luQ0VMYXVuY2hlciBQUk9QRVJUSUVTIEZPTERFUiAiVG9vbHMi
KQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFdpbkNFTGF1bmNoZXIgUFJPUEVSVElFUyBSVU5USU1F
X09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2luQ0VMYXVuY2hlci9tYWluLmNwcCBiL1Rvb2xzL1dpbkNFTGF1bmNoZXIvbWFpbi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjJhNTEuLjAwMDAwMDAKLS0tIGEvVG9v
bHMvV2luQ0VMYXVuY2hlci9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1zdGF0aWMgY29uc3Qg
TFBDV1NUUiBrTWFpbldpbmRvd1RpdGxlID0gTCJXZWJLaXQgZm9yIFdpbkNFIjsKLXN0YXRpYyBj
b25zdCBMUENXU1RSIGtNYWluV2luZG93Q2xhc3NOYW1lID0gTCJNYWluV2luZG93Q2xhc3MiOwot
Ci0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgc3dpdGNoIChtZXNzYWdl
KSB7Ci0gICAgY2FzZSBXTV9ERVNUUk9ZOgotICAgICAgICBQb3N0UXVpdE1lc3NhZ2UoMCk7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIERlZldpbmRvd1By
b2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgIH0KLQotICAgIHJldHVybiAw
OwotfQotCi1pbnQgQVBJRU5UUlkgX3RXaW5NYWluKEhJTlNUQU5DRSBoSW5zdGFuY2UsIEhJTlNU
QU5DRSBoUHJldkluc3RhbmNlLCBMUFRTVFIgbHBDbWRMaW5lLCBpbnQgbkNtZFNob3cpCi17Ci0g
ICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJldkluc3RhbmNlKTsKLQotICAgIENvSW5pdGlh
bGl6ZUV4KDAsIENPSU5JVF9NVUxUSVRIUkVBREVEKTsKLSAgICBXZWJWaWV3Ojppbml0aWFsaXpl
KGhJbnN0YW5jZSk7Ci0KLSAgICBMUENXU1RSIGhvbWVVcmwgPSBscENtZExpbmU7Ci0gICAgYm9v
bCBlbmFibGVEb3VibGVCdWZmZXIgPSB0cnVlOwotICAgIGJvb2wgZnVsbHNjcmVlbiA9IGZhbHNl
OwotCi0gICAgaWYgKGhvbWVVcmxbMF0gPT0gJy0nKSB7Ci0gICAgICAgIGZvciAoOyAqaG9tZVVy
bCAmJiAqaG9tZVVybCAhPSAnICc7ICsraG9tZVVybCkgewotICAgICAgICAgICAgc3dpdGNoICgq
aG9tZVVybCkgewotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgZW5hYmxl
RG91YmxlQnVmZmVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICBmdWxsc2NyZWVuID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpob21lVXJsKQotICAg
ICAgICAgICAgKytob21lVXJsOwotICAgIH0KLQotICAgIERXT1JEIHN0eWxlcyA9IFdTX1ZJU0lC
TEU7Ci0KLSAgICBpZiAoIWZ1bGxzY3JlZW4pIHsKLSAgICAgICAgc3R5bGVzIHw9IFdTX0NBUFRJ
T04KLSAgICAgICAgICAgIHwgV1NfTUFYSU1JWkVCT1gKLSAgICAgICAgICAgIHwgV1NfTUlOSU1J
WkVCT1gKLSAgICAgICAgICAgIHwgV1NfT1ZFUkxBUFBFRAotICAgICAgICAgICAgfCBXU19TWVNN
RU5VCi0gICAgICAgICAgICB8IFdTX1RISUNLRlJBTUU7Ci0gICAgfQotCi0gICAgV05EQ0xBU1NX
IHdjOwotICAgIHdjLnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7Ci0g
ICAgd2MubHBmblduZFByb2MgICAgPSBXbmRQcm9jOwotICAgIHdjLmNiQ2xzRXh0cmEgICAgID0g
MDsKLSAgICB3Yy5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2MuaEluc3RhbmNlICAgICAgPSBo
SW5zdGFuY2U7Ci0gICAgd2MuaEljb24gICAgICAgICAgPSAwOwotICAgIHdjLmhDdXJzb3IgICAg
ICAgID0gMDsKLSAgICB3Yy5oYnJCYWNrZ3JvdW5kICA9IHN0YXRpY19jYXN0PEhCUlVTSD4oR2V0
U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpKTsKLSAgICB3Yy5scHN6TWVudU5hbWUgICA9IDA7Ci0g
ICAgd2MubHBzekNsYXNzTmFtZSAgPSBrTWFpbldpbmRvd0NsYXNzTmFtZTsKLSAgICBSZWdpc3Rl
ckNsYXNzKCZ3Yyk7Ci0KLSAgICBIV05EIGhNYWluV2luZG93ID0gQ3JlYXRlV2luZG93VyhrTWFp
bldpbmRvd0NsYXNzTmFtZSwga01haW5XaW5kb3dUaXRsZSwgc3R5bGVzLAotICAgICAgICBDV19V
U0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCAwLCAwLCBoSW5zdGFuY2UsIDApOwotCi0g
ICAgaWYgKGZ1bGxzY3JlZW4pIHsKLSAgICAgICAgU2V0V2luZG93UG9zKGhNYWluV2luZG93LCBI
V05EX1RPUE1PU1QsIDAsIDAsIEdldFN5c3RlbU1ldHJpY3MoU01fQ1hTQ1JFRU4pLAotICAgICAg
ICAgICAgR2V0U3lzdGVtTWV0cmljcyhTTV9DWVNDUkVFTiksIFNXUF9TSE9XV0lORE9XKTsKLSAg
ICB9Ci0KLSAgICBTaG93V2luZG93KGhNYWluV2luZG93LCBuQ21kU2hvdyk7Ci0gICAgVXBkYXRl
V2luZG93KGhNYWluV2luZG93KTsKLQotICAgIFdURjo6T3duUHRyPFdlYlZpZXc+IHdlYlZpZXcg
PSBXVEY6OmFkb3B0UHRyKG5ldyBXZWJWaWV3KGhNYWluV2luZG93LCBlbmFibGVEb3VibGVCdWZm
ZXIgPyBXZWJWaWV3OjpFbmFibGVEb3VibGVCdWZmZXJpbmcgOiBXZWJWaWV3OjpOb0ZlYXR1cmUp
KTsKLSAgICB3ZWJWaWV3LT5sb2FkKGhvbWVVcmwpOwotCi0gICAgLy8gTWFpbiBtZXNzYWdlIGxv
b3A6Ci0gICAgTVNHIG1zZzsKLSAgICBCT09MIGJSZXQ7Ci0gICAgd2hpbGUgKGJSZXQgPSBHZXRN
ZXNzYWdlKCZtc2csIDAsIDAsIDApKSB7Ci0gICAgICAgIGlmIChiUmV0ID09IC0xKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBlcnJvciBhbmQgcG9zc2libHkgZXhpdC4KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7Ci0gICAg
ICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3
ZWJWaWV3LmNsZWFyKCk7Ci0gICAgRGVzdHJveVdpbmRvdyhoTWFpbldpbmRvdyk7Ci0KLSAgICBX
ZWJWaWV3OjpjbGVhbnVwKCk7Ci0gICAgQ29VbmluaXRpYWxpemUoKTsKLQotICAgIHJldHVybiBt
c2cud1BhcmFtOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL21hbmlmZXN0LnR4dCBiL1Rvb2xz
L2d0ay9tYW5pZmVzdC50eHQKaW5kZXggMTZiZGVhMS4uNzBkMzM4MiAxMDA2NDQKLS0tIGEvVG9v
bHMvZ3RrL21hbmlmZXN0LnR4dAorKysgYi9Ub29scy9ndGsvbWFuaWZlc3QudHh0CkBAIC00LDcg
KzQsNiBAQCBleGNsdWRlIENoYW5nZUxvZwogZXhjbHVkZSBNYWtlZmlsZQogZXhjbHVkZSBQbGF0
Zm9ybUVmbC5jbWFrZQogZXhjbHVkZSBQbGF0Zm9ybVdpbi5jbWFrZQotZXhjbHVkZSBQbGF0Zm9y
bVdpbkNFLmNtYWtlCiBleGNsdWRlIHRhZ3MkCiBleGNsdWRlIH4kCiBleGNsdWRlIFwuIyQKQEAg
LTQyLDcgKzQxLDcgQEAgZXhjbHVkZSBcLnhjY29uZmlnJAogZXhjbHVkZSBcLnhjb2RlcHJvaiQK
IAogIyBFeGNsdWRlIGRpcmVjdG9yaWVzIGZyb20gb3RoZXIgcG9ydHMKLWV4Y2x1ZGUgLipcLyht
YWN8aW9zfGNmfGNnfGNvY29hfENvY29hfG9iamN8YXZmb3VuZGF0aW9ufGNhfGN1cmx8ZWZsfHdp
bnx3aW5jZSlcLy4qJAorZXhjbHVkZSAuKlwvKG1hY3xpb3N8Y2Z8Y2d8Y29jb2F8Q29jb2F8b2Jq
Y3xhdmZvdW5kYXRpb258Y2F8Y3VybHxlZmx8d2luKVwvLiokCiAKIGRpcmVjdG9yeSBTb3VyY2UK
IGV4Y2x1ZGUgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzCkBAIC01NCw3ICs1Myw2IEBAIGV4
Y2x1ZGUgU291cmNlL2JtYWxsb2MKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL0VGTEhlbHBlcnMuY21h
a2UkCiBleGNsdWRlIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UkCiBleGNsdWRl
IFNvdXJjZS9jbWFrZS9PcHRpb25zV2luZG93cy5jbWFrZSQKLWV4Y2x1ZGUgU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DRS5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdp
bi5jbWFrZSQKIGV4Y2x1ZGUgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UkCiBleGNsdWRl
IFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlciQK
</data>
<flag name="review"
          id="263349"
          type_id="1"
          status="+"
          setter="alex.christensen"
    />
    <flag name="commit-queue"
          id="263397"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>