and tags get normal text size also in
some versions of Firefox, Safari, Konqueror, Chrome etc. */
tt, code, pre {
font-family: monospace, sans-serif;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors > li {
list-style: none;
}
ul.permissions-errors {
margin: 0;
}
/* No linewrap on the labels of the login/signup page */
body.page-Special_UserLogin .mw-label label,
body.page-Special_UserLogin_signup .mw-label label { white-space : nowrap; }
/* */
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=index.css
Content-Type: text/css; charset=UTF-8; name=index.css
Content-Location: http://en.wikipedia.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400
Content-Transfer-Encoding: 8bit
/* */
/* Do not print:
1: When in mainspace: Article message boxes,
navboxes, sister project boxes, disambig links,
and items marked as metadata.
2: Privacy, about, disclaimer, redirect and section edit links.
3: Show/hide toggles for collapsible items.
4: Items marked as noprint.
*/
.ns-0 .ambox,
.ns-0 .navbox,
.ns-0 .infobox.sisterproject,
.ns-0 .dablink,
.ns-0 .metadata,
#privacy, #about, #disclaimer, .editlink,
span.collapseButton, a.NavToggle,
.noprint {
display: none;
}
/* Add formatting to make sure that "external references" from templates
like [[Template:Ref]] do not get URL expansion, not even when printed.
The anchor itself has class "external autonumber" and the url expansion
is inserted when printing (see the common printing style sheet at
http://en.wikipedia.org/skins-1.5/common/commonPrint.css) using the
":after" pseudo-element of CSS. Also hide in elements.
*/
#content cite a.external.text:after,
.nourlexpansion a.external.text:after,
.nourlexpansion a.external.autonumber:after {
display: none !important;
}
/* Uncollapse collapsible tables/divs.
The proper way to do this for tables is to use display:table-row,
but this is not supported by all browsers, so use display:block as fallback.
*/
table.collapsible tr, div.NavPic, div.NavContent {
display: block !important;
}
table.collapsible tr {
display: table-row !important;
}
/* Hiding some items when printing with Simple skin */
.skin-simple div#column-one,
.skin-simple div#f-poweredbyico,
.skin-simple div#f-copyrightico,
.skin-simple .editsection {
display: none;
}
/* */
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=index.css
Content-Type: text/css; charset=UTF-8; name=index.css
Content-Location: http://en.wikipedia.org/w/index.php?title=MediaWiki:Handheld.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400
Content-Transfer-Encoding: 8bit
/* Flatten the main page table layout */
table.layout,
table.layout tbody,
table.layout tr,
table.layout th,
table.layout td,
#mp-topbanner,
#mp-topbanner tbody,
#mp-topbanner tr,
#mp-topbanner th,
#mp-topbanner td,
#mp-upper,
#mp-upper tbody,
#mp-upper tr,
#mp-upper th,
#mp-upper td,
#mp-tfp,
#mp-tfp tbody,
#mp-tfp tr,
#mp-tfp th,
#mp-tfp td {
display: block !important;
width: 100% !important;
}
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline
Content-Type: image/png
Content-Location: http://upload.wikimedia.org/wikipedia/en/1/18/Monobook-bullet.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAAAkAAAANAQMAAABBztZFAAAABlBMVEUAAwBjjJzG
2b5OAAAAAXRSTlMAQObYZgAAABBJREFUCNdjYMAG7FARAwMADXkBNzRuJgIAAAAA
SUVORK5CYII=
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=index.css
Content-Type: text/css; charset=UTF-8; name=index.css
Content-Location: http://en.wikipedia.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400
Content-Transfer-Encoding: 8bit
/* */
/* Don't display some stuff on the main page */
body.page-Main_Page #deleteconfirm,
body.page-Main_Page #t-cite,
body.page-Main_Page #lastmod,
body.page-Main_Page #siteSub,
body.page-Main_Page #contentSub,
body.page-Main_Page h1.firstHeading {
display: none !important;
}
#siteNotice {
margin-top: 5px;
margin-bottom: -.5em;
}
#mw-dismissable-notice {
background: transparent;
}
/* BEGIN LIGHT BLUE SECTION
Make content area light blue in all namespaces except articles (main namespace).
This is done by setting the background color for all #content areas
to light blue, and then overriding it back to white for any #content
enclosed in a .ns-0 (main namespace). We do the same for the "tab"
backgrounds and some other objects. */
#content,
#p-cactions li a:hover, #p-cactions li.selected a,
#content div.thumb { /* "Margin" for thumbs, padding for galleries */
background-color: #F8FCFF; /* Light blue */
}
#p-cactions li a {
background-color: #F7F9FB; /* Light blue-gray inactive tabs */
}
.ns-0 #content,
.ns-0 #p-cactions li a:hover, .ns-0 #p-cactions li.selected a,
.ns-0 #content div.thumb {
background-color: white; /* Set back to white for articles */
}
.ns-0 #p-cactions li a {
background-color: #FBFBFB; /* Light gray inactive tabs in articles */
}
@media print {
#content { background: white; } /* White background on print */
}
/* Category lists and diffs transparent instead of white. */
#mw-subcategories table, #mw-pages table,
table.diff, td.diff-otitle, td.diff-ntitle {
background-color: transparent;
}
/* END LIGHT BLUE SECTION */
/* Talk page tab "+" / "new section".
Sets the same padding as the other tabs have. */
#p-cactions #ca-addsection a {
padding-left: .8em;
padding-right: .8em;
}
/* Block quotations */
#content blockquote {
font-size: 93.75%; /* equivalent of 15px in 16px default */
margin: 1em 1.6em; /* same indent as an unordered list */
}
#content blockquote p {
line-height:inherit;
}
/* Display "From Wikipedia, the free encyclopedia" */
#siteSub {
display: inline;
font-size: 92%;
font-weight: normal;
}
/* Bold 'edit this page' link to encourage newcomers */
#ca-edit a { font-weight: bold !important; }
/* Accessibility experiment: make diff changes not just colour-based */
.diffchange {
font-weight: bold;
background-color: inherit;
}
td.diff-addedline, td.diff-deletedline, td.diff-context {
vertical-align: top;
font-size: 85%;
color: inherit;
}
#pt-login {
font-weight: bold;
font-size: 110%;
}
p.error {
font-weight: bold;
}
/* TOC margin in articles (and article previews). */
.ns-0 #wikiPreview > table#toc,
.ns-0 #bodyContent > table#toc {
margin-top: .5em;
}
/* Class styles */
/* .toccolours added here because version in
monobook/main.css wasn't being used by the print style */
.toccolours {
border: 1px solid #aaa;
background-color: #f9f9f9;
padding: 5px;
font-size: 95%;
}
/* Don't underline links in portlets/specialchars even with pref "Underline links:Always" */
.portlet a, #editpage-specialchars a { text-decoration: none; }
.portlet a:hover, #editpage-specialchars a:hover { text-decoration: underline; }
/* For positioning icons at top-right, used in Templates
"Spoken Article" and "Featured Article" */
div.topicon {
position: absolute;
z-index: 10;
top: 10px;
display: block !important;
}
#coordinates {
position: absolute;
z-index: 1;
border: none;
background: none;
right: 30px;
top: 3.7em;
float: right;
margin: 0.0em;
padding: 0.0em;
line-height: 1.5em;
text-align: right;
text-indent: 0;
font-size: 85%;
text-transform: none;
white-space: nowrap;
}
.portlet li {
list-style-image: url("http://upload.wikimedia.org/wikipedia/en/1/18/Monobook-bullet.png");
}
li.FA {
list-style-image: url("http://upload.wikimedia.org/wikipedia/en/d/d4/Monobook-bullet-star.png");
}
/* Makes the background of a framed image white instead of gray. */
/* Only visible with transparent images. */
div.thumb div a img {
background-color: #fff;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors > li {
list-style: none;
}
ul.permissions-errors {
margin: 0;
}
/* Adjust font-size for inline HTML generated TeX formulae */
.texhtml {
font-size: 125%;
line-height: 1.5em;
}
/* Blue instead of yellow padlock for secure links. */
#bodyContent a.external[href ^="https://"],
.link-https {
background: url("http://upload.wikimedia.org/wikipedia/en/0/00/Lock_icon_blue.gif") center right no-repeat;
}
/* */
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=index.css
Content-Type: text/css; charset=UTF-8; name=index.css
Content-Location: http://en.wikipedia.org/w/index.php?title=-&action=raw&maxage=2678400&gen=css
Content-Transfer-Encoding: 8bit
/* generated user stylesheet */
a.new, #quickbar a.new { color: #CC2200; }
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=wikibits.js
Content-Type: application/x-javascript; charset=UTF-8; name=wikibits.js
Content-Location: http://bits.wikimedia.org/skins-1.5/common/wikibits.js?urid=257z49_1264870003
Content-Transfer-Encoding: Base64
Ly8gTWVkaWFXaWtpIEphdmFTY3JpcHQgc3VwcG9ydCBmdW5jdGlvbnMKCnZhciBj
bGllbnRQQyA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsgLy8g
R2V0IGNsaWVudCBpbmZvCnZhciBpc19nZWNrbyA9IC9nZWNrby8udGVzdCggY2xp
ZW50UEMgKSAmJgoJIS9raHRtbHxzcG9vZmVyfG5ldHNjYXBlXC83XC4wLy50ZXN0
KGNsaWVudFBDKTsKdmFyIHdlYmtpdF9tYXRjaCA9IGNsaWVudFBDLm1hdGNoKC9h
cHBsZXdlYmtpdFwvKFxkKykvKTsKaWYgKHdlYmtpdF9tYXRjaCkgewoJdmFyIGlz
X3NhZmFyaSA9IGNsaWVudFBDLmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEg
JiYKCQljbGllbnRQQy5pbmRleE9mKCdzcG9vZmVyJykgPT0gLTE7Cgl2YXIgaXNf
c2FmYXJpX3dpbiA9IGlzX3NhZmFyaSAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k
b3dzJykgIT0gLTE7Cgl2YXIgd2Via2l0X3ZlcnNpb24gPSBwYXJzZUludCh3ZWJr
aXRfbWF0Y2hbMV0pOwp9Ci8vIEZvciBhY2Nlc3NrZXlzOyBub3RlIHRoYXQgRkYz
KyBpcyBpbmNsdWRlZCBoZXJlIQp2YXIgaXNfZmYyID0gL2ZpcmVmb3hcL1syLTld
fG1pbmVmaWVsZFwvMy8udGVzdCggY2xpZW50UEMgKTsKdmFyIGZmMl9idWdzID0g
L2ZpcmVmb3hcLzIvLnRlc3QoIGNsaWVudFBDICk7Ci8vIFRoZXNlIGFyZW4ndCB1
c2VkIGhlcmUsIGJ1dCBzb21lIGN1c3RvbSBzY3JpcHRzIHJlbHkgb24gdGhlbQp2
YXIgaXNfZmYyX3dpbiA9IGlzX2ZmMiAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k
b3dzJykgIT0gLTE7CnZhciBpc19mZjJfeDExID0gaXNfZmYyICYmIGNsaWVudFBD
LmluZGV4T2YoJ3gxMScpICE9IC0xOwppZiAoY2xpZW50UEMuaW5kZXhPZignb3Bl
cmEnKSAhPSAtMSkgewoJdmFyIGlzX29wZXJhID0gdHJ1ZTsKCXZhciBpc19vcGVy
YV9wcmVzZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiAhZG9jdW1lbnQuY2hpbGROb2Rl
czsKCXZhciBpc19vcGVyYV9zZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiBkb2N1bWVu
dC5jaGlsZE5vZGVzOwoJdmFyIGlzX29wZXJhXzk1ID0gL29wZXJhXC8oOVwuWzUt
OV18WzEtOV1bMC05XSkvLnRlc3QoIGNsaWVudFBDICk7Cgl2YXIgb3BlcmE2X2J1
Z3MgPSBpc19vcGVyYV9wcmVzZXZlbjsKCXZhciBvcGVyYTdfYnVncyA9IGlzX29w
ZXJhX3NldmVuICYmICFpc19vcGVyYV85NTsKCXZhciBvcGVyYTk1X2J1Z3MgPSAv
b3BlcmFcLyg5XC41KS8udGVzdCggY2xpZW50UEMgKTsKfQoKLy8gR2xvYmFsIGV4
dGVybmFsIG9iamVjdHMgdXNlZCBieSB0aGlzIHNjcmlwdC4KLypleHRlcm4gdGEs
IHN0eWxlcGF0aCwgc2tpbiAqLwoKLy8gYWRkIGFueSBvbmxvYWQgZnVuY3Rpb25z
IGluIHRoaXMgaG9vayAocGxlYXNlIGRvbid0IGhhcmQtY29kZSBhbnkgZXZlbnRz
IGluIHRoZSB4aHRtbCBzb3VyY2UpCnZhciBkb25lT25sb2FkSG9vazsKCmlmICgh
d2luZG93Lm9ubG9hZEZ1bmN0cykgewoJdmFyIG9ubG9hZEZ1bmN0cyA9IFtdOwp9
CgovLyBjb2RlIHRoYXQgaXMgZGVwZW5kZW50IG9uIGpzMiBmdW5jdGlvbnMgc2hv
dWxkIHVzZSBqczJBZGRPbmxvYWRIb29rCmZ1bmN0aW9uIGFkZE9ubG9hZEhvb2so
aG9va0Z1bmN0KSB7CgkvLyBBbGxvd3MgYWRkLW9uIHNjcmlwdHMgdG8gYWRkIG9u
bG9hZCBmdW5jdGlvbnMKCWlmKCFkb25lT25sb2FkSG9vaykgewoJCW9ubG9hZEZ1
bmN0c1tvbmxvYWRGdW5jdHMubGVuZ3RoXSA9IGhvb2tGdW5jdDsKCX0gZWxzZSB7
CgkJaG9va0Z1bmN0KCk7ICAvLyBidWcgaW4gTVNJRSBzY3JpcHQgbG9hZGluZwoJ
fQp9CgoKZnVuY3Rpb24gaG9va0V2ZW50KGhvb2tOYW1lLCBob29rRnVuY3QpIHsK
CWFkZEhhbmRsZXIod2luZG93LCBob29rTmFtZSwgaG9va0Z1bmN0KTsKfQoKZnVu
Y3Rpb24gaW1wb3J0U2NyaXB0KHBhZ2UpIHsKCS8vIFRPRE86IG1pZ2h0IHdhbnQg
dG8gaW50cm9kdWNlIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBtYXRjaCB3ZlVybGVu
Y29kZSgpIGluIFBIUAoJdmFyIHVyaSA9IHdnU2NyaXB0ICsgJz90aXRsZT0nICsK
CQllbmNvZGVVUklDb21wb25lbnQocGFnZS5yZXBsYWNlKC8gL2csJ18nKSkucmVw
bGFjZSgvJTJGL2lnLCcvJykucmVwbGFjZSgvJTNBL2lnLCc6JykgKwoJCScmYWN0
aW9uPXJhdyZjdHlwZT10ZXh0L2phdmFzY3JpcHQnOwoJcmV0dXJuIGltcG9ydFNj
cmlwdFVSSSh1cmkpOwp9Cgp2YXIgbG9hZGVkU2NyaXB0cyA9IHt9OyAvLyBpbmNs
dWRlZC1zY3JpcHRzIHRyYWNrZXIKZnVuY3Rpb24gaW1wb3J0U2NyaXB0VVJJKHVy
bCkgewoJaWYgKGxvYWRlZFNjcmlwdHNbdXJsXSkgewoJCXJldHVybiBudWxsOwoJ
fQoJbG9hZGVkU2NyaXB0c1t1cmxdID0gdHJ1ZTsKCXZhciBzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CglzLnNldEF0dHJpYnV0ZSgnc3JjJyx1
cmwpOwoJcy5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCd0ZXh0L2phdmFzY3JpcHQnKTsK
CWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5k
Q2hpbGQocyk7CglyZXR1cm4gczsKfQoKZnVuY3Rpb24gaW1wb3J0U3R5bGVzaGVl
dChwYWdlKSB7CglyZXR1cm4gaW1wb3J0U3R5bGVzaGVldFVSSSh3Z1NjcmlwdCAr
ICc/YWN0aW9uPXJhdyZjdHlwZT10ZXh0L2NzcyZ0aXRsZT0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHBhZ2UucmVwbGFjZSgvIC9nLCdfJykpKTsKfQoKZnVuY3Rpb24g
aW1wb3J0U3R5bGVzaGVldFVSSSh1cmwsbWVkaWEpIHsKCXZhciBsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwoJbC50eXBlID0gJ3RleHQvY3NzJzsK
CWwucmVsID0gJ3N0eWxlc2hlZXQnOwoJbC5ocmVmID0gdXJsOwoJaWYobWVkaWEp
IGwubWVkaWEgPSBtZWRpYQoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2hlYWQnKVswXS5hcHBlbmRDaGlsZChsKTsKCXJldHVybiBsOwp9CgpmdW5jdGlv
biBhcHBlbmRDU1ModGV4dCkgewoJdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzdHlsZScpOwoJcy50eXBlID0gJ3RleHQvY3NzJzsKCXMucmVsID0gJ3N0
eWxlc2hlZXQnOwoJaWYgKHMuc3R5bGVTaGVldCkgcy5zdHlsZVNoZWV0LmNzc1Rl
eHQgPSB0ZXh0IC8vSUUKCWVsc2Ugcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSh0ZXh0ICsgJycpKSAvL1NhZmFyaSBzb21ldGltZXMgYm9ya3Mg
b24gbnVsbAoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVsw
XS5hcHBlbmRDaGlsZChzKTsKCXJldHVybiBzOwp9CgovLyBzcGVjaWFsIHN0eWxl
c2hlZXQgbGlua3MKaWYgKHR5cGVvZiBzdHlsZXBhdGggIT0gJ3VuZGVmaW5lZCcg
JiYgdHlwZW9mIHNraW4gIT0gJ3VuZGVmaW5lZCcpIHsKCS8vIEZJWE1FOiBUaGlz
IHRyaWVzIHRvIGxvYWQgdGhlIHN0eWxlc2hlZXRzIGV2ZW4gZm9yIHNraW5zIHdo
ZXJlIHRoZXkKCS8vIGRvbid0IGV4aXN0LCBpLmUuLCBldmVyeXRoaW5nIGJ1dCBN
b25vYm9vay4KCWlmIChvcGVyYTZfYnVncykgewoJCWltcG9ydFN0eWxlc2hlZXRV
Ukkoc3R5bGVwYXRoKycvJytza2luKycvT3BlcmE2Rml4ZXMuY3NzJyk7Cgl9IGVs
c2UgaWYgKG9wZXJhN19idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHls
ZXBhdGgrJy8nK3NraW4rJy9PcGVyYTdGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAo
b3BlcmE5NV9idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHlsZXBhdGgr
Jy8nK3NraW4rJy9PcGVyYTlGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAoZmYyX2J1
Z3MpIHsKCQlpbXBvcnRTdHlsZXNoZWV0VVJJKHN0eWxlcGF0aCsnLycrc2tpbisn
L0ZGMkZpeGVzLmNzcycpOwoJfQp9CgoKaWYgKHdnQnJlYWtGcmFtZXMpIHsKCS8v
IFVuLXRyYXAgdXMgZnJvbSBmcmFtZXNldHMKCWlmICh3aW5kb3cudG9wICE9IHdp
bmRvdykgewoJCXdpbmRvdy50b3AubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247
Cgl9Cn0KCmZ1bmN0aW9uIHNob3dUb2NUb2dnbGUoKSB7CglpZiAoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUpIHsKCQkvLyBVc2VzIERPTSBjYWxscyB0byBhdm9pZCBk
b2N1bWVudC53cml0ZSArIFhIVE1MIGlzc3VlcwoKCQl2YXIgbGlua0hvbGRlciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2N0aXRsZScpOwoJCXZhciBleGlz
dGluZ0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlbGluaycp
OwoJCWlmICghbGlua0hvbGRlciB8fCBleGlzdGluZ0xpbmspIHsKCQkJLy8gRG9u
J3QgYWRkIHRoZSB0b2dnbGUgbGluayB0d2ljZQoJCQlyZXR1cm47CgkJfQoKCQl2
YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwoJ
CW91dGVyU3Bhbi5jbGFzc05hbWUgPSAndG9jdG9nZ2xlJzsKCgkJdmFyIHRvZ2ds
ZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJdG9nZ2xlTGlu
ay5pZCA9ICd0b2dnbGVsaW5rJzsKCQl0b2dnbGVMaW5rLmNsYXNzTmFtZSA9ICdp
bnRlcm5hbCc7CgkJdG9nZ2xlTGluay5ocmVmID0gJ2phdmFzY3JpcHQ6dG9nZ2xl
VG9jKCknOwoJCXRvZ2dsZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodG9jSGlkZVRleHQpKTsKCgkJb3V0ZXJTcGFuLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdbJykpOwoJCW91dGVyU3Bhbi5hcHBl
bmRDaGlsZCh0b2dnbGVMaW5rKTsKCQlvdXRlclNwYW4uYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoJ10nKSk7CgoJCWxpbmtIb2xkZXIuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7CgkJbGlua0hvbGRl
ci5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwoKCQl2YXIgY29va2llUG9zID0gZG9j
dW1lbnQuY29va2llLmluZGV4T2YoImhpZGV0b2M9Iik7CgkJaWYgKGNvb2tpZVBv
cyA+IC0xICYmIGRvY3VtZW50LmNvb2tpZS5jaGFyQXQoY29va2llUG9zICsgOCkg
PT0gMSkgewoJCQl0b2dnbGVUb2MoKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGNoYW5n
ZVRleHQoZWwsIG5ld1RleHQpIHsKCS8vIFNhZmFyaSB3b3JrIGFyb3VuZAoJaWYg
KGVsLmlubmVyVGV4dCkgewoJCWVsLmlubmVyVGV4dCA9IG5ld1RleHQ7Cgl9IGVs
c2UgaWYgKGVsLmZpcnN0Q2hpbGQgJiYgZWwuZmlyc3RDaGlsZC5ub2RlVmFsdWUp
IHsKCQllbC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IG5ld1RleHQ7Cgl9Cn0KCmZ1
bmN0aW9uIHRvZ2dsZVRvYygpIHsKCXZhciB0b2NtYWluID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RvYycpOwoJdmFyIHRvYyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0b2MnKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndWwnKVswXTsKCXZh
ciB0b2dnbGVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZWxp
bmsnKTsKCglpZiAodG9jICYmIHRvZ2dsZUxpbmsgJiYgdG9jLnN0eWxlLmRpc3Bs
YXkgPT0gJ25vbmUnKSB7CgkJY2hhbmdlVGV4dCh0b2dnbGVMaW5rLCB0b2NIaWRl
VGV4dCk7CgkJdG9jLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoJCWRvY3VtZW50
LmNvb2tpZSA9ICJoaWRldG9jPTAiOwoJCXRvY21haW4uY2xhc3NOYW1lID0gJ3Rv
Yyc7Cgl9IGVsc2UgewoJCWNoYW5nZVRleHQodG9nZ2xlTGluaywgdG9jU2hvd1Rl
eHQpOwoJCXRvYy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCWRvY3VtZW50LmNv
b2tpZSA9ICJoaWRldG9jPTEiOwoJCXRvY21haW4uY2xhc3NOYW1lID0gJ3RvYyB0
b2NoaWRkZW4nOwoJfQp9Cgp2YXIgbXdFZGl0QnV0dG9ucyA9IFtdOwp2YXIgbXdD
dXN0b21FZGl0QnV0dG9ucyA9IFtdOyAvLyBlZyB0byBhZGQgaW4gTWVkaWFXaWtp
OkNvbW1vbi5qcwoKZnVuY3Rpb24gZXNjYXBlUXVvdGVzKHRleHQpIHsKCXZhciBy
ZSA9IG5ldyBSZWdFeHAoIiciLCJnIik7Cgl0ZXh0ID0gdGV4dC5yZXBsYWNlKHJl
LCJcXCciKTsKCXJlID0gbmV3IFJlZ0V4cCgiXFxuIiwiZyIpOwoJdGV4dCA9IHRl
eHQucmVwbGFjZShyZSwiXFxuIik7CglyZXR1cm4gZXNjYXBlUXVvdGVzSFRNTCh0
ZXh0KTsKfQoKZnVuY3Rpb24gZXNjYXBlUXVvdGVzSFRNTCh0ZXh0KSB7Cgl2YXIg
cmUgPSBuZXcgUmVnRXhwKCcmJywiZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShy
ZSwiJmFtcDsiKTsKCXJlID0gbmV3IFJlZ0V4cCgnIicsImciKTsKCXRleHQgPSB0
ZXh0LnJlcGxhY2UocmUsIiZxdW90OyIpOwoJcmUgPSBuZXcgUmVnRXhwKCc8Jywi
ZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShyZSwiJmx0OyIpOwoJcmUgPSBuZXcg
UmVnRXhwKCc+JywiZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShyZSwiJmd0OyIp
OwoJcmV0dXJuIHRleHQ7Cn0KCgovKioKICogU2V0IHRoZSBhY2Nlc3NrZXkgcHJl
Zml4IGJhc2VkIG9uIGJyb3dzZXIgZGV0ZWN0aW9uLgogKi8KdmFyIHRvb2x0aXBB
Y2Nlc3NLZXlQcmVmaXggPSAnYWx0LSc7CmlmIChpc19vcGVyYSkgewoJdG9vbHRp
cEFjY2Vzc0tleVByZWZpeCA9ICdzaGlmdC1lc2MtJzsKfSBlbHNlIGlmICghaXNf
c2FmYXJpX3dpbiAmJiBpc19zYWZhcmkgJiYgd2Via2l0X3ZlcnNpb24gPiA1MjYp
IHsKCXRvb2x0aXBBY2Nlc3NLZXlQcmVmaXggPSAnY3RybC1hbHQtJzsKfSBlbHNl
IGlmICghaXNfc2FmYXJpX3dpbiAmJiAoaXNfc2FmYXJpCgkJfHwgY2xpZW50UEMu
aW5kZXhPZignbWFjJykgIT0gLTEKCQl8fCBjbGllbnRQQy5pbmRleE9mKCdrb25x
dWVyb3InKSAhPSAtMSApKSB7Cgl0b29sdGlwQWNjZXNzS2V5UHJlZml4ID0gJ2N0
cmwtJzsKfSBlbHNlIGlmIChpc19mZjIpIHsKCXRvb2x0aXBBY2Nlc3NLZXlQcmVm
aXggPSAnYWx0LXNoaWZ0LSc7Cn0KdmFyIHRvb2x0aXBBY2Nlc3NLZXlSZWdleHAg
PSAvXFsoY3RybC0pPyhhbHQtKT8oc2hpZnQtKT8oZXNjLSk/KC4pXF0kLzsKCi8q
KgogKiBBZGQgdGhlIGFwcHJvcHJpYXRlIHByZWZpeCB0byB0aGUgYWNjZXNza2V5
IHNob3duIGluIHRoZSB0b29sdGlwLgogKiBJZiB0aGUgbm9kZUxpc3QgcGFyYW1l
dGVyIGlzIGdpdmVuLCBvbmx5IHRob3NlIG5vZGVzIGFyZSB1cGRhdGVkOwogKiBv
dGhlcndpc2UsIGFsbCB0aGUgbm9kZXMgdGhhdCB3aWxsIHByb2JhYmx5IGhhdmUg
YWNjZXNza2V5cyBieQogKiBkZWZhdWx0IGFyZSB1cGRhdGVkLgogKgogKiBAcGFy
YW0gQXJyYXkgbm9kZUxpc3QgLS0gbGlzdCBvZiBlbGVtZW50cyB0byB1cGRhdGUK
ICovCmZ1bmN0aW9uIHVwZGF0ZVRvb2x0aXBBY2Nlc3NLZXlzKCBub2RlTGlzdCAp
IHsKCWlmICggIW5vZGVMaXN0ICkgewoJCS8vIFJhdGhlciB0aGFuIHNjYW4gYWxs
IGxpbmtzIG9uIHRoZSB3aG9sZSBwYWdlLCB3ZSBjYW4ganVzdCBzY2FuIHRoZXNl
CgkJLy8gY29udGFpbmVycyB3aGljaCBjb250YWluIHRoZSByZWxldmFudCBsaW5r
cy4gVGhpcyBpcyByZWFsbHkganVzdCBhbgoJCS8vIG9wdGltaXphdGlvbiB0ZWNo
bmlxdWUuCgkJdmFyIGxpbmtDb250YWluZXJzID0gWwoJCQkiY29sdW1uLW9uZSIs
IC8vIE1vbm9ib29rIGFuZCBNb2Rlcm4KCQkJImhlYWQiLCAicGFuZWwiLCAicC1s
b2dvIiAvLyBWZWN0b3IKCQldOwoJCWZvciAoIHZhciBpIGluIGxpbmtDb250YWlu
ZXJzICkgewoJCQl2YXIgbGlua0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCBsaW5rQ29udGFpbmVyc1tpXSApOwoJCQlpZiAoIGxpbmtDb250YWlu
ZXIgKSB7CgkJCQl1cGRhdGVUb29sdGlwQWNjZXNzS2V5cyggbGlua0NvbnRhaW5l
ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpICk7CgkJCX0KCQl9CgkJLy8gdGhl
c2UgYXJlIHJhcmUgZW5vdWdoIHRoYXQgbm8gc3VjaCBvcHRpbWl6YXRpb24gaXMg
bmVlZGVkCgkJdXBkYXRlVG9vbHRpcEFjY2Vzc0tleXMoIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpICk7CgkJdXBkYXRlVG9vbHRpcEFjY2Vz
c0tleXMoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpICk7
CgkJcmV0dXJuOwoJfQoKCWZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxl
bmd0aDsgaSsrICkgewoJCXZhciBlbGVtZW50ID0gbm9kZUxpc3RbaV07CgkJdmFy
IHRpcCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpOwoJCWlmICggdGlw
ICYmIHRvb2x0aXBBY2Nlc3NLZXlSZWdleHAuZXhlYyh0aXApICkgewoJCQl0aXAg
PSB0aXAucmVwbGFjZSh0b29sdGlwQWNjZXNzS2V5UmVnZXhwLAoJCQkJCSAgIlsi
K3Rvb2x0aXBBY2Nlc3NLZXlQcmVmaXgrIiQ1XSIpOwoJCQllbGVtZW50LnNldEF0
dHJpYnV0ZSgidGl0bGUiLCB0aXAgKTsKCQl9Cgl9Cn0KCi8qKgogKiBBZGQgYSBs
aW5rIHRvIG9uZSBvZiB0aGUgcG9ydGxldCBtZW51cyBvbiB0aGUgcGFnZSwgaW5j
bHVkaW5nOgogKgogKiBwLWNhY3Rpb25zOiBDb250ZW50IGFjdGlvbnMgKHNob3du
IGFzIHRhYnMgYWJvdmUgdGhlIG1haW4gY29udGVudCBpbiBNb25vYm9vaykKICog
cC1wZXJzb25hbDogUGVyc29uYWwgdG9vbHMgKHNob3duIGF0IHRoZSB0b3Agcmln
aHQgb2YgdGhlIHBhZ2UgaW4gTW9ub2Jvb2spCiAqIHAtbmF2aWdhdGlvbjogTmF2
aWdhdGlvbgogKiBwLXRiOiBUb29sYm94CiAqCiAqIFRoaXMgZnVuY3Rpb24gZXhp
c3RzIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgY3VzdG9tIEpTIGF1dGhvcnMuICBB
bGwKICogYnV0IHRoZSBmaXJzdCB0aHJlZSBwYXJhbWV0ZXJzIGFyZSBvcHRpb25h
bCwgdGhvdWdoIHByb3ZpZGluZyBhdAogKiBsZWFzdCBhbiBpZCBhbmQgYSB0b29s
dGlwIGlzIHJlY29tbWVuZGVkLgogKgogKiBCeSBkZWZhdWx0IHRoZSBuZXcgbGlu
ayB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICBUbwogKiBh
ZGQgdGhlIGxpbmsgYmVmb3JlIGEgZ2l2ZW4gZXhpc3RpbmcgaXRlbSwgcGFzcyB0
aGUgRE9NIG5vZGUgb2YKICogdGhhdCBpdGVtIChlYXNpbHkgb2J0YWluZWQgd2l0
aCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgpKSBhcyB0aGUKICogbmV4dG5vZGUg
cGFyYW1ldGVyOyB0byBhZGQgdGhlIGxpbmsgX2FmdGVyXyBhbiBleGlzdGluZyBp
dGVtLCBwYXNzCiAqIHRoZSBub2RlJ3MgbmV4dFNpYmxpbmcgaW5zdGVhZC4KICoK
ICogQHBhcmFtIFN0cmluZyBwb3J0bGV0IC0tIGlkIG9mIHRoZSB0YXJnZXQgcG9y
dGxldCAoInAtY2FjdGlvbnMiLCAicC1wZXJzb25hbCIsICJwLW5hdmlnYXRpb24i
IG9yICJwLXRiIikKICogQHBhcmFtIFN0cmluZyBocmVmIC0tIGxpbmsgVVJMCiAq
IEBwYXJhbSBTdHJpbmcgdGV4dCAtLSBsaW5rIHRleHQgKHdpbGwgYmUgYXV0b21h
dGljYWxseSBsb3dlcmNhc2VkIGJ5IENTUyBmb3IgcC1jYWN0aW9ucyBpbiBNb25v
Ym9vaykKICogQHBhcmFtIFN0cmluZyBpZCAtLSBpZCBvZiB0aGUgbmV3IGl0ZW0s
IHNob3VsZCBiZSB1bmlxdWUgYW5kIHByZWZlcmFibHkgaGF2ZSB0aGUgYXBwcm9w
cmlhdGUgcHJlZml4ICgiY2EtIiwgInB0LSIsICJuLSIgb3IgInQtIikKICogQHBh
cmFtIFN0cmluZyB0b29sdGlwIC0tIHRleHQgdG8gc2hvdyB3aGVuIGhvdmVyaW5n
IG92ZXIgdGhlIGxpbmssIHdpdGhvdXQgYWNjZXNza2V5IHN1ZmZpeAogKiBAcGFy
YW0gU3RyaW5nIGFjY2Vzc2tleSAtLSBhY2Nlc3NrZXkgdG8gYWN0aXZhdGUgdGhp
cyBsaW5rIChvbmUgY2hhcmFjdGVyLCB0cnkgdG8gYXZvaWQgY29uZmxpY3RzKQog
KiBAcGFyYW0gTm9kZSBuZXh0bm9kZSAtLSB0aGUgRE9NIG5vZGUgYmVmb3JlIHdo
aWNoIHRoZSBuZXcgaXRlbSBzaG91bGQgYmUgYWRkZWQsIHNob3VsZCBiZSBhbm90
aGVyIGl0ZW0gaW4gdGhlIHNhbWUgbGlzdAogKgogKiBAcmV0dXJuIE5vZGUgLS0g
dGhlIERPTSBub2RlIG9mIHRoZSBuZXcgaXRlbSAoYW4gTEkgZWxlbWVudCkgb3Ig
bnVsbAogKi8KZnVuY3Rpb24gYWRkUG9ydGxldExpbmsocG9ydGxldCwgaHJlZiwg
dGV4dCwgaWQsIHRvb2x0aXAsIGFjY2Vzc2tleSwgbmV4dG5vZGUpIHsKCXZhciBy
b290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9ydGxldCk7CglpZiAoICFy
b290ICkgcmV0dXJuIG51bGw7Cgl2YXIgbm9kZSA9IHJvb3QuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoICJ1bCIgKVswXTsKCWlmICggIW5vZGUgKSByZXR1cm4gbnVsbDsK
CgkvLyB1bmhpZGUgcG9ydGxldCBpZiBpdCB3YXMgaGlkZGVuIGJlZm9yZQoJcm9v
dC5jbGFzc05hbWUgPSByb290LmNsYXNzTmFtZS5yZXBsYWNlKCAvKF58ICllbXB0
eVBvcnRsZXQoIHwkKS8sICIkMiIgKTsKCgl2YXIgc3BhbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoICJzcGFuIiApOwoJc3Bhbi5hcHBlbmRDaGlsZCggZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwoKCXZhciBsaW5rID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCggImEiICk7CglsaW5rLmFwcGVuZENoaWxkKCBzcGFu
ICk7CglsaW5rLmhyZWYgPSBocmVmOwoKCXZhciBpdGVtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCggImxpIiApOwoJaXRlbS5hcHBlbmRDaGlsZCggbGluayApOwoJ
aWYgKCBpZCApIGl0ZW0uaWQgPSBpZDsKCglpZiAoIGFjY2Vzc2tleSApIHsKCQls
aW5rLnNldEF0dHJpYnV0ZSggImFjY2Vzc2tleSIsIGFjY2Vzc2tleSApOwoJCXRv
b2x0aXAgKz0gIiBbIithY2Nlc3NrZXkrIl0iOwoJfQoJaWYgKCB0b29sdGlwICkg
ewoJCWxpbmsuc2V0QXR0cmlidXRlKCAidGl0bGUiLCB0b29sdGlwICk7Cgl9Cglp
ZiAoIGFjY2Vzc2tleSAmJiB0b29sdGlwICkgewoJCXVwZGF0ZVRvb2x0aXBBY2Nl
c3NLZXlzKCBuZXcgQXJyYXkoIGxpbmsgKSApOwoJfQoKCWlmICggbmV4dG5vZGUg
JiYgbmV4dG5vZGUucGFyZW50Tm9kZSA9PSBub2RlICkKCQlub2RlLmluc2VydEJl
Zm9yZSggaXRlbSwgbmV4dG5vZGUgKTsKCWVsc2UKCQlub2RlLmFwcGVuZENoaWxk
KCBpdGVtICk7ICAvLyBJRSBjb21wYXRpYmlsaXR5ICg/KQoKCXJldHVybiBpdGVt
Owp9CgpmdW5jdGlvbiBnZXRJbm5lclRleHQoZWwpIHsKCWlmICh0eXBlb2YgZWwg
PT0gInN0cmluZyIpIHJldHVybiBlbDsKCWlmICh0eXBlb2YgZWwgPT0gInVuZGVm
aW5lZCIpIHsgcmV0dXJuIGVsIH07CglpZiAoZWwudGV4dENvbnRlbnQpIHJldHVy
biBlbC50ZXh0Q29udGVudDsgLy8gbm90IG5lZWRlZCBidXQgaXQgaXMgZmFzdGVy
CglpZiAoZWwuaW5uZXJUZXh0KSByZXR1cm4gZWwuaW5uZXJUZXh0OyAgICAgLy8g
SUUgZG9lc24ndCBoYXZlIHRleHRDb250ZW50Cgl2YXIgc3RyID0gIiI7CgoJdmFy
IGNzID0gZWwuY2hpbGROb2RlczsKCXZhciBsID0gY3MubGVuZ3RoOwoJZm9yICh2
YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKCQlzd2l0Y2ggKGNzW2ldLm5vZGVUeXBl
KSB7CgkJCWNhc2UgMTogLy9FTEVNRU5UX05PREUKCQkJCXN0ciArPSB0c19nZXRJ
bm5lclRleHQoY3NbaV0pOwoJCQkJYnJlYWs7CgkJCWNhc2UgMzoJLy9URVhUX05P
REUKCQkJCXN0ciArPSBjc1tpXS5ub2RlVmFsdWU7CgkJCQlicmVhazsKCQl9Cgl9
CglyZXR1cm4gc3RyOwp9CgoKLyoqCiAqIFNldCB1cCBhY2Nlc3NrZXlzL3Rvb2x0
aXBzIGZyb20gdGhlIGRlcHJlY2F0ZWQgdGEgYXJyYXkuICBJZiBkb0lkCiAqIGlz
IHNwZWNpZmllZCwgb25seSBzZXQgdXAgZm9yIHRoYXQgaWQuICBOb3RlIHRoYXQg
dGhpcyBmdW5jdGlvbiBpcwogKiBkZXByZWNhdGVkIGFuZCB3aWxsIG5vdCBiZSBz
dXBwb3J0ZWQgaW5kZWZpbml0ZWx5IC0tIHVzZQogKiB1cGRhdGVUb29sdGlwQWNj
ZXNzS2V5KCkgaW5zdGVhZC4KICoKICogQHBhcmFtIG1peGVkIGRvSWQgc3RyaW5n
IG9yIG51bGwKICovCmZ1bmN0aW9uIGFrZXl0dCggZG9JZCApIHsKCS8vIEEgbG90
IG9mIHVzZXIgc2NyaXB0cyAoYW5kIHNvbWUgb2YgdGhlIGNvZGUgYmVsb3cpIGJy
ZWFrIGlmCgkvLyB0YSBpc24ndCBkZWZpbmVkLCBzbyB3ZSBtYWtlIHN1cmUgaXQg
aXMuICBFeHBsaWN0bHkgdXNpbmcKCS8vIHdpbmRvdy50YSBhdm9pZHMgYSAidGEg
aXMgbm90IGRlZmluZWQiIGVycm9yLgoJaWYgKCF3aW5kb3cudGEpIHdpbmRvdy50
YSA9IG5ldyBBcnJheTsKCgkvLyBNYWtlIGEgbG9jYWwsIHBvc3NpYmx5IHJlc3Ry
aWN0ZWQsIGNvcHkgdG8gYXZvaWQgY2xvYmJlcmluZwoJLy8gdGhlIG9yaWdpbmFs
LgoJdmFyIHRhOwoJaWYgKCBkb0lkICkgewoJCXRhID0gW2RvSWRdOwoJfSBlbHNl
IHsKCQl0YSA9IHdpbmRvdy50YTsKCX0KCgkvLyBOb3cgZGVhbCB3aXRoIGV2aWwg
ZGVwcmVjYXRlZCB0YQoJdmFyIHdhdGNoQ2hlY2tib3hFeGlzdHMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCggJ3dwV2F0Y2h0aGlzJyApID8gdHJ1ZSA6IGZhbHNl
OwoJZm9yICh2YXIgaWQgaW4gdGEpIHsKCQl2YXIgbiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKTsKCQlpZiAobikgewoJCQl2YXIgYSA9IG51bGw7CgkJCXZh
ciBhayA9ICcnOwoJCQkvLyBBcmUgd2UgcHV0dGluZyBhY2Nlc3NrZXkgaW4gaXQK
CQkJaWYgKHRhW2lkXVswXS5sZW5ndGggPiAwKSB7CgkJCQkvLyBJcyB0aGlzIG9i
amVjdCBhIG9iamVjdD8gSWYgbm90IGFzc3VtZSBpdCdzIHRoZSBuZXh0IGNoaWxk
LgoKCQkJCWlmIChuLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImEiKSB7CgkJ
CQkJYSA9IG47CgkJCQl9IGVsc2UgewoJCQkJCWEgPSBuLmNoaWxkTm9kZXNbMF07
CgkJCQl9CgkJCSAJLy8gRG9uJ3QgYWRkIGFuIGFjY2Vzc2tleSBmb3IgdGhlIHdh
dGNoIHRhYiBpZiB0aGUgd2F0Y2gKCQkJIAkvLyBjaGVja2JveCBpcyBhbHNvIGF2
YWlsYWJsZS4KCQkJCWlmIChhICYmICgoaWQgIT0gJ2NhLXdhdGNoJyAmJiBpZCAh
PSAnY2EtdW53YXRjaCcpIHx8ICF3YXRjaENoZWNrYm94RXhpc3RzKSkgewoJCQkJ
CWEuYWNjZXNzS2V5ID0gdGFbaWRdWzBdOwoJCQkJCWFrID0gJyBbJyt0b29sdGlw
QWNjZXNzS2V5UHJlZml4K3RhW2lkXVswXSsnXSc7CgkJCQl9CgkJCX0gZWxzZSB7
CgkJCQkvLyBXZSBkb24ndCBjYXJlIHdoYXQgdHlwZSB0aGUgb2JqZWN0IGlzIHdo
ZW4gYXNzaWduaW5nIHRvb2x0aXAKCQkJCWEgPSBuOwoJCQkJYWsgPSAnJzsKCQkJ
fQoKCQkJaWYgKGEpIHsKCQkJCWEudGl0bGUgPSB0YVtpZF1bMV0rYWs7CgkJCX0K
CQl9Cgl9Cn0KCnZhciBjaGVja2JveGVzOwp2YXIgbGFzdENoZWNrYm94OwoKZnVu
Y3Rpb24gc2V0dXBDaGVja2JveFNoaWZ0Q2xpY2soKSB7CgljaGVja2JveGVzID0g
W107CglsYXN0Q2hlY2tib3ggPSBudWxsOwoJdmFyIGlucHV0cyA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOwoJYWRkQ2hlY2tib3hDbGlj
a0hhbmRsZXJzKGlucHV0cyk7Cn0KCmZ1bmN0aW9uIGFkZENoZWNrYm94Q2xpY2tI
YW5kbGVycyhpbnB1dHMsIHN0YXJ0KSB7CglpZiAoICFzdGFydCkgc3RhcnQgPSAw
OwoKCXZhciBmaW5pc2ggPSBzdGFydCArIDI1MDsKCWlmICggZmluaXNoID4gaW5w
dXRzLmxlbmd0aCApCgkJZmluaXNoID0gaW5wdXRzLmxlbmd0aDsKCglmb3IgKCB2
YXIgaSA9IHN0YXJ0OyBpIDwgZmluaXNoOyBpKysgKSB7CgkJdmFyIGNiID0gaW5w
dXRzW2ldOwoJCWlmICggIWNiLnR5cGUgfHwgY2IudHlwZS50b0xvd2VyQ2FzZSgp
ICE9ICdjaGVja2JveCcgKQoJCQljb250aW51ZTsKCQl2YXIgZW5kID0gY2hlY2ti
b3hlcy5sZW5ndGg7CgkJY2hlY2tib3hlc1tlbmRdID0gY2I7CgkJY2IuaW5kZXgg
PSBlbmQ7CgkJY2Iub25jbGljayA9IGNoZWNrYm94Q2xpY2tIYW5kbGVyOwoJfQoK
CWlmICggZmluaXNoIDwgaW5wdXRzLmxlbmd0aCApIHsKCQlzZXRUaW1lb3V0KCBm
dW5jdGlvbiAoKSB7CgkJCWFkZENoZWNrYm94Q2xpY2tIYW5kbGVycyhpbnB1dHMs
IGZpbmlzaCk7CgkJfSwgMjAwICk7Cgl9Cn0KCmZ1bmN0aW9uIGNoZWNrYm94Q2xp
Y2tIYW5kbGVyKGUpIHsKCWlmICh0eXBlb2YgZSA9PSAndW5kZWZpbmVkJykgewoJ
CWUgPSB3aW5kb3cuZXZlbnQ7Cgl9CglpZiAoICFlLnNoaWZ0S2V5IHx8IGxhc3RD
aGVja2JveCA9PT0gbnVsbCApIHsKCQlsYXN0Q2hlY2tib3ggPSB0aGlzLmluZGV4
OwoJCXJldHVybiB0cnVlOwoJfQoJdmFyIGVuZFN0YXRlID0gdGhpcy5jaGVja2Vk
OwoJdmFyIHN0YXJ0LCBmaW5pc2g7CglpZiAoIHRoaXMuaW5kZXggPCBsYXN0Q2hl
Y2tib3ggKSB7CgkJc3RhcnQgPSB0aGlzLmluZGV4ICsgMTsKCQlmaW5pc2ggPSBs
YXN0Q2hlY2tib3g7Cgl9IGVsc2UgewoJCXN0YXJ0ID0gbGFzdENoZWNrYm94OwoJ
CWZpbmlzaCA9IHRoaXMuaW5kZXggLSAxOwoJfQoJZm9yICh2YXIgaSA9IHN0YXJ0
OyBpIDw9IGZpbmlzaDsgKytpICkgewoJCWNoZWNrYm94ZXNbaV0uY2hlY2tlZCA9
IGVuZFN0YXRlOwoJCWlmKCBpID4gc3RhcnQgJiYgdHlwZW9mIGNoZWNrYm94ZXNb
aV0ub25jaGFuZ2UgPT0gJ2Z1bmN0aW9uJyApCgkJCWNoZWNrYm94ZXNbaV0ub25j
aGFuZ2UoKTsgLy8gZmlyZSB0cmlnZ2VycwoJfQoJbGFzdENoZWNrYm94ID0gdGhp
cy5pbmRleDsKCXJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiB0b2dnbGVfZWxlbWVu
dF9hY3RpdmF0aW9uKGlkYSxpZGIpIHsKCWlmICggIWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkICkgewoJCXJldHVybjsKCX0KCS8vIFNob3cgdGhlIGFwcHJvcHJpYXRl
IHVwbG9hZCBzaXplIGxpbWl0IG1lc3NhZ2UKCWlmKCBpZGIgPT0gJ3dwVXBsb2Fk
RmlsZVVSTCcgKSB7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgg
J213LXVwbG9hZC1tYXhmaWxlc2l6ZScgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCggJ213LXVwbG9hZC1tYXhmaWxlc2l6ZS11cmwnICk7CgkJaWYoIGUgKSBlLnN0
eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoJfQoJaWYoIGlkYiA9PSAnd3BVcGxvYWRG
aWxlJyApIHsKCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbXct
dXBsb2FkLW1heGZpbGVzaXplLXVybCcgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlz
cGxheSA9ICAibm9uZSI7CgoJCXZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoICdtdy11cGxvYWQtbWF4ZmlsZXNpemUnICk7CgkJaWYoIGUgKSBlLnN0eWxl
LmRpc3BsYXkgPSAgImJsb2NrIjsKCX0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCBpZGEgKS5kaXNhYmxlZCA9IHRydWU7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCggaWRiICkuZGlzYWJsZWQgPSBmYWxzZTsKfQoKZnVuY3Rpb24gdG9nZ2xlX2Vs
ZW1lbnRfY2hlY2soaWRhLGlkYikgewoJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCkgewoJCXJldHVybjsKCX0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
YSkuY2hlY2tlZD10cnVlOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRiKS5j
aGVja2VkPWZhbHNlOwp9CgovKgoJV3JpdHRlbiBieSBKb25hdGhhbiBTbm9vaywg
aHR0cDovL3d3dy5zbm9vay5jYS9qb25hdGhhbgoJQWRkLW9ucyBieSBSb2JlcnQg
TnltYW4sIGh0dHA6Ly93d3cucm9iZXJ0bnltYW4uY29tCglBdXRob3Igc2F5cyAi
VGhlIGNyZWRpdCBjb21tZW50IGlzIGFsbCBpdCB0YWtlcywgbm8gbGljZW5zZS4g
R28gY3Jhenkgd2l0aCBpdCE6LSkiCglGcm9tIGh0dHA6Ly93d3cucm9iZXJ0bnlt
YW4uY29tLzIwMDUvMTEvMDcvdGhlLXVsdGltYXRlLWdldGVsZW1lbnRzYnljbGFz
c25hbWUvCiovCmZ1bmN0aW9uIGdldEVsZW1lbnRzQnlDbGFzc05hbWUob0VsbSwg
c3RyVGFnTmFtZSwgb0NsYXNzTmFtZXMpewoJdmFyIGFyclJldHVybkVsZW1lbnRz
ID0gbmV3IEFycmF5KCk7CglpZiAoIHR5cGVvZiggb0VsbS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lICkgPT0gImZ1bmN0aW9uIiApIHsKCQkvKiBVc2UgYSBuYXRpdmUg
aW1wbGVtZW50YXRpb24gd2hlcmUgcG9zc2libGUgRkYzLCBTYWYzLjIsIE9wZXJh
IDkuNSAqLwoJCXZhciBhcnJOYXRpdmVSZXR1cm4gPSBvRWxtLmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoIG9DbGFzc05hbWVzICk7CgkJaWYgKCBzdHJUYWdOYW1lID09
ICIqIiApCgkJCXJldHVybiBhcnJOYXRpdmVSZXR1cm47CgkJZm9yICggdmFyIGg9
MDsgaCA8IGFyck5hdGl2ZVJldHVybi5sZW5ndGg7IGgrKyApIHsKCQkJaWYoIGFy
ck5hdGl2ZVJldHVybltoXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gc3RyVGFn
TmFtZS50b0xvd2VyQ2FzZSgpICkKCQkJCWFyclJldHVybkVsZW1lbnRzW2FyclJl
dHVybkVsZW1lbnRzLmxlbmd0aF0gPSBhcnJOYXRpdmVSZXR1cm5baF07CgkJfQoJ
CXJldHVybiBhcnJSZXR1cm5FbGVtZW50czsKCX0KCXZhciBhcnJFbGVtZW50cyA9
IChzdHJUYWdOYW1lID09ICIqIiAmJiBvRWxtLmFsbCk/IG9FbG0uYWxsIDogb0Vs
bS5nZXRFbGVtZW50c0J5VGFnTmFtZShzdHJUYWdOYW1lKTsKCXZhciBhcnJSZWdF
eHBDbGFzc05hbWVzID0gbmV3IEFycmF5KCk7CglpZih0eXBlb2Ygb0NsYXNzTmFt
ZXMgPT0gIm9iamVjdCIpewoJCWZvcih2YXIgaT0wOyBpPG9DbGFzc05hbWVzLmxl
bmd0aDsgaSsrKXsKCQkJYXJyUmVnRXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFz
c05hbWVzLmxlbmd0aF0gPQoJCQkJbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBvQ2xh
c3NOYW1lc1tpXS5yZXBsYWNlKC9cLS9nLCAiXFwtIikgKyAiKFxcc3wkKSIpOwoJ
CX0KCX0KCWVsc2V7CgkJYXJyUmVnRXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFz
c05hbWVzLmxlbmd0aF0gPQoJCQluZXcgUmVnRXhwKCIoXnxcXHMpIiArIG9DbGFz
c05hbWVzLnJlcGxhY2UoL1wtL2csICJcXC0iKSArICIoXFxzfCQpIik7Cgl9Cgl2
YXIgb0VsZW1lbnQ7Cgl2YXIgYk1hdGNoZXNBbGw7Cglmb3IodmFyIGo9MDsgajxh
cnJFbGVtZW50cy5sZW5ndGg7IGorKyl7CgkJb0VsZW1lbnQgPSBhcnJFbGVtZW50
c1tqXTsKCQliTWF0Y2hlc0FsbCA9IHRydWU7CgkJZm9yKHZhciBrPTA7IGs8YXJy
UmVnRXhwQ2xhc3NOYW1lcy5sZW5ndGg7IGsrKyl7CgkJCWlmKCFhcnJSZWdFeHBD
bGFzc05hbWVzW2tdLnRlc3Qob0VsZW1lbnQuY2xhc3NOYW1lKSl7CgkJCQliTWF0
Y2hlc0FsbCA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYoYk1hdGNo
ZXNBbGwpewoJCQlhcnJSZXR1cm5FbGVtZW50c1thcnJSZXR1cm5FbGVtZW50cy5s
ZW5ndGhdID0gb0VsZW1lbnQ7CgkJfQoJfQoJcmV0dXJuIChhcnJSZXR1cm5FbGVt
ZW50cykKfQoKZnVuY3Rpb24gcmVkaXJlY3RUb0ZyYWdtZW50KGZyYWdtZW50KSB7
Cgl2YXIgbWF0Y2ggPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdl
YktpdFwvKFxkKykvKTsKCWlmIChtYXRjaCkgewoJCXZhciB3ZWJLaXRWZXJzaW9u
ID0gcGFyc2VJbnQobWF0Y2hbMV0pOwoJCWlmICh3ZWJLaXRWZXJzaW9uIDwgNDIw
KSB7CgkJCS8vIFJlbGVhc2VkIFNhZmFyaSB3LyBXZWJLaXQgNDE4LjkuMSBtZXNz
ZXMgdXAgaG9ycmlibHkKCQkJLy8gTmlnaHRsaWVzIG9mIDQyMCsgYXJlIG9rCgkJ
CXJldHVybjsKCQl9Cgl9CglpZiAoaXNfZ2Vja28pIHsKCQkvLyBNb3ppbGxhIG5l
ZWRzIHRvIHdhaXQgdW50aWwgYWZ0ZXIgbG9hZCwgb3RoZXJ3aXNlIHRoZSB3aW5k
b3cgZG9lc24ndCBzY3JvbGwKCQlhZGRPbmxvYWRIb29rKGZ1bmN0aW9uICgpIHsK
CQkJaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09ICIiKQoJCQkJd2luZG93Lmxv
Y2F0aW9uLmhhc2ggPSBmcmFnbWVudDsKCQl9KTsKCX0gZWxzZSB7CgkJaWYgKHdp
bmRvdy5sb2NhdGlvbi5oYXNoID09ICIiKQoJCQl3aW5kb3cubG9jYXRpb24uaGFz
aCA9IGZyYWdtZW50OwoJfQp9CgovKgogKiBUYWJsZSBzb3J0aW5nIHNjcmlwdCBi
YXNlZCBvbiBvbmUgKGMpIDE5OTctMjAwNiBTdHVhcnQgTGFuZ3JpZGdlIGFuZCBK
b29zdAogKiBkZSBWYWxrOgogKiBodHRwOi8vd3d3Lmpvb3N0ZGV2YWxrLm5sL2Nv
ZGUvc29ydGFibGUtdGFibGUvCiAqIGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9j
b2RlL2Jyb3dzZXIvc29ydHRhYmxlLwogKgogKiBAdG9kbyBkb24ndCBicmVhayBv
biBjb2xzcGFucy9yb3dzcGFucyAoYnVnIDgwMjgpCiAqIEB0b2RvIGxhbmd1YWdl
LXNwZWNpZmljIGRpZ2l0IGdyb3VwaW5nL2RlY2ltYWxzIChidWcgODA2MykKICog
QHRvZG8gc3VwcG9ydCBhbGwgYWNjZXB0ZWQgZGF0ZSBmb3JtYXRzIChidWcgODIy
NikKICovCgp2YXIgdHNfaW1hZ2VfcGF0aCA9IHN0eWxlcGF0aCsiL2NvbW1vbi9p
bWFnZXMvIjsKdmFyIHRzX2ltYWdlX3VwID0gInNvcnRfdXAuZ2lmIjsKdmFyIHRz
X2ltYWdlX2Rvd24gPSAic29ydF9kb3duLmdpZiI7CnZhciB0c19pbWFnZV9ub25l
ID0gInNvcnRfbm9uZS5naWYiOwp2YXIgdHNfZXVyb3BlYW5kYXRlID0gd2dDb250
ZW50TGFuZ3VhZ2UgIT0gImVuIjsgLy8gVGhlIG5vbi1BbWVyaWNhbi1pbmNsaW5l
ZCBjYW4gY2hhbmdlIHRvICJ0cnVlIgp2YXIgdHNfYWx0ZXJuYXRlX3Jvd19jb2xv
cnMgPSBmYWxzZTsKdmFyIHRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPSBudWxs
Owp2YXIgdHNfbnVtYmVyX3JlZ2V4ID0gbnVsbDsKCmZ1bmN0aW9uIHNvcnRhYmxl
c19pbml0KCkgewoJdmFyIGlkbnVtID0gMDsKCS8vIEZpbmQgYWxsIHRhYmxlcyB3
aXRoIGNsYXNzIHNvcnRhYmxlIGFuZCBtYWtlIHRoZW0gc29ydGFibGUKCXZhciB0
YWJsZXMgPSBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGRvY3VtZW50LCAidGFibGUi
LCAic29ydGFibGUiKTsKCWZvciAodmFyIHRpID0gMDsgdGkgPCB0YWJsZXMubGVu
Z3RoIDsgdGkrKykgewoJCWlmICghdGFibGVzW3RpXS5pZCkgewoJCQl0YWJsZXNb
dGldLnNldEF0dHJpYnV0ZSgnaWQnLCdzb3J0YWJsZV90YWJsZV9pZF8nK2lkbnVt
KTsKCQkJKytpZG51bTsKCQl9CgkJdHNfbWFrZVNvcnRhYmxlKHRhYmxlc1t0aV0p
OwoJfQp9CgpmdW5jdGlvbiB0c19tYWtlU29ydGFibGUodGFibGUpIHsKCXZhciBm
aXJzdFJvdzsKCWlmICh0YWJsZS5yb3dzICYmIHRhYmxlLnJvd3MubGVuZ3RoID4g
MCkgewoJCWlmICh0YWJsZS50SGVhZCAmJiB0YWJsZS50SGVhZC5yb3dzLmxlbmd0
aCA+IDApIHsKCQkJZmlyc3RSb3cgPSB0YWJsZS50SGVhZC5yb3dzW3RhYmxlLnRI
ZWFkLnJvd3MubGVuZ3RoLTFdOwoJCX0gZWxzZSB7CgkJCWZpcnN0Um93ID0gdGFi
bGUucm93c1swXTsKCQl9Cgl9CglpZiAoIWZpcnN0Um93KSByZXR1cm47CgoJLy8g
V2UgaGF2ZSBhIGZpcnN0IHJvdzogYXNzdW1lIGl0J3MgdGhlIGhlYWRlciwgYW5k
IG1ha2UgaXRzIGNvbnRlbnRzIGNsaWNrYWJsZSBsaW5rcwoJZm9yICh2YXIgaSA9
IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykgewoJCXZhciBjZWxs
ID0gZmlyc3RSb3cuY2VsbHNbaV07CgkJaWYgKCgiICIrY2VsbC5jbGFzc05hbWUr
IiAiKS5pbmRleE9mKCIgdW5zb3J0YWJsZSAiKSA9PSAtMSkgewoJCQljZWxsLmlu
bmVySFRNTCArPSAnJm5ic3A7Jm5ic3A7JwoJCQkJKyAnPGEgaHJlZj0iIyIgY2xh
c3M9InNvcnRoZWFkZXIiICcKCQkJCSsgJ29uY2xpY2s9InRzX3Jlc29ydFRhYmxl
KHRoaXMpO3JldHVybiBmYWxzZTsiPicKCQkJCSsgJzxzcGFuIGNsYXNzPSJzb3J0
YXJyb3ciPicKCQkJCSsgJzxpbWcgc3JjPSInCgkJCQkrIHRzX2ltYWdlX3BhdGgK
CQkJCSsgdHNfaW1hZ2Vfbm9uZQoJCQkJKyAnIiBhbHQ9IiZkYXJyOyIvPjwvc3Bh
bj48L2E+JzsKCQl9Cgl9CglpZiAodHNfYWx0ZXJuYXRlX3Jvd19jb2xvcnMpIHsK
CQl0c19hbHRlcm5hdGUodGFibGUpOwoJfQp9CgpmdW5jdGlvbiB0c19nZXRJbm5l
clRleHQoZWwpIHsKCXJldHVybiBnZXRJbm5lclRleHQoIGVsICk7Cn0KCmZ1bmN0
aW9uIHRzX3Jlc29ydFRhYmxlKGxuaykgewoJLy8gZ2V0IHRoZSBzcGFuCgl2YXIg
c3BhbiA9IGxuay5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3BhbicpWzBdOwoKCXZh
ciB0ZCA9IGxuay5wYXJlbnROb2RlOwoJdmFyIHRyID0gdGQucGFyZW50Tm9kZTsK
CXZhciBjb2x1bW4gPSB0ZC5jZWxsSW5kZXg7CgoJdmFyIHRhYmxlID0gdHIucGFy
ZW50Tm9kZTsKCXdoaWxlICh0YWJsZSAmJiAhKHRhYmxlLnRhZ05hbWUgJiYgdGFi
bGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0YWJsZScpKQoJCXRhYmxlID0g
dGFibGUucGFyZW50Tm9kZTsKCWlmICghdGFibGUpIHJldHVybjsKCglpZiAodGFi
bGUucm93cy5sZW5ndGggPD0gMSkgcmV0dXJuOwoKCS8vIEdlbmVyYXRlIHRoZSBu
dW1iZXIgdHJhbnNmb3JtIHRhYmxlIGlmIGl0J3Mgbm90IGRvbmUgYWxyZWFkeQoJ
aWYgKHRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPT0gbnVsbCkgewoJCXRzX2lu
aXRUcmFuc2Zvcm1UYWJsZSgpOwoJfQoKCS8vIFdvcmsgb3V0IGEgdHlwZSBmb3Ig
dGhlIGNvbHVtbgoJLy8gU2tpcCB0aGUgZmlyc3Qgcm93IGlmIHRoYXQncyB3aGVy
ZSB0aGUgaGVhZGluZ3MgYXJlCgl2YXIgcm93U3RhcnQgPSAodGFibGUudEhlYWQg
JiYgdGFibGUudEhlYWQucm93cy5sZW5ndGggPiAwID8gMCA6IDEpOwoKCXZhciBp
dG0gPSAiIjsKCWZvciAodmFyIGkgPSByb3dTdGFydDsgaSA8IHRhYmxlLnJvd3Mu
bGVuZ3RoOyBpKyspIHsKCQlpZiAodGFibGUucm93c1tpXS5jZWxscy5sZW5ndGgg
PiBjb2x1bW4pIHsKCQkJaXRtID0gdHNfZ2V0SW5uZXJUZXh0KHRhYmxlLnJvd3Nb
aV0uY2VsbHNbY29sdW1uXSk7CgkJCWl0bSA9IGl0bS5yZXBsYWNlKC9eW1xzXHhh
MF0rLywgIiIpLnJlcGxhY2UoL1tcc1x4YTBdKyQvLCAiIik7CgkJCWlmIChpdG0g
IT0gIiIpIGJyZWFrOwoJCX0KCX0KCgkvLyBUT0RPOiBidWcgODIyNiwgbG9jYWxp
c2VkIGRhdGUgZm9ybWF0cwoJdmFyIHNvcnRmbiA9IHRzX3NvcnRfZ2VuZXJpYzsK
CXZhciBwcmVwcm9jZXNzb3IgPSB0c190b0xvd2VyQ2FzZTsKCWlmICgvXlxkXGRb
XC8uIC1dW2EtekEtWl17M31bXC8uIC1dXGRcZFxkXGQkLy50ZXN0KGl0bSkpIHsK
CQlwcmVwcm9jZXNzb3IgPSB0c19kYXRlVG9Tb3J0S2V5OwoJfSBlbHNlIGlmICgv
XlxkXGRbXC8uLV1cZFxkW1wvLi1dXGRcZFxkXGQkLy50ZXN0KGl0bSkpIHsKCQlw
cmVwcm9jZXNzb3IgPSB0c19kYXRlVG9Tb3J0S2V5OwoJfSBlbHNlIGlmICgvXlxk
XGRbXC8uLV1cZFxkW1wvLi1dXGRcZCQvLnRlc3QoaXRtKSkgewoJCXByZXByb2Nl
c3NvciA9IHRzX2RhdGVUb1NvcnRLZXk7CgkvLyBwb3VuZCBkb2xsYXIgZXVybyB5
ZW4gY3VycmVuY3kgY2VudHMKCX0gZWxzZSBpZiAoLyheW1x1MDBhMyRcdTIwYWNc
dTAwYTRcdTAwYTVdfFx1MDBhMiQpLy50ZXN0KGl0bSkpIHsKCQlwcmVwcm9jZXNz
b3IgPSB0c19jdXJyZW5jeVRvU29ydEtleTsKCX0gZWxzZSBpZiAodHNfbnVtYmVy
X3JlZ2V4LnRlc3QoaXRtKSkgewoJCXByZXByb2Nlc3NvciA9IHRzX3BhcnNlRmxv
YXQ7Cgl9CgoJdmFyIHJldmVyc2UgPSAoc3Bhbi5nZXRBdHRyaWJ1dGUoInNvcnRk
aXIiKSA9PSAnZG93bicpOwoKCXZhciBuZXdSb3dzID0gbmV3IEFycmF5KCk7Cgl2
YXIgc3RhdGljUm93cyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaiA9IHJvd1N0
YXJ0OyBqIDwgdGFibGUucm93cy5sZW5ndGg7IGorKykgewoJCXZhciByb3cgPSB0
YWJsZS5yb3dzW2pdOwoJCWlmKCgiICIrcm93LmNsYXNzTmFtZSsiICIpLmluZGV4
T2YoIiB1bnNvcnRhYmxlICIpIDwgMCkgewoJCQl2YXIga2V5VGV4dCA9IHRzX2dl
dElubmVyVGV4dChyb3cuY2VsbHNbY29sdW1uXSk7CgkJCWlmKGtleVRleHQgPT0g
dW5kZWZpbmVkKSB7CgkJCQlrZXlUZXh0ID0gIiI7IAoJCQl9CgkJCXZhciBvbGRJ
bmRleCA9IChyZXZlcnNlID8gLWogOiBqKTsKCQkJdmFyIHByZXByb2Nlc3NlZCA9
IHByZXByb2Nlc3Nvcigga2V5VGV4dC5yZXBsYWNlKC9eW1xzXHhhMF0rLywgIiIp
LnJlcGxhY2UoL1tcc1x4YTBdKyQvLCAiIikgKTsKCgkJCW5ld1Jvd3NbbmV3Um93
cy5sZW5ndGhdID0gbmV3IEFycmF5KHJvdywgcHJlcHJvY2Vzc2VkLCBvbGRJbmRl
eCk7CgkJfSBlbHNlIHN0YXRpY1Jvd3Nbc3RhdGljUm93cy5sZW5ndGhdID0gbmV3
IEFycmF5KHJvdywgZmFsc2UsIGotcm93U3RhcnQpOwoJfQoKCW5ld1Jvd3Muc29y
dChzb3J0Zm4pOwoKCXZhciBhcnJvd0hUTUw7CglpZiAocmV2ZXJzZSkgewoJCWFy
cm93SFRNTCA9ICc8aW1nIHNyYz0iJysgdHNfaW1hZ2VfcGF0aCArIHRzX2ltYWdl
X2Rvd24gKyAnIiBhbHQ9IiZkYXJyOyIvPic7CgkJbmV3Um93cy5yZXZlcnNlKCk7
CgkJc3Bhbi5zZXRBdHRyaWJ1dGUoJ3NvcnRkaXInLCd1cCcpOwoJfSBlbHNlIHsK
CQlhcnJvd0hUTUwgPSAnPGltZyBzcmM9IicrIHRzX2ltYWdlX3BhdGggKyB0c19p
bWFnZV91cCArICciIGFsdD0iJnVhcnI7Ii8+JzsKCQlzcGFuLnNldEF0dHJpYnV0
ZSgnc29ydGRpcicsJ2Rvd24nKTsKCX0KCglmb3IgKHZhciBpID0gMDsgaSA8IHN0
YXRpY1Jvd3MubGVuZ3RoOyBpKyspIHsKCQl2YXIgcm93ID0gc3RhdGljUm93c1tp
XTsKCQluZXdSb3dzLnNwbGljZShyb3dbMl0sIDAsIHJvdyk7Cgl9CgoJLy8gV2Ug
YXBwZW5kQ2hpbGQgcm93cyB0aGF0IGFscmVhZHkgZXhpc3QgdG8gdGhlIHRib2R5
LCBzbyBpdCBtb3ZlcyB0aGVtIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvbmVz
CgkvLyBkb24ndCBkbyBzb3J0Ym90dG9tIHJvd3MKCWZvciAodmFyIGkgPSAwOyBp
IDwgbmV3Um93cy5sZW5ndGg7IGkrKykgewoJCWlmICgoIiAiK25ld1Jvd3NbaV1b
MF0uY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiIHNvcnRib3R0b20gIikgPT0gLTEp
CgkJCXRhYmxlLnRCb2RpZXNbMF0uYXBwZW5kQ2hpbGQobmV3Um93c1tpXVswXSk7
Cgl9CgkvLyBkbyBzb3J0Ym90dG9tIHJvd3Mgb25seQoJZm9yICh2YXIgaSA9IDA7
IGkgPCBuZXdSb3dzLmxlbmd0aDsgaSsrKSB7CgkJaWYgKCgiICIrbmV3Um93c1tp
XVswXS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgc29ydGJvdHRvbSAiKSAhPSAt
MSkKCQkJdGFibGUudEJvZGllc1swXS5hcHBlbmRDaGlsZChuZXdSb3dzW2ldWzBd
KTsKCX0KCgkvLyBEZWxldGUgYW55IG90aGVyIGFycm93cyB0aGVyZSBtYXkgYmUg
c2hvd2luZwoJdmFyIHNwYW5zID0gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0ciwg
InNwYW4iLCAic29ydGFycm93Iik7Cglmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5z
Lmxlbmd0aDsgaSsrKSB7CgkJc3BhbnNbaV0uaW5uZXJIVE1MID0gJzxpbWcgc3Jj
PSInKyB0c19pbWFnZV9wYXRoICsgdHNfaW1hZ2Vfbm9uZSArICciIGFsdD0iJmRh
cnI7Ii8+JzsKCX0KCXNwYW4uaW5uZXJIVE1MID0gYXJyb3dIVE1MOwoKCWlmICh0
c19hbHRlcm5hdGVfcm93X2NvbG9ycykgewoJCXRzX2FsdGVybmF0ZSh0YWJsZSk7
Cgl9Cn0KCmZ1bmN0aW9uIHRzX2luaXRUcmFuc2Zvcm1UYWJsZSgpIHsKCWlmICgg
dHlwZW9mIHdnU2VwYXJhdG9yVHJhbnNmb3JtVGFibGUgPT0gInVuZGVmaW5lZCIK
CQkJfHwgKCB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxlWzBdID09ICcnICYmIHdn
RGlnaXRUcmFuc2Zvcm1UYWJsZVsyXSA9PSAnJyApICkKCXsKCQlkaWdpdENsYXNz
ID0gIlswLTksLl0iOwoJCXRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPSBmYWxz
ZTsKCX0gZWxzZSB7CgkJdHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZSA9IHt9OwoJ
CS8vIFVucGFjayB0aGUgdHJhbnNmb3JtIHRhYmxlCgkJLy8gU2VwYXJhdG9ycwoJ
CWFzY2lpID0gd2dTZXBhcmF0b3JUcmFuc2Zvcm1UYWJsZVswXS5zcGxpdCgiXHQi
KTsKCQlsb2NhbGlzZWQgPSB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxlWzFdLnNw
bGl0KCJcdCIpOwoJCWZvciAoIHZhciBpID0gMDsgaSA8IGFzY2lpLmxlbmd0aDsg
aSsrICkgewoJCQl0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlW2xvY2FsaXNlZFtp
XV0gPSBhc2NpaVtpXTsKCQl9CgkJLy8gRGlnaXRzCgkJYXNjaWkgPSB3Z0RpZ2l0
VHJhbnNmb3JtVGFibGVbMF0uc3BsaXQoIlx0Iik7CgkJbG9jYWxpc2VkID0gd2dE
aWdpdFRyYW5zZm9ybVRhYmxlWzFdLnNwbGl0KCJcdCIpOwoJCWZvciAoIHZhciBp
ID0gMDsgaSA8IGFzY2lpLmxlbmd0aDsgaSsrICkgewoJCQl0c19udW1iZXJfdHJh
bnNmb3JtX3RhYmxlW2xvY2FsaXNlZFtpXV0gPSBhc2NpaVtpXTsKCQl9CgoJCS8v
IENvbnN0cnVjdCByZWdleCBmb3IgbnVtYmVyIGlkZW50aWZpY2F0aW9uCgkJZGln
aXRzID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAn
OCcsICc5JywgJywnLCAnXFwuJ107CgkJbWF4RGlnaXRMZW5ndGggPSAxOwoJCWZv
ciAoIHZhciBkaWdpdCBpbiB0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlICkgewoJ
CQkvLyBFc2NhcGUgcmVnZXggbWV0YWNoYXJhY3RlcnMKCQkJZGlnaXRzLnB1c2go
CgkJCQlkaWdpdC5yZXBsYWNlKCAvW1xcXFwkXCpcK1w/XC5cKFwpXHxce1x9XFtc
XVwtXS8sCgkJCQkJZnVuY3Rpb24oIHMgKSB7IHJldHVybiAnXFwnICsgczsgfSAp
CgkJCSk7CgkJCWlmIChkaWdpdC5sZW5ndGggPiBtYXhEaWdpdExlbmd0aCkgewoJ
CQkJbWF4RGlnaXRMZW5ndGggPSBkaWdpdC5sZW5ndGg7CgkJCX0KCQl9CgkJaWYg
KCBtYXhEaWdpdExlbmd0aCA+IDEgKSB7CgkJCWRpZ2l0Q2xhc3MgPSAnWycgKyBk
aWdpdHMuam9pbiggJycsIGRpZ2l0cyApICsgJ10nOwoJCX0gZWxzZSB7CgkJCWRp
Z2l0Q2xhc3MgPSAnKCcgKyBkaWdpdHMuam9pbiggJ3wnLCBkaWdpdHMgKSArICcp
JzsKCQl9Cgl9CgoJLy8gV2UgYWxsb3cgYSB0cmFpbGluZyBwZXJjZW50IHNpZ24s
IHdoaWNoIHdlIGp1c3Qgc3RyaXAuICBUaGlzIHdvcmtzIGZpbmUKCS8vIGlmIHBl
cmNlbnRzIGFuZCByZWd1bGFyIG51bWJlcnMgYXJlbid0IGJlaW5nIG1peGVkLgoJ
dHNfbnVtYmVyX3JlZ2V4ID0gbmV3IFJlZ0V4cCgKCQkiXigiICsKCQkJIlsrLV0/
WzAtOV1bMC05LF0qKFxcLlswLTksXSopPyhFWystXT9bMC05XVswLTksXSopPyIg
KyAvLyBGb3J0cmFuLXN0eWxlIHNjaWVudGlmaWMKCQkJInwiICsKCQkJIlsrLV0/
IiArIGRpZ2l0Q2xhc3MgKyAiKyU/IiArIC8vIEdlbmVyaWMgbG9jYWxpc2VkCgkJ
IikkIiwgImkiCgkpOwp9CgpmdW5jdGlvbiB0c190b0xvd2VyQ2FzZSggcyApIHsK
CXJldHVybiBzLnRvTG93ZXJDYXNlKCk7Cn0KCmZ1bmN0aW9uIHRzX2RhdGVUb1Nv
cnRLZXkoZGF0ZSkgewoJLy8geTJrIG5vdGVzOiB0d28gZGlnaXQgeWVhcnMgbGVz
cyB0aGFuIDUwIGFyZSB0cmVhdGVkIGFzIDIwWFgsIGdyZWF0ZXIgdGhhbiA1MCBh
cmUgdHJlYXRlZCBhcyAxOVhYCglpZiAoZGF0ZS5sZW5ndGggPT0gMTEpIHsKCQlz
d2l0Y2ggKGRhdGUuc3Vic3RyKDMsMykudG9Mb3dlckNhc2UoKSkgewoJCQljYXNl
ICJqYW4iOiB2YXIgbW9udGggPSAiMDEiOyBicmVhazsKCQkJY2FzZSAiZmViIjog
dmFyIG1vbnRoID0gIjAyIjsgYnJlYWs7CgkJCWNhc2UgIm1hciI6IHZhciBtb250
aCA9ICIwMyI7IGJyZWFrOwoJCQljYXNlICJhcHIiOiB2YXIgbW9udGggPSAiMDQi
OyBicmVhazsKCQkJY2FzZSAibWF5IjogdmFyIG1vbnRoID0gIjA1IjsgYnJlYWs7
CgkJCWNhc2UgImp1biI6IHZhciBtb250aCA9ICIwNiI7IGJyZWFrOwoJCQljYXNl
ICJqdWwiOiB2YXIgbW9udGggPSAiMDciOyBicmVhazsKCQkJY2FzZSAiYXVnIjog
dmFyIG1vbnRoID0gIjA4IjsgYnJlYWs7CgkJCWNhc2UgInNlcCI6IHZhciBtb250
aCA9ICIwOSI7IGJyZWFrOwoJCQljYXNlICJvY3QiOiB2YXIgbW9udGggPSAiMTAi
OyBicmVhazsKCQkJY2FzZSAibm92IjogdmFyIG1vbnRoID0gIjExIjsgYnJlYWs7
CgkJCWNhc2UgImRlYyI6IHZhciBtb250aCA9ICIxMiI7IGJyZWFrOwoJCQkvLyBk
ZWZhdWx0OiB2YXIgbW9udGggPSAiMDAiOwoJCX0KCQlyZXR1cm4gZGF0ZS5zdWJz
dHIoNyw0KSttb250aCtkYXRlLnN1YnN0cigwLDIpOwoJfSBlbHNlIGlmIChkYXRl
Lmxlbmd0aCA9PSAxMCkgewoJCWlmICh0c19ldXJvcGVhbmRhdGUgPT0gZmFsc2Up
IHsKCQkJcmV0dXJuIGRhdGUuc3Vic3RyKDYsNCkrZGF0ZS5zdWJzdHIoMCwyKStk
YXRlLnN1YnN0cigzLDIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiBkYXRlLnN1YnN0
cig2LDQpK2RhdGUuc3Vic3RyKDMsMikrZGF0ZS5zdWJzdHIoMCwyKTsKCQl9Cgl9
IGVsc2UgaWYgKGRhdGUubGVuZ3RoID09IDgpIHsKCQl5ciA9IGRhdGUuc3Vic3Ry
KDYsMik7CgkJaWYgKHBhcnNlSW50KHlyKSA8IDUwKSB7CgkJCXlyID0gJzIwJyt5
cjsKCQl9IGVsc2UgewoJCQl5ciA9ICcxOScreXI7CgkJfQoJCWlmICh0c19ldXJv
cGVhbmRhdGUgPT0gdHJ1ZSkgewoJCQlyZXR1cm4geXIrZGF0ZS5zdWJzdHIoMywy
KStkYXRlLnN1YnN0cigwLDIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiB5citkYXRl
LnN1YnN0cigwLDIpK2RhdGUuc3Vic3RyKDMsMik7CgkJfQoJfQoJcmV0dXJuICIw
MDAwMDAwMCI7Cn0KCmZ1bmN0aW9uIHRzX3BhcnNlRmxvYXQoIHMgKSB7CglpZiAo
ICFzICkgewoJCXJldHVybiAwOwoJfQoJaWYgKHRzX251bWJlcl90cmFuc2Zvcm1f
dGFibGUgIT0gZmFsc2UpIHsKCQl2YXIgbmV3TnVtID0gJycsIGM7CgoJCWZvciAo
IHZhciBwID0gMDsgcCA8IHMubGVuZ3RoOyBwKysgKSB7CgkJCWMgPSBzLmNoYXJB
dCggcCApOwoJCQlpZiAoYyBpbiB0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlKSB7
CgkJCQluZXdOdW0gKz0gdHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZVtjXTsKCQkJ
fSBlbHNlIHsKCQkJCW5ld051bSArPSBjOwoJCQl9CgkJfQoJCXMgPSBuZXdOdW07
Cgl9CgoJbnVtID0gcGFyc2VGbG9hdChzLnJlcGxhY2UoLywvZywgIiIpKTsKCXJl
dHVybiAoaXNOYU4obnVtKSA/IDAgOiBudW0pOwp9CgpmdW5jdGlvbiB0c19jdXJy
ZW5jeVRvU29ydEtleSggcyApIHsKCXJldHVybiB0c19wYXJzZUZsb2F0KHMucmVw
bGFjZSgvW14wLTkuLF0vZywnJykpOwp9CgpmdW5jdGlvbiB0c19zb3J0X2dlbmVy
aWMoYSwgYikgewoJcmV0dXJuIGFbMV0gPCBiWzFdID8gLTEgOiBhWzFdID4gYlsx
XSA/IDEgOiBhWzJdIC0gYlsyXTsKfQoKZnVuY3Rpb24gdHNfYWx0ZXJuYXRlKHRh
YmxlKSB7CgkvLyBUYWtlIG9iamVjdCB0YWJsZSBhbmQgZ2V0IGFsbCBpdCdzIHRi
b2RpZXMuCgl2YXIgdGFibGVCb2RpZXMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgidGJvZHkiKTsKCS8vIExvb3AgdGhyb3VnaCB0aGVzZSB0Ym9kaWVzCglm
b3IgKHZhciBpID0gMDsgaSA8IHRhYmxlQm9kaWVzLmxlbmd0aDsgaSsrKSB7CgkJ
Ly8gVGFrZSB0aGUgdGJvZHksIGFuZCBnZXQgYWxsIGl0J3Mgcm93cwoJCXZhciB0
YWJsZVJvd3MgPSB0YWJsZUJvZGllc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
dHIiKTsKCQkvLyBMb29wIHRocm91Z2ggdGhlc2Ugcm93cwoJCS8vIFN0YXJ0IGF0
IDEgYmVjYXVzZSB3ZSB3YW50IHRvIGxlYXZlIHRoZSBoZWFkaW5nIHJvdyB1bnRv
dWNoZWQKCQlmb3IgKHZhciBqID0gMDsgaiA8IHRhYmxlUm93cy5sZW5ndGg7IGor
KykgewoJCQkvLyBDaGVjayBpZiBqIGlzIGV2ZW4sIGFuZCBhcHBseSBjbGFzc2Vz
IGZvciBib3RoIHBvc3NpYmxlIHJlc3VsdHMKCQkJdmFyIG9sZENsYXNzZXMgPSB0
YWJsZVJvd3Nbal0uY2xhc3NOYW1lLnNwbGl0KCIgIik7CgkJCXZhciBuZXdDbGFz
c05hbWUgPSAiIjsKCQkJZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDbGFzc2VzLmxl
bmd0aDsgaysrKSB7CgkJCQlpZiAob2xkQ2xhc3Nlc1trXSAhPSAiIiAmJiBvbGRD
bGFzc2VzW2tdICE9ICJldmVuIiAmJiBvbGRDbGFzc2VzW2tdICE9ICJvZGQiKQoJ
CQkJCW5ld0NsYXNzTmFtZSArPSBvbGRDbGFzc2VzW2tdICsgIiAiOwoJCQl9CgkJ
CXRhYmxlUm93c1tqXS5jbGFzc05hbWUgPSBuZXdDbGFzc05hbWUgKyAoaiAlIDIg
PT0gMCA/ICJldmVuIiA6ICJvZGQiKTsKCQl9Cgl9Cn0KCi8qCiAqIEVuZCBvZiB0
YWJsZSBzb3J0aW5nIGNvZGUKICovCgoKLyoqCiAqIEFkZCBhIGN1dGUgbGl0dGxl
IGJveCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gdG8gaW5mb3JtIHRoZSB1c2Vy
IG9mCiAqIHNvbWV0aGluZywgcmVwbGFjaW5nIGFueSBwcmVleGlzdGluZyBtZXNz
YWdlLgogKgogKiBAcGFyYW0gU3RyaW5nIC1vci0gRG9tIE9iamVjdCBtZXNzYWdl
IEhUTUwgdG8gYmUgcHV0IGluc2lkZSB0aGUgcmlnaHQgZGl2CiAqIEBwYXJhbSBT
dHJpbmcgY2xhc3NOYW1lICAgVXNlZCBpbiBhZGRpbmcgYSBjbGFzczsgc2hvdWxk
IGJlIGRpZmZlcmVudCBmb3IgZWFjaAogKiAgIGNhbGwgdG8gYWxsb3cgQ1NTL0pT
IHRvIGhpZGUgZGlmZmVyZW50IGJveGVzLiAgbnVsbCA9IG5vIGNsYXNzIHVzZWQu
CiAqIEByZXR1cm4gQm9vbGVhbiAgICAgICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNl
IG9uIGZhaWx1cmUKICovCmZ1bmN0aW9uIGpzTXNnKCBtZXNzYWdlLCBjbGFzc05h
bWUgKSB7CglpZiAoICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCApIHsKCQlyZXR1
cm4gZmFsc2U7Cgl9CgkvLyBXZSBzcGVjaWFsLWNhc2Ugc2tpbiBzdHJ1Y3R1cmVz
IHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZS4gIFNraW5zIHRoYXQKCS8vIGNob29z
ZSB0byBhYmFuZG9uIG9yIHNpZ25pZmljYW50bHkgbW9kaWZ5IG91ciBmb3JtYXR0
aW5nIGNhbiBqdXN0IGRlZmluZQoJLy8gYW4gbXctanMtbWVzc2FnZSBkaXYgdG8g
c3RhcnQgd2l0aC4KCXZhciBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoICdtdy1qcy1tZXNzYWdlJyApOwoJaWYgKCAhbWVzc2FnZURpdiApIHsK
CQltZXNzYWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsK
CQlpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnY29sdW1uLWNvbnRlbnQn
ICkKCQkmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2NvbnRlbnQnICkgKSB7
CgkJCS8vIE1vbm9Cb29rLCBwcmVzdW1hYmx5CgkJCWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCAnY29udGVudCcgKS5pbnNlcnRCZWZvcmUoCgkJCQltZXNzYWdlRGl2
LAoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdjb250ZW50JyApLmZpcnN0
Q2hpbGQKCQkJKTsKCQl9IGVsc2UgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29udGVudCcpCgkJJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdhcnRp
Y2xlJyApICkgewoJCQkvLyBOb24tTW9ub2Jvb2sgYnV0IHN0aWxsIHJlY29nbml6
YWJsZSAob2xkLXN0eWxlKQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2Fy
dGljbGUnKS5pbnNlcnRCZWZvcmUoCgkJCQltZXNzYWdlRGl2LAoJCQkJZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoICdhcnRpY2xlJyApLmZpcnN0Q2hpbGQKCQkJKTsK
CQl9IGVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCW1lc3NhZ2VEaXYu
c2V0QXR0cmlidXRlKCAnaWQnLCAnbXctanMtbWVzc2FnZScgKTsKCW1lc3NhZ2VE
aXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CglpZiggY2xhc3NOYW1lICkgewoJ
CW1lc3NhZ2VEaXYuc2V0QXR0cmlidXRlKCAnY2xhc3MnLCAnbXctanMtbWVzc2Fn
ZS0nK2NsYXNzTmFtZSApOwoJfQoKCWlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ29i
amVjdCcpIHsKCQl3aGlsZSAobWVzc2FnZURpdi5oYXNDaGlsZE5vZGVzKCkpIC8v
IFJlbW92ZSBvbGQgY29udGVudAoJCQltZXNzYWdlRGl2LnJlbW92ZUNoaWxkKG1l
c3NhZ2VEaXYuZmlyc3RDaGlsZCk7CgkJbWVzc2FnZURpdi5hcHBlbmRDaGlsZCAo
bWVzc2FnZSk7IC8vIEFwcGVuZCBuZXcgY29udGVudAoJfQoJZWxzZSB7CgkJbWVz
c2FnZURpdi5pbm5lckhUTUwgPSBtZXNzYWdlOwoJfQoJcmV0dXJuIHRydWU7Cn0K
Ci8qKgogKiBJbmplY3QgYSBjdXRlIGxpdHRsZSBwcm9ncmVzcyBzcGlubmVyIGFm
dGVyIHRoZSBzcGVjaWZpZWQgZWxlbWVudAogKgogKiBAcGFyYW0gZWxlbWVudCBF
bGVtZW50IHRvIGluamVjdCBhZnRlcgogKiBAcGFyYW0gaWQgSWRlbnRpZmllciBz
dHJpbmcgKGZvciB1c2Ugd2l0aCByZW1vdmVTcGlubmVyKCksIGJlbG93KQogKi8K
ZnVuY3Rpb24gaW5qZWN0U3Bpbm5lciggZWxlbWVudCwgaWQgKSB7Cgl2YXIgc3Bp
bm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbWciICk7CglzcGlubmVy
LmlkID0gIm13LXNwaW5uZXItIiArIGlkOwoJc3Bpbm5lci5zcmMgPSBzdHlsZXBh
dGggKyAiL2NvbW1vbi9pbWFnZXMvc3Bpbm5lci5naWYiOwoJc3Bpbm5lci5hbHQg
PSBzcGlubmVyLnRpdGxlID0gIi4uLiI7CglpZiggZWxlbWVudC5uZXh0U2libGlu
ZyApIHsKCQllbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBzcGlubmVy
LCBlbGVtZW50Lm5leHRTaWJsaW5nICk7Cgl9IGVsc2UgewoJCWVsZW1lbnQucGFy
ZW50Tm9kZS5hcHBlbmRDaGlsZCggc3Bpbm5lciApOwoJfQp9CgovKioKICogUmVt
b3ZlIGEgcHJvZ3Jlc3Mgc3Bpbm5lciBhZGRlZCB3aXRoIGluamVjdFNwaW5uZXIo
KQogKgogKiBAcGFyYW0gaWQgSWRlbnRpZmllciBzdHJpbmcKICovCmZ1bmN0aW9u
IHJlbW92ZVNwaW5uZXIoIGlkICkgewoJdmFyIHNwaW5uZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCggIm13LXNwaW5uZXItIiArIGlkICk7CglpZiggc3Bpbm5l
ciApIHsKCQlzcGlubmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNwaW5uZXIg
KTsKCX0KfQoKZnVuY3Rpb24gcnVuT25sb2FkSG9vaygpIHsKCS8vIGRvbid0IHJ1
biBhbnl0aGluZyBiZWxvdyB0aGlzIGZvciBub24tZG9tIGJyb3dzZXJzCglpZiAo
ZG9uZU9ubG9hZEhvb2sgfHwgIShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAmJiBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSkpIHsKCQlyZXR1cm47Cgl9CgoJ
Ly8gc2V0IHRoaXMgYmVmb3JlIHJ1bm5pbmcgYW55IGhvb2tzLCBzaW5jZSBhbnkg
ZXJyb3JzIGJlbG93CgkvLyBtaWdodCBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gdGVy
bWluYXRlIHByZW1hdHVyZWx5Cglkb25lT25sb2FkSG9vayA9IHRydWU7CgoJdXBk
YXRlVG9vbHRpcEFjY2Vzc0tleXMoIG51bGwgKTsKCWFrZXl0dCggbnVsbCApOwoJ
c2V0dXBDaGVja2JveFNoaWZ0Q2xpY2soKTsKCXNvcnRhYmxlc19pbml0KCk7CgoJ
Ly8gUnVuIGFueSBhZGRlZC1vbiBmdW5jdGlvbnMKCWZvciAodmFyIGkgPSAwOyBp
IDwgb25sb2FkRnVuY3RzLmxlbmd0aDsgaSsrKSB7CgkJb25sb2FkRnVuY3RzW2ld
KCk7Cgl9Cn0KCi8qKgogKiBBZGQgYW4gZXZlbnQgaGFuZGxlciB0byBhbiBlbGVt
ZW50CiAqCiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBhZGQg
aGFuZGxlciB0bwogKiBAcGFyYW0gU3RyaW5nIGF0dGFjaCBFdmVudCB0byBhdHRh
Y2ggdG8KICogQHBhcmFtIGNhbGxhYmxlIGhhbmRsZXIgRXZlbnQgaGFuZGxlciBj
YWxsYmFjawogKi8KZnVuY3Rpb24gYWRkSGFuZGxlciggZWxlbWVudCwgYXR0YWNo
LCBoYW5kbGVyICkgewoJaWYoIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICkgewoJ
CWVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggYXR0YWNoLCBoYW5kbGVyLCBmYWxz
ZSApOwoJfSBlbHNlIGlmKCB3aW5kb3cuYXR0YWNoRXZlbnQgKSB7CgkJZWxlbWVu
dC5hdHRhY2hFdmVudCggJ29uJyArIGF0dGFjaCwgaGFuZGxlciApOwoJfQp9Cgov
KioKICogQWRkIGEgY2xpY2sgZXZlbnQgaGFuZGxlciB0byBhbiBlbGVtZW50CiAq
CiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBhZGQgaGFuZGxl
ciB0bwogKiBAcGFyYW0gY2FsbGFibGUgaGFuZGxlciBFdmVudCBoYW5kbGVyIGNh
bGxiYWNrCiAqLwpmdW5jdGlvbiBhZGRDbGlja0hhbmRsZXIoIGVsZW1lbnQsIGhh
bmRsZXIgKSB7CglhZGRIYW5kbGVyKCBlbGVtZW50LCAnY2xpY2snLCBoYW5kbGVy
ICk7Cn0KCi8qKgogKiBSZW1vdmVzIGFuIGV2ZW50IGhhbmRsZXIgZnJvbSBhbiBl
bGVtZW50CiAqCiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBy
ZW1vdmUgaGFuZGxlciBmcm9tCiAqIEBwYXJhbSBTdHJpbmcgcmVtb3ZlIEV2ZW50
IHRvIHJlbW92ZQogKiBAcGFyYW0gY2FsbGFibGUgaGFuZGxlciBFdmVudCBoYW5k
bGVyIGNhbGxiYWNrIHRvIHJlbW92ZQogKi8KZnVuY3Rpb24gcmVtb3ZlSGFuZGxl
ciggZWxlbWVudCwgcmVtb3ZlLCBoYW5kbGVyICkgewoJaWYoIHdpbmRvdy5yZW1v
dmVFdmVudExpc3RlbmVyICkgewoJCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
ciggcmVtb3ZlLCBoYW5kbGVyLCBmYWxzZSApOwoJfSBlbHNlIGlmKCB3aW5kb3cu
ZGV0YWNoRXZlbnQgKSB7CgkJZWxlbWVudC5kZXRhY2hFdmVudCggJ29uJyArIHJl
bW92ZSwgaGFuZGxlciApOwoJfQp9Ci8vbm90ZTogYWxsIHNraW5zIHNob3VsZCBj
YWxsIHJ1bk9ubG9hZEhvb2soKSBhdCB0aGUgZW5kIG9mIGh0bWwgb3V0cHV0LAov
LyAgICAgIHNvIHRoZSBiZWxvdyBzaG91bGQgYmUgcmVkdW5kYW50LiBJdCdzIHRo
ZXJlIGp1c3QgaW4gY2FzZS4KaG9va0V2ZW50KCJsb2FkIiwgcnVuT25sb2FkSG9v
ayk7CgovLyBGb3IgZnV0dXJlIHVzZS4KbXcgPSB7fTsKCgo=
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=ajax.js
Content-Type: application/x-javascript; charset=UTF-8; name=ajax.js
Content-Location: http://bits.wikimedia.org/skins-1.5/common/ajax.js?urid=257z49
Content-Transfer-Encoding: Base64
Ly8gcmVtb3RlIHNjcmlwdGluZyBsaWJyYXJ5Ci8vIChjKSBjb3B5cmlnaHQgMjAw
NSBtb2Rlcm5tZXRob2QsIGluYwp2YXIgc2FqYXhfZGVidWdfbW9kZSA9IGZhbHNl
Owp2YXIgc2FqYXhfcmVxdWVzdF90eXBlID0gIkdFVCI7CgovKioKKiBpZiBzYWph
eF9kZWJ1Z19tb2RlIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24gb3V0cHV0cyBnaXZl
biB0aGUgbWVzc2FnZSBpbnRvIAoqIHRoZSBlbGVtZW50IHdpdGggaWQgPSBzYWph
eF9kZWJ1ZzsgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZG9jdW1l
bnQsIAoqIGl0IGlzIGluamVjdGVkLgoqLwpmdW5jdGlvbiBzYWpheF9kZWJ1Zyh0
ZXh0KSB7CglpZiAoIXNhamF4X2RlYnVnX21vZGUpIHJldHVybiBmYWxzZTsKCgl2
YXIgZT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhamF4X2RlYnVnJyk7CgoJ
aWYgKCFlKSB7CgkJZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwoJCWUu
Y2xhc3NOYW1lPSAnc2FqYXhfZGVidWcnOwoJCWUuaWQ9ICdzYWpheF9kZWJ1Zyc7
CgoJCXZhciBiPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp
WzBdOwoKCQlpZiAoYi5maXJzdENoaWxkKSBiLmluc2VydEJlZm9yZShlLCBiLmZp
cnN0Q2hpbGQpOwoJCWVsc2UgYi5hcHBlbmRDaGlsZChlKTsKCX0KCgl2YXIgbT0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgltLmFwcGVuZENoaWxkKCBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7CgoJZS5hcHBlbmRDaGls
ZCggbSApOwoKCXJldHVybiB0cnVlOwp9CgovKioKKiBjb21wYXRpYmlsaXR5IHdy
YXBwZXIgZm9yIGNyZWF0aW5nIGEgbmV3IFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4K
Ki8KZnVuY3Rpb24gc2FqYXhfaW5pdF9vYmplY3QoKSB7CglzYWpheF9kZWJ1Zygi
c2FqYXhfaW5pdF9vYmplY3QoKSBjYWxsZWQuLiIpCgl2YXIgQTsKCXRyeSB7CgkJ
Ly8gVHJ5IHRoZSBuZXcgc3R5bGUgYmVmb3JlIEFjdGl2ZVggc28gd2UgZG9uJ3QK
CQkvLyB1bm5lY2Vzc2FyaWx5IHRyaWdnZXIgd2FybmluZ3MgaW4gSUUgNyB3aGVu
CgkJLy8gc2V0IHRvIHByb21wdCBhYm91dCBBY3RpdmVYIHVzYWdlCgkJQSA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCAoZSkgewoJCXRyeSB7CgkJCUE9
bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CgkJfSBjYXRjaCAo
ZSkgewoJCQl0cnkgewoJCQkJQT1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0
LlhNTEhUVFAiKTsKCQkJfSBjYXRjaCAob2MpIHsKCQkJCUE9bnVsbDsKCQkJfQoJ
CX0KCX0KCWlmICghQSkKCQlzYWpheF9kZWJ1ZygiQ291bGQgbm90IGNyZWF0ZSBj
b25uZWN0aW9uIG9iamVjdC4iKTsKCglyZXR1cm4gQTsKfQoKLyoqCiogUGVyZm9y
bSBhbiBhamF4IGNhbGwgdG8gbWVkaWF3aWtpLiBDYWxscyBhcmUgaGFuZGVsZWQg
YnkgQWpheERpc3BhdGNoZXIucGhwCiogICBmdW5jX25hbWUgLSB0aGUgbmFtZSBv
ZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC4gTXVzdCBiZSByZWdpc3RlcmVkIGluICR3
Z0FqYXhFeHBvcnRMaXN0CiogICBhcmdzIC0gYW4gYXJyYXkgb2YgYXJndW1lbnRz
IHRvIHRoYXQgZnVuY3Rpb24KKiAgIHRhcmdldCAtIHRoZSB0YXJnZXQgdGhhdCB3
aWxsIGhhbmRsZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsLiBJZiB0aGlzIGlzIGEg
ZnVuY3Rpb24sCiogICAgICAgICAgICBpZiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo
ZSBYTUxIdHRwUmVxdWVzdCBhcyBhIHBhcmFtZXRlcjsgaWYgaXQncyBhbiBpbnB1
dAoqICAgICAgICAgICAgZWxlbWVudCwgaXRzIHZhbHVlIHdpbGwgYmUgc2V0IHRv
IHRoZSByZXN1bHRUZXh0OyBpZiBpdCdzIGFub3RoZXIgdHlwZSBvZgoqICAgICAg
ICAgICAgZWxlbWVudCwgaXRzIGlubmVySFRNTCB3aWxsIGJlIHNldCB0byB0aGUg
cmVzdWx0VGV4dC4KKgoqIEV4YW1wbGU6CiogICAgc2FqYXhfZG9fY2FsbCgnZG9G
b28nLCBbMSwgMiwgM10sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaG93Rm9v
IikpOwoqCiogVGhpcyB3aWxsIGNhbGwgdGhlIGRvRm9vIGZ1bmN0aW9uIHZpYSBN
ZWRpYVdpa2kncyBBamF4RGlzcGF0Y2hlciwgd2l0aAoqICgxLCAyLCAzKSBhcyB0
aGUgcGFyYW1ldGVyIGxpc3QsIGFuZCB3aWxsIHNob3cgdGhlIHJlc3VsdCBpbiB0
aGUgZWxlbWVudAoqIHdpdGggaWQgPSBzaG93Rm9vCiovCmZ1bmN0aW9uIHNhamF4
X2RvX2NhbGwoZnVuY19uYW1lLCBhcmdzLCB0YXJnZXQpIHsKCXZhciBpLCB4LCBu
OwoJdmFyIHVyaTsKCXZhciBwb3N0X2RhdGE7Cgl1cmkgPSB3Z1NlcnZlciArCgkJ
KCh3Z1NjcmlwdCA9PSBudWxsKSA/ICh3Z1NjcmlwdFBhdGggKyAiL2luZGV4LnBo
cCIpIDogd2dTY3JpcHQpICsKCQkiP2FjdGlvbj1hamF4IjsKCWlmIChzYWpheF9y
ZXF1ZXN0X3R5cGUgPT0gIkdFVCIpIHsKCQlpZiAodXJpLmluZGV4T2YoIj8iKSA9
PSAtMSkKCQkJdXJpID0gdXJpICsgIj9ycz0iICsgZW5jb2RlVVJJQ29tcG9uZW50
KGZ1bmNfbmFtZSk7CgkJZWxzZQoJCQl1cmkgPSB1cmkgKyAiJnJzPSIgKyBlbmNv
ZGVVUklDb21wb25lbnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJn
cy5sZW5ndGg7IGkrKykKCQkJdXJpID0gdXJpICsgIiZyc2FyZ3NbXT0iICsgZW5j
b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJCS8vdXJpID0gdXJpICsgIiZyc3Ju
ZD0iICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7CgkJcG9zdF9kYXRhID0gbnVsbDsK
CX0gZWxzZSB7CgkJcG9zdF9kYXRhID0gInJzPSIgKyBlbmNvZGVVUklDb21wb25l
bnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkr
KykKCQkJcG9zdF9kYXRhID0gcG9zdF9kYXRhICsgIiZyc2FyZ3NbXT0iICsgZW5j
b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJfQoJeCA9IHNhamF4X2luaXRfb2Jq
ZWN0KCk7CglpZiAoIXgpIHsKCQlhbGVydCgiQUpBWCBub3Qgc3VwcG9ydGVkIik7
CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXRyeSB7CgkJeC5vcGVuKHNhamF4X3JlcXVl
c3RfdHlwZSwgdXJpLCB0cnVlKTsKCX0gY2F0Y2ggKGUpIHsKCQlpZiAod2luZG93
LmxvY2F0aW9uLmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCWFsZXJ0KCJZ
b3VyIGJyb3dzZXIgYmxvY2tzIFhNTEh0dHBSZXF1ZXN0IHRvICdsb2NhbGhvc3Qn
LCB0cnkgdXNpbmcgYSByZWFsIGhvc3RuYW1lIGZvciBkZXZlbG9wbWVudC90ZXN0
aW5nLiIpOwoJCX0KCQl0aHJvdyBlOwoJfQoJaWYgKHNhamF4X3JlcXVlc3RfdHlw
ZSA9PSAiUE9TVCIpIHsKCQl4LnNldFJlcXVlc3RIZWFkZXIoIk1ldGhvZCIsICJQ
T1NUICIgKyB1cmkgKyAiIEhUVFAvMS4xIik7CgkJeC5zZXRSZXF1ZXN0SGVhZGVy
KCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv
ZGVkIik7Cgl9Cgl4LnNldFJlcXVlc3RIZWFkZXIoIlByYWdtYSIsICJjYWNoZT15
ZXMiKTsKCXguc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby10
cmFuc2Zvcm0iKTsKCXgub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7
CgkJaWYgKHgucmVhZHlTdGF0ZSAhPSA0KQoJCQlyZXR1cm47CgoJCXNhamF4X2Rl
YnVnKCJyZWNlaXZlZCAoIiArIHguc3RhdHVzICsgIiAiICsgeC5zdGF0dXNUZXh0
ICsgIikgIiArIHgucmVzcG9uc2VUZXh0KTsKCgkJLy9pZiAoeC5zdGF0dXMgIT0g
MjAwKQoJCS8vCWFsZXJ0KCJFcnJvcjogIiArIHguc3RhdHVzICsgIiAiICsgeC5z
dGF0dXNUZXh0ICsgIjogIiArIHgucmVzcG9uc2VUZXh0KTsKCQkvL2Vsc2UKCgkJ
aWYgKCB0eXBlb2YoIHRhcmdldCApID09ICdmdW5jdGlvbicgKSB7CgkJCXRhcmdl
dCggeCApOwoJCX0KCQllbHNlIGlmICggdHlwZW9mKCB0YXJnZXQgKSA9PSAnb2Jq
ZWN0JyApIHsKCQkJaWYgKCB0YXJnZXQudGFnTmFtZSA9PSAnSU5QVVQnICkgewoJ
CQkJaWYgKHguc3RhdHVzID09IDIwMCkgdGFyZ2V0LnZhbHVlPSB4LnJlc3BvbnNl
VGV4dDsKCQkJCS8vZWxzZSBhbGVydCgiRXJyb3I6ICIgKyB4LnN0YXR1cyArICIg
IiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIpIik7
CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeC5zdGF0dXMgPT0gMjAwKSB0YXJnZXQu
aW5uZXJIVE1MID0geC5yZXNwb25zZVRleHQ7CgkJCQllbHNlIHRhcmdldC5pbm5l
ckhUTUw9ICI8ZGl2IGNsYXNzPSdlcnJvcic+RXJyb3I6ICIgKyB4LnN0YXR1cyAr
ICIgIiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIp
PC9kaXY+IjsKCQkJfQoJCX0KCQllbHNlIHsKCQkJYWxlcnQoImJhZCB0YXJnZXQg
Zm9yIHNhamF4X2RvX2NhbGw6IG5vdCBhIGZ1bmN0aW9uIG9yIG9iamVjdDogIiAr
IHRhcmdldCk7CgkJfQoKCQlyZXR1cm47Cgl9CgoJc2FqYXhfZGVidWcoZnVuY19u
YW1lICsgIiB1cmkgPSAiICsgdXJpICsgIiAvIHBvc3QgPSAiICsgcG9zdF9kYXRh
KTsKCXguc2VuZChwb3N0X2RhdGEpOwoJc2FqYXhfZGVidWcoZnVuY19uYW1lICsg
IiB3YWl0aW5nLi4iKTsKCWRlbGV0ZSB4OwoKCXJldHVybiB0cnVlOwp9CgovKioK
ICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMg
WE1MSHR0cFJlcXVlc3QKICovCmZ1bmN0aW9uIHdmU3VwcG9ydHNBamF4KCkgewoJ
dmFyIHJlcXVlc3QgPSBzYWpheF9pbml0X29iamVjdCgpOwoJdmFyIHN1cHBvcnRz
QWpheCA9IHJlcXVlc3QgPyB0cnVlIDogZmFsc2U7CglkZWxldGUgcmVxdWVzdDsK
CXJldHVybiBzdXBwb3J0c0FqYXg7Cn0KCg==
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=mwsuggest.js
Content-Type: application/x-javascript; charset=UTF-8; name=mwsuggest.js
Content-Location: http://bits.wikimedia.org/skins-1.5/common/mwsuggest.js?urid=257z49
Content-Transfer-Encoding: Base64
LyoKICogT3BlblNlYXJjaCBhamF4IHN1Z2dlc3Rpb24gZW5naW5lIGZvciBNZWRp
YVdpa2kKICoKICogdXNlcyBjb3JlIE1lZGlhV2lraSBvcGVuIHNlYXJjaCBzdXBw
b3J0IHRvIGZldGNoIHN1Z2dlc3Rpb25zCiAqIGFuZCBzaG93IHRoZW0gYmVsb3cg
c2VhcmNoIGJveGVzIGFuZCBvdGhlciBpbnB1dHMKICoKICogYnkgUm9iZXJ0IFN0
b2puaWMgKEFwcmlsIDIwMDgpCiAqLwoKLy8gc2VhcmNoX2JveF9pZCAtPiBSZXN1
bHRzIG9iamVjdAp2YXIgb3NfbWFwID0ge307Ci8vIGNhY2hlZCBkYXRhLCB1cmwg
LT4ganNvbl90ZXh0CnZhciBvc19jYWNoZSA9IHt9OwovLyBnbG9iYWwgdmFyaWFi
bGVzIGZvciBzdWdnZXN0X2tleXByZXNzCnZhciBvc19jdXJfa2V5cHJlc3NlZCA9
IDA7CnZhciBvc19rZXlwcmVzc2VkX2NvdW50ID0gMDsKLy8gdHlwZTogVGltZXIK
dmFyIG9zX3RpbWVyID0gbnVsbDsKLy8gdGllIG1vdXNlZG93bi91cCBldmVudHMK
dmFyIG9zX21vdXNlX3ByZXNzZWQgPSBmYWxzZTsKdmFyIG9zX21vdXNlX251bSA9
IC0xOwovLyBpZiB0cnVlLCB0aGUgbGFzdCBjaGFuZ2Ugd2FzIG1hZGUgYnkgbW91
c2UgKGFuZCBub3Qga2V5Ym9hcmQpCnZhciBvc19tb3VzZV9tb3ZlZCA9IGZhbHNl
OwovLyBkZWxheSBiZXR3ZWVuIGtleXByZXNzIGFuZCBzdWdnZXN0aW9uIChpbiBt
cykKdmFyIG9zX3NlYXJjaF90aW1lb3V0ID0gMjUwOwovLyB0aGVzZSBwYWlycyBv
ZiBpbnB1dHMvZm9ybXMgd2lsbCBiZSBhdXRvbG9hZGVkIGF0IHN0YXJ0dXAKdmFy
IG9zX2F1dG9sb2FkX2lucHV0cyA9IG5ldyBBcnJheSgnc2VhcmNoSW5wdXQnLCAn
c2VhcmNoSW5wdXQyJywgJ3Bvd2VyU2VhcmNoVGV4dCcsICdzZWFyY2hUZXh0Jyk7
CnZhciBvc19hdXRvbG9hZF9mb3JtcyA9IG5ldyBBcnJheSgnc2VhcmNoZm9ybScs
ICdzZWFyY2hmb3JtMicsICdwb3dlcnNlYXJjaCcsICdzZWFyY2gnICk7Ci8vIGlm
IHdlIHN0b3BwZWQgdGhlIHNlcnZpY2UKdmFyIG9zX2lzX3N0b3BwZWQgPSBmYWxz
ZTsKLy8gbWF4IGxpbmVzIHRvIHNob3cgaW4gc3VnZ2VzdCB0YWJsZQp2YXIgb3Nf
bWF4X2xpbmVzX3Blcl9zdWdnZXN0ID0gNzsKLy8gbnVtYmVyIG9mIHN0ZXBzIHRv
IGFuaW1hdGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0
aAp2YXIgb3NfYW5pbWF0aW9uX3N0ZXBzID0gNjsKLy8gbnVtIG9mIHBpeGVscyBv
ZiBzbWFsbGVzdCBzdGVwCnZhciBvc19hbmltYXRpb25fbWluX3N0ZXAgPSAyOwov
LyBkZWxheSBiZXR3ZWVuIHN0ZXBzIChpbiBtcykKdmFyIG9zX2FuaW1hdGlvbl9k
ZWxheSA9IDMwOwovLyBtYXggd2lkdGggb2YgY29udGFpbmVyIGluIHBlcmNlbnQg
b2Ygbm9ybWFsIHNpemUgKDEgPT0gMTAwJSkKdmFyIG9zX2NvbnRhaW5lcl9tYXhf
d2lkdGggPSAyOwovLyBjdXJyZW50bHkgYWN0aXZlIGFuaW1hdGlvbiB0aW1lcgp2
YXIgb3NfYW5pbWF0aW9uX3RpbWVyID0gbnVsbDsKCi8qKiBUaW1lb3V0IHRpbWVy
IGNsYXNzIHRoYXQgd2lsbCBmZXRjaCB0aGUgcmVzdWx0cyAqLwpmdW5jdGlvbiBv
c19UaW1lcihpZCxyLHF1ZXJ5KXsKCXRoaXMuaWQgPSBpZDsKCXRoaXMuciA9IHI7
Cgl0aGlzLnF1ZXJ5ID0gcXVlcnk7Cn0KCi8qKiBUaW1lciB1c2VyIHRvIGFuaW1h
dGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0aCAqLwpm
dW5jdGlvbiBvc19BbmltYXRpb25UaW1lcihyLCB0YXJnZXQpewoJdGhpcy5yID0g
cjsKCXZhciBjdXJyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5jb250
YWluZXIpLm9mZnNldFdpZHRoOwoJdGhpcy5pbmMgPSBNYXRoLnJvdW5kKCh0YXJn
ZXQtY3VycmVudCkgLyBvc19hbmltYXRpb25fc3RlcHMpOwoJaWYodGhpcy5pbmMg
PCBvc19hbmltYXRpb25fbWluX3N0ZXAgJiYgdGhpcy5pbmMgPj0wKQoJCXRoaXMu
aW5jID0gb3NfYW5pbWF0aW9uX21pbl9zdGVwOyAvLyBtaW5pbWFsIGFuaW1hdGlv
biBzdGVwCglpZih0aGlzLmluYyA+IC1vc19hbmltYXRpb25fbWluX3N0ZXAgJiYg
dGhpcy5pbmMgPDApCgkJdGhpcy5pbmMgPSAtb3NfYW5pbWF0aW9uX21pbl9zdGVw
OwoJdGhpcy50YXJnZXQgPSB0YXJnZXQ7Cn0KCi8qKiBQcm9wZXJ0eSBjbGFzcyBm
b3Igc2luZ2xlIHNlYXJjaCBib3ggKi8KZnVuY3Rpb24gb3NfUmVzdWx0cyhuYW1l
LCBmb3JtbmFtZSl7Cgl0aGlzLnNlYXJjaGZvcm0gPSBmb3JtbmFtZTsgLy8gaWQg
b2YgdGhlIHNlYXJjaGZvcm0KCXRoaXMuc2VhcmNoYm94ID0gbmFtZTsgLy8gaWQg
b2YgdGhlIHNlYXJjaGJveAoJdGhpcy5jb250YWluZXIgPSBuYW1lKyJTdWdnZXN0
IjsgLy8gZGl2IHRoYXQgaG9sZHMgcmVzdWx0cwoJdGhpcy5yZXN1bHRUYWJsZSA9
IG5hbWUrIlJlc3VsdCI7IC8vIGlkIGJhc2UgZm9yIHRoZSByZXN1bHQgdGFibGUg
KCtudW0gPSB0YWJsZSByb3cpCgl0aGlzLnJlc3VsdFRleHQgPSBuYW1lKyJSZXN1
bHRUZXh0IjsgLy8gaWQgYmFzZSBmb3IgdGhlIHNwYW5zIHdpdGhpbiByZXN1bHQg
dGFibGVzICgrbnVtKQoJdGhpcy50b2dnbGUgPSBuYW1lKyJUb2dnbGUiOyAvLyBk
aXYgdGhhdCBoYXMgdGhlIHRvZ2dsZSAoZW5hYmxlL2Rpc2FibGUpIGxpbmsKCXRo
aXMucXVlcnkgPSBudWxsOyAvLyBsYXN0IHByb2Nlc3NlZCBxdWVyeQoJdGhpcy5y
ZXN1bHRzID0gbnVsbDsgIC8vIHBhcnNlZCB0aXRsZXMKCXRoaXMucmVzdWx0Q291
bnQgPSAwOyAvLyBudW1iZXIgb2YgcmVzdWx0cwoJdGhpcy5vcmlnaW5hbCA9IG51
bGw7IC8vIHF1ZXJ5IHRoYXQgdXNlciBlbnRlcmVkCgl0aGlzLnNlbGVjdGVkID0g
LTE7IC8vIHdoaWNoIHJlc3VsdCBpcyBzZWxlY3RlZAoJdGhpcy5jb250YWluZXJD
b3VudCA9IDA7IC8vIG51bWJlciBvZiByZXN1bHRzIHZpc2libGUgaW4gY29udGFp
bmVyCgl0aGlzLmNvbnRhaW5lclJvdyA9IDA7IC8vIGhlaWdodCBvZiByZXN1bHQg
ZmllbGQgaW4gdGhlIGNvbnRhaW5lcgoJdGhpcy5jb250YWluZXJUb3RhbCA9IDA7
IC8vIHRvdGFsIGhlaWdodCBvZiB0aGUgY29udGFpbmVyIHdpbGwgYWxsIHJlc3Vs
dHMKCXRoaXMudmlzaWJsZSA9IGZhbHNlOyAvLyBpZiBjb250YWluZXIgaXMgdmlz
aWJsZQoJdGhpcy5zdGF5SGlkZGVuID0gZmFsc2U7IC8vIGRvbid0IHRyeSB0byBz
aG93IGlmIGxvc3QgZm9jdXMKfQoKLyoqIEhpZGUgcmVzdWx0cyBkaXYgKi8KZnVu
Y3Rpb24gb3NfaGlkZVJlc3VsdHMocil7Cgl2YXIgYyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCWlmKGMgIT0gbnVsbCkKCQljLnN0eWxl
LnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCXIudmlzaWJsZSA9IGZhbHNlOwoJci5z
ZWxlY3RlZCA9IC0xOwp9CgovKiogU2hvdyByZXN1bHRzIGRpdiAqLwpmdW5jdGlv
biBvc19zaG93UmVzdWx0cyhyKXsKCWlmKG9zX2lzX3N0b3BwZWQpCgkJcmV0dXJu
OwoJaWYoci5zdGF5SGlkZGVuKQoJCXJldHVybgoJb3NfZml0Q29udGFpbmVyKHIp
OwoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7
CglyLnNlbGVjdGVkID0gLTE7CglpZihjICE9IG51bGwpewoJCWMuc2Nyb2xsVG9w
ID0gMDsKCQljLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CgkJci52aXNp
YmxlID0gdHJ1ZTsKCX0KfQoKZnVuY3Rpb24gb3Nfb3BlcmFXaWR0aEZpeCh4KXsK
CS8vIEZvciBicm93c2VycyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgb3ZlcmZsb3ct
eCwgZXN0aW1hdGUgc2Nyb2xsYmFyIHdpZHRoCglpZih0eXBlb2YgZG9jdW1lbnQu
Ym9keS5zdHlsZS5vdmVyZmxvd1ggIT0gInN0cmluZyIpewoJCXJldHVybiAzMDsK
CX0KCXJldHVybiAwOwp9CgpmdW5jdGlvbiBvc19lbmNvZGVRdWVyeSh2YWx1ZSl7
CiAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCkgewogICAgcmV0dXJuIGVuY29kZVVS
SUNvbXBvbmVudCh2YWx1ZSk7CiAgfQogIGlmKGVzY2FwZSkgewogICAgcmV0dXJu
IGVzY2FwZSh2YWx1ZSk7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIG9z
X2RlY29kZVZhbHVlKHZhbHVlKXsKICBpZiAoZGVjb2RlVVJJQ29tcG9uZW50KSB7
CiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKICB9CiAgaWYo
dW5lc2NhcGUpewogIAlyZXR1cm4gdW5lc2NhcGUodmFsdWUpOwogIH0KICByZXR1
cm4gbnVsbDsKfQoKLyoqIEJyb3dlci1kZXBlbmRlbnQgZnVuY3Rpb25zIHRvIGZp
bmQgd2luZG93IGlubmVyIHNpemUsIGFuZCBzY3JvbGwgc3RhdHVzICovCmZ1bmN0
aW9uIGZfY2xpZW50V2lkdGgoKSB7CglyZXR1cm4gZl9maWx0ZXJSZXN1bHRzICgK
CQl3aW5kb3cuaW5uZXJXaWR0aCA/IHdpbmRvdy5pbm5lcldpZHRoIDogMCwKCQlk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50V2lkdGggOiAwLAoJCWRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5i
b2R5LmNsaWVudFdpZHRoIDogMAoJKTsKfQpmdW5jdGlvbiBmX2NsaWVudEhlaWdo
dCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJCXdpbmRvdy5pbm5lckhl
aWdodCA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDAsCgkJZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo
dCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuY2xpZW50SGVp
Z2h0IDogMAoJKTsKfQpmdW5jdGlvbiBmX3Njcm9sbExlZnQoKSB7CglyZXR1cm4g
Zl9maWx0ZXJSZXN1bHRzICgKCQl3aW5kb3cucGFnZVhPZmZzZXQgPyB3aW5kb3cu
cGFnZVhPZmZzZXQgOiAwLAoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogMCwKCQlkb2N1bWVu
dC5ib2R5ID8gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IDogMAoJKTsKfQpmdW5j
dGlvbiBmX3Njcm9sbFRvcCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJ
CXdpbmRvdy5wYWdlWU9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IDAsCgkJ
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LnNjcm9sbFRvcCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wIDogMAoJKTsKfQpmdW5jdGlvbiBmX2ZpbHRlclJlc3VsdHMo
bl93aW4sIG5fZG9jZWwsIG5fYm9keSkgewoJdmFyIG5fcmVzdWx0ID0gbl93aW4g
PyBuX3dpbiA6IDA7CglpZiAobl9kb2NlbCAmJiAoIW5fcmVzdWx0IHx8IChuX3Jl
c3VsdCA+IG5fZG9jZWwpKSkKCQluX3Jlc3VsdCA9IG5fZG9jZWw7CglyZXR1cm4g
bl9ib2R5ICYmICghbl9yZXN1bHQgfHwgKG5fcmVzdWx0ID4gbl9ib2R5KSkgPyBu
X2JvZHkgOiBuX3Jlc3VsdDsKfQoKLyoqIEdldCB0aGUgaGVpZ2h0IGF2YWlsYWJs
ZSBmb3IgdGhlIHJlc3VsdHMgY29udGFpbmVyICovCmZ1bmN0aW9uIG9zX2F2YWls
YWJsZUhlaWdodChyKXsKCXZhciBhYnNUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChyLmNvbnRhaW5lcikuc3R5bGUudG9wOwoJdmFyIHB4ID0gYWJzVG9wLmxh
c3RJbmRleE9mKCJweCIpOwoJaWYocHggPiAwKQoJCWFic1RvcCA9IGFic1RvcC5z
dWJzdHJpbmcoMCxweCk7CglyZXR1cm4gZl9jbGllbnRIZWlnaHQoKSAtIChhYnNU
b3AgLSBmX3Njcm9sbFRvcCgpKTsKfQoKCi8qKiBHZXQgZWxlbWVudCBhYnNvbHV0
ZSBwb3NpdGlvbiB7bGVmdCx0b3B9ICovCmZ1bmN0aW9uIG9zX2dldEVsZW1lbnRQ
b3NpdGlvbihlbGVtSUQpewoJdmFyIG9mZnNldFRyYWlsID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoZWxlbUlEKTsKCXZhciBvZmZzZXRMZWZ0ID0gMDsKCXZhciBv
ZmZzZXRUb3AgPSAwOwoJd2hpbGUgKG9mZnNldFRyYWlsKXsKCQlvZmZzZXRMZWZ0
ICs9IG9mZnNldFRyYWlsLm9mZnNldExlZnQ7CgkJb2Zmc2V0VG9wICs9IG9mZnNl
dFRyYWlsLm9mZnNldFRvcDsKCQlvZmZzZXRUcmFpbCA9IG9mZnNldFRyYWlsLm9m
ZnNldFBhcmVudDsKCX0KCWlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2Yo
J01hYycpICE9IC0xICYmIHR5cGVvZiBkb2N1bWVudC5ib2R5LmxlZnRNYXJnaW4g
IT0gJ3VuZGVmaW5lZCcpewoJCW9mZnNldExlZnQgKz0gZG9jdW1lbnQuYm9keS5s
ZWZ0TWFyZ2luOwoJCW9mZnNldFRvcCArPSBkb2N1bWVudC5ib2R5LnRvcE1hcmdp
bjsKCX0KCXJldHVybiB7bGVmdDpvZmZzZXRMZWZ0LHRvcDpvZmZzZXRUb3B9Owp9
CgovKiogQ3JlYXRlIHRoZSBjb250YWluZXIgZGl2IHRoYXQgd2lsbCBob2xkIHRo
ZSBzdWdnZXN0ZWQgdGl0bGVzICovCmZ1bmN0aW9uIG9zX2NyZWF0ZUNvbnRhaW5l
cihyKXsKCXZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cgl2
YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KTsKCXZh
ciBwb3MgPSBvc19nZXRFbGVtZW50UG9zaXRpb24oci5zZWFyY2hib3gpOwoJdmFy
IGxlZnQgPSBwb3MubGVmdDsKCXZhciB0b3AgPSBwb3MudG9wICsgcy5vZmZzZXRI
ZWlnaHQ7CgljLmNsYXNzTmFtZSA9ICJvcy1zdWdnZXN0IjsKCWMuc2V0QXR0cmli
dXRlKCJpZCIsIHIuY29udGFpbmVyKTsKCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoYyk7CgoJLy8gZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIHBhcmFtcwoJ
Ly8gSUUgd29ya2Fyb3VuZCwgY2Fubm90IGV4cGxpY2l0ZWx5IHNldCAic3R5bGUi
IGF0dHJpYnV0ZQoJYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFp
bmVyKTsKCWMuc3R5bGUudG9wID0gdG9wKyJweCI7CgljLnN0eWxlLmxlZnQgPSBs
ZWZ0KyJweCI7CgljLnN0eWxlLndpZHRoID0gcy5vZmZzZXRXaWR0aCsicHgiOwoK
CS8vIG1vdXNlIGV2ZW50IGhhbmRsZXJzCgljLm9ubW91c2VvdmVyID0gZnVuY3Rp
b24oZXZlbnQpIHsgb3NfZXZlbnRNb3VzZW92ZXIoci5zZWFyY2hib3gsIGV2ZW50
KTsgfTsKCWMub25tb3VzZW1vdmUgPSBmdW5jdGlvbihldmVudCkgeyBvc19ldmVu
dE1vdXNlbW92ZShyLnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNlZG93
biA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBvc19ldmVudE1vdXNlZG93bihy
LnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNldXAgPSBmdW5jdGlvbihl
dmVudCkgeyBvc19ldmVudE1vdXNldXAoci5zZWFyY2hib3gsIGV2ZW50KTsgfTsK
CXJldHVybiBjOwp9CgovKiogY2hhbmdlIGNvbnRhaW5lciBoZWlnaHQgdG8gZml0
IHRvIHNjcmVlbiAqLwpmdW5jdGlvbiBvc19maXRDb250YWluZXIocil7Cgl2YXIg
YyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCXZhciBo
ID0gb3NfYXZhaWxhYmxlSGVpZ2h0KHIpIC0gMjA7Cgl2YXIgaW5jID0gci5jb250
YWluZXJSb3c7CgloID0gcGFyc2VJbnQoaC9pbmMpICogaW5jOwoJaWYoaCA8ICgy
ICogaW5jKSAmJiByLnJlc3VsdENvdW50ID4gMSkgLy8gbWluOiB0d28gcmVzdWx0
cwoJCWggPSAyICogaW5jOwoJaWYoKGgvaW5jKSA+IG9zX21heF9saW5lc19wZXJf
c3VnZ2VzdCApCgkJaCA9IGluYyAqIG9zX21heF9saW5lc19wZXJfc3VnZ2VzdDsK
CWlmKGggPCByLmNvbnRhaW5lclRvdGFsKXsKCQljLnN0eWxlLmhlaWdodCA9IGgg
KyJweCI7CgkJci5jb250YWluZXJDb3VudCA9IHBhcnNlSW50KE1hdGgucm91bmQo
aC9pbmMpKTsKCX0gZWxzZXsKCQljLnN0eWxlLmhlaWdodCA9IHIuY29udGFpbmVy
VG90YWwrInB4IjsKCQlyLmNvbnRhaW5lckNvdW50ID0gci5yZXN1bHRDb3VudDsK
CX0KfQovKiogSWYgc29tZSBlbnRyaWVzIGFyZSBsb25nZXIgdGhhbiB0aGUgYm94
LCByZXBsYWNlIHRleHQgd2l0aCAiLi4uIiAqLwpmdW5jdGlvbiBvc190cmltUmVz
dWx0VGV4dChyKXsKCS8vIGZpbmQgbWF4IHdpZHRoLCBmaXJzdCBzZWUgaWYgd2Ug
Y291bGQgZXhwYW5kIHRoZSBjb250YWluZXIgdG8gZml0IGl0Cgl2YXIgbWF4VyA9
IDA7Cglmb3IodmFyIGk9MDtpPHIucmVzdWx0Q291bnQ7aSsrKXsKCQl2YXIgZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGV4dCtpKTsKCQlpZihl
Lm9mZnNldFdpZHRoID4gbWF4VykKCQkJbWF4VyA9IGUub2Zmc2V0V2lkdGg7Cgl9
Cgl2YXIgdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKS5v
ZmZzZXRXaWR0aDsKCXZhciBmaXggPSAwOwoJaWYoci5jb250YWluZXJDb3VudCA8
IHIucmVzdWx0Q291bnQpewoJCWZpeCA9IDIwOyAvLyBnaXZlIDIwcHggZm9yIHNj
cm9sbGJhcgoJfSBlbHNlCgkJZml4ID0gb3Nfb3BlcmFXaWR0aEZpeCh3KTsKCWlm
KGZpeCA8IDQpCgkJZml4ID0gNDsgLy8gYmFzaWMgcGFkZGluZwoJbWF4VyArPSBm
aXg7CgoJLy8gcmVzaXplIGNvbnRhaW5lciB0byBmaXQgbW9yZSBkYXRhIGlmIHBl
cm1pdHRlZAoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5z
ZWFyY2hib3gpLm9mZnNldFdpZHRoOwoJdmFyIHByb3AgPSBtYXhXIC8gbm9ybVc7
CglpZihwcm9wID4gb3NfY29udGFpbmVyX21heF93aWR0aCkKCQlwcm9wID0gb3Nf
Y29udGFpbmVyX21heF93aWR0aDsKCWVsc2UgaWYocHJvcCA8IDEpCgkJcHJvcCA9
IDE7Cgl2YXIgbmV3VyA9IE1hdGgucm91bmQoIG5vcm1XICogcHJvcCApOwoJaWYo
IHcgIT0gbmV3VyApewoJCXcgPSBuZXdXOwoJCWlmKCBvc19hbmltYXRpb25fdGlt
ZXIgIT0gbnVsbCApCgkJCWNsZWFySW50ZXJ2YWwob3NfYW5pbWF0aW9uX3RpbWVy
LmlkKQoJCW9zX2FuaW1hdGlvbl90aW1lciA9IG5ldyBvc19BbmltYXRpb25UaW1l
cihyLHcpOwoJCW9zX2FuaW1hdGlvbl90aW1lci5pZCA9IHNldEludGVydmFsKCJv
c19hbmltYXRlQ2hhbmdlV2lkdGgoKSIsb3NfYW5pbWF0aW9uX2RlbGF5KTsKCQl3
IC09IGZpeDsgLy8gdGhpcyBtdWNoIGlzIHJlc2VydmVkCgl9CgoJLy8gdHJpbSBy
ZXN1bHRzCglpZih3IDwgMTApCgkJcmV0dXJuOwoJZm9yKHZhciBpPTA7aTxyLnJl
c3VsdENvdW50O2krKyl7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChyLnJlc3VsdFRleHQraSk7CgkJdmFyIHJlcGxhY2UgPSAxOwoJCXZhciBsYXN0
VyA9IGUub2Zmc2V0V2lkdGgrMTsKCQl2YXIgaXRlcmF0aW9uID0gMDsKCQl2YXIg
Y2hhbmdlZFRleHQgPSBmYWxzZTsKCQl3aGlsZShlLm9mZnNldFdpZHRoID4gdyAm
JiAoZS5vZmZzZXRXaWR0aCA8IGxhc3RXIHx8IGl0ZXJhdGlvbjwyKSl7CgkJCWNo
YW5nZWRUZXh0ID0gdHJ1ZTsKCQkJbGFzdFcgPSBlLm9mZnNldFdpZHRoOwoJCQl2
YXIgbCA9IGUuaW5uZXJIVE1MOwoJCQllLmlubmVySFRNTCA9IGwuc3Vic3RyaW5n
KDAsbC5sZW5ndGgtcmVwbGFjZSkrIi4uLiI7CgkJCWl0ZXJhdGlvbisrOwoJCQly
ZXBsYWNlID0gNDsgLy8gaG93IG1hbnkgY2hhcnMgdG8gcmVwbGFjZQoJCX0KCQlp
ZihjaGFuZ2VkVGV4dCl7CgkJCS8vIHNob3cgaGludCBmb3IgdHJpbW1lZCB0aXRs
ZXMKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5yZXN1bHRUYWJsZStpKS5z
ZXRBdHRyaWJ1dGUoInRpdGxlIixyLnJlc3VsdHNbaV0pOwoJCX0KCX0KfQoKLyoq
IEludm9rZWQgb24gdGltZXIgdG8gYW5pbWF0ZSBjaGFuZ2UgaW4gY29udGFpbmVy
IHdpZHRoICovCmZ1bmN0aW9uIG9zX2FuaW1hdGVDaGFuZ2VXaWR0aCgpewoJdmFy
IHIgPSBvc19hbmltYXRpb25fdGltZXIucjsKCXZhciBjID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoci5jb250YWluZXIpOwoJdmFyIHcgPSBjLm9mZnNldFdpZHRo
OwoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hi
b3gpLm9mZnNldFdpZHRoOwoJdmFyIG5vcm1MID0gb3NfZ2V0RWxlbWVudFBvc2l0
aW9uKHIuc2VhcmNoYm94KS5sZWZ0OwoJdmFyIGluYyA9IG9zX2FuaW1hdGlvbl90
aW1lci5pbmM7Cgl2YXIgdGFyZ2V0ID0gb3NfYW5pbWF0aW9uX3RpbWVyLnRhcmdl
dDsKCXZhciBudyA9IHcgKyBpbmM7CglpZiggKGluYyA+IDAgJiYgbncgPj0gdGFy
Z2V0KSB8fCAoaW5jIDw9IDAgJiYgbncgPD0gdGFyZ2V0KSApewoJCS8vIGZpbmlz
aGVkICEKCQljLnN0eWxlLndpZHRoID0gdGFyZ2V0KyJweCI7CgkJY2xlYXJJbnRl
cnZhbChvc19hbmltYXRpb25fdGltZXIuaWQpCgkJb3NfYW5pbWF0aW9uX3RpbWVy
ID0gbnVsbDsKCX0gZWxzZXsKCQkvLyBpbi1wcm9ncmVzcwoJCWMuc3R5bGUud2lk
dGggPSBudysicHgiOwoJCWlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIg
PT0gInJ0bCIpCgkJCWMuc3R5bGUubGVmdCA9IChub3JtTCArIG5vcm1XICsgKHRh
cmdldCAtIG53KSAtIG9zX2FuaW1hdGlvbl90aW1lci50YXJnZXQgLSAxKSsicHgi
OwoJfQp9CgovKiogSGFuZGxlcyBkYXRhIGZyb20gWE1MSHR0cFJlcXVlc3QsIGFu
ZCB1cGRhdGVzIHRoZSBzdWdnZXN0IHJlc3VsdHMgKi8KZnVuY3Rpb24gb3NfdXBk
YXRlUmVzdWx0cyhyLCBxdWVyeSwgdGV4dCwgY2FjaGVLZXkpewoJb3NfY2FjaGVb
Y2FjaGVLZXldID0gdGV4dDsKCXIucXVlcnkgPSBxdWVyeTsKCXIub3JpZ2luYWwg
PSBxdWVyeTsKCWlmKHRleHQgPT0gIiIpewoJCXIucmVzdWx0cyA9IG51bGw7CgkJ
ci5yZXN1bHRDb3VudCA9IDA7CgkJb3NfaGlkZVJlc3VsdHMocik7Cgl9IGVsc2V7
CgkJdHJ5IHsKCQkJdmFyIHAgPSBldmFsKCcoJyt0ZXh0KycpJyk7IC8vIHNpbXBs
ZSBqc29uIHBhcnNlLCBjb3VsZCBkbyBhIHNhZmVyIG9uZQoJCQlpZihwLmxlbmd0
aDwyIHx8IHBbMV0ubGVuZ3RoID09IDApewoJCQkJci5yZXN1bHRzID0gbnVsbDsK
CQkJCXIucmVzdWx0Q291bnQgPSAwOwoJCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ
CQlyZXR1cm47CgkJCX0KCQkJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChyLmNvbnRhaW5lcik7CgkJCWlmKGMgPT0gbnVsbCkKCQkJCWMgPSBvc19jcmVh
dGVDb250YWluZXIocik7CgkJCWMuaW5uZXJIVE1MID0gb3NfY3JlYXRlUmVzdWx0
VGFibGUocixwWzFdKTsKCQkJLy8gaW5pdCBjb250YWluZXIgdGFibGUgc2l6ZXMK
CQkJdmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnJlc3VsdFRhYmxl
KTsKCQkJci5jb250YWluZXJUb3RhbCA9IHQub2Zmc2V0SGVpZ2h0OwoJCQlyLmNv
bnRhaW5lclJvdyA9IHQub2Zmc2V0SGVpZ2h0IC8gci5yZXN1bHRDb3VudDsKCQkJ
b3NfZml0Q29udGFpbmVyKHIpOwoJCQlvc190cmltUmVzdWx0VGV4dChyKTsKCQkJ
b3Nfc2hvd1Jlc3VsdHMocik7CgkJfSBjYXRjaChlKXsKCQkJLy8gYmFkIHJlc3Bv
bnNlIGZyb20gc2VydmVyIG9yIHN1Y2gKCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ
CW9zX2NhY2hlW2NhY2hlS2V5XSA9IG51bGw7CgkJfQoJfQp9CgovKiogQ3JlYXRl
IHRoZSByZXN1bHQgdGFibGUgdG8gYmUgcGxhY2VkIGluIHRoZSBjb250YWluZXIg
ZGl2ICovCmZ1bmN0aW9uIG9zX2NyZWF0ZVJlc3VsdFRhYmxlKHIsIHJlc3VsdHMp
ewoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7
Cgl2YXIgd2lkdGggPSBjLm9mZnNldFdpZHRoIC0gb3Nfb3BlcmFXaWR0aEZpeChj
Lm9mZnNldFdpZHRoKTsKCXZhciBodG1sID0gIjx0YWJsZSBjbGFzcz1cIm9zLXN1
Z2dlc3QtcmVzdWx0c1wiIGlkPVwiIityLnJlc3VsdFRhYmxlKyJcIiBzdHlsZT1c
IndpZHRoOiAiK3dpZHRoKyJweDtcIj4iOwoJci5yZXN1bHRzID0gbmV3IEFycmF5
KCk7CglyLnJlc3VsdENvdW50ID0gcmVzdWx0cy5sZW5ndGg7Cglmb3IoaT0wO2k8
cmVzdWx0cy5sZW5ndGg7aSsrKXsKCQl2YXIgdGl0bGUgPSBvc19kZWNvZGVWYWx1
ZShyZXN1bHRzW2ldKTsKCQlyLnJlc3VsdHNbaV0gPSB0aXRsZTsKCQlodG1sICs9
ICI8dHI+PHRkIGNsYXNzPVwib3Mtc3VnZ2VzdC1yZXN1bHRcIiBpZD1cIiIrci5y
ZXN1bHRUYWJsZStpKyJcIj48c3BhbiBpZD1cIiIrci5yZXN1bHRUZXh0K2krIlwi
PiIrdGl0bGUrIjwvc3Bhbj48L3RkPjwvdHI+IjsKCX0KCWh0bWwrPSI8L3RhYmxl
PiIKCXJldHVybiBodG1sOwp9CgovKiogRmV0Y2ggbmFtZXNwYWNlcyBmcm9tIGNo
ZWNrYm94ZXMgb3IgaGlkZGVuIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGZvcm0sCiAg
ICBpZiBub25lIGRlZmluZWQgdXNlIHdnU2VhcmNoTmFtZXNwYWNlcyBnbG9iYWwg
Ki8KZnVuY3Rpb24gb3NfZ2V0TmFtZXNwYWNlcyhyKXsKCXZhciBuYW1lc3BhY2Vz
ID0gIiI7Cgl2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5mb3Jtc1tyLnNlYXJjaGZv
cm1dLmVsZW1lbnRzOwoJZm9yKGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsr
KXsKCQl2YXIgbmFtZSA9IGVsZW1lbnRzW2ldLm5hbWU7CgkJaWYodHlwZW9mIG5h
bWUgIT0gJ3VuZGVmaW5lZCcgJiYgbmFtZS5sZW5ndGggPiAyCgkJJiYgbmFtZVsw
XT09J24nICYmIG5hbWVbMV09PSdzJwoJCSYmICgoZWxlbWVudHNbaV0udHlwZT09
J2NoZWNrYm94JyAmJiBlbGVtZW50c1tpXS5jaGVja2VkKQoJCSAJfHwgKGVsZW1l
bnRzW2ldLnR5cGU9PSdoaWRkZW4nICYmIGVsZW1lbnRzW2ldLnZhbHVlPT0iMSIp
KSApewoJCQlpZihuYW1lc3BhY2VzIT0iIikKCQkJCW5hbWVzcGFjZXMrPSJ8IjsK
CQkJbmFtZXNwYWNlcys9bmFtZS5zdWJzdHJpbmcoMik7CgkJfQoJfQoJaWYobmFt
ZXNwYWNlcyA9PSAiIikKCQluYW1lc3BhY2VzID0gd2dTZWFyY2hOYW1lc3BhY2Vz
LmpvaW4oInwiKTsKCXJldHVybiBuYW1lc3BhY2VzOwp9CgovKiogVXBkYXRlIHJl
c3VsdHMgaWYgdXNlciBoYXNuJ3QgYWxyZWFkeSB0eXBlZCBzb21ldGhpbmcgZWxz
ZSAqLwpmdW5jdGlvbiBvc191cGRhdGVJZlJlbGV2YW50KHIsIHF1ZXJ5LCB0ZXh0
LCBjYWNoZUtleSl7Cgl2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIu
c2VhcmNoYm94KTsKCWlmKHQgIT0gbnVsbCAmJiB0LnZhbHVlID09IHF1ZXJ5KXsg
Ly8gY2hlY2sgaWYgcmVzcG9uc2UgaXMgc3RpbGwgcmVsZXZhbnQKCQlvc191cGRh
dGVSZXN1bHRzKHIsIHF1ZXJ5LCB0ZXh0LCBjYWNoZUtleSk7Cgl9CglyLnF1ZXJ5
ID0gcXVlcnk7Cn0KCi8qKiBGZXRjaCByZXN1bHRzIGFmdGVyIHNvbWUgdGltZW91
dCAqLwpmdW5jdGlvbiBvc19kZWxheWVkRmV0Y2goKXsKCWlmKG9zX3RpbWVyID09
IG51bGwpCgkJcmV0dXJuOwoJdmFyIHIgPSBvc190aW1lci5yOwoJdmFyIHF1ZXJ5
ID0gb3NfdGltZXIucXVlcnk7Cglvc190aW1lciA9IG51bGw7Cgl2YXIgcGF0aCA9
IHdnTVdTdWdnZXN0VGVtcGxhdGUucmVwbGFjZSgie25hbWVzcGFjZXN9Iixvc19n
ZXROYW1lc3BhY2VzKHIpKQoJCQkJCQkJICAJICAucmVwbGFjZSgie2RibmFtZX0i
LHdnREJuYW1lKQoJCQkJCQkJICAJICAucmVwbGFjZSgie3NlYXJjaFRlcm1zfSIs
b3NfZW5jb2RlUXVlcnkocXVlcnkpKTsKCgkvLyB0cnkgdG8gZ2V0IGZyb20gY2Fj
aGUsIGlmIG5vdCBmZXRjaCB1c2luZyBhamF4Cgl2YXIgY2FjaGVkID0gb3NfY2Fj
aGVbcGF0aF07CglpZihjYWNoZWQgIT0gbnVsbCl7CgkJb3NfdXBkYXRlSWZSZWxl
dmFudChyLCBxdWVyeSwgY2FjaGVkLCBwYXRoKTsKCX0gZWxzZXsKCQl2YXIgeG1s
aHR0cCA9IHNhamF4X2luaXRfb2JqZWN0KCk7CgkJaWYoeG1saHR0cCl7CgkJCXRy
eSB7CgkJCQl4bWxodHRwLm9wZW4oIkdFVCIsIHBhdGgsIHRydWUpOwoJCQkJeG1s
aHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXsKCQkgICAgICAgIAlp
ZiAoeG1saHR0cC5yZWFkeVN0YXRlPT00ICYmIHR5cGVvZiBvc191cGRhdGVJZlJl
bGV2YW50ID09ICdmdW5jdGlvbicpIHsKCQkgICAgICAgIAkJb3NfdXBkYXRlSWZS
ZWxldmFudChyLCBxdWVyeSwgeG1saHR0cC5yZXNwb25zZVRleHQsIHBhdGgpOwoJ
ICAgICAgICAJCX0KCSAgICAgIAkJfTsKCSAgICAgCQl4bWxodHRwLnNlbmQobnVs
bCk7CgkgICAgIAl9IGNhdGNoIChlKSB7CgkJCQlpZiAod2luZG93LmxvY2F0aW9u
Lmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCQkJYWxlcnQoIllvdXIgYnJv
d3NlciBibG9ja3MgWE1MSHR0cFJlcXVlc3QgdG8gJ2xvY2FsaG9zdCcsIHRyeSB1
c2luZyBhIHJlYWwgaG9zdG5hbWUgZm9yIGRldmVsb3BtZW50L3Rlc3RpbmcuIik7
CgkJCQl9CgkJCQl0aHJvdyBlOwoJCQl9CgkJfQoJfQp9CgovKiogSW5pdCB0aW1l
ZCB1cGRhdGUgdmlhIG9zX2RlbGF5ZWRVcGRhdGUoKSAqLwpmdW5jdGlvbiBvc19m
ZXRjaFJlc3VsdHMociwgcXVlcnksIHRpbWVvdXQpewoJaWYocXVlcnkgPT0gIiIp
ewoJCXIucXVlcnkgPSAiIjsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQlyZXR1cm47
Cgl9IGVsc2UgaWYocXVlcnkgPT0gci5xdWVyeSkKCQlyZXR1cm47IC8vIG5vIGNo
YW5nZQoKCW9zX2lzX3N0b3BwZWQgPSBmYWxzZTsgLy8gbWFrZSBzdXJlIHdlJ3Jl
IHJ1bm5pbmcKCgkvKiB2YXIgY2FjaGVLZXkgPSB3Z0RCbmFtZSsiOiIrcXVlcnk7
Cgl2YXIgY2FjaGVkID0gb3NfY2FjaGVbY2FjaGVLZXldOwoJaWYoY2FjaGVkICE9
IG51bGwpewoJCW9zX3VwZGF0ZVJlc3VsdHMocix3Z0RCbmFtZSxxdWVyeSxjYWNo
ZWQpOwoJCXJldHVybjsKCX0gKi8KCgkvLyBjYW5jZWwgYW55IHBlbmRpbmcgZmV0
Y2hlcwoJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxs
KQoJCWNsZWFyVGltZW91dChvc190aW1lci5pZCk7CgkvLyBzY2hlZHVsZSBkZWxh
eWVkIGZldGNoaW5nIG9mIHJlc3VsdHMKCWlmKHRpbWVvdXQgIT0gMCl7CgkJb3Nf
dGltZXIgPSBuZXcgb3NfVGltZXIoc2V0VGltZW91dCgib3NfZGVsYXllZEZldGNo
KCkiLHRpbWVvdXQpLHIscXVlcnkpOwoJfSBlbHNlewoJCW9zX3RpbWVyID0gbmV3
IG9zX1RpbWVyKG51bGwscixxdWVyeSk7CgkJb3NfZGVsYXllZEZldGNoKCk7IC8v
IGRvIGl0IG5vdyEKCX0KCn0KLyoqIENoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQgcm93
IChpLmUuIHN1Z2dlc3Rpb24pLCBmcm9tIHBvc2l0aW9uIGN1ciB0byBuZXh0ICov
CmZ1bmN0aW9uIG9zX2NoYW5nZUhpZ2hsaWdodChyLCBjdXIsIG5leHQsIHVwZGF0
ZVNlYXJjaEJveCl7CglpZiAobmV4dCA+PSByLnJlc3VsdENvdW50KQoJCW5leHQg
PSByLnJlc3VsdENvdW50LTE7CglpZiAobmV4dCA8IC0xKQoJCW5leHQgPSAtMTsK
CXIuc2VsZWN0ZWQgPSBuZXh0OwogICAJaWYgKGN1ciA9PSBuZXh0KQogICAgCXJl
dHVybjsgLy8gbm90aGluZyB0byBkby4KCiAgICBpZihjdXIgPj0gMCl7CiAgICAJ
dmFyIGN1clJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFi
bGUgKyBjdXIpOwogICAgCWlmKGN1clJvdyAhPSBudWxsKQogICAgCQljdXJSb3cu
Y2xhc3NOYW1lID0gIm9zLXN1Z2dlc3QtcmVzdWx0IjsKICAgIH0KICAgIHZhciBu
ZXdUZXh0OwogICAgaWYobmV4dCA+PSAwKXsKICAgIAl2YXIgbmV4dFJvdyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFibGUgKyBuZXh0KTsKICAg
IAlpZihuZXh0Um93ICE9IG51bGwpCiAgICAJCW5leHRSb3cuY2xhc3NOYW1lID0g
b3NfSGlnaGxpZ2h0Q2xhc3MoKTsKICAgIAluZXdUZXh0ID0gci5yZXN1bHRzW25l
eHRdOwogICAgfSBlbHNlCiAgICAJbmV3VGV4dCA9IHIub3JpZ2luYWw7CgogICAg
Ly8gYWRqdXN0IHRoZSBzY3JvbGxiYXIgaWYgYW55CiAgICBpZihyLmNvbnRhaW5l
ckNvdW50IDwgci5yZXN1bHRDb3VudCl7CiAgICAJdmFyIGMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7CiAgICAJdmFyIHZTdGFydCA9IGMu
c2Nyb2xsVG9wIC8gci5jb250YWluZXJSb3c7CiAgICAJdmFyIHZFbmQgPSB2U3Rh
cnQgKyByLmNvbnRhaW5lckNvdW50OwogICAgCWlmKG5leHQgPCB2U3RhcnQpCiAg
ICAJCWMuc2Nyb2xsVG9wID0gbmV4dCAqIHIuY29udGFpbmVyUm93OwogICAgCWVs
c2UgaWYobmV4dCA+PSB2RW5kKQogICAgCQljLnNjcm9sbFRvcCA9IChuZXh0IC0g
ci5jb250YWluZXJDb3VudCArIDEpICogci5jb250YWluZXJSb3c7CiAgICB9Cgog
ICAgLy8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoIGJveAogICAg
aWYodXBkYXRlU2VhcmNoQm94KXsKICAgIAlvc191cGRhdGVTZWFyY2hRdWVyeShy
LG5ld1RleHQpOwogICAgfQp9CgpmdW5jdGlvbiBvc19IaWdobGlnaHRDbGFzcygp
IHsKCXZhciBtYXRjaCA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxl
V2ViS2l0XC8oXGQrKS8pOwoJaWYgKG1hdGNoKSB7CgkJdmFyIHdlYktpdFZlcnNp
b24gPSBwYXJzZUludChtYXRjaFsxXSk7CgkJaWYgKHdlYktpdFZlcnNpb24gPCA1
MjMpIHsKCQkJLy8gQ1NTIHN5c3RlbSBoaWdobGlnaHQgY29sb3JzIGJyb2tlbiBv
biBvbGQgU2FmYXJpCgkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTI5CgkJCS8vIFNhZmFyaSAzLjAuNCwgMy4xIGtub3duIG9r
CgkJCXJldHVybiAib3Mtc3VnZ2VzdC1yZXN1bHQtaGwtd2Via2l0IjsKCQl9Cgl9
CglyZXR1cm4gIm9zLXN1Z2dlc3QtcmVzdWx0LWhsIjsKfQoKZnVuY3Rpb24gb3Nf
dXBkYXRlU2VhcmNoUXVlcnkocixuZXdUZXh0KXsKCWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9IG5ld1RleHQ7CiAgICByLnF1ZXJ5
ID0gbmV3VGV4dDsKfQoKLyoqIEZpbmQgZXZlbnQgdGFyZ2V0ICovCmZ1bmN0aW9u
IG9zX2dldFRhcmdldChlKXsKCWlmICghZSkgZSA9IHdpbmRvdy5ldmVudDsKCWlm
IChlLnRhcmdldCkgcmV0dXJuIGUudGFyZ2V0OwoJZWxzZSBpZiAoZS5zcmNFbGVt
ZW50KSByZXR1cm4gZS5zcmNFbGVtZW50OwoJZWxzZSByZXR1cm4gbnVsbDsKfQoK
CgovKioqKioqKioqKioqKioqKioqKioKICogIEtleWJvYXJkIGV2ZW50cwogKioq
KioqKioqKioqKioqKioqKiovCgovKiogRXZlbnQgaGFuZGxlciB0aGF0IHdpbGwg
ZmV0Y2ggcmVzdWx0cyBvbiBrZXl1cCAqLwpmdW5jdGlvbiBvc19ldmVudEtleXVw
KGUpewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21h
cFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5vdCBvdXIg
ZXZlbnQKCgkvLyBzb21lIGJyb3dzZXJzIHdvbid0IGdlbmVyYXRlIGtleXByZXNz
ZWQgZm9yIGFycm93IGtleXMsIGNhdGNoIGl0CglpZihvc19rZXlwcmVzc2VkX2Nv
dW50ID09IDApewoJCW9zX3Byb2Nlc3NLZXkocixvc19jdXJfa2V5cHJlc3NlZCx0
YXJnKTsKCX0KCXZhciBxdWVyeSA9IHRhcmcudmFsdWU7Cglvc19mZXRjaFJlc3Vs
dHMocixxdWVyeSxvc19zZWFyY2hfdGltZW91dCk7Cn0KCi8qKiBjYXRjaCBhcnJv
d3MgdXAvZG93biBhbmQgZXNjYXBlIHRvIGhpZGUgdGhlIHN1Z2dlc3Rpb25zICov
CmZ1bmN0aW9uIG9zX3Byb2Nlc3NLZXkocixrZXlwcmVzc2VkLHRhcmcpewoJaWYg
KGtleXByZXNzZWQgPT0gNDApeyAvLyBBcnJvdyBEb3duCiAgICAJaWYgKHIudmlz
aWJsZSkgewogICAgICAJCW9zX2NoYW5nZUhpZ2hsaWdodChyLCByLnNlbGVjdGVk
LCByLnNlbGVjdGVkKzEsIHRydWUpOwogICAgCX0gZWxzZSBpZihvc190aW1lciA9
PSBudWxsKXsKICAgIAkJLy8gdXNlciB3YW50cyB0byBnZXQgc3VnZ2VzdGlvbnMg
bm93CiAgICAJCXIucXVlcnkgPSAiIjsKCQkJb3NfZmV0Y2hSZXN1bHRzKHIsdGFy
Zy52YWx1ZSwwKTsKICAgIAl9CiAgCX0gZWxzZSBpZiAoa2V5cHJlc3NlZCA9PSAz
OCl7IC8vIEFycm93IFVwCiAgCQlpZiAoci52aXNpYmxlKXsKICAJCQlvc19jaGFu
Z2VIaWdobGlnaHQociwgci5zZWxlY3RlZCwgci5zZWxlY3RlZC0xLCB0cnVlKTsK
ICAJCX0KICAJfSBlbHNlIGlmKGtleXByZXNzZWQgPT0gMjcpeyAvLyBFc2NhcGUK
ICAJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9
IHIub3JpZ2luYWw7CiAgCQlyLnF1ZXJ5ID0gci5vcmlnaW5hbDsKICAJCW9zX2hp
ZGVSZXN1bHRzKHIpOwogIAl9IGVsc2UgaWYoci5xdWVyeSAhPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChyLnNlYXJjaGJveCkudmFsdWUpewogIAkJLy8gb3NfaGlk
ZVJlc3VsdHMocik7IC8vIGRvbid0IHNob3cgb2xkIHN1Z2dlc3Rpb25zCiAgCX0K
fQoKLyoqIFdoZW4ga2V5cyBpcyBoZWxkIGRvd24gdXNlIGEgdGltZXIgdG8gb3V0
cHV0IHJlZ3VsYXIgZXZlbnRzICovCmZ1bmN0aW9uIG9zX2V2ZW50S2V5cHJlc3Mo
ZSl7Cgl2YXIgdGFyZyA9IG9zX2dldFRhcmdldChlKTsKCXZhciByID0gb3NfbWFw
W3RhcmcuaWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBl
dmVudAoKCXZhciBrZXlwcmVzc2VkID0gb3NfY3VyX2tleXByZXNzZWQ7CgoJb3Nf
a2V5cHJlc3NlZF9jb3VudCsrOwoJb3NfcHJvY2Vzc0tleShyLGtleXByZXNzZWQs
dGFyZyk7Cn0KCi8qKiBDYXRjaCB0aGUga2V5IGNvZGUgKEZpcmVmb3ggYnVnKSAg
Ki8KZnVuY3Rpb24gb3NfZXZlbnRLZXlkb3duKGUpewoJaWYgKCFlKSBlID0gd2lu
ZG93LmV2ZW50OwoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9
IG9zX21hcFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5v
dCBvdXIgZXZlbnQKCglvc19tb3VzZV9tb3ZlZCA9IGZhbHNlOwoKCW9zX2N1cl9r
ZXlwcmVzc2VkID0gKGUua2V5Q29kZSA9PSB1bmRlZmluZWQpID8gZS53aGljaCA6
IGUua2V5Q29kZTsKCW9zX2tleXByZXNzZWRfY291bnQgPSAwOwp9CgovKiogRXZl
bnQ6IGxvc3Mgb2YgZm9jdXMgb2YgaW5wdXQgYm94ICovCmZ1bmN0aW9uIG9zX2V2
ZW50Qmx1cihlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIg
PSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51bGwpCgkJcmV0dXJuOyAvLyBu
b3Qgb3VyIGV2ZW50CglpZighb3NfbW91c2VfcHJlc3NlZCl7CgkJb3NfaGlkZVJl
c3VsdHMocik7CgkJLy8gZm9yY2UgY2FudmFzIHRvIHN0YXkgaGlkZGVuCgkJci5z
dGF5SGlkZGVuID0gdHJ1ZQoJCS8vIGNhbmNlbCBhbnkgcGVuZGluZyBmZXRjaGVz
CgkJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKQoJ
CQljbGVhclRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbAoJ
fQp9CgovKiogRXZlbnQ6IGZvY3VzIChjYXRjaCBvbmx5IHdoZW4gc3RvcHBlZCkg
Ki8KZnVuY3Rpb24gb3NfZXZlbnRGb2N1cyhlKXsKCXZhciB0YXJnID0gb3NfZ2V0
VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51
bGwpCgkJcmV0dXJuOyAvLyBub3Qgb3VyIGV2ZW50CglyLnN0YXlIaWRkZW4gPSBm
YWxzZQp9CgoKCi8qKioqKioqKioqKioqKioqKioqKgogKiAgTW91c2UgZXZlbnRz
CiAqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBNb3VzZSBvdmVyIHRoZSBjb250
YWluZXIgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW92ZXIoc3JjSWQsIGUpewoJ
dmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21hcFtzcmNJ
ZF07CglpZihyID09IG51bGwgfHwgIW9zX21vdXNlX21vdmVkKQoJCXJldHVybjsg
Ly8gbm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0
YXJnLmlkKTsKCWlmKG51bSA+PSAwKQoJCW9zX2NoYW5nZUhpZ2hsaWdodChyLHIu
c2VsZWN0ZWQsbnVtLGZhbHNlKTsKCn0KCi8qIEdldCByb3cgd2hlcmUgdGhlIGV2
ZW50IG9jY3VyZWQgKGZyb20gaXRzIGlkKSAqLwpmdW5jdGlvbiBvc19nZXROdW1i
ZXJTdWZmaXgoaWQpewoJdmFyIG51bSA9IGlkLnN1YnN0cmluZyhpZC5sZW5ndGgt
Mik7CglpZiggISAobnVtLmNoYXJBdCgwKSA+PSAnMCcgJiYgbnVtLmNoYXJBdCgw
KSA8PSAnOScpICkKCQludW0gPSBudW0uc3Vic3RyaW5nKDEpOwoJaWYob3NfaXNO
dW1iZXIobnVtKSkKCQlyZXR1cm4gcGFyc2VJbnQobnVtKTsKCWVsc2UKCQlyZXR1
cm4gLTE7Cn0KCi8qKiBTYXZlIG1vdXNlIG1vdmUgYXMgbGFzdCBhY3Rpb24gKi8K
ZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW1vdmUoc3JjSWQsIGUpewoJb3NfbW91c2Vf
bW92ZWQgPSB0cnVlOwp9CgovKiogTW91c2UgYnV0dG9uIGhlbGQgZG93biwgcmVn
aXN0ZXIgcG9zc2libGUgY2xpY2sgICovCmZ1bmN0aW9uIG9zX2V2ZW50TW91c2Vk
b3duKHNyY0lkLCBlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFy
IHIgPSBvc19tYXBbc3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8g
bm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJn
LmlkKTsKCglvc19tb3VzZV9wcmVzc2VkID0gdHJ1ZTsKCWlmKG51bSA+PSAwKXsK
CQlvc19tb3VzZV9udW0gPSBudW07CgkJLy8gb3NfdXBkYXRlU2VhcmNoUXVlcnko
cixyLnJlc3VsdHNbbnVtXSk7Cgl9CgkvLyBrZWVwIHRoZSBmb2N1cyBvbiB0aGUg
c2VhcmNoIGZpZWxkCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGJv
eCkuZm9jdXMoKTsKCglyZXR1cm4gZmFsc2U7IC8vIHByZXZlbnRzIHNlbGVjdGlv
bgp9CgovKiogTW91c2UgYnV0dG9uIHJlbGVhc2VkLCBjaGVjayBmb3IgY2xpY2sg
b24gc29tZSByb3cgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZXVwKHNyY0lkLCBl
KXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBb
c3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBldmVu
dAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJnLmlkKTsKCglpZihu
dW0gPj0gMCAmJiBvc19tb3VzZV9udW0gPT0gbnVtKXsKCQlvc191cGRhdGVTZWFy
Y2hRdWVyeShyLHIucmVzdWx0c1tudW1dKTsKCQlvc19oaWRlUmVzdWx0cyhyKTsK
CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pLnN1Ym1pdCgp
OwoJfQoJb3NfbW91c2VfcHJlc3NlZCA9IGZhbHNlOwoJLy8ga2VlcCB0aGUgZm9j
dXMgb24gdGhlIHNlYXJjaCBmaWVsZAoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ci5zZWFyY2hib3gpLmZvY3VzKCk7Cn0KCi8qKiBDaGVjayBpZiB4IGlzIGEgdmFs
aWQgaW50ZWdlciAqLwpmdW5jdGlvbiBvc19pc051bWJlcih4KXsKCWlmKHggPT0g
IiIgfHwgaXNOYU4oeCkpCgkJcmV0dXJuIGZhbHNlOwoJZm9yKHZhciBpPTA7aTx4
Lmxlbmd0aDtpKyspewoJCXZhciBjID0geC5jaGFyQXQoaSk7CgkJaWYoICEgKGMg
Pj0gJzAnICYmIGMgPD0gJzknKSApCgkJCXJldHVybiBmYWxzZTsKCX0KCXJldHVy
biB0cnVlOwp9CgoKLyoqIFdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkIGhpZGUg
ZXZlcnl0aGluZywgY2FuY2VsIHVwZGF0ZXMuLi4gKi8KZnVuY3Rpb24gb3NfZXZl
bnRPbnN1Ym1pdChlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoKCW9z
X2lzX3N0b3BwZWQgPSB0cnVlOwoJLy8ga2lsbCB0aW1lZCByZXF1ZXN0cwoJaWYo
b3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKXsKCQljbGVh
clRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbDsKCX0KCS8v
IEhpZGUgYWxsIHN1Z2dlc3Rpb25zCglmb3IoaT0wO2k8b3NfYXV0b2xvYWRfaW5w
dXRzLmxlbmd0aDtpKyspewoJCXZhciByID0gb3NfbWFwW29zX2F1dG9sb2FkX2lu
cHV0c1tpXV07CgkJaWYociAhPSBudWxsKXsKCQkJdmFyIGIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pOwoJCQlpZihiICE9IG51bGwgJiYg
YiA9PSB0YXJnKXsKCQkJCS8vIHNldCBxdWVyeSB2YWx1ZSBzbyB0aGUgaGFuZGxl
ciB3b24ndCB0cnkgdG8gZmV0Y2ggYWRkaXRpb25hbCByZXN1bHRzCgkJCQlyLnF1
ZXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hib3gpLnZhbHVl
OwoJCQl9CgkJCW9zX2hpZGVSZXN1bHRzKHIpOwoJCX0KCX0KCXJldHVybiB0cnVl
Owp9CgpmdW5jdGlvbiBvc19ob29rRXZlbnQoZWxlbWVudCwgaG9va05hbWUsIGhv
b2tGdW5jdCkgewoJaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewoJCWVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihob29rTmFtZSwgaG9va0Z1bmN0LCBmYWxz
ZSk7Cgl9IGVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgewoJCWVsZW1lbnQu
YXR0YWNoRXZlbnQoIm9uIiArIGhvb2tOYW1lLCBob29rRnVuY3QpOwoJfQp9Cgov
KiogSW5pdCBSZXN1bHQgb2JqZWN0cyBhbmQgZXZlbnQgaGFuZGxlcnMgKi8KZnVu
Y3Rpb24gb3NfaW5pdEhhbmRsZXJzKG5hbWUsIGZvcm1uYW1lLCBlbGVtZW50KXsK
CXZhciByID0gbmV3IG9zX1Jlc3VsdHMobmFtZSwgZm9ybW5hbWUpOwoJLy8gZXZl
bnQgaGFuZGxlcgoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJrZXl1cCIsIGZ1bmN0
aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5dXAoZXZlbnQpOyB9KTsKCW9zX2hvb2tF
dmVudChlbGVtZW50LCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2
ZW50S2V5ZG93bihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJr
ZXlwcmVzcyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5cHJlc3MoZXZl
bnQpOyB9KTsKCW9zX2hvb2tFdmVudChlbGVtZW50LCAiYmx1ciIsIGZ1bmN0aW9u
KGV2ZW50KSB7IG9zX2V2ZW50Qmx1cihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50
KGVsZW1lbnQsICJmb2N1cyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50Rm9j
dXMoZXZlbnQpOyB9KTsKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxl
dGUiLCJvZmYiKTsKCS8vIHN0b3BwaW5nIGhhbmRsZXIKCW9zX2hvb2tFdmVudChk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtbmFtZSksICJzdWJtaXQiLCBmdW5j
dGlvbihldmVudCl7IHJldHVybiBvc19ldmVudE9uc3VibWl0KGV2ZW50KTsgfSk7
Cglvc19tYXBbbmFtZV0gPSByOwoJLy8gdG9nZ2xlIGxpbmsKCWlmKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKHIudG9nZ2xlKSA9PSBudWxsKXsKCQkvLyBUT0RPOiBk
aXNhYmxlIHRoaXMgd2hpbGUgd2UgZmlndXJlIG91dCBhIHdheSBmb3IgdGhpcyB0
byB3b3JrIGluIGFsbCBicm93c2VycwoJCS8qIGlmKG5hbWU9PSdzZWFyY2hJbnB1
dCcpewoJCQkvLyBzcGVjaWFsIGNhc2U6IHBsYWNlIGFib3ZlIHRoZSBtYWluIHNl
YXJjaCBib3gKCQkJdmFyIHQgPSBvc19jcmVhdGVUb2dnbGUociwib3Mtc3VnZ2Vz
dC10b2dnbGUiKTsKCQkJdmFyIHNlYXJjaEJvZHkgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2VhcmNoQm9keScpOwoJCQl2YXIgZmlyc3QgPSBzZWFyY2hCb2R5
LnBhcmVudE5vZGUuZmlyc3RDaGlsZC5uZXh0U2libGluZy5hcHBlbmRDaGlsZCh0
KTsKCQl9IGVsc2V7CgkJCS8vIGRlZmF1bHQ6IHBsYWNlIGJlbG93IHNlYXJjaCBi
b3ggdG8gdGhlIHJpZ2h0CgkJCXZhciB0ID0gb3NfY3JlYXRlVG9nZ2xlKHIsIm9z
LXN1Z2dlc3QtdG9nZ2xlLWRlZiIpOwoJCQl2YXIgdG9wID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDsKCQkJdmFyIGxlZnQgPSBlbGVt
ZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoOwoJCQl0LnN0eWxl
LnBvc2l0aW9uID0gImFic29sdXRlIjsKCQkJdC5zdHlsZS50b3AgPSB0b3AgKyAi
cHgiOwoJCQl0LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKCQkJZWxlbWVudC5w
YXJlbnROb2RlLmFwcGVuZENoaWxkKHQpOwoJCQkvLyBvbmx5IG5vdyB3aWR0aCBn
ZXRzIGNhbGN1bGF0ZWQsIHNoaWZ0IHJpZ2h0CgkJCWxlZnQgLT0gdC5vZmZzZXRX
aWR0aDsKCQkJdC5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CgkJCXQuc3R5bGUu
dmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKCQl9ICovCgl9Cgp9CgovKiogUmV0dXJu
IHRoZSBzcGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdG9nZ2xlIGxpbmsg
Ki8KZnVuY3Rpb24gb3NfY3JlYXRlVG9nZ2xlKHIsY2xhc3NOYW1lKXsKCXZhciB0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoJdC5jbGFzc05hbWUg
PSBjbGFzc05hbWU7Cgl0LnNldEF0dHJpYnV0ZSgiaWQiLCByLnRvZ2dsZSk7Cgl2
YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCWxpbmsuc2V0
QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApOyIpOwoJbGluay5v
bmNsaWNrID0gZnVuY3Rpb24oKXsgb3NfdG9nZ2xlKHIuc2VhcmNoYm94LHIuc2Vh
cmNoZm9ybSkgfTsKCXZhciBtc2cgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3
Z01XU3VnZ2VzdE1lc3NhZ2VzWzBdKTsKCWxpbmsuYXBwZW5kQ2hpbGQobXNnKTsK
CXQuYXBwZW5kQ2hpbGQobGluayk7CglyZXR1cm4gdDsKfQoKLyoqIENhbGwgd2hl
biB1c2VyIGNsaWNrcyBvbiBzb21lIG9mIHRoZSB0b2dnbGUgbGlua3MgKi8KZnVu
Y3Rpb24gb3NfdG9nZ2xlKGlucHV0SWQsZm9ybU5hbWUpewoJciA9IG9zX21hcFtp
bnB1dElkXTsKCXZhciBtc2cgPSAnJzsKCWlmKHIgPT0gbnVsbCl7CgkJb3NfZW5h
YmxlU3VnZ2VzdGlvbnNPbihpbnB1dElkLGZvcm1OYW1lKTsKCQlyID0gb3NfbWFw
W2lucHV0SWRdOwoJCW1zZyA9IHdnTVdTdWdnZXN0TWVzc2FnZXNbMF07Cgl9IGVs
c2V7CgkJb3NfZGlzYWJsZVN1Z2dlc3Rpb25zT24oaW5wdXRJZCxmb3JtTmFtZSk7
CgkJbXNnID0gd2dNV1N1Z2dlc3RNZXNzYWdlc1sxXTsKCX0KCS8vIGNoYW5nZSBt
ZXNzYWdlCgl2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIudG9n
Z2xlKS5maXJzdENoaWxkOwoJbGluay5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobXNnKSxsaW5rLmZpcnN0Q2hpbGQpOwp9CgovKiogQ2FsbCB0
aGlzIHRvIGVuYWJsZSBzdWdnZXN0aW9ucyBvbiBpbnB1dCAoaWQ9aW5wdXRJZCks
IG9uIGEgZm9ybSAobmFtZT1mb3JtTmFtZSkgKi8KZnVuY3Rpb24gb3NfZW5hYmxl
U3VnZ2VzdGlvbnNPbihpbnB1dElkLCBmb3JtTmFtZSl7Cglvc19pbml0SGFuZGxl
cnMoIGlucHV0SWQsIGZvcm1OYW1lLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
bnB1dElkKSApOwp9CgovKiogQ2FsbCB0aGlzIHRvIGRpc2FibGUgc3VnZ2VzdGlv
cyBvbiBpbnB1dCBib3ggKGlkPWlucHV0SWQpICovCmZ1bmN0aW9uIG9zX2Rpc2Fi
bGVTdWdnZXN0aW9uc09uKGlucHV0SWQpewoJciA9IG9zX21hcFtpbnB1dElkXTsK
CWlmKHIgIT0gbnVsbCl7CgkJLy8gY2FuY2VsL2hpZGUgcmVzdWx0cwoJCW9zX3Rp
bWVyID0gbnVsbDsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQkvLyB0dXJuIGF1dG9j
b21wbGV0ZSBvbiAhCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCku
c2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJvbiIpOwoJCS8vIHJlbW92ZSBk
ZXNjcmlwdG9yCgkJb3NfbWFwW2lucHV0SWRdID0gbnVsbDsKCX0KCQoJLy8gUmVt
b3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIG9zX2F1dG9sb2FkXyogYXJyYXlzCgl2
YXIgaW5kZXggPSBvc19hdXRvbG9hZF9pbnB1dHMuaW5kZXhPZihpbnB1dElkKTsK
CWlmICggaW5kZXggPj0gMCApCgkJb3NfYXV0b2xvYWRfaW5wdXRzW2luZGV4XSA9
IG9zX2F1dG9sb2FkX2Zvcm1zW2luZGV4XSA9ICcnOwp9CgovKiogSW5pdGlhbGl6
YXRpb24sIGNhbGwgdXBvbiBwYWdlIG9ubG9hZCAqLwpmdW5jdGlvbiBvc19NV1N1
Z2dlc3RJbml0KCkgewoJZm9yKGk9MDtpPG9zX2F1dG9sb2FkX2lucHV0cy5sZW5n
dGg7aSsrKXsKCQl2YXIgaWQgPSBvc19hdXRvbG9hZF9pbnB1dHNbaV07CgkJdmFy
IGZvcm0gPSBvc19hdXRvbG9hZF9mb3Jtc1tpXTsKCQllbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CgkJaWYoZWxlbWVudCAhPSBudWxsKQoJ
CQlvc19pbml0SGFuZGxlcnMoaWQsZm9ybSxlbGVtZW50KTsKCX0KfQoKaG9va0V2
ZW50KCJsb2FkIiwgb3NfTVdTdWdnZXN0SW5pdCk7Cg==
------------oRmhKhBOMc0OmEYXVxbplm
Content-Disposition: inline; filename=centralnotice.js
Content-Type: text/javascript; charset=utf-8; name=centralnotice.js
Content-Location: http://upload.wikimedia.org/centralnotice/wikipedia/en/centralnotice.js?257z49
Content-Transfer-Encoding: Quoted-Printable
function toggleNotice() {
var notice =3D document.getElementById('centralNotice');
if (!wgNoticeToggleState) {
notice.className =3D notice.className.replace('collapsed', 'expanded')=
;
toggleNoticeCookie('0');
} else {
notice.className =3D notice.className.replace('expanded', 'collapsed')=
;
toggleNoticeCookie('1');
}
wgNoticeToggleState =3D !wgNoticeToggleState;
}
function toggleNoticeStyle(elems, display) {
if(elems)
for(var i=3D0;i' + wgNotice+'