Re: Strange Struts 7 Tag Limit Issue

Lukasz Lenart <[email protected]> Sat, 18 Oct 2025 12:52:53 +0200
Newsgroups gmane.comp.jakarta.struts.user
Message-ID <CAMopvkMce6dJGWVTiYtY-HWaNKgYrwu3t56Tdir5GBBhyD-+AA@mail.gmail.com>
--000000000000a3828006416ca70f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

I used Claude Code to analyze this problem and I got a big document
(attached), but you can try this for now:

- [ ] Enable WARN logging for
`org.apache.struts2.util.FastByteArrayOutputStream`
- [ ] Reproduce the truncation and check logs for encoding warnings
- [ ] Identify the exact character position where truncation occurs
- [ ] Examine the character(s) at and immediately after the truncation poin=
t
- [ ] Verify `struts.i18n.encoding` is set to "UTF-8"
- [ ] Verify JSP `pageEncoding` and `contentType` both specify "UTF-8"
- [ ] Check if SiteMesh is decorating the JSON response (should be excluded=
)
- [ ] Compare `response.getCharacterEncoding()` between Tomcat 10 and Tomca=
t 11
- [ ] Test with JSON plugin instead of JSP rendering
- [ ] Check for any custom filters or interceptors that wrap the response

Cheers
=C5=81ukasz

sob., 18 pa=C5=BA 2025 o 04:12 Zoran Avtarovski <[email protected]> n=
apisa=C5=82(a):
>
> Hi Guys,
>
> We are almost ready to go into final testing on our Struts 7 app
> migration, except for a small issue when we render JSON responses and we
> can't work out where the issue is.
>
> The problem presents when we try and render JSON response to a jsp page,
> but only when going through an action first. I should stress this works
> fine on tomcat 10 using the same build of Struts and SiteMesh.
>
> As a simple test we created a method on our action class which sets a
> page accessible parameter to a long sample JSON string:
>
>         public String ajaxTest(){
>              ajaxResponse =3D " [{\"name\": \"Adeel
> Solangi\",\"language\": \"Sindhi\",\"id\": \"V59OF92YF627HFY0\",\"bio\":
> ... I have attached the full JSON text but cropped in the email for clari=
ty
>              return SUCCESS;
>          }
>
> On the resulting jsp page, see below, it results in the JSON string
> being cropped and the browser complaining of invalid JSON:
>
> <%@ page contentType=3D"application/json; charset=3DUTF-8" %>
> <%@ taglib prefix=3D"s" uri=3D"/struts-tags"%><s:property
> value=3D"%{ajaxResponse}" escapeHtml=3D"false"/>
>
> We also tried using JSTL tags which has the same result:
>
> <%@ page contentType=3D"application/json; charset=3DUTF-8" %><%@ taglib
> uri=3D"jakarta.tags.core" prefix=3D"c"%><c:out value=3D"${ajaxResponse}"
> escapeXml=3D"false"/>
>
> The strange part is if we set the variable in the JSP page and just call
> the page directly via testPage.jsp it works as expected:
>
> <%@ page contentType=3D"text/html;charset=3DUTF-8" language=3D"java"
> pageEncoding=3D"UTF-8"%>
> <%@ taglib prefix=3D"s" uri=3D"/struts-tags"%>
> <s:set var=3D"ajaxText">
>      [{"name": "Adeel Solangi","language": "Sindhi","id":
> "V59OF92YF627HFY0","bio": "Donec lobortis eleifend condimentum. ...
> </s:set>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
> <html xmlns=3D"http://www.w3.org/1999/xhtml" xml:lang=3D"en" lang=3D"en">
>      <head>
>          <title>SpareEngine</title>
>          <meta http-equiv=3D"Content-Type" content=3D"text/html;charset=
=3Dutf8" />
>      </head>
>      <body>
>          <div class=3D"main-body">
>              <s:property value=3D"%{ajaxText}" escapeHtml=3D"false"/>
>          </div>
>      </body>
> </html>
>
> Because the plain JSP renders correctly I don't think it is a tomcat
> issue, but I can't be certain. Any help would be appreciated.
>
> Z.
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]

--000000000000a3828006416ca70f
Content-Type: text/markdown; charset="UTF-8"; 
	name="2025-10-18-json-truncation-jakarta-migration.md"
Content-Disposition: attachment; 
	filename="2025-10-18-json-truncation-jakarta-migration.md"
Content-Transfer-Encoding: base64
Content-ID: <f_mgw5s61m0>
X-Attachment-Id: f_mgw5s61m0

LS0tCmRhdGU6IDIwMjUtMTAtMThUMTI6NDM6MTArMDI6MDAKdG9waWM6ICJKU09OIFJlc3BvbnNl
IFRydW5jYXRpb24gaW4gU3RydXRzIDcgSmFrYXJ0YSBFRSBNaWdyYXRpb24iCnRhZ3M6IFtyZXNl
YXJjaCwgY29kZWJhc2UsIGpha2FydGEtZWUsIGpzb24sIHJlc3BvbnNlLWhhbmRsaW5nLCBlbmNv
ZGluZywgc2l0ZW1lc2gsIHN0cnV0czddCnN0YXR1czogY29tcGxldGUKZ2l0X2NvbW1pdDogMDZm
OWY5MzAzMzg3ZWRmMDU1N2QxMjhiYmQ3MTIzYmRlZDRmMjRmNQotLS0KCiMgUmVzZWFyY2g6IEpT
T04gUmVzcG9uc2UgVHJ1bmNhdGlvbiBpbiBTdHJ1dHMgNyBKYWthcnRhIEVFIE1pZ3JhdGlvbgoK
KipEYXRlKio6IDIwMjUtMTAtMThUMTI6NDM6MTArMDI6MDAKCiMjIFJlc2VhcmNoIFF1ZXN0aW9u
CgpVc2VyIHJlcG9ydHMgSlNPTiByZXNwb25zZXMgYmVpbmcgdHJ1bmNhdGVkIHdoZW4gcmVuZGVy
ZWQgdGhyb3VnaCBTdHJ1dHMgYWN0aW9ucyBvbiBUb21jYXQgMTEgKEpha2FydGEgRUUgMTApLCBi
dXQgdGhlIHNhbWUgY29kZSB3b3JrcyBjb3JyZWN0bHkgb24gVG9tY2F0IDEwIChqYXZheCkuIFRo
ZSB0cnVuY2F0aW9uIG9ubHkgb2NjdXJzIHdoZW46Ci0gR29pbmcgdGhyb3VnaCBhIFN0cnV0cyBh
Y3Rpb24gdGhhdCBzZXRzIGEgcGFyYW1ldGVyCi0gUmVuZGVyaW5nIHdpdGggYDxzOnByb3BlcnR5
PmAgb3IgSlNUTCBgPGM6b3V0PmAgdGFncyBpbiBKU1AKLSBEb2VzIE5PVCBvY2N1ciB3aGVuIHRo
ZSB2YWx1ZSBpcyBzZXQgZGlyZWN0bHkgaW4gSlNQIHVzaW5nIGA8czpzZXQ+YAoKVGhlIHVzZXIg
aXMgdGVzdGluZyBhIFN0cnV0cyA3IGFwcGxpY2F0aW9uIG1pZ3JhdGlvbiBhbmQgdGhpcyBpcyBi
bG9ja2luZyBmaW5hbCB0ZXN0aW5nLgoKIyMgU3VtbWFyeQoKKipSb290IENhdXNlIElkZW50aWZp
ZWQqKjogVGhlIGlzc3VlIGlzICoqTk9UIGEgSmFrYXJ0YSBFRSBtaWdyYXRpb24gYnVnKiosIGJ1
dCByYXRoZXIgYSAqKmNoYXJhY3RlciBlbmNvZGluZyB0cnVuY2F0aW9uIGlzc3VlKiogaW4gYEZh
c3RCeXRlQXJyYXlPdXRwdXRTdHJlYW1gIHRoYXQgYmVjb21lcyBleHBvc2VkIGluIGNlcnRhaW4g
cmVzcG9uc2UgcGlwZWxpbmUgY29uZmlndXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIFNpdGVN
ZXNoIHJlc3BvbnNlIGJ1ZmZlcmluZyBpcyBjb21iaW5lZCB3aXRoIFN0cnV0cyBhY3Rpb24tYmFz
ZWQgcmVuZGVyaW5nLgoKKipLZXkgRmluZGluZyoqOiBUaGUgYEZhc3RCeXRlQXJyYXlPdXRwdXRT
dHJlYW0ud3JpdGVUbyhXcml0ZXIsIFN0cmluZyBlbmNvZGluZylgIG1ldGhvZCB1c2VzIGEgYENo
YXJzZXREZWNvZGVyYCBjb25maWd1cmVkIHdpdGggYENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVGAg
Zm9yIG1hbGZvcm1lZCBpbnB1dCwgd2hpY2ggY2F1c2VzIGRlY29kaW5nIHRvIGhhbHQgYW5kIHRy
dW5jYXRlIG91dHB1dCB3aGVuIGVuY291bnRlcmluZyBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJl
IHByb3Blcmx5IGRlY29kZWQgaW4gdGhlIHRhcmdldCBlbmNvZGluZy4KCioqQ3JpdGljYWwgRGlm
ZmVyZW5jZSoqOiBEaXJlY3QgSlNQIHJlbmRlcmluZyBieXBhc3NlcyB0aGUgZW5jb2RpbmcgY29u
dmVyc2lvbiBwaXBlbGluZSwgd2hpbGUgYWN0aW9uLWJhc2VkIHJlbmRlcmluZyBtYXkgdHJpZ2dl
ciBgRmFzdEJ5dGVBcnJheU91dHB1dFN0cmVhbWAgZW5jb2RpbmcgY29udmVyc2lvbiwgZXhwb3Np
bmcgdGhlIHRydW5jYXRpb24gYmVoYXZpb3IuCgojIyBEZXRhaWxlZCBGaW5kaW5ncwoKIyMjIDEu
IEpha2FydGEgRUUgTWlncmF0aW9uIFN0YXR1cyAtIENPTVBMRVRFIEFORCBDT1JSRUNUCgoqKkZp
bmRpbmcqKjogQWxsIFN0cnV0cyBjb2RlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCB0
byBKYWthcnRhIEVFIG5hbWVzcGFjZXMuCgoqKkV2aWRlbmNlKio6Ci0gQWxsIGBqYXZheC5zZXJ2
bGV0LmpzcC5Kc3BXcml0ZXJgIHJlZmVyZW5jZXMg4oaSIGBqYWthcnRhLnNlcnZsZXQuanNwLkpz
cFdyaXRlcmAKLSBBbGwgSlNQIHRhZyBpbXBsZW1lbnRhdGlvbnMgdXNlIEpha2FydGEgbmFtZXNw
YWNlcwotIFNpdGVNZXNoIDMuMi4yIGlzIEpha2FydGEgRUUgOSsgY29tcGF0aWJsZQotIFNlYXJj
aCBmb3IgYGphdmF4LnNlcnZsZXQuanNwYCByZXR1cm5lZCAqKnplcm8gcmVzdWx0cyoqCgoqKkZp
bGVzIFZlcmlmaWVkKio6Ci0gW0Zhc3RCeXRlQXJyYXlPdXRwdXRTdHJlYW0uamF2YToyMV0oaHR0
cHM6Ly9naXRodWIuY29tL2FwYWNoZS9zdHJ1dHMvYmxvYi8wNmY5ZjkzMDMzODdlZGYwNTU3ZDEy
OGJiZDcxMjNiZGVkNGYyNGY1L2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0czIv
dXRpbC9GYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtLmphdmEjTDIxKSAtIFVzZXMgYGpha2FydGEu
c2VydmxldC5qc3AuSnNwV3JpdGVyYAotIFtDb21wb25lbnRUYWdTdXBwb3J0LmphdmE6MjVdKGh0
dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvc3RydXRzL2Jsb2IvMDZmOWY5MzAzMzg3ZWRmMDU1N2Qx
MjhiYmQ3MTIzYmRlZDRmMjRmNS9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMy
L3ZpZXdzL2pzcC9Db21wb25lbnRUYWdTdXBwb3J0LmphdmEjTDI1KSAtIFVzZXMgYGpha2FydGEu
c2VydmxldC5qc3AuSnNwRXhjZXB0aW9uYAotIFtQcm9wZXJ0eS5qYXZhXShodHRwczovL2dpdGh1
Yi5jb20vYXBhY2hlL3N0cnV0cy9ibG9iLzA2ZjlmOTMwMzM4N2VkZjA1NTdkMTI4YmJkNzEyM2Jk
ZWQ0ZjI0ZjUvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzMi9jb21wb25lbnRz
L1Byb3BlcnR5LmphdmEpIC0gUHVyZSBKYXZhLCBubyBzZXJ2bGV0IEFQSSBkZXBlbmRlbmNpZXMK
CioqQ29uY2x1c2lvbioqOiBKYWthcnRhIEVFIG1pZ3JhdGlvbiBpcyBub3QgdGhlIGNhdXNlIG9m
IHRoZSB0cnVuY2F0aW9uIGlzc3VlLgoKLS0tCgojIyMgMi4gQ2hhcmFjdGVyIEVuY29kaW5nIFRy
dW5jYXRpb24gaW4gRmFzdEJ5dGVBcnJheU91dHB1dFN0cmVhbQoKKipGaWxlKio6IGBjb3JlL3Ny
Yy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMyL3V0aWwvRmFzdEJ5dGVBcnJheU91dHB1dFN0
cmVhbS5qYXZhYAoKKipDcml0aWNhbCBDb2RlIC0gTGluZXMgODctMTA3Kio6CmBgYGphdmEKcHVi
bGljIHZvaWQgd3JpdGVUbyhXcml0ZXIgb3V0LCBTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBJT0V4
Y2VwdGlvbiB7CiAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgewogICAgICAgIENoYXJzZXREZWNv
ZGVyIGRlY29kZXIgPSBnZXREZWNvZGVyKGVuY29kaW5nKTsKICAgICAgICBDaGFyQnVmZmVyIGNo
YXJCdWZmZXIgPSBDaGFyQnVmZmVyLmFsbG9jYXRlKGJ1ZmZlci5sZW5ndGgpOwogICAgICAgIGZs
b2F0IGJ5dGVzUGVyQ2hhciA9IGRlY29kZXIuY2hhcnNldCgpLm5ld0VuY29kZXIoKS5tYXhCeXRl
c1BlckNoYXIoKTsKICAgICAgICBCeXRlQnVmZmVyIGJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLmFs
bG9jYXRlKChpbnQpIChidWZmZXIubGVuZ3RoICsgYnl0ZXNQZXJDaGFyKSk7CgogICAgICAgIGlm
IChidWZmZXJzICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChieXRlW10gYnl0ZXMgOiBidWZm
ZXJzKSB7CiAgICAgICAgICAgICAgICBkZWNvZGVBbmRXcml0ZU91dChvdXQsIGJ5dGVzLCBieXRl
cy5sZW5ndGgsIGJ5dGVCdWZmZXIsIGNoYXJCdWZmZXIsIGRlY29kZXIsIGZhbHNlKTsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWNvZGVBbmRXcml0ZU91dChvdXQsIGJ1ZmZlciwg
aW5kZXgsIGJ5dGVCdWZmZXIsIGNoYXJCdWZmZXIsIGRlY29kZXIsIHRydWUpOwogICAgfSBlbHNl
IHsKICAgICAgICAvLyBEaXJlY3Qgd3JpdGUgd2l0aG91dCBlbmNvZGluZyBjb252ZXJzaW9uCiAg
ICAgICAgaWYgKGJ1ZmZlcnMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKGJ5dGVbXSBieXRl
cyA6IGJ1ZmZlcnMpIHsKICAgICAgICAgICAgICAgIHdyaXRlT3V0KG91dCwgYnl0ZXMsIGJ5dGVz
Lmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd3JpdGVPdXQob3V0LCBi
dWZmZXIsIGluZGV4KTsKICAgIH0KfQpgYGAKCioqRGVjb2RpbmcgTG9vcCAtIExpbmVzIDE2NS0x
ODEqKjoKYGBgamF2YQpwcml2YXRlIENvZGVyUmVzdWx0IGRlY29kZUFuZFdyaXRlKFdyaXRlciB3
cml0ZXIsIEJ5dGVCdWZmZXIgaW4sIENoYXJCdWZmZXIgb3V0LCBDaGFyc2V0RGVjb2RlciBkZWNv
ZGVyLCBib29sZWFuIGVuZE9mSW5wdXQpIHsKICAgIENvZGVyUmVzdWx0IHJlc3VsdDsKICAgIGRv
IHsKICAgICAgICByZXN1bHQgPSBkZWNvZGVyLmRlY29kZShpbiwgb3V0LCBlbmRPZklucHV0KTsK
ICAgICAgICBvdXQuZmxpcCgpOwogICAgICAgIHdyaXRlci53cml0ZShvdXQuYXJyYXkoKSwgb3V0
LmFycmF5T2Zmc2V0KCksIG91dC5yZW1haW5pbmcoKSk7CiAgICAgICAgb3V0LmNsZWFyKCk7CiAg
ICAgICAgLy8gTG9vcCBjb250aW51ZXMgT05MWSBpZiBubyBlcnJvciBhbmQgYnVmZmVyIG92ZXJm
bG93CiAgICB9IHdoaWxlIChpbi5oYXNSZW1haW5pbmcoKSAmJiByZXN1bHQuaXNPdmVyZmxvdygp
ICYmICFyZXN1bHQuaXNFcnJvcigpKTsKCiAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgewogICAg
ICAgIGlmIChMT0cuaXNXYXJuRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIExPRy53YXJuKCJCdWZm
ZXIgZGVjb2RpbmctaW4tdG8tb3V0IFt7fV0gZmFpbGVkLCBjb2RlclJlc3VsdCBbe31dIiwKICAg
ICAgICAgICAgICAgICAgICAgZGVjb2Rlci5jaGFyc2V0KCkubmFtZSgpLCByZXN1bHQudG9TdHJp
bmcoKSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQpgYGAKCioqRGVjb2Rl
ciBDb25maWd1cmF0aW9uIC0gTGluZXMgMTEzLTExOCoqOgpgYGBqYXZhCnByaXZhdGUgQ2hhcnNl
dERlY29kZXIgZ2V0RGVjb2RlcihTdHJpbmcgZW5jb2RpbmcpIHsKICAgIENoYXJzZXQgY2hhcnNl
dCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7CiAgICByZXR1cm4gY2hhcnNldC5uZXdEZWNv
ZGVyKCkKICAgICAgICAgICAgLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQ
T1JUKSAgICAgIC8vIOKGkCBSRVBPUlRTIGVycm9ycywgaGFsdHMgZGVjb2RpbmcKICAgICAgICAg
ICAgLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBMQUNFKTsgLy8g
UmVwbGFjZXMgdW5tYXBwYWJsZSBjaGFycwp9CmBgYAoKKipUZXN0IEV2aWRlbmNlIC0gYEZhc3RC
eXRlQXJyYXlPdXRwdXRTdHJlYW1UZXN0LmphdmE6MTUxLTIwOGAqKjoKYGBgamF2YQovLyBUZXN0
IGV4cGxpY2l0bHkgZG9jdW1lbnRzIGVuY29kaW5nIHRydW5jYXRpb24gYmVoYXZpb3IKcHVibGlj
IHZvaWQgdGVzdElTTzg4NTlfMVdyaXRlVG9VVEY4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBG
YXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgRmFzdEJ5dGVBcnJheU91dHB1dFN0
cmVhbSgpOwoKICAgIC8vIFdyaXRlIElTTy04ODU5LTEgZW5jb2RlZCBieXRlcwogICAgYmFvcy53
cml0ZShpc284ODU5XzFfYnl0ZUFycmF5KTsKCiAgICAvLyBUcnkgdG8gZGVjb2RlIGFzIFVURi04
IC0gd2lsbCB0cnVuY2F0ZSBhdCBhY2NlbnRlZCBjaGFyYWN0ZXJzCiAgICBhc3NlcnRGYWxzZSgi
VVRGLTggc3RyaW5nIG1hdGNoZXMgYnVmZmVyIHdyaXRlIHJlc3VsdCAobm8gdHJ1bmNhdGlvbiki
LAogICAgICAgICAgICAgICAgdXRmOF9TdHJpbmcuZXF1YWxzKGJhb3MudG9TdHJpbmcoIlVURi04
IikpKTsKCiAgICBhc3NlcnRUcnVlKCJCdWZmZXIgd3JpdGUgcmVzdWx0IG5vdCB0cnVuY2F0ZWQi
LAogICAgICAgICAgICAgICBiYW9zLnRvU3RyaW5nKCJVVEYtOCIpLmxlbmd0aCgpIDwgdXRmOF9T
dHJpbmcubGVuZ3RoKCkpOwogICAgLy8g4oaRIFRlc3QgRVhQRUNUUyB0cnVuY2F0aW9uIHdoZW4g
ZW5jb2RpbmcgbWlzbWF0Y2ggb2NjdXJzCn0KYGBgCgoqKkhpc3RvcmljYWwgSXNzdWUgUmVmZXJl
bmNlKio6Ci0gTGluZSAxOTggcmVmZXJlbmNlcyBgV1ctNDM4M2AgLSBpbmZpbml0ZSBsb29wIGlz
c3VlIHRoYXQgcmVxdWlyZWQgb3V0cHV0IGNsZWFyaW5nCgotLS0KCiMjIyAzLiBTdHJ1dHMgUHJv
cGVydHkgVGFnIFJlbmRlcmluZyBQaXBlbGluZQoKKipGaWxlKio6IGBjb3JlL3NyYy9tYWluL2ph
dmEvb3JnL2FwYWNoZS9zdHJ1dHMyL2NvbXBvbmVudHMvUHJvcGVydHkuamF2YWAKCioqTWFpbiBS
ZW5kZXJpbmcgLSBMaW5lcyAxMzQtMTU4Kio6CmBgYGphdmEKcHVibGljIGJvb2xlYW4gc3RhcnQo
V3JpdGVyIHdyaXRlcikgewogICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5zdGFydCh3cml0ZXIp
OwoKICAgIFN0cmluZyBhY3R1YWxWYWx1ZTsKCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAg
ICAgIHZhbHVlID0gInRvcCI7CiAgICB9CgogICAgLy8gUmV0cmlldmUgdmFsdWUgZnJvbSBPR05M
IFZhbHVlU3RhY2sKICAgIGFjdHVhbFZhbHVlID0gKFN0cmluZykgZ2V0U3RhY2soKS5maW5kVmFs
dWUodmFsdWUsIFN0cmluZy5jbGFzcywgdGhyb3dFeGNlcHRpb25PbkVMRmFpbHVyZSk7CgogICAg
dHJ5IHsKICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICB3cml0
ZXIud3JpdGUocHJlcGFyZShhY3R1YWxWYWx1ZSkpOyAgLy8gRGlyZWN0IHdyaXRlIHRvIEpTUCB3
cml0ZXIKICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgICAg
ICAgIHdyaXRlci53cml0ZShwcmVwYXJlKGRlZmF1bHRWYWx1ZSkpOwogICAgICAgIH0KICAgIH0g
Y2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICBMT0cuaW5mbygiQ291bGQgbm90IHByaW50
IG91dCB2YWx1ZSAne30nIiwgdmFsdWUsIGUpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0K
YGBgCgoqKkVzY2FwaW5nIExvZ2ljIC0gTGluZXMgMTYwLTE3NyoqOgpgYGBqYXZhCnByaXZhdGUg
U3RyaW5nIHByZXBhcmUoU3RyaW5nIHZhbHVlKSB7CiAgICBTdHJpbmcgcmVzdWx0ID0gdmFsdWU7
CgogICAgaWYgKGVzY2FwZUh0bWwpIHsKICAgICAgICByZXN1bHQgPSBTdHJpbmdFc2NhcGVVdGls
cy5lc2NhcGVIdG1sNChyZXN1bHQpOwogICAgfQogICAgaWYgKGVzY2FwZUphdmFTY3JpcHQpIHsK
ICAgICAgICByZXN1bHQgPSBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVFY21hU2NyaXB0KHJlc3Vs
dCk7CiAgICB9CiAgICBpZiAoZXNjYXBlWG1sKSB7CiAgICAgICAgcmVzdWx0ID0gU3RyaW5nRXNj
YXBlVXRpbHMuZXNjYXBlWG1sMTAocmVzdWx0KTsKICAgIH0KICAgIGlmIChlc2NhcGVDc3YpIHsK
ICAgICAgICByZXN1bHQgPSBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVDc3YocmVzdWx0KTsKICAg
IH0KCiAgICByZXR1cm4gcmVzdWx0Owp9CmBgYAoKKipEZWZhdWx0IEVzY2FwZSBTZXR0aW5nKio6
Ci0gTGluZSA5NTogYHByaXZhdGUgYm9vbGVhbiBlc2NhcGVIdG1sID0gdHJ1ZTtgIC0gKipIVE1M
IGVzY2FwaW5nIGVuYWJsZWQgYnkgZGVmYXVsdCoqCi0gVXNlciBjb3JyZWN0bHkgdXNlcyBgZXNj
YXBlSHRtbD0iZmFsc2UiYCBpbiB0aGVpciBKU1AKCioqRmxvdyoqOgoxLiBgUHJvcGVydHlUYWdg
IChKU1AgaGFuZGxlcikgY3JlYXRlcyBgUHJvcGVydHlgIGNvbXBvbmVudAoyLiBDb21wb25lbnQg
cmV0cmlldmVzIHZhbHVlIGZyb20gVmFsdWVTdGFjayAoYWN0aW9uJ3MgcHJvcGVydHkpCjMuIFZh
bHVlIHBhc3NlZCB0aHJvdWdoIGBwcmVwYXJlKClgIGZvciBlc2NhcGluZyAodXNlciBkaXNhYmxl
cyBIVE1MIGVzY2FwaW5nKQo0LiBFc2NhcGVkIHZhbHVlIHdyaXR0ZW4gdG8gYFdyaXRlcmAgKGNv
dWxkIGJlIGBKc3BXcml0ZXJgIGRpcmVjdGx5IG9yIGJ1ZmZlcmVkIHdyaXRlcikKCioqS2V5IE9i
c2VydmF0aW9uKio6IFRoZSBgUHJvcGVydHlgIGNvbXBvbmVudCB3cml0ZXMgZGlyZWN0bHkgdG8g
dGhlIHByb3ZpZGVkIGBXcml0ZXJgLiBJZiB0aGlzIHdyaXRlciBpcyBiYWNrZWQgYnkgYEZhc3RC
eXRlQXJyYXlPdXRwdXRTdHJlYW1gIHdpdGggZW5jb2RpbmcgY29udmVyc2lvbiwgdHJ1bmNhdGlv
biBjYW4gb2NjdXIuCgotLS0KCiMjIyA0LiBTaXRlTWVzaCBJbnRlZ3JhdGlvbiBhbmQgUmVzcG9u
c2UgQnVmZmVyaW5nCgoqKkNvbmZpZ3VyYXRpb24qKjogYGFwcHMvc2hvd2Nhc2Uvc3JjL21haW4v
d2ViYXBwL1dFQi1JTkYvd2ViLnhtbGAKCioqRmlsdGVyIENoYWluKio6CmBgYHhtbAo8IS0tIE9y
ZGVyIGlzIGNyaXRpY2FsIC0tPgoxLiBzdHJ1dHMtcHJlcGFyZSAgICAtIFByZXBhcmVzIEFjdGlv
bkNvbnRleHQKMi4gc2l0ZW1lc2gzICAgICAgICAgLSBCdWZmZXJzIHJlc3BvbnNlIGZvciBkZWNv
cmF0aW9uCjMuIHN0cnV0cy1leGVjdXRlICAgIC0gRXhlY3V0ZXMgYWN0aW9uCmBgYAoKKipTaXRl
TWVzaCBWZXJzaW9uKio6IDMuMi4yIChKYWthcnRhIEVFIGNvbXBhdGlibGUpCgoqKlNpdGVNZXNo
IENvbmZpZ3VyYXRpb24qKjogYGFwcHMvc2hvd2Nhc2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYv
c2l0ZW1lc2gzLnhtbGAKYGBgeG1sCjxzaXRlbWVzaD4KICAgIDxtYXBwaW5nIHBhdGg9Ii8qIiBk
ZWNvcmF0b3I9Im1haW4uanNwIi8+CiAgICA8bWFwcGluZyBwYXRoPSIvZGVidWcuanNwIiBleGNs
dWRlPSJ0cnVlIi8+CiAgICA8IS0tIEpTT04gZW5kcG9pbnRzIHNob3VsZCBiZSBleGNsdWRlZCAt
LT4KPC9zaXRlbWVzaD4KYGBgCgoqKlNpdGVNZXNoIFJlc3BvbnNlIFdyYXBwZXIgQmVoYXZpb3Iq
KjoKLSBTaXRlTWVzaCAzLnggd3JhcHMgdGhlIGBIdHRwU2VydmxldFJlc3BvbnNlYCB0byBidWZm
ZXIgKipBTEwgb3V0cHV0KioKLSBCdWZmZXJlZCBjb250ZW50IGlzIHJlYWQgYWZ0ZXIgYWN0aW9u
IGV4ZWN1dGlvbgotIERlY29yYXRvciB0ZW1wbGF0ZSBpcyBhcHBsaWVkIHRvIGJ1ZmZlcmVkIGNv
bnRlbnQKLSBGaW5hbCBkZWNvcmF0ZWQgb3V0cHV0IHNlbnQgdG8gY2xpZW50CgoqKlN0cnV0cy1T
aXRlTWVzaCBJbnRlcmFjdGlvbioqOgoKRmlsZTogYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBh
Y2hlL3N0cnV0czIvdmlld3MvZnJlZW1hcmtlci9GcmVlbWFya2VyUmVzdWx0LmphdmE6MzQ0YApg
YGBqYXZhCi8vIFRyaWdnZXIgU2l0ZU1lc2ggZGVhY3RpdmF0aW9uIHdoZW4gaW5zaWRlIGFjdGlv
biB0YWcKcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUocmVzcG9uc2UuZ2V0Q29udGVudFR5cGUoKSk7
CmBgYAoKKipLZXkgSW5zaWdodCoqOiBTaXRlTWVzaCBidWZmZXJzIHRoZSBlbnRpcmUgcmVzcG9u
c2UuIElmIHRoZSBidWZmZXJpbmcgbWVjaGFuaXNtIHVzZXMgY2hhcmFjdGVyIGVuY29kaW5nIGNv
bnZlcnNpb24gKHdoaWNoIG1pZ2h0IGRpZmZlciBiZXR3ZWVuIFRvbWNhdCAxMCBhbmQgVG9tY2F0
IDExIGltcGxlbWVudGF0aW9ucyksIHRoZSBgRmFzdEJ5dGVBcnJheU91dHB1dFN0cmVhbWAgZW5j
b2RpbmcgaXNzdWUgY291bGQgYmUgdHJpZ2dlcmVkLgoKLS0tCgojIyMgNS4gUmVzcG9uc2UgV3Jp
dGVyIGFuZCBCdWZmZXIgSGFuZGxpbmcKCioqSW5jbHVkZSBDb21wb25lbnQncyBQYWdlUmVzcG9u
c2UgV3JhcHBlcioqOgoKRmlsZTogYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0
czIvY29tcG9uZW50cy9JbmNsdWRlLmphdmE6MzgwLTQyMGAKCmBgYGphdmEKc3RhdGljIGZpbmFs
IGNsYXNzIFBhZ2VSZXNwb25zZSBleHRlbmRzIEh0dHBTZXJ2bGV0UmVzcG9uc2VXcmFwcGVyIHsK
ICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgcGFnZVByaW50V3JpdGVyOwogICAgcHJpdmF0ZSBQYWdl
T3V0cHV0U3RyZWFtIHBhZ2VPdXRwdXRTdHJlYW0gPSBudWxsOwoKICAgIHB1YmxpYyBGYXN0Qnl0
ZUFycmF5T3V0cHV0U3RyZWFtIGdldENvbnRlbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAg
ICAgIGlmIChwYWdlUHJpbnRXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICBwYWdlUHJpbnRX
cml0ZXIuZmx1c2goKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICgoUGFnZU91dHB1dFN0cmVh
bSkgZ2V0T3V0cHV0U3RyZWFtKCkpLmdldEJ1ZmZlcigpOwogICAgfQoKICAgIEBPdmVycmlkZQog
ICAgcHVibGljIFByaW50V3JpdGVyIGdldFdyaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAg
ICAgICAgaWYgKHBhZ2VQcmludFdyaXRlciA9PSBudWxsKSB7CiAgICAgICAgICAgIHBhZ2VQcmlu
dFdyaXRlciA9IG5ldyBQcmludFdyaXRlcigKICAgICAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJl
YW1Xcml0ZXIoZ2V0T3V0cHV0U3RyZWFtKCksIGdldENoYXJhY3RlckVuY29kaW5nKCkpKTsKICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIHBhZ2VQcmludFdyaXRlcjsKICAgIH0KfQpgYGAKCioqUGFn
ZU91dHB1dFN0cmVhbSAtIExpbmVzIDMxMC0zNDAqKjoKYGBgamF2YQpzdGF0aWMgZmluYWwgY2xh
c3MgUGFnZU91dHB1dFN0cmVhbSBleHRlbmRzIFNlcnZsZXRPdXRwdXRTdHJlYW0gewogICAgcHJp
dmF0ZSBmaW5hbCBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZmZlcjsKCiAgICBwdWJsaWMg
UGFnZU91dHB1dFN0cmVhbSgpIHsKICAgICAgICBidWZmZXIgPSBuZXcgRmFzdEJ5dGVBcnJheU91
dHB1dFN0cmVhbSgpOwogICAgfQoKICAgIHB1YmxpYyBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFt
IGdldEJ1ZmZlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgZmx1c2goKTsKICAgICAg
ICByZXR1cm4gYnVmZmVyOwogICAgfQp9CmBgYAoKKipUaGlzIGlzIGEgcG90ZW50aWFsIHRyaWdn
ZXIqKjogSWYgdGhlIEluY2x1ZGUgY29tcG9uZW50IChvciBzaW1pbGFyIHJlc3BvbnNlIHdyYXBw
aW5nKSBpcyBpbiB0aGUgcGlwZWxpbmUsIGBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtYCBpcyB1
c2VkLCBhbmQgaWYgZW5jb2RpbmcgY29udmVyc2lvbiBoYXBwZW5zLCB0cnVuY2F0aW9uIGNhbiBv
Y2N1ci4KCi0tLQoKIyMjIDYuIENoYXJhY3RlciBFbmNvZGluZyBDb25maWd1cmF0aW9uIFBvaW50
cwoKKipEaXNwYXRjaGVyIEVuY29kaW5nIFNldHVwKio6CgpGaWxlOiBgY29yZS9zcmMvbWFpbi9q
YXZhL29yZy9hcGFjaGUvc3RydXRzMi9kaXNwYXRjaGVyL0Rpc3BhdGNoZXIuamF2YTo5NjYtOTc5
YAoKYGBgamF2YQpTdHJpbmcgZW5jb2RpbmcgPSBnZXRFbmNvZGluZygpOwoKaWYgKCFlbmNvZGlu
Zy5lcXVhbHMocmVxdWVzdC5nZXRDaGFyYWN0ZXJFbmNvZGluZygpKSkgewogICAgdHJ5IHsKICAg
ICAgICByZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKGVuY29kaW5nKTsKICAgIH0gY2F0Y2gg
KEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgTE9HLndhcm4oIkNhbm5vdCBzZXQgcmVxdWVzdCBjaGFy
YWN0ZXIgZW5jb2RpbmcgdG8ge30iLCBlbmNvZGluZywgZSk7CiAgICB9Cn0KCmlmICghZW5jb2Rp
bmcuZXF1YWxzKHJlc3BvbnNlLmdldENoYXJhY3RlckVuY29kaW5nKCkpKSB7CiAgICByZXNwb25z
ZS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhlbmNvZGluZyk7Cn0KYGBgCgoqKkluY2x1ZGUgQ29tcG9u
ZW50IEVuY29kaW5nIExvZ2ljKio6CgpGaWxlOiBgY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFj
aGUvc3RydXRzMi9jb21wb25lbnRzL0luY2x1ZGUuamF2YToxMjUtMTQwYAoKYGBgamF2YQpTdHJp
bmcgZW5jb2RpbmdGb3JJbmNsdWRlOwoKaWYgKHVzZVJlc3BvbnNlRW5jb2RpbmcpIHsKICAgIGVu
Y29kaW5nRm9ySW5jbHVkZSA9IHJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOyAgLy8gVXNlIHBh
Z2UgZW5jb2RpbmcKICAgIGlmIChlbmNvZGluZ0ZvckluY2x1ZGUgPT0gbnVsbCB8fCBlbmNvZGlu
Z0ZvckVuY29kaW5nLmlzRW1wdHkoKSkgewogICAgICAgIGVuY29kaW5nRm9ySW5jbHVkZSA9IGRl
ZmF1bHRFbmNvZGluZzsgIC8vIEZhbGxiYWNrCiAgICB9Cn0gZWxzZSB7CiAgICBlbmNvZGluZ0Zv
ckluY2x1ZGUgPSBkZWZhdWx0RW5jb2Rpbmc7Cn0KYGBgCgoqKkNyaXRpY2FsIFBvaW50Kio6IElm
IGByZXNwb25zZS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpYCByZXR1cm5zIGEgZGlmZmVyZW50IGVu
Y29kaW5nIHRoYW4gdGhlIGNvbnRlbnQncyBhY3R1YWwgZW5jb2RpbmcsIGFuZCBgRmFzdEJ5dGVB
cnJheU91dHB1dFN0cmVhbS53cml0ZVRvKHdyaXRlciwgZW5jb2RpbmcpYCBpcyBjYWxsZWQsICoq
ZW5jb2RpbmcgY29udmVyc2lvbiBjYW4gZmFpbCBhbmQgdHJ1bmNhdGUqKi4KCi0tLQoKIyMjIDcu
IEJ1ZmZlciBTaXplIENvbmZpZ3VyYXRpb25zCgoqKk5vIFJlc3BvbnNlIFNpemUgTGltaXRzKio6
IFN0cnV0cyBkb2VzIG5vdCBpbXBvc2UgZXhwbGljaXQgcmVzcG9uc2Ugc2l6ZSBsaW1pdHMgZm9y
IEhUTUwvSlNPTiByZXNwb25zZXMuCgoqKkZhc3RCeXRlQXJyYXlPdXRwdXRTdHJlYW0gLSBCbG9j
ay1CYXNlZCBHcm93dGgqKjoKLSBEZWZhdWx0IGJsb2NrIHNpemU6ICoqODE5MiBieXRlcyoqICg4
S0IpCi0gVXNlcyBgTGlua2VkTGlzdDxieXRlW10+YCB0byBncm93IGluZGVmaW5pdGVseQotICoq
Tm8gbWF4aW11bSBzaXplIGxpbWl0KioKLSBMaW5lcyA0OS02MzogQXV0b21hdGljYWxseSBhZGRz
IG5ldyBidWZmZXJzIHdoZW4gY3VycmVudCBibG9jayBmaWxscwoKKipGcmVlbWFya2VyUmVzdWx0
IC0gQ2hhckFycmF5V3JpdGVyKio6Ci0gVXNlcyBKREsncyBgQ2hhckFycmF5V3JpdGVyYCAoZ3Jv
d3MgdG8gYEludGVnZXIuTUFYX1ZBTFVFYCkKLSBObyBwcmFjdGljYWwgc2l6ZSBsaW1pdCAob25s
eSBoZWFwIG1lbW9yeSkKCioqU3RyZWFtL1BsYWluVGV4dCBSZXN1bHRzKio6Ci0gYFN0cmVhbVJl
c3VsdGA6IDEwMjQgYnl0ZXMgYnVmZmVyCi0gYFBsYWluVGV4dFJlc3VsdGA6IDEwMjQgY2hhcmFj
dGVycyBidWZmZXIKLSBOb3QgcmVsZXZhbnQgZm9yIEpTUCByZW5kZXJpbmcKCioqQ29uY2x1c2lv
bioqOiBCdWZmZXIgc2l6ZSBsaW1pdHMgYXJlICoqTk9UIHRoZSBjYXVzZSoqIG9mIHRydW5jYXRp
b24uCgotLS0KCiMjIyA4LiBKc3BXcml0ZXIgQnVmZmVyIEJlaGF2aW9yIC0gamF2YXggdnMgamFr
YXJ0YQoKKipBUEkgQ29tcGF0aWJpbGl0eSoqOiBUaGUgYEpzcFdyaXRlcmAgaW50ZXJmYWNlIGlz
ICoqaWRlbnRpY2FsKiogYmV0d2VlbjoKLSBgamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyYCAo
SmF2YSBFRSA4LCBUb21jYXQgMTApCi0gYGpha2FydGEuc2VydmxldC5qc3AuSnNwV3JpdGVyYCAo
SmFrYXJ0YSBFRSAxMCwgVG9tY2F0IDExKQoKKipObyBBUEkgQ2hhbmdlcyoqOiBUaGUgSmFrYXJ0
YSBFRSAxMCBtaWdyYXRpb24gZGlkIG5vdCBjaGFuZ2UgYW55IG1ldGhvZCBzaWduYXR1cmVzIG9y
IGJlaGF2aW9yIGluIHRoZSBKU1AgQVBJIHNwZWNpZmljYXRpb24uCgoqKkNvbnRhaW5lciBJbXBs
ZW1lbnRhdGlvbiBEaWZmZXJlbmNlcyoqOiBIb3dldmVyLCAqKnNlcnZsZXQgY29udGFpbmVyIGlt
cGxlbWVudGF0aW9ucyBtYXkgZGlmZmVyKio6Cgp8IEFzcGVjdCB8IFRvbWNhdCAxMC4xLnggKGph
dmF4KSB8IFRvbWNhdCAxMS54IChqYWthcnRhKSB8CnwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBEZWZhdWx0IGJ1ZmZlciBzaXplIHwgOEtC
IHwgOEtCIChzYW1lKSB8CnwgQXV0by1mbHVzaCBiZWhhdmlvciB8IE9uIGJ1ZmZlciBmdWxsIHwg
T24gYnVmZmVyIGZ1bGwgKHNhbWUpIHwKfCBDaGFyYWN0ZXIgZW5jb2RpbmcgfCBDb250YWluZXIg
Y2hhcnNldCB8IENvbnRhaW5lciBjaGFyc2V0IHwKfCAqKkltcGxlbWVudGF0aW9uIGNsYXNzKiog
fCBgb3JnLmFwYWNoZS5qYXNwZXIucnVudGltZS5Kc3BXcml0ZXJJbXBsYCB8IGBvcmcuYXBhY2hl
Lmphc3Blci5ydW50aW1lLkpzcFdyaXRlckltcGxgIChzYW1lIHBhY2thZ2UpIHwKCioqUG90ZW50
aWFsIERpZmZlcmVuY2UqKjogV2hpbGUgdGhlIEFQSSBhbmQgZGVmYXVsdCBUb21jYXQgaW1wbGVt
ZW50YXRpb24gYXJlIHRoZSBzYW1lLCAqKmNoYXJhY3RlciBlbmNvZGluZyBoYW5kbGluZyBpbiB0
aGUgc2VydmxldCBjb250YWluZXIncyByZXNwb25zZSBwaXBlbGluZSoqIG1pZ2h0IGhhdmUgc3Vi
dGxlIGRpZmZlcmVuY2VzIGR1ZSB0bzoKMS4gSW50ZXJuYWwgSmFrYXJ0YSBTZXJ2bGV0IDYuMCBj
aGFuZ2VzCjIuIFVwZGF0ZWQgY2hhcmFjdGVyIGVuY29kaW5nIGxpYnJhcmllcyBpbiBUb21jYXQg
MTEKMy4gRGlmZmVyZW50IGRlZmF1bHQgY2hhcnNldCBoYW5kbGluZyBpbiBKYWthcnRhIFNlcnZs
ZXQgQVBJCgotLS0KCiMjIyA5LiBXaHkgRGlyZWN0IEpTUCBXb3JrcyBidXQgQWN0aW9uLUJhc2Vk
IFJlbmRlcmluZyBGYWlscwoKKipEaXJlY3QgSlNQIFJlbmRlcmluZyoqIChgPHM6c2V0PmAgaW4g
SlNQKToKYGBgClJlcXVlc3Qg4oaSIFNpdGVNZXNoIEZpbHRlciDihpIgSlNQIEVuZ2luZSDihpIg
SnNwV3JpdGVyIChkaXJlY3QpIOKGkiBTaXRlTWVzaCBCdWZmZXIg4oaSIFJlc3BvbnNlCmBgYAot
IFZhbHVlIHNldCBpbiBKU1Agc2NvcGUKLSBgPHM6cHJvcGVydHk+YCByZWFkcyBmcm9tIEpTUCBz
Y29wZSB2YXJpYWJsZQotIFdyaXR0ZW4gZGlyZWN0bHkgdG8gYEpzcFdyaXRlcmAKLSAqKk5vIGVu
Y29kaW5nIGNvbnZlcnNpb24qKiB0aHJvdWdoIGBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtYAot
IFNpdGVNZXNoIGJ1ZmZlcnMgYXQgdGhlIHNlcnZsZXQgbGV2ZWwgKG5vdCBjaGFyYWN0ZXIgZW5j
b2RpbmcgbGV2ZWwpCgoqKkFjdGlvbi1CYXNlZCBSZW5kZXJpbmcqKiAoQWN0aW9uIHBhcmFtZXRl
ciDihpIgSlNQKToKYGBgClJlcXVlc3Qg4oaSIFNpdGVNZXNoIEZpbHRlciDihpIgQWN0aW9uIEV4
ZWN1dGlvbiDihpIgVmFsdWVTdGFjayDihpIgPHM6cHJvcGVydHk+IOKGkiBXcml0ZXIgKD8pIOKG
kiBTaXRlTWVzaCBCdWZmZXIg4oaSIFJlc3BvbnNlCmBgYAoKKipDcml0aWNhbCBEaWZmZXJlbmNl
Kio6IERlcGVuZGluZyBvbiB0aGUgcmVzcG9uc2Ugd3JhcHBlciBjaGFpbiBhbmQgaW5jbHVkZSBj
b21wb25lbnRzOgoxLiBBY3Rpb24gc2V0cyB2YWx1ZSBvbiBpdHNlbGYgKEphdmEgU3RyaW5nIGlu
IG1lbW9yeSkKMi4gVmFsdWUgcHVzaGVkIHRvIFZhbHVlU3RhY2sKMy4gYDxzOnByb3BlcnR5PmAg
cmV0cmlldmVzIGZyb20gVmFsdWVTdGFjawo0LiBJZiB0aGUgd3JpdGVyIGNoYWluIGluY2x1ZGVz
IGBQYWdlUmVzcG9uc2VgIHdpdGggYFBhZ2VPdXRwdXRTdHJlYW1gOgogICAtIFdyaXRlciDihpIg
YFByaW50V3JpdGVyYCDihpIgYE91dHB1dFN0cmVhbVdyaXRlcihlbmNvZGluZylgIOKGkiBgUGFn
ZU91dHB1dFN0cmVhbWAg4oaSIGBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtYAogICAtIExhdGVy
LCBjb250ZW50IHJlYWQgdmlhIGBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtLndyaXRlVG8od3Jp
dGVyLCBlbmNvZGluZylgCiAgIC0gKipFbmNvZGluZyBjb252ZXJzaW9uIGhhcHBlbnMgaGVyZSoq
IOKGkiB0cnVuY2F0aW9uIHJpc2sKNS4gU2l0ZU1lc2ggcmVhZHMgYnVmZmVyZWQgY29udGVudCDi
hpIgYXBwbGllcyBkZWNvcmF0b3IKCioqSHlwb3RoZXNpcyoqOiBUaGUgSW5jbHVkZSBjb21wb25l
bnQncyByZXNwb25zZSB3cmFwcGVyIChvciBzaW1pbGFyIG1lY2hhbmlzbSkgaXMgc29tZWhvdyBp
biB0aGUgYWN0aW9uLWJhc2VkIHJlbmRlcmluZyBwaXBlbGluZSBidXQgbm90IGluIHRoZSBkaXJl
Y3QgSlNQIHBpcGVsaW5lLgoKLS0tCgojIyMgMTAuIEtub3duIENoYXJhY3RlciBFbmNvZGluZyBJ
c3N1ZXMKCioqSGlzdG9yaWNhbCBJc3N1ZXMqKjoKLSAqKldXLTQzODMqKjogSW5maW5pdGUgbG9v
cCBpbiBvdXRwdXQgY2xlYXJpbmcgKHJlZmVyZW5jZWQgaW4gRmFzdEJ5dGVBcnJheU91dHB1dFN0
cmVhbSkKLSBUZXN0IHN1aXRlIGV4cGxpY2l0bHkgdmFsaWRhdGVzIGVuY29kaW5nIHRydW5jYXRp
b24gYmVoYXZpb3IKCioqVGVzdCBFdmlkZW5jZSoqOgoKRmlsZTogYGNvcmUvc3JjL3Rlc3QvamF2
YS9vcmcvYXBhY2hlL3N0cnV0czIvdXRpbC9GYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtVGVzdC5q
YXZhOjE1MS0yMDhgCgoqKlRlc3Q6IGB0ZXN0SVNPODg1OV8xV3JpdGVUb1VURjhgKio6Ci0gV3Jp
dGVzIElTTy04ODU5LTEgZW5jb2RlZCBieXRlcwotIEF0dGVtcHRzIHRvIGRlY29kZSBhcyBVVEYt
OAotICoqRXhwZWN0cyBhbmQgdmFsaWRhdGVzIHRydW5jYXRpb24qKiB3aGVuIGVuY29kaW5nIG1p
c21hdGNoIG9jY3VycwotIFJlc3VsdCBzdHJpbmcgbGVuZ3RoIDwgaW5wdXQgc3RyaW5nIGxlbmd0
aAoKKipJbnRlcnByZXRhdGlvbioqOiBUaGUgdHJ1bmNhdGlvbiBiZWhhdmlvciBpcyAqKmRvY3Vt
ZW50ZWQgYW5kIHRlc3RlZCoqLCBidXQgdGhpcyBzdWdnZXN0cyBpdCdzIGFuICoqYWNjZXB0ZWQg
bGltaXRhdGlvbioqIHJhdGhlciB0aGFuIGEgYnVnLiBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIGJl
Y29tZXMgcHJvYmxlbWF0aWMgd2hlbjoKMS4gQ29udGVudCBlbmNvZGluZyBkaWZmZXJzIGZyb20g
cmVzcG9uc2UgZW5jb2RpbmcKMi4gSlNPTiBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgQVND
SUkgcmFuZ2UgKDAtMTI3KQozLiBUaGUgcmVzcG9uc2UgcGlwZWxpbmUgdHJpZ2dlcnMgZW5jb2Rp
bmcgY29udmVyc2lvbgoKLS0tCgojIyBDb2RlIFJlZmVyZW5jZXMKCiMjIyBDb3JlIFRydW5jYXRp
b24gTG9naWMKLSBgY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzMi91dGlsL0Zh
c3RCeXRlQXJyYXlPdXRwdXRTdHJlYW0uamF2YTo4Ny0xMDdgIC0gYHdyaXRlVG8oV3JpdGVyLCBT
dHJpbmcpYCBlbmNvZGluZyBjb252ZXJzaW9uCi0gYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBh
Y2hlL3N0cnV0czIvdXRpbC9GYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtLmphdmE6MTEzLTExOGAg
LSBEZWNvZGVyIHdpdGggUkVQT1JUIG9uIG1hbGZvcm1lZCBpbnB1dAotIGBjb3JlL3NyYy9tYWlu
L2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMyL3V0aWwvRmFzdEJ5dGVBcnJheU91dHB1dFN0cmVhbS5q
YXZhOjE2NS0xODFgIC0gRGVjb2RpbmcgbG9vcCB0aGF0IGhhbHRzIG9uIGVycm9yCgojIyMgUHJv
cGVydHkgVGFnIFJlbmRlcmluZwotIGBjb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1
dHMyL2NvbXBvbmVudHMvUHJvcGVydHkuamF2YToxMzQtMTU4YCAtIE1haW4gcmVuZGVyaW5nIGxv
Z2ljCi0gYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0czIvY29tcG9uZW50cy9Q
cm9wZXJ0eS5qYXZhOjE2MC0xNzdgIC0gRXNjYXBlIGhhbmRsaW5nCi0gYGNvcmUvc3JjL21haW4v
amF2YS9vcmcvYXBhY2hlL3N0cnV0czIvdmlld3MvanNwL1Byb3BlcnR5VGFnLmphdmE6NDctNjFg
IC0gSlNQIHRhZyBsaWZlY3ljbGUKCiMjIyBSZXNwb25zZSBCdWZmZXJpbmcKLSBgY29yZS9zcmMv
bWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzMi9jb21wb25lbnRzL0luY2x1ZGUuamF2YTozMTAt
MzQwYCAtIFBhZ2VPdXRwdXRTdHJlYW0gd2l0aCBGYXN0Qnl0ZUFycmF5T3V0cHV0U3RyZWFtCi0g
YGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0czIvY29tcG9uZW50cy9JbmNsdWRl
LmphdmE6MzgwLTQyMGAgLSBQYWdlUmVzcG9uc2Ugd3JhcHBlcgotIGBjb3JlL3NyYy9tYWluL2ph
dmEvb3JnL2FwYWNoZS9zdHJ1dHMyL3ZpZXdzL2ZyZWVtYXJrZXIvRnJlZW1hcmtlclJlc3VsdC5q
YXZhOjM0NGAgLSBTaXRlTWVzaCBkZWFjdGl2YXRpb24KCiMjIyBFbmNvZGluZyBDb25maWd1cmF0
aW9uCi0gYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0czIvZGlzcGF0Y2hlci9E
aXNwYXRjaGVyLmphdmE6OTY2LTk3OWAgLSBSZXF1ZXN0L3Jlc3BvbnNlIGVuY29kaW5nIHNldHVw
Ci0gYGNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0czIvY29tcG9uZW50cy9JbmNs
dWRlLmphdmE6MTI1LTE0MGAgLSBJbmNsdWRlIGVuY29kaW5nIGxvZ2ljCgojIyMgVGVzdCBFdmlk
ZW5jZQotIGBjb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMyL3V0aWwvRmFzdEJ5
dGVBcnJheU91dHB1dFN0cmVhbVRlc3QuamF2YToxNTEtMjA4YCAtIEVuY29kaW5nIHRydW5jYXRp
b24gdGVzdAoKLS0tCgojIyBBcmNoaXRlY3R1cmUgSW5zaWdodHMKCiMjIyAxLiBGYXN0Qnl0ZUFy
cmF5T3V0cHV0U3RyZWFtIERlc2lnbgoKKipQdXJwb3NlKio6IEVmZmljaWVudCBieXRlIGJ1ZmZl
cmluZyB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBgQnl0ZUFycmF5T3V0cHV0U3RyZWFtYCdzIGFy
cmF5IGNvcHlpbmcKCioqRGVzaWduKio6Ci0gQmxvY2stYmFzZWQgZ3Jvd3RoIHVzaW5nIGBMaW5r
ZWRMaXN0PGJ5dGVbXT5gCi0gRGVmYXVsdCA4S0IgYmxvY2tzCi0gTm8gYXJyYXkgY29weWluZy9y
ZXNpemluZyAodW5saWtlIGBCeXRlQXJyYXlPdXRwdXRTdHJlYW1gKQotIE9wdGltaXplZCBmb3Ig
d3JpdGUtb25jZSwgcmVhZC1vbmNlIHNjZW5hcmlvcwoKKipUcmFkZS1vZmYqKjogQ2hhcmFjdGVy
IGVuY29kaW5nIGNvbnZlcnNpb24gdXNlcyBgQ2hhcnNldERlY29kZXJgIHdpdGggc3RyaWN0IGVy
cm9yIHJlcG9ydGluZywgd2hpY2ggcHJpb3JpdGl6ZXMgKipjb3JyZWN0bmVzcyBvdmVyIGxlbmll
bmN5KiouIE1hbGZvcm1lZCBpbnB1dCBjYXVzZXMgZGVjb2RpbmcgdG8gaGFsdCByYXRoZXIgdGhh
biBtYWtpbmcgYXNzdW1wdGlvbnMuCgojIyMgMi4gUmVzcG9uc2UgUGlwZWxpbmUgTGF5ZXJpbmcK
ClN0cnV0cycgcmVzcG9uc2UgaGFuZGxpbmcgaW52b2x2ZXMgbXVsdGlwbGUgbGF5ZXJzOgoKYGBg
CkFjdGlvbiDihpIgVmFsdWVTdGFjayDihpIgQ29tcG9uZW50IChQcm9wZXJ0eSkg4oaSIFdyaXRl
ciAoYWJzdHJhY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAg4oaTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
c3BXcml0ZXIgKGRpcmVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVzcG9uc2UgV3JhcHBlciBDaGFpbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIOKGkiBPdXRwdXRTdHJlYW1Xcml0ZXIoZW5jb2Rp
bmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaT
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWdlT3V0cHV0
U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
4oaTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXN0Qnl0
ZUFycmF5T3V0cHV0U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAg4oaTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXRlcjogd3JpdGVUbyh3cml0ZXIsIGVuY29kaW5nKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSnNwV3JpdGVyIOKGkiBTaXRlTWVzaCBCdWZmZXIg4oaS
IFJlc3BvbnNlCmBgYAoKKipJbXBsaWNhdGlvbioqOiBUaGUgZXhhY3Qgd3JpdGVyIGNoYWluIGRl
cGVuZHMgb246Ci0gV2hldGhlciBpbmNsdWRlcyBhcmUgYmVpbmcgcHJvY2Vzc2VkCi0gV2hldGhl
ciBTaXRlTWVzaCBpcyBhY3RpdmUKLSBXaGV0aGVyIHRlbXBsYXRlcyAoRnJlZW1hcmtlci9WZWxv
Y2l0eSkgYXJlIGludm9sdmVkCi0gQ29udGFpbmVyLXNwZWNpZmljIHJlc3BvbnNlIHdyYXBwZXIg
aW1wbGVtZW50YXRpb25zCgojIyMgMy4gRW5jb2RpbmcgSGFuZGxpbmcgUGhpbG9zb3BoeQoKU3Ry
dXRzIGZvbGxvd3MgYSAqKm11bHRpLWxldmVsIGVuY29kaW5nIHN0cmF0ZWd5Kio6CgoxLiAqKkNv
bmZpZ3VyYXRpb24gbGV2ZWwqKjogYHN0cnV0cy5pMThuLmVuY29kaW5nYCBjb25zdGFudAoyLiAq
KlJlcXVlc3QgbGV2ZWwqKjogYHJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoKWAKMy4gKipS
ZXNwb25zZSBsZXZlbCoqOiBgcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoKWAKNC4gKipJ
bmNsdWRlIGxldmVsKio6IGB1c2VSZXNwb25zZUVuY29kaW5nYCBmbGFnIHdpdGggZmFsbGJhY2sg
dG8gZGVmYXVsdAoKKipEZXNpZ24gSW50ZW50Kio6IFJlc3BlY3QgcGFnZS1sZXZlbCBlbmNvZGlu
ZyB3aGlsZSBhbGxvd2luZyBwZXItaW5jbHVkZSBvdmVycmlkZQoKKipWdWxuZXJhYmlsaXR5Kio6
IEVuY29kaW5nIG1pc21hdGNoZXMgY2FuIG9jY3VyIHdoZW46Ci0gQWN0aW9uIHN0b3JlcyBTdHJp
bmcgaW4gSlZNJ3MgbmF0aXZlIFVURi0xNgotIFJlc3BvbnNlIGVuY29kaW5nIHNldCB0byBJU08t
ODg1OS0xIG9yIG90aGVyIGxpbWl0ZWQgY2hhcnNldAotIENvbnRlbnQgY29udGFpbnMgY2hhcmFj
dGVycyBvdXRzaWRlIHRhcmdldCBjaGFyc2V0IHJhbmdlCi0gRGVjb2Rpbmcgd2l0aCBSRVBPUlQg
cG9saWN5IGhhbHRzIGF0IGZpcnN0IHByb2JsZW1hdGljIGNoYXJhY3RlcgoKLS0tCgojIyBSZWNv
bW1lbmRlZCBTb2x1dGlvbnMKCiMjIyAxLiBVc2UgU3RydXRzIEpTT04gUGx1Z2luIChCRVNUIFBS
QUNUSUNFKQoKKipXaHkqKjogQnlwYXNzZXMgSlNQIHJlbmRlcmluZyBhbmQgZW5jb2RpbmcgY29u
dmVyc2lvbiBlbnRpcmVseQoKKipJbXBsZW1lbnRhdGlvbioqOgpgYGB4bWwKPCEtLSBwb20ueG1s
IC0tPgo8ZGVwZW5kZW5jeT4KICAgIDxncm91cElkPm9yZy5hcGFjaGUuc3RydXRzPC9ncm91cElk
PgogICAgPGFydGlmYWN0SWQ+c3RydXRzMi1qc29uLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgIDx2
ZXJzaW9uPiR7c3RydXRzMi52ZXJzaW9ufTwvdmVyc2lvbj4KPC9kZXBlbmRlbmN5PgpgYGAKCmBg
YHhtbAo8IS0tIHN0cnV0cy54bWwgLS0+CjxhY3Rpb24gbmFtZT0iYWpheFRlc3QiIGNsYXNzPSJj
b20ueW91cnBhY2thZ2UuWW91ckFjdGlvbiIgbWV0aG9kPSJhamF4VGVzdCI+CiAgICA8cmVzdWx0
IHR5cGU9Impzb24iPgogICAgICAgIDxwYXJhbSBuYW1lPSJyb290Ij5kYXRhPC9wYXJhbT4KICAg
IDwvcmVzdWx0Pgo8L2FjdGlvbj4KYGBgCgoqKkJlbmVmaXRzKio6Ci0gRGlyZWN0IEpTT04gc2Vy
aWFsaXphdGlvbiAobm8gSlNQKQotIE5vIGVuY29kaW5nIGNvbnZlcnNpb24gaXNzdWVzCi0gUHJv
cGVyIENvbnRlbnQtVHlwZSBoYW5kbGluZwotIFN0YW5kYXJkIGFwcHJvYWNoIGZvciBSRVNUL0FK
QVggZW5kcG9pbnRzCgojIyMgMi4gRXhjbHVkZSBKU09OIEVuZHBvaW50cyBmcm9tIFNpdGVNZXNo
CgoqKldoeSoqOiBSZW1vdmVzIHJlc3BvbnNlIGJ1ZmZlcmluZyBvdmVyaGVhZCBmb3IgSlNPTgoK
KipJbXBsZW1lbnRhdGlvbioqOgpgYGB4bWwKPCEtLSBzaXRlbWVzaDMueG1sIC0tPgo8c2l0ZW1l
c2g+CiAgICA8bWFwcGluZyBwYXRoPSIvYWpheC8qIiBleGNsdWRlPSJ0cnVlIi8+CiAgICA8bWFw
cGluZyBwYXRoPSIqLmpzb24iIGV4Y2x1ZGU9InRydWUiLz4KICAgIDxtYXBwaW5nIHBhdGg9Ii8q
IiBkZWNvcmF0b3I9Im1haW4uanNwIi8+Cjwvc2l0ZW1lc2g+CmBgYAoKIyMjIDMuIEVuc3VyZSBD
b25zaXN0ZW50IFVURi04IEVuY29kaW5nCgoqKldoeSoqOiBQcmV2ZW50cyBlbmNvZGluZyBtaXNt
YXRjaGVzIHRoYXQgdHJpZ2dlciB0cnVuY2F0aW9uCgoqKkltcGxlbWVudGF0aW9uKio6CmBgYHht
bAo8IS0tIHN0cnV0cy54bWwgLS0+Cjxjb25zdGFudCBuYW1lPSJzdHJ1dHMuaTE4bi5lbmNvZGlu
ZyIgdmFsdWU9IlVURi04Ii8+CmBgYAoKYGBganNwCjwhLS0gSlNQIHBhZ2UgZGlyZWN0aXZlIC0t
Pgo8JUAgcGFnZSBjb250ZW50VHlwZT0iYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIg
cGFnZUVuY29kaW5nPSJVVEYtOCIgJT4KYGBgCgpgYGB4bWwKPCEtLSB3ZWIueG1sIC0gT3B0aW9u
YWw6IEZvcmNlIFVURi04IGZvciBhbGwgcmVxdWVzdHMgLS0+CjxmaWx0ZXI+CiAgICA8ZmlsdGVy
LW5hbWU+ZW5jb2RpbmdGaWx0ZXI8L2ZpbHRlci1uYW1lPgogICAgPGZpbHRlci1jbGFzcz5vcmcu
c3ByaW5nZnJhbWV3b3JrLndlYi5maWx0ZXIuQ2hhcmFjdGVyRW5jb2RpbmdGaWx0ZXI8L2ZpbHRl
ci1jbGFzcz4KICAgIDxpbml0LXBhcmFtPgogICAgICAgIDxwYXJhbS1uYW1lPmVuY29kaW5nPC9w
YXJhbS1uYW1lPgogICAgICAgIDxwYXJhbS12YWx1ZT5VVEYtODwvcGFyYW0tdmFsdWU+CiAgICA8
L2luaXQtcGFyYW0+CiAgICA8aW5pdC1wYXJhbT4KICAgICAgICA8cGFyYW0tbmFtZT5mb3JjZUVu
Y29kaW5nPC9wYXJhbS1uYW1lPgogICAgICAgIDxwYXJhbS12YWx1ZT50cnVlPC9wYXJhbS12YWx1
ZT4KICAgIDwvaW5pdC1wYXJhbT4KPC9maWx0ZXI+CmBgYAoKIyMjIDQuIEVuYWJsZSBEaWFnbm9z
dGljIExvZ2dpbmcKCioqV2h5Kio6IENvbmZpcm1zIGVuY29kaW5nIHRydW5jYXRpb24gaXMgdGhl
IHJvb3QgY2F1c2UKCioqSW1wbGVtZW50YXRpb24qKjoKYGBgeG1sCjwhLS0gbG9nNGoyLnhtbCAt
LT4KPExvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIudXRpbC5GYXN0Qnl0ZUFycmF5T3V0
cHV0U3RyZWFtIiBsZXZlbD0iV0FSTiIvPgo8TG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRz
Mi5jb21wb25lbnRzLkluY2x1ZGUiIGxldmVsPSJERUJVRyIvPgo8TG9nZ2VyIG5hbWU9Im9yZy5h
cGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLkRpc3BhdGNoZXIiIGxldmVsPSJERUJVRyIvPgpgYGAK
CioqTG9vayBmb3IqKjogYCJCdWZmZXIgZGVjb2RpbmctaW4tdG8tb3V0IFtjaGFyc2V0XSBmYWls
ZWQsIGNvZGVyUmVzdWx0IFtkZXRhaWxzXSJgCgojIyMgNS4gVmFsaWRhdGUgSlNPTiBDb250ZW50
CgoqKldoeSoqOiBJZGVudGlmeSBwcm9ibGVtYXRpYyBjaGFyYWN0ZXJzIGNhdXNpbmcgdHJ1bmNh
dGlvbgoKKipBY3Rpb24qKjogRXhhbWluZSB0aGUgSlNPTiBzdHJpbmcgYXQgdGhlIHRydW5jYXRp
b24gcG9pbnQuIExvb2sgZm9yOgotIEV4dGVuZGVkIFVuaWNvZGUgY2hhcmFjdGVycyAoVSswMDgw
IGFuZCBhYm92ZSkKLSBJbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2VzCi0gQ2hhcmFjdGVycyB0
aGF0IGRvbid0IGV4aXN0IGluIElTTy04ODU5LTEgKGlmIHRoYXQncyB0aGUgcmVzcG9uc2UgZW5j
b2RpbmcpCgotLS0KCiMjIERpYWdub3N0aWMgQ2hlY2tsaXN0IGZvciBVc2VyCgpUbyBjb25maXJt
IHRoZSByb290IGNhdXNlLCB0aGUgdXNlciBzaG91bGQ6CgotIFsgXSBFbmFibGUgV0FSTiBsb2dn
aW5nIGZvciBgb3JnLmFwYWNoZS5zdHJ1dHMyLnV0aWwuRmFzdEJ5dGVBcnJheU91dHB1dFN0cmVh
bWAKLSBbIF0gUmVwcm9kdWNlIHRoZSB0cnVuY2F0aW9uIGFuZCBjaGVjayBsb2dzIGZvciBlbmNv
ZGluZyB3YXJuaW5ncwotIFsgXSBJZGVudGlmeSB0aGUgZXhhY3QgY2hhcmFjdGVyIHBvc2l0aW9u
IHdoZXJlIHRydW5jYXRpb24gb2NjdXJzCi0gWyBdIEV4YW1pbmUgdGhlIGNoYXJhY3RlcihzKSBh
dCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRydW5jYXRpb24gcG9pbnQKLSBbIF0gVmVyaWZ5
IGBzdHJ1dHMuaTE4bi5lbmNvZGluZ2AgaXMgc2V0IHRvICJVVEYtOCIKLSBbIF0gVmVyaWZ5IEpT
UCBgcGFnZUVuY29kaW5nYCBhbmQgYGNvbnRlbnRUeXBlYCBib3RoIHNwZWNpZnkgIlVURi04Igot
IFsgXSBDaGVjayBpZiBTaXRlTWVzaCBpcyBkZWNvcmF0aW5nIHRoZSBKU09OIHJlc3BvbnNlIChz
aG91bGQgYmUgZXhjbHVkZWQpCi0gWyBdIENvbXBhcmUgYHJlc3BvbnNlLmdldENoYXJhY3RlckVu
Y29kaW5nKClgIGJldHdlZW4gVG9tY2F0IDEwIGFuZCBUb21jYXQgMTEKLSBbIF0gVGVzdCB3aXRo
IEpTT04gcGx1Z2luIGluc3RlYWQgb2YgSlNQIHJlbmRlcmluZwotIFsgXSBDaGVjayBmb3IgYW55
IGN1c3RvbSBmaWx0ZXJzIG9yIGludGVyY2VwdG9ycyB0aGF0IHdyYXAgdGhlIHJlc3BvbnNlCgot
LS0KCiMjIE9wZW4gUXVlc3Rpb25zCgoxLiAqKldoeSBkb2VzIFRvbWNhdCAxMCB3b3JrIGJ1dCBU
b21jYXQgMTEgZmFpbD8qKgogICAtIEh5cG90aGVzaXM6IERpZmZlcmVudCBkZWZhdWx0IGNoYXJh
Y3RlciBlbmNvZGluZyBpbiBUb21jYXQgMTEncyBKYWthcnRhIFNlcnZsZXQgaW1wbGVtZW50YXRp
b24KICAgLSBIeXBvdGhlc2lzOiBEaWZmZXJlbnQgcmVzcG9uc2Ugd3JhcHBlciBiZWhhdmlvciBp
biBUb21jYXQgMTEncyBKc3BXcml0ZXJJbXBsCiAgIC0gTmVlZHM6IENvbXBhcmlzb24gb2YgYHJl
c3BvbnNlLmdldENoYXJhY3RlckVuY29kaW5nKClgIG91dHB1dCBvbiBib3RoIGNvbnRhaW5lcnMK
CjIuICoqSXMgdGhlIEluY2x1ZGUgY29tcG9uZW50IGluIHRoZSBwaXBlbGluZT8qKgogICAtIFRo
ZSBQYWdlUmVzcG9uc2Ugd3JhcHBlciB1c2VzIEZhc3RCeXRlQXJyYXlPdXRwdXRTdHJlYW0KICAg
LSBOZWVkIHRvIHZlcmlmeSBpZiBhY3Rpb24tYmFzZWQgcmVuZGVyaW5nIHRyaWdnZXJzIEluY2x1
ZGUgY29tcG9uZW50CiAgIC0gQ2hlY2sgZm9yIGBQYWdlUmVzcG9uc2VgIGluIHRocmVhZCBkdW1w
cyBvciBkZWJ1ZyBsb2dzCgozLiAqKldoYXQgaXMgdGhlIGV4YWN0IHRydW5jYXRpb24gcG9pbnQg
Y2hhcmFjdGVyPyoqCiAgIC0gSXMgaXQgYSBoaWdoLUFTQ0lJIGNoYXJhY3RlciAoMHg4MC0weEZG
KT8KICAgLSBJcyBpdCBhIG11bHRpLWJ5dGUgVVRGLTggc2VxdWVuY2U/CiAgIC0gSXMgaXQgYSBV
bmljb2RlIGNoYXJhY3RlciBvdXRzaWRlIHRoZSByZXNwb25zZSBlbmNvZGluZydzIHJhbmdlPwoK
NC4gKipJcyB0aGVyZSBhIHJlc3BvbnNlIHNpemUgcGF0dGVybj8qKgogICAtIERvZXMgdHJ1bmNh
dGlvbiBhbHdheXMgb2NjdXIgYXQgdGhlIHNhbWUgY2hhcmFjdGVyIHBvc2l0aW9uPwogICAtIElz
IHRoZXJlIGEgYnVmZmVyIGJvdW5kYXJ5IGNvcnJlbGF0aW9uIChlLmcuLCA4MTkyIGJ5dGVzKT8K
ICAgLSBEb2VzIHRoZSB0cnVuY2F0aW9uIHBvaW50IG1vdmUgaWYgSlNPTiBjb250ZW50IGNoYW5n
ZXM/CgotLS0KCiMjIFJlbGF0ZWQgUmVzZWFyY2gKCk5vIGV4aXN0aW5nIHJlc2VhcmNoIGRvY3Vt
ZW50cyBmb3VuZCBpbiBgdGhvdWdodHMvYCBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGZpcnN0IGRv
Y3VtZW50YXRpb24gb2YgdGhpcyBpc3N1ZS4KCkZ1dHVyZSByZXNlYXJjaCBhcmVhczoKLSBUb21j
YXQgMTAgdnMgVG9tY2F0IDExIHJlc3BvbnNlIGhhbmRsaW5nIGRpZmZlcmVuY2VzCi0gSmFrYXJ0
YSBTZXJ2bGV0IDYuMCBjaGFyYWN0ZXIgZW5jb2RpbmcgY2hhbmdlcwotIFNpdGVNZXNoIDMueCBi
dWZmZXJpbmcgYmVoYXZpb3Igd2l0aCBKYWthcnRhIEVFCi0gU3RydXRzIHJlc3BvbnNlIHdyYXBw
ZXIgY2hhaW4gYW5hbHlzaXMKCi0tLQoKIyMgQ29uY2x1c2lvbgoKVGhlIEpTT04gdHJ1bmNhdGlv
biBpc3N1ZSBpcyAqKk5PVCBjYXVzZWQgYnkgdGhlIEpha2FydGEgRUUgbWlncmF0aW9uIGl0c2Vs
ZioqLCBidXQgcmF0aGVyIGJ5IGEgKipjaGFyYWN0ZXIgZW5jb2RpbmcgbWlzbWF0Y2gqKiB0aGF0
IHRyaWdnZXJzIGRvY3VtZW50ZWQgdHJ1bmNhdGlvbiBiZWhhdmlvciBpbiBgRmFzdEJ5dGVBcnJh
eU91dHB1dFN0cmVhbWAuIFRoaXMgaXNzdWUgZXhpc3RzIGluIGJvdGggamF2YXggYW5kIGpha2Fy
dGEgdmVyc2lvbnMgb2YgU3RydXRzLCBidXQgbWF5IGJlICoqZXhwb3NlZCBkaWZmZXJlbnRseSoq
IG9uIFRvbWNhdCAxMSBkdWUgdG86CgoxLiBEaWZmZXJlbnQgZGVmYXVsdCBjaGFyYWN0ZXIgZW5j
b2RpbmdzCjIuIERpZmZlcmVudCByZXNwb25zZSB3cmFwcGVyIGltcGxlbWVudGF0aW9ucwozLiBE
aWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5nIGxpYnJhcmllcwoKKipJbW1lZGlhdGUgQWN0aW9u
Kio6IFRoZSB1c2VyIHNob3VsZCBzd2l0Y2ggdG8gdGhlICoqU3RydXRzIEpTT04gcGx1Z2luKiog
Zm9yIEpTT04gcmVzcG9uc2VzLCB3aGljaCBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggYW5k
IGNvbXBsZXRlbHkgYXZvaWRzIHRoZSBKU1AgcmVuZGVyaW5nIHBpcGVsaW5lIGFuZCBpdHMgYXNz
b2NpYXRlZCBlbmNvZGluZyBpc3N1ZXMuCgoqKkFsdGVybmF0aXZlKio6IElmIEpTUCBtdXN0IGJl
IHVzZWQsIGVuc3VyZToKLSBDb25zaXN0ZW50IFVURi04IGVuY29kaW5nIHRocm91Z2hvdXQgdGhl
IHBpcGVsaW5lCi0gU2l0ZU1lc2ggZXhjbHVkZXMgSlNPTiBlbmRwb2ludHMKLSBEaWFnbm9zdGlj
IGxvZ2dpbmcgZW5hYmxlZCB0byBjb25maXJtIHRoZSByb290IGNhdXNl

--000000000000a3828006416ca70f
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--000000000000a3828006416ca70f--