[openbox] theme question

Mikael Magnusson mangosoft at comhem.se
Wed Jan 21 01:17:49 EST 2004


On Tue, 20 Jan 2004, Jonathan Daugherty wrote:

> # there is a pretty good theme builder written by katanalynx in python+gtk2
> # but it uses a bit outdated theme format, just some minor changes i think.
> # maybe you could hack a bit on that if you want?
> 
> I've looked all over (and even emailed katanalynx, to no end) and
> cannot find this program -- its name or its location.  Can you give
> me any advice / pointers?
> 
> Thanks!

heh, i cant find it anywhere either, but i still have it installed.. maybe 
someone else has a source archive, but here are the files it needs i 
think, the .py files go in /usr/(local/)?lib/stylebox and the other one in 
/usr/(local/)?/bin

--
Mikael Magnusson

     [ Part 2, ""  Text/PLAIN (Name: "StyleBox.py")  971 lines. ]
     [ Unable to print this part. ]


     [ Part 3, ""  Text/PLAIN (Name: "Theme.py")  432 lines. ]
     [ Unable to print this part. ]


     [ Part 4, ""  Text/PLAIN (Name: "stylebox")  24 lines. ]
     [ Unable to print this part. ]


--
Mikael Magnusson
--8323328-1655603711-1142598252=:7597
Content-Type: TEXT/x-python; charset=US-ASCII; name=Theme.py
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.64.0603171324120.7597 at localhost>
Content-Description: 
Content-Disposition: attachment; filename=Theme.py

IyBTdHlsZUJveDogYSBzdHlsZS90aGVtZSBlZGl0b3IgZm9yIE9wZW5ib3gg
Mi4NCiMgQ29weXJpZ2h0IChDKSAyMDAzICBBdmEgQXJhY2huZSBKYXJ2aXMg
PGFqYXJAa2F0YW5hbHlueC5keW5kbnMub3JnPg0KIw0KIyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQ0KIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KIyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvcg0KIyAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLg0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YNCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIw0KIyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQoNCmltcG9ydCBzdHJpbmcsIG9z
LCBjb3B5LCBzeXMNCg0KIyBCYXNpYyBkYXRhIGNsYXNzZXMuICANCiMgT25s
eSByZXNwb25zaWJsZSBmb3Iga25vd2xlZGdlIG9mIHNvbWV3aGF0IHdlaXJk
IGRldGFpbHMNCiMgb2YgdGhlIGRhdGEgdHlwZSB0aGV5IHJlcHJlc2VudC4N
CmNsYXNzIENvbG9yKG9iamVjdCk6IA0KICAgICIiIg0KICAgIFJlcHJlc2Vu
dHMgYW4gOC1iaXQgY29sb3IgaW4gUkdCIHNwYWNlLg0KICAgIEEgQ29sb3Ig
d2l0aCBhIHNldCBuYW1lIHdpbGwgaWdub3JlIGl0cyByZWQvZ3JlZW4vYmx1
ZSBjb21wb25lbnRzLiANCiAgICBTZXR0aW5nIHJlZC9ncmVlbi9ibHVlIG9u
IGEgQ29sb3Igd2lsbCByZXNldCBpdHMgbmFtZSB0byBOb25lLg0KDQogICAg
SW5zdGFuY2UgVmFyaWFibGVzOg0KICAgICAgICBuYW1lICA6IHN0ciAtIGEg
Y29sb3IgbmFtZSBmcm9tIHJnYi50eHQuICANCiAgICAgICAgcmVkICAgOiBp
bnQgLSByZWQgY29tcG9uZW50LCBmcm9tIDAgdG8gMjU1IGluY2x1c2l2ZS4N
CiAgICAgICAgZ3JlZW4gOiBpbnQgLSBncmVlbiBjb21wb25lbnQsIGZyb20g
MCB0byAyNTUgaW5jbHVzaXZlLg0KICAgICAgICBibHVlICA6IGludCAtIGJs
dWUgY29tcG9uZW50LCBmcm9tIDAgdG8gMjU1IGluY2x1c2l2ZS4NCiAgICAi
IiINCiAgICBkZWYgcGFyc2Uocyk6IA0KICAgICAgICAiIiINCiAgICAgICAg
UGFyYW1ldGVyczoNCiAgICAgICAgICAgIHMgOiBzdHIgLSBpbiByZ2I6aGV4
L2hleC9oZXgsICNoZXhoZXhoZXgsIG9yIG5hbWUgZm9ybWF0Lg0KICAgICAg
ICBSZXR1cm5zOiANCiAgICAgICAgICAgIENvbG9yIG9iamVjdC4NCiAgICAg
ICAgIiIiDQogICAgICAgIGNvbG9yID0gTm9uZQ0KDQogICAgICAgIGlmIHNb
MF0gPT0gJyMnOg0KICAgICAgICAgICAgY2xlbiA9IChsZW4ocykgLSAxKSAv
IDMNCiAgICAgICAgICAgIHN0YXJ0ID0gMQ0KICAgICAgICAgICAgZW5kID0g
Y2xlbiArIDENCiAgICAgICAgICAgIGNvbG9yID0gW05vbmUsIE5vbmUsIE5v
bmVdDQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToNCiAgICAgICAg
ICAgICAgICBjb2xvcltpXSA9IHNbc3RhcnQ6ZW5kXQ0KICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gZW5kDQogICAgICAgICAgICAgICAgZW5kICs9IGNsZW4N
CiAgICAgICAgZWxpZiBzWzA6NF0gPT0gJ3JnYjonOg0KICAgICAgICAgICAg
Y29sb3IgPSBzWzQ6XS5zcGxpdCgnLycpDQogICAgICAgIGVsc2U6DQogICAg
ICAgICAgICByZXR1cm4gQ29sb3IobmFtZSA9IHMpDQoNCiAgICAgICAgZm9y
IGkgaW4gcmFuZ2UoMyk6DQogICAgICAgICAgICBjbGVuID0gbGVuKGNvbG9y
W2ldKQ0KICAgICAgICAgICAgciA9ICcnDQogICAgICAgICAgICBmb3IgaiBp
biByYW5nZShjbGVuKToNCiAgICAgICAgICAgICAgICByICs9ICdGJw0KICAg
ICAgICAgICAgciA9IGludChyLCAxNikNCiAgICAgICAgICAgIGNvbG9yW2ld
ID0gaW50KChpbnQoY29sb3JbaV0sIDE2KSAvIGZsb2F0KHIpKSAqIDI1NSkN
Cg0KICAgICAgICByZXR1cm4gQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBj
b2xvclsyXSkNCiAgICBwYXJzZSA9IHN0YXRpY21ldGhvZChwYXJzZSkNCg0K
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWQgPSAwLCBncmVlbiA9IDAsIGJs
dWUgPSAwLCBuYW1lID0gTm9uZSk6IA0KICAgICAgICAiIiINCiAgICAgICAg
UGFyYW1ldGVyczoNCiAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUgOiBp
bnQgLSBiZXR3ZWVuIDAgYW5kIDI1NS4NCiAgICAgICAgICAgIG5hbWUgOiBz
dHIgLSBpZiBnaXZlbiwgcmVkL2dyZWVuL2JsdWUgYXJlIGlnbm9yZWQuDQog
ICAgICAgICIiIg0KICAgICAgICBzZWxmLm5hbWUgPSBuYW1lDQogICAgICAg
IGlmIG5vdCBuYW1lOg0KICAgICAgICAgICAgc2VsZi5fX3JlZCA9IHJlZA0K
ICAgICAgICAgICAgc2VsZi5fX2dyZWVuID0gZ3JlZW4NCiAgICAgICAgICAg
IHNlbGYuX19ibHVlID0gYmx1ZQ0KICAgICMgUHJvcGVydHkgbWV0aG9kcyAN
CiAgICBkZWYgc2V0UmVkKHNlbGYsIHJlZCk6DQogICAgICAgIGlmIHJlZCA8
IDAgb3IgcmVkID4gMjU1OiANCiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoInJlZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1ISIpDQogICAgICAg
IHNlbGYuX19yZWQgPSByZWQNCiAgICAgICAgc2VsZi5uYW1lID0gTm9uZQ0K
ICAgIGRlZiBzZXRHcmVlbihzZWxmLCBncmVlbik6DQogICAgICAgIGlmIGdy
ZWVuIDwgMCBvciBncmVlbiA+IDI1NTogDQogICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJncmVlbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1ISIp
DQogICAgICAgIHNlbGYuX19ncmVlbiA9IGdyZWVuDQogICAgICAgIHNlbGYu
bmFtZSA9IE5vbmUNCiAgICBkZWYgc2V0Qmx1ZShzZWxmLCBibHVlKToNCiAg
ICAgICAgaWYgYmx1ZSA8IDAgb3IgYmx1ZSA+IDI1NTogDQogICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJibHVlIG11c3QgYmUgYmV0d2VlbiAwIGFu
ZCAyNTUhIikNCiAgICAgICAgc2VsZi5fX2JsdWUgPSBibHVlDQogICAgICAg
IHNlbGYubmFtZSA9IE5vbmUNCiAgICByZWQgPSBwcm9wZXJ0eShsYW1iZGEg
YzogYy5fX3JlZCwgc2V0UmVkKQ0KICAgIGdyZWVuID0gcHJvcGVydHkobGFt
YmRhIGM6IGMuX19ncmVlbiwgc2V0R3JlZW4pDQogICAgYmx1ZSA9IHByb3Bl
cnR5KGxhbWJkYSBjOiBjLl9fYmx1ZSwgc2V0Qmx1ZSkNCiAgICANCiAgICBk
ZWYgX19yZXByX18oc2VsZik6IA0KICAgICAgICBpZiBzZWxmLm5hbWU6DQog
ICAgICAgICAgICByZXR1cm4gJzxDb2xvcjogbmFtZSA9ICVzPicgJSBzZWxm
Lm5hbWUNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHJldHVybiAnPENv
bG9yOiByZWQgPSAlcywgZ3JlZW4gPSAlcywgYmx1ZSA9ICVzPicgJSBcDQog
ICAgICAgICAgICAgICAgICAgIChgc2VsZi5yZWRgLCBgc2VsZi5ncmVlbmAs
IGBzZWxmLmJsdWVgKQ0KICAgIGRlZiBfX3N0cl9fKHNlbGYpOiANCiAgICAg
ICAgaWYgc2VsZi5uYW1lOg0KICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgc3RyID0gJyMnDQogICAg
ICAgICAgICBmb3IgYyBpbiBbc2VsZi5yZWQsIHNlbGYuZ3JlZW4sIHNlbGYu
Ymx1ZV06DQogICAgICAgICAgICAgICAgc3RyICs9ICclMDJ4JyAlIGMNCiAg
ICAgICAgICAgIHJldHVybiBzdHINCiAgICBkZWYgX19lcV9fKHNlbGYsIG90
aGVyKToNCiAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29sb3IpOg0K
ICAgICAgICAgICAgaWYgb3RoZXIubmFtZToNCiAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5uYW1lIGFuZCAoc2VsZi5uYW1lID09IG90aGVyLm5hbWUp
DQogICAgICAgICAgICBlbGlmIHNlbGYubmFtZToNCiAgICAgICAgICAgICAg
ICByZXR1cm4gMA0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5yZWQgPT0gb3RoZXIucmVkIGFuZCBcDQogICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuYmx1ZSA9PSBvdGhlci5ibHVlIGFuZCBc
DQogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JlZW4gPT0gb3RoZXIu
Z3JlZW4NCiAgICAgICAgcmV0dXJuIDANCmNsYXNzIFRleHR1cmUob2JqZWN0
KToNCiAgICAiIiINCiAgICBSZXByZXNlbnRzIGFuIE9wZW5ib3ggdGV4dHVy
ZSAoYXMgaW4gdGhlIHRleHR1cmUgbGluZSwgbm8gY29sb3JzKS4NCg0KICAg
IENsYXNzIHZhcmlhYmxlczoNCiAgICAgICAgUkVMSUVGUyA6IHN0ciBsaXN0
IC0gQXZhaWxhYmxlIHJlbGllZnMuDQogICAgICAgIFRZUEVTICAgOiBzdHIg
bGlzdCAtIEF2YWlsYWJsZSBncmFkaWVudCB0eXBlcy4NCiAgICAgICAgQkVW
RUxTICA6IHN0ciBsaXN0IC0gQXZhaWxhYmxlIGJldmVsIHJlbmRlciB0eXBl
cy4NCg0KICAgIEluc3RhbmNlIHZhcmlhYmxlczoNCiAgICAgICAgcGFyZW50
cmVsYXRpdmUgOiBib29sIC0gaWYgdHJ1ZSwgYWxsIG90aGVyIGF0dHJpYnV0
ZXMgYXJlIGlnbm9yZWQuDQogICAgICAgIHJlbGllZiA6IGludCAtIGluZGV4
IGludG8gUkVMSUVGUy4NCiAgICAgICAgYm9yZGVyIDogYm9vbCAtIGlnbm9y
ZWQgZm9yIGFueSByZWxpZWYgdHlwZSBleGNlcHQgJ2ZsYXQnLg0KICAgICAg
ICBncmFkaWVudCA6IGJvb2wgLSBpZiB0cnVlLCB0aGlzIGlzIGEgZ3JhZGll
bnQgdGV4dHVyZTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlLCBhIHNvbGlkIHRleHR1cmUuICANCiAgICAgICAgdHlwZSA6IGludCAt
IGluZGV4IGludG8gVFlQRVM7IG9ubHkgYWNrbm93bGVkZ2VkIGlmIGdyYWRp
ZW50IGlzIHRydWUuDQogICAgICAgIGludGVybGFjZWQgOiBib29sIC0gdHJ1
ZSBpZiB0aGlzIHRleHR1cmUgaXMgaW50ZXJsYWNlZC4NCiAgICAgICAgYmV2
ZWwgOiBpbnQgLSBpbmRleCBpbnRvIEJFVkVMUy4NCiAgICAiIiINCiAgICBS
RUxJRUZTID0gWydmbGF0JywgJ3JhaXNlZCcsICdzdW5rZW4nXQ0KICAgIFRZ
UEVTID0gWydob3Jpem9udGFsJywgJ3ZlcnRpY2FsJywgJ2RpYWdvbmFsJywg
J2Nyb3NzZGlhZ29uYWwnLCANCiAgICAgICAgICAgICAncGlwZWNyb3NzJywg
J2VsbGlwdGljJywgJ3JlY3RhbmdsZScsICdweXJhbWlkJ10NCiAgICBCRVZF
TFMgPSBbJ2JldmVsMScsICdiZXZlbDInXQ0KDQogICAgIyBrZXl3b3JkIGRp
Y3Rpb25hcmllcyBmb3IgcGFyc2luZyANCiAgICBkZWYgbWFrZUxpc3REaWN0
KGxpc3QpOg0KICAgICAgICBkaWN0ID0ge30NCiAgICAgICAgZm9yIGkgaW4g
cmFuZ2UobGVuKGxpc3QpKTogZGljdFtsaXN0W2ldXSA9IGkNCiAgICAgICAg
cmV0dXJuIGRpY3QNCiAgICBkaWN0UkVMSUVGUyA9IG1ha2VMaXN0RGljdChS
RUxJRUZTKQ0KICAgIGRpY3RUWVBFUyA9IG1ha2VMaXN0RGljdChUWVBFUykN
CiAgICBkaWN0QkVWRUxTID0gbWFrZUxpc3REaWN0KEJFVkVMUykNCiAgICBk
ZWwgbWFrZUxpc3REaWN0DQogICAgDQogICAgZGVmIHBhcnNlKHMpOg0KICAg
ICAgICB3b3JkcyA9IHMuc3BsaXQoKQ0KICAgICAgICB0ID0gVGV4dHVyZSgp
DQogICAgICAgIGZvciB3b3JkIGluIHdvcmRzOg0KICAgICAgICAgICAgd29y
ZCA9IHdvcmQubG93ZXIoKQ0KICAgICAgICAgICAgaWYgd29yZCBpbiBUZXh0
dXJlLlJFTElFRlM6IA0KICAgICAgICAgICAgICAgIHQucmVsaWVmID0gVGV4
dHVyZS5kaWN0UkVMSUVGU1t3b3JkXQ0KICAgICAgICAgICAgZWxpZiB3b3Jk
ID09ICdmbGF0Ym9yZGVyJzoNCiAgICAgICAgICAgICAgICB0LnJlbGllZiA9
IFRleHR1cmUuZGljdFJFTElFRlNbJ2ZsYXQnXQ0KICAgICAgICAgICAgICAg
IHQuYm9yZGVyID0gMQ0KICAgICAgICAgICAgZWxpZiB3b3JkIGluIFRleHR1
cmUuVFlQRVM6IA0KICAgICAgICAgICAgICAgIHQudHlwZSA9IFRleHR1cmUu
ZGljdFRZUEVTW3dvcmRdDQogICAgICAgICAgICBlbGlmIHdvcmQgaW4gVGV4
dHVyZS5CRVZFTFM6IA0KICAgICAgICAgICAgICAgIHQuYmV2ZWwgPSBUZXh0
dXJlLmRpY3RCRVZFTFNbd29yZF0NCiAgICAgICAgICAgIGVsaWYgd29yZCA9
PSAnYm9yZGVyJzogdC5ib3JkZXIgPSAxDQogICAgICAgICAgICBlbGlmIHdv
cmQgPT0gJ2ludGVybGFjZWQnOiB0LmludGVybGFjZWQgPSAxDQogICAgICAg
ICAgICBlbGlmIHdvcmQgPT0gJ2dyYWRpZW50JzogdC5ncmFkaWVudCA9IDEN
CiAgICAgICAgICAgIGVsaWYgd29yZCA9PSAnc29saWQnOiB0LmdyYWRpZW50
ID0gMA0KICAgICAgICAgICAgZWxpZiB3b3JkID09ICdwYXJlbnRyZWxhdGl2
ZSc6IHQucGFyZW50cmVsYXRpdmUgPSAxDQogICAgICAgIHJldHVybiB0DQog
ICAgcGFyc2UgPSBzdGF0aWNtZXRob2QocGFyc2UpDQoNCiAgICBkZWYgX19p
bml0X18oc2VsZik6DQogICAgICAgIHNlbGYucGFyZW50cmVsYXRpdmUgPSAw
DQogICAgICAgIHNlbGYucmVsaWVmID0gMA0KICAgICAgICBzZWxmLmJvcmRl
ciA9IDANCiAgICAgICAgc2VsZi5ncmFkaWVudCA9IDANCiAgICAgICAgc2Vs
Zi50eXBlID0gMA0KICAgICAgICBzZWxmLmludGVybGFjZWQgPSAwDQogICAg
ICAgIHNlbGYuYmV2ZWwgPSAwDQogICAgZGVmIF9fc3RyX18oc2VsZik6DQog
ICAgICAgIGlmIHNlbGYucGFyZW50cmVsYXRpdmU6IHJldHVybiAncGFyZW50
cmVsYXRpdmUnDQoNCiAgICAgICAgcyA9IFRleHR1cmUuUkVMSUVGU1tzZWxm
LnJlbGllZl0NCiAgICAgICAgaWYgcyA9PSAnZmxhdCcgYW5kIHNlbGYuYm9y
ZGVyOg0KICAgICAgICAgICAgcyArPSAnIGJvcmRlcicNCiAgICAgICAgaWYg
c2VsZi5ncmFkaWVudDoNCiAgICAgICAgICAgIHMgKz0gJyBncmFkaWVudCAn
ICsgVGV4dHVyZS5UWVBFU1tzZWxmLnR5cGVdDQogICAgICAgIGVsc2U6DQog
ICAgICAgICAgICBzICs9ICcgc29saWQnDQogICAgICAgIGlmIHNlbGYuaW50
ZXJsYWNlZDogcyArPSAnIGludGVybGFjZWQnDQogICAgICAgIHMgKz0gJyAn
ICsgVGV4dHVyZS5CRVZFTFNbc2VsZi5iZXZlbF0NCiAgICAgICAgcmV0dXJu
IHMNCmNsYXNzIFhmdEZvbnQob2JqZWN0KToNCiAgICBkZWYgX19pbml0X18o
c2VsZiwgZmFtaWx5ID0gTm9uZSwgc2l6ZSA9IDcsIGJvbGQgPSAwLCBpdGFs
aWMgPSAwLCBzaGFkb3cgPSAwKToNCiAgICAgICAgc2VsZi5mYW1pbHkgPSBm
YW1pbHkNCiAgICAgICAgc2VsZi5zaXplID0gc2l6ZQ0KICAgICAgICBzZWxm
LmJvbGQgPSBib2xkDQogICAgICAgIHNlbGYuaXRhbGljID0gaXRhbGljDQog
ICAgICAgIHNlbGYuc2hhZG93ID0gc2hhZG93DQogICAgZGVmIHBhcnNlRmxh
Z3Moc2VsZiwgcyk6DQogICAgICAgIGJvbGQsIGl0YWxpYywgc2hhZG93ID0g
MCwgMCwgMA0KICAgICAgICBmb3Igd29yZCBpbiBzLnNwbGl0KCk6DQogICAg
ICAgICAgICBpZiB3b3JkID09ICdib2xkJzogYm9sZCA9IDENCiAgICAgICAg
ICAgIGVsaWYgd29yZCA9PSAnbm9ybWFsJzogDQogICAgICAgICAgICAgICAg
Ym9sZCA9IDANCiAgICAgICAgICAgICAgICBpdGFsaWMgPSAwDQogICAgICAg
ICAgICBlbGlmIHdvcmQgPT0gJ3NoYWRvdyc6IHNoYWRvdyA9IDENCiAgICAg
ICAgICAgIGVsaWYgd29yZCA9PSAnaXRhbGljJzogaXRhbGljID0gMQ0KICAg
ICAgICBzZWxmLmJvbGQgPSBib2xkDQogICAgICAgIHNlbGYuaXRhbGljID0g
aXRhbGljDQogICAgICAgIHNlbGYuc2hhZG93ID0gc2hhZG93DQogICAgZGVm
IHN0ckZsYWdzKHNlbGYpOg0KICAgICAgICBzID0gJycNCiAgICAgICAgaWYg
c2VsZi5ib2xkIGFuZCBzZWxmLml0YWxpYzogcyA9ICdib2xkIGl0YWxpYycN
CiAgICAgICAgZWxpZiBzZWxmLmJvbGQ6IHMgPSAnYm9sZCcNCiAgICAgICAg
ZWxpZiBzZWxmLml0YWxpYzogcyA9ICdpdGFsaWMnDQogICAgICAgIGVsc2U6
IHMgPSAnbm9ybWFsJw0KDQogICAgICAgIGlmIHNlbGYuc2hhZG93OiBzICs9
ICcgc2hhZG93Jw0KICAgICAgICByZXR1cm4gcw0KDQojIFJlc291cmNlIGNs
YXNzZXMuICANCiMgUmVzcG9uc2libGUgZm9yIHJlYWRpbmcgYXR0cmlidXRl
cyBmcm9tIGFuIA0KIyBYIHJlc291cmNlIGRhdGFiYXNlLCBhbmQgZm9yIHJl
dHVybmluZyBzdHJpbmdzIHN1aXRhYmxlIGZvciANCiMgcmVjcmVhdGluZyB0
aGUgWCByZXNvdXJjZSBkYXRhYmFzZSBmaWxlLg0KZnJvbSBYbGliLnJkYiBp
bXBvcnQgUmVzb3VyY2VEQg0KY2xhc3MgUmVzb3VyY2U6DQogICAgIiIiDQog
ICAgUmVwcmVzZW50cyBhbiBYIHJlc291cmNlIGxpbmUuDQoNCiAgICBJbnN0
YW5jZSBWYXJpYWJsZXM6DQogICAgICAgIG5hbWUgIDogc3RyICAgICAgLSBu
YW1lIG9mIHRoZSByZXNvdXJjZQ0KICAgICAgICB2YWx1ZSA6ICogICAgICAg
IC0gdmFsdWUgb2YgdGhlIHJlc291cmNlLiAgTXVzdCBpbXBsZW1lbnQgX19z
dHJfXy4NCiAgICAiIiINCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
dmFsdWUgPSAnJyk6DQogICAgICAgICIiIg0KICAgICAgICBQYXJhbWV0ZXJz
Og0KICAgICAgICAgICAgbmFtZSA6IHN0ciAgICAgIC0gbmFtZSBvZiB0aGUg
cmVzb3VyY2UNCiAgICAgICAgICAgIHZhbHVlIDogKiAgICAgICAtIGRlZmF1
bHQgdmFsdWUgb2YgdGhlIHJlc291cmNlDQogICAgICAgICIiIg0KICAgICAg
ICBzZWxmLm5hbWUgPSBuYW1lDQogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1
ZQ0KICAgIGRlZiBwYXJzZShzZWxmLCBzKToNCiAgICAgICAgIiIiDQogICAg
ICAgIFBhcnNlcyBhIHN0cmluZyBnb3R0ZW4gZnJvbSBhbiBYIHJlc291cmNl
IGRhdGFiYXNlLiAgVGhpcyANCiAgICAgICAgc2hvdWxkIHByb2JhYmx5IGJl
IG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3NlcyAodGhleSBkb24ndCANCiAg
ICAgICAgaGF2ZSB0byBvdmVycmlkZSByZWFkKCkpLg0KICAgICAgICAiIiIN
CiAgICAgICAgcmV0dXJuIHMNCiAgICBkZWYgcmVhZChzZWxmLCByZGIpOg0K
ICAgICAgICAiIiINCiAgICAgICAgUmV0cml2ZXMgYSB2YWx1ZSAoaWYgbmFt
ZSBpcyBpbiB0aGUgZGF0YWJhc2UpIGFuZCBzZXRzIHZhbHVlIA0KICAgICAg
ICB0byBpdCB2aWEgcGFyc2UoKS4NCiAgICAgICAgUGFyYW1ldGVyczoNCiAg
ICAgICAgICAgIHJkYiA6IFJlc291cmNlREIgICAgLSBYIHJlc291cmNlIGRh
dGFiYXNlIG9iamVjdA0KICAgICAgICAiIiINCiAgICAgICAgdHJ5Og0KICAg
ICAgICAgICAgdmFsdWUgPSByZGIuZ2V0KHNlbGYubmFtZSwgc2VsZi5uYW1l
KQ0KICAgICAgICBleGNlcHQ6DQogICAgICAgICAgICByZXR1cm4NCiAgICAg
ICAgaWYgdmFsdWUgIT0gTm9uZTogDQogICAgICAgICAgICB0cnk6DQogICAg
ICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHNlbGYucGFyc2UodmFsdWUpDQog
ICAgICAgICAgICBleGNlcHQ6DQogICAgICAgICAgICAgICAgZXR5cGUsIGV2
YWx1ZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkNCiAgICAgICAgICAg
ICAgICBwcmludCAiUGFyc2UgZXJyb3Igb2NjdXJyZWQgZm9yIHJlc291cmNl
ICVzOiIgJSBzZWxmLm5hbWUNCiAgICAgICAgICAgICAgICBwcmludCBldHlw
ZSwgJzonLCBldmFsdWUNCiAgICBkZWYgX19zdHJfXyhzZWxmKToNCiAgICAg
ICAgcmV0dXJuICclczogJXNcbicgJSAoc2VsZi5uYW1lLCBzZWxmLnZhbHVl
KQ0KY2xhc3MgSW50ZWdlclJlc291cmNlKFJlc291cmNlKToNCiAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgdmFsdWUgPSAwKTogUmVzb3VyY2UuX19p
bml0X18oc2VsZiwgbmFtZSwgdmFsdWUpDQogICAgZGVmIHBhcnNlKHNlbGYs
IHMpOiByZXR1cm4gc3RyaW5nLmF0b2kocykNCg0KY2xhc3MgQ29sb3JSZXNv
dXJjZShSZXNvdXJjZSk6IA0KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1l
LCB2YWx1ZSA9IE5vbmUpOg0KICAgICAgICBSZXNvdXJjZS5fX2luaXRfXyhz
ZWxmLCBuYW1lLCB2YWx1ZSBvciBDb2xvcigwLCAwLCAwKSkNCiAgICBkZWYg
cGFyc2Uoc2VsZiwgcyk6IHJldHVybiBDb2xvci5wYXJzZShzKQ0KDQpjbGFz
cyBUZXh0dXJlUmVzb3VyY2UoUmVzb3VyY2UpOiANCiAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZSwgdmFsdWUgPSBOb25lKToNCiAgICAgICAgUmVzb3Vy
Y2UuX19pbml0X18oc2VsZiwgbmFtZSwgdmFsdWUgb3IgVGV4dHVyZSgpKQ0K
ICAgIGRlZiBwYXJzZShzZWxmLCBzKTogcmV0dXJuIFRleHR1cmUucGFyc2Uo
cykNCg0KY2xhc3MgWGZ0Rm9udFJlc291cmNlKFJlc291cmNlKTogDQogICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlID0gTm9uZSk6DQogICAg
ICAgIFJlc291cmNlLl9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlIG9yIFhm
dEZvbnQoKSkNCiAgICBkZWYgcmVhZChzZWxmLCByZGIpOg0KICAgICAgICB2
Zm9udCA9IHJkYi5nZXQoc2VsZi5uYW1lICsgJy5mb250Jywgc2VsZi5uYW1l
ICsgJy5mb250JykNCiAgICAgICAgdmZsYWdzID0gcmRiLmdldChzZWxmLm5h
bWUgKyAnLmZsYWdzJywgc2VsZi5uYW1lICsgJy5mbGFncycpDQogICAgICAg
IHZzaXplID0gcmRiLmdldChzZWxmLm5hbWUgKyAnLnNpemUnLCBzZWxmLm5h
bWUgKyAnLnNpemUnKQ0KICAgICAgICAjIHZmb250IGFuZCB2ZmxhZ3MgY2Fu
IGJlICcnIGFuZCBzdGlsbCB2YWxpZA0KICAgICAgICBpZiB2Zm9udCAhPSBO
b25lOiBzZWxmLnZhbHVlLmZhbWlseSA9IHZmb250DQogICAgICAgIGlmIHZm
bGFncyAhPSBOb25lOiBzZWxmLnZhbHVlLnBhcnNlRmxhZ3ModmZsYWdzKQ0K
ICAgICAgICBpZiB2c2l6ZTogc2VsZi52YWx1ZS5zaXplID0gc3RyaW5nLmF0
b2kodnNpemUpDQogICAgZGVmIF9fc3RyX18oc2VsZik6DQogICAgICAgIHMg
PSAnJXMuZm9udDogJXNcbicgJSAoc2VsZi5uYW1lLCBzZWxmLnZhbHVlLmZh
bWlseSkNCiAgICAgICAgcyArPSAnJXMuc2l6ZTogJWRcbicgJSAoc2VsZi5u
YW1lLCBzZWxmLnZhbHVlLnNpemUpDQogICAgICAgIHMgKz0gJyVzLmZsYWdz
OiAlc1xuJyAlIChzZWxmLm5hbWUsIHNlbGYudmFsdWUuc3RyRmxhZ3MoKSkN
CiAgICAgICAgcmV0dXJuIHMNCmNsYXNzIEp1c3RpZnlSZXNvdXJjZShSZXNv
dXJjZSk6DQogICAgVkFMVUVTID0gWydsZWZ0JywgJ2NlbnRlcicsICdyaWdo
dCddDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlID0gJ2Nl
bnRlcicpOg0KICAgICAgICBSZXNvdXJjZS5fX2luaXRfXyhzZWxmLCBuYW1l
LCB2YWx1ZSkNCiAgICBkZWYgcGFyc2Uoc2VsZiwgcyk6DQogICAgICAgIHMg
PSBzLmxvd2VyKCkNCiAgICAgICAgaWYgcyBub3QgaW4gSnVzdGlmeVJlc291
cmNlLlZBTFVFUzogcyA9ICdjZW50ZXInDQogICAgICAgIHJldHVybiBzDQpj
bGFzcyBCdWxsZXRSZXNvdXJjZShSZXNvdXJjZSk6DQogICAgVkFMVUVTID0g
WydlbXB0eScsICd0cmlhbmdsZScsICdzcXVhcmUnLCAnZGlhbW9uZCddDQog
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlID0gJ3RyaWFuZ2xl
Jyk6DQogICAgICAgIFJlc291cmNlLl9faW5pdF9fKHNlbGYsIG5hbWUsIHZh
bHVlKQ0KICAgIGRlZiBwYXJzZShzZWxmLCBzKTogDQogICAgICAgIHMgPSBz
Lmxvd2VyKCkNCiAgICAgICAgaWYgcyBub3QgaW4gQnVsbGV0UmVzb3VyY2Uu
VkFMVUVTOiBzID0gJ3RyaWFuZ2xlJw0KICAgICAgICByZXR1cm4gcw0KY2xh
c3MgQnVsbGV0UG9zaXRpb25SZXNvdXJjZShSZXNvdXJjZSk6DQogICAgVkFM
VUVTID0gWydsZWZ0JywgJ3JpZ2h0J10NCiAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgdmFsdWUgPSAnbGVmdCcpOg0KICAgICAgICBSZXNvdXJjZS5f
X2luaXRfXyhzZWxmLCBuYW1lLCB2YWx1ZSkNCiAgICBkZWYgcGFyc2Uoc2Vs
Ziwgcyk6IA0KICAgICAgICBzID0gcy5sb3dlcigpDQogICAgICAgIGlmIHMg
bm90IGluIEJ1bGxldFBvc2l0aW9uUmVzb3VyY2UuVkFMVUVTOiBzID0gJ2xl
ZnQnDQogICAgICAgIHJldHVybiBzDQoNCmNsYXNzIFRoZW1lKG9iamVjdCk6
DQogICAgIiIiDQogICAgQW4gT3BlbmJveCB0aGVtZS4gIENhbiBiZSBkaXJl
Y3RseSBpbmRleGVkIHZpYSAqZnVsbCogcmVzb3VyY2UgbmFtZXMsIA0KICAg
IGUuZy4gdGhlbWVbJ3Rvb2xiYXIueGZ0LmZvbnQnXS4NCg0KICAgIEluc3Rh
bmNlIFZhcmlhYmxlczoNCiAgICAgICAgcmVzb3VyY2VzIDogZGljdChzdHIg
LT4gUmVzb3VyY2UpICAgLSByZXNvdXJjZXMgdGhhdCBtYWtlIHVwIHRoZSB0
aGVtZQ0KICAgICAgICBmaWxlbmFtZSA6IHN0ciAgICAgICAgICAgICAgICAg
ICAgICAtIG5hbWUgb2YgdGhlIHRoZW1lIGZpbGUNCiAgICAiIiINCiAgICBk
ZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUgPSBOb25lKToNCiAgICAgICAg
c2VsZi5yZXNvdXJjZXMgPSB7fQ0KICAgICAgICBzZWxmLmZpbGVuYW1lID0g
Tm9uZQ0KICAgICAgICBzZWxmLmdyb3VwcyA9IFtdDQogICAgICAgIGlmIGZp
bGVuYW1lOiBzZWxmLnJlYWQoZmlsZW5hbWUpDQogICAgICAgIGVsc2U6IHNl
bGYuX19pbml0aWFsaXplQ29tcG9uZW50cygpDQoNCiAgICBkZWYgYWRkR3Jv
dXAoc2VsZiwgZGVzY3JpcHRpb24gPSAnJyk6DQogICAgICAgIHNlbGYuZ3Jv
dXBzLmFwcGVuZCh7ICdkZXNjJzogZGVzY3JpcHRpb24sICdyZXNvdXJjZXMn
OiBbXSB9KQ0KICAgIGRlZiBhZGRUb0dyb3VwKHNlbGYsIHJlc25hbWUpOg0K
ICAgICAgICBzZWxmLmdyb3Vwc1stMV1bJ3Jlc291cmNlcyddLmFwcGVuZChy
ZXNuYW1lKQ0KICAgIGRlZiByZWFkKHNlbGYsIGZpbGVuYW1lKToNCiAgICAg
ICAgIiIiDQogICAgICAgIFJlYWRzIHRoZW1lIHJlc291cmNlcyBmcm9tIGEg
ZmlsZS4gIENvbXBsZXRlbHkgb2JsaXRlcmF0ZXMgYW55IA0KICAgICAgICBw
cmV2aW91cyByZXNvdXJjZSBvYmplY3RzIGluIHJlc291cmNlcy4NCiAgICAg
ICAgIiIiDQogICAgICAgIHNlbGYuX19pbml0aWFsaXplQ29tcG9uZW50cygp
DQogICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQ0KICAgICAgICBy
ZGIgPSBSZXNvdXJjZURCKHNlbGYuZmlsZW5hbWUpDQogICAgICAgIGZvciBr
LHIgaW4gc2VsZi5yZXNvdXJjZXMuaXRlbXMoKTogci5yZWFkKHJkYikNCg0K
ICAgICAgICAjIEluaXRpYWxpemUgbmV3IHJlc291cmNlcyBmcm9tIGFueSBv
bGQgY29tcGF0aWJsZSBvbmVzDQogICAgICAgIGNvbXBhdF9saXN0ID0gW10N
CiAgICAgICAgZm9yIGZvY3VzIGluIFsnZm9jdXMnLCAndW5mb2N1cyddOg0K
ICAgICAgICAgICAgb2xkX2Jhc2UgPSAnd2luZG93LmJ1dHRvbi5wcmVzc2Vk
Jw0KICAgICAgICAgICAgbmV3X2Jhc2UgPSAnJXMuJXMnICUgKG9sZF9iYXNl
LCBmb2N1cykNCiAgICAgICAgICAgIGNvbXBhdF9saXN0LmFwcGVuZCgobmV3
X2Jhc2UsIG9sZF9iYXNlKSkNCiAgICAgICAgICAgIGZvciBzdWZmaXggaW4g
WycuY29sb3InLCAnLmNvbG9yVG8nXToNCiAgICAgICAgICAgICAgICBjb21w
YXRfbGlzdC5hcHBlbmQoKG5ld19iYXNlK3N1ZmZpeCwgb2xkX2Jhc2Urc3Vm
Zml4KSkNCiAgICAgICAgZm9yIHJfbmV3LCByX29sZCBpbiBjb21wYXRfbGlz
dDoNCiAgICAgICAgICAgIGlmIG5vdCByZGIuZ2V0KHJfbmV3LCByX25ldyk6
DQogICAgICAgICAgICAgICAgc2VsZltyX25ld10udmFsdWUgPSBjb3B5LmRl
ZXBjb3B5KHNlbGZbcl9vbGRdLnZhbHVlKQ0KICAgIGRlZiBzYXZlKHNlbGYs
IGZpbGVuYW1lID0gTm9uZSk6DQogICAgICAgICIiIg0KICAgICAgICBTYXZl
cyB0aGVtZSByZXNvdXJjZXMgdG8gYSBmaWxlLg0KDQogICAgICAgIFBhcmFt
ZXRlcnM6DQogICAgICAgICAgICBmaWxlbmFtZSA6IHN0ciAgLSBpZiBnaXZl
biwgc2F2ZXMgdG8gZmlsZW5hbWUgYW5kIHVzZXMgdGhhdCANCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0aGVtZSBmaWxlIGZvciB0
aGlzIG9iamVjdC4NCiAgICAgICAgIiIiDQogICAgICAgIGlmIGZpbGVuYW1l
Og0KICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lDQogICAg
ICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICd3JykNCiAgICAgICAgZm9y
IGdyb3VwIGluIHNlbGYuZ3JvdXBzOg0KICAgICAgICAgICAgaWYgZ3JvdXBb
J2Rlc2MnXTogDQogICAgICAgICAgICAgICAgZi53cml0ZSgnISEgJXNcbicg
JSBncm91cFsnZGVzYyddKQ0KICAgICAgICAgICAgZm9yIHIgaW4gZ3JvdXBb
J3Jlc291cmNlcyddOiANCiAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihz
ZWxmW3JdKSkNCiAgICAgICAgICAgIGYud3JpdGUoJ1xuJykNCiAgICAgICAg
Zi5jbG9zZSgpDQogICAgZGVmIF9faW5pdGlhbGl6ZUNvbXBvbmVudHMoc2Vs
Zik6DQogICAgICAgIHNlbGYuYWRkR3JvdXAoJ1RoZW1lIGluZm9ybWF0aW9u
JykNCiAgICAgICAgZm9yIHMgaW4gbWFwKGxhbWJkYSBzOiAnc3R5bGUuJytz
LCBbJ25hbWUnLCdhdXRob3InLCdkYXRlJywnY3JlZGl0cycsJ2NvbW1lbnRz
J10pOg0KICAgICAgICAgICAgc2VsZi5hZGRSZXNvdXJjZShzKQ0KDQogICAg
ICAgIHNlbGYuYWRkR3JvdXAoJ1Rvb2xiYXIgc2V0dGluZ3MnKQ0KICAgICAg
ICBzZWxmLmFkZFRleHR1cmUoJ3Rvb2xiYXInKQ0KICAgICAgICBzZWxmLmFk
ZEZvbnQoJ3Rvb2xiYXInKQ0KICAgICAgICBzZWxmLmFkZEdyb3VwKCkNCiAg
ICAgICAgZm9yIHMgaW4gbWFwKGxhbWJkYSBzOiAndG9vbGJhci4nK3MsIFsn
YnV0dG9uJywnYnV0dG9uLnByZXNzZWQnXSk6DQogICAgICAgICAgICBzZWxm
LmFkZEJ1dHRvblRleHR1cmUocykNCiAgICAgICAgZm9yIHMgaW4gbWFwKGxh
bWJkYSBzOiAndG9vbGJhci4nK3MsIFsnbGFiZWwnLCdjbG9jaycsJ3dpbmRv
d0xhYmVsJ10pOg0KICAgICAgICAgICAgc2VsZi5hZGRHcm91cCgpDQogICAg
ICAgICAgICBzZWxmLmFkZFRleHRUZXh0dXJlKHMpDQoNCiAgICAgICAgc2Vs
Zi5hZGRHcm91cCgnTWVudSBzZXR0aW5ncycpDQogICAgICAgIHNlbGYuYWRk
R3JvdXAoKQ0KICAgICAgICBzZWxmLmFkZEZvbnRUZXh0VGV4dHVyZSgnbWVu
dS50aXRsZScpDQogICAgICAgIHNlbGYuYWRkR3JvdXAoKQ0KICAgICAgICBz
ZWxmLmFkZEZvbnRUZXh0VGV4dHVyZSgnbWVudS5mcmFtZScpDQogICAgICAg
IHNlbGYuYWRkUmVzb3VyY2UoJ21lbnUuZnJhbWUuZGlzYWJsZUNvbG9yJywg
Q29sb3JSZXNvdXJjZSkNCiAgICAgICAgc2VsZi5hZGRHcm91cCgpDQogICAg
ICAgIHNlbGYuYWRkVGV4dFRleHR1cmUoJ21lbnUuaGlsaXRlJykNCiAgICAg
ICAgc2VsZi5hZGRHcm91cCgpDQogICAgICAgIHNlbGYuYWRkUmVzb3VyY2Uo
J21lbnUuYnVsbGV0JywgQnVsbGV0UmVzb3VyY2UpDQogICAgICAgIHNlbGYu
YWRkUmVzb3VyY2UoJ21lbnUuYnVsbGV0LnBvc2l0aW9uJywgQnVsbGV0UG9z
aXRpb25SZXNvdXJjZSkNCg0KICAgICAgICBzZWxmLmFkZEdyb3VwKCdHZW5l
cmFsIHdpbmRvdyBzZXR0aW5ncycpDQogICAgICAgIHNlbGYuYWRkVGV4dHVy
ZSgnd2luZG93LmJ1dHRvbi5wcmVzc2VkJykNCiAgICAgICAgc2VsZi5hZGRG
b250KCd3aW5kb3cnKQ0KDQogICAgICAgIGZvciBzIGluICdmb2N1cyB1bmZv
Y3VzJy5zcGxpdCgpOg0KICAgICAgICAgICAgc2VsZi5hZGRHcm91cCgnJXNl
ZCB3aW5kb3cgc2V0dGluZ3MnICUgcykNCiAgICAgICAgICAgIHNlbGYuYWRk
UmVzb3VyY2UoJ3dpbmRvdy5mcmFtZS4lc0NvbG9yJyAlIHMsIENvbG9yUmVz
b3VyY2UpDQogICAgICAgICAgICBmb3IgdCBpbiBtYXAobGFtYmRhIHg6ICd3
aW5kb3cuJXMuJXMnICUgKHgsIHMpLCBbJ3RpdGxlJywgJ2hhbmRsZScsICdn
cmlwJ10pOg0KICAgICAgICAgICAgICAgIHNlbGYuYWRkR3JvdXAoKQ0KICAg
ICAgICAgICAgICAgIHNlbGYuYWRkVGV4dHVyZSh0KQ0KICAgICAgICAgICAg
c2VsZi5hZGRHcm91cCgpDQogICAgICAgICAgICBzZWxmLmFkZFRleHRUZXh0
dXJlKCd3aW5kb3cubGFiZWwuJXMnICUgcykNCiAgICAgICAgICAgIHNlbGYu
YWRkR3JvdXAoKQ0KICAgICAgICAgICAgc2VsZi5hZGRCdXR0b25UZXh0dXJl
KCd3aW5kb3cuYnV0dG9uLiVzJyAlIHMpDQogICAgICAgICAgICBzZWxmLmFk
ZEdyb3VwKCkNCiAgICAgICAgICAgIHNlbGYuYWRkVGV4dHVyZSgnd2luZG93
LmJ1dHRvbi5wcmVzc2VkLiVzJyAlIHMpDQoNCiAgICAgICAgc2VsZi5hZGRH
cm91cCgnR2xvYmFsIHdpZHRoIHNldHRpbmdzJykNCiAgICAgICAgZm9yIHMg
aW4gJ2JvcmRlcldpZHRoIGJldmVsV2lkdGggaGFuZGxlV2lkdGggZnJhbWVX
aWR0aCcuc3BsaXQoKToNCiAgICAgICAgICAgIHNlbGYuYWRkUmVzb3VyY2VX
aXRoRGVmYXVsdChzLCAxLCBJbnRlZ2VyUmVzb3VyY2UpDQoNCiAgICAgICAg
c2VsZi5hZGRHcm91cCgnTWlzY2VsbGFuZW91cyBzZXR0aW5ncycpDQogICAg
ICAgIHNlbGYuYWRkUmVzb3VyY2UoJ2JvcmRlckNvbG9yJywgQ29sb3JSZXNv
dXJjZSkNCiAgICAgICAgc2VsZi5hZGRSZXNvdXJjZSgncm9vdENvbW1hbmQn
KQ0KDQogICAgICAgIHNlbGYuYWRkR3JvdXAoJ0JpdG1hcCBidXR0b24gbWFz
a3MnKQ0KICAgICAgICBzZWxmLmFkZEdyb3VwKCkNCiAgICAgICAgZm9yIHMg
aW4gJ2Nsb3NlIG1heCBzdGljayBpY29uJy5zcGxpdCgpOg0KICAgICAgICAg
ICAgc2VsZi5hZGRSZXNvdXJjZSgnd2luZG93LmJ1dHRvbi4lcy5tYXNrJyAl
IHMpDQogICAgICAgIHNlbGYuYWRkR3JvdXAoKQ0KICAgICAgICBmb3IgcyBp
biAnYXJyb3cgc2VsZWN0ZWQnLnNwbGl0KCk6DQogICAgICAgICAgICBzZWxm
LmFkZFJlc291cmNlKCdtZW51LiVzLm1hc2snICUgcykNCiAgICAgICAgc2Vs
Zi5hZGRHcm91cCgpDQogICAgICAgIGZvciBzIGluICdsZWZ0IHJpZ2h0Jy5z
cGxpdCgpOg0KICAgICAgICAgICAgc2VsZi5hZGRSZXNvdXJjZSgndG9vbGJh
ci5idXR0b24uJXMubWFzaycgJSBzKQ0KICAgICMgTWFwcGluZyBtZXRob2Rz
IA0KICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOg0KICAgICAgICBy
ZXR1cm4gc2VsZi5yZXNvdXJjZXNba2V5XQ0KICAgIGRlZiBfX3NldGl0ZW1f
XyhzZWxmLCBrZXksIHZhbCk6DQogICAgICAgIHNlbGYucmVzb3VyY2VzW2tl
eV0gPSB2YWwNCiAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToNCiAg
ICAgICAgZGVsIHNlbGYucmVzb3VyY2VzW2tleV0NCiAgICBkZWYgX19jb250
YWluc19fKHNlbGYsIGtleSk6DQogICAgICAgIHJldHVybiBrZXkgaW4gc2Vs
Zi5yZXNvdXJjZXMNCiAgICAjIE1ldGhvZHMgdG8gd29yayB3aXRoIGFkZGlu
ZyByZXNvdXJjZXMgaW4gZ3JvdXBzLiANCiAgICBkZWYgYWRkUmVzb3VyY2Uo
c2VsZiwgbmFtZSwgcmNsYXNzID0gUmVzb3VyY2UpOg0KICAgICAgICAiIiIN
CiAgICAgICAgQWRkcyB0byByZXNvdXJjZXMgYSBzaW5nbGUgcmVzb3VyY2Ug
b2JqZWN0Lg0KICAgICAgICBQYXJhbWV0ZXJzOg0KICAgICAgICAgICAgbmFt
ZSA6IHN0ciAgICAgICAgICAtIG5hbWUgb2YgdGhlIHJlc291cmNlDQogICAg
ICAgICAgICByY2xhc3MgOiBjbGFzcyAgICAgIC0gKFJlc291cmNlLWRlcml2
ZWQpIGNsYXNzIG9mIHRoZSByZXNvdXJjZQ0KICAgICAgICAiIiINCiAgICAg
ICAgc2VsZltuYW1lXSA9IHJjbGFzcyhuYW1lKQ0KICAgICAgICBzZWxmLmFk
ZFRvR3JvdXAobmFtZSkNCiAgICBkZWYgYWRkUmVzb3VyY2VXaXRoRGVmYXVs
dChzZWxmLCBuYW1lLCB2YWx1ZSwgcmNsYXNzID0gUmVzb3VyY2UpOg0KICAg
ICAgICAiIiINCiAgICAgICAgTGlrZSBhZGRSZXNvdXJjZSgpLCBidXQgd2l0
aCBhIGRlZmF1bHQgdmFsdWUuDQogICAgICAgICIiIg0KICAgICAgICBzZWxm
W25hbWVdID0gcmNsYXNzKG5hbWUsIHZhbHVlKQ0KICAgICAgICBzZWxmLmFk
ZFRvR3JvdXAobmFtZSkNCiAgICBkZWYgYWRkVGV4dHVyZShzZWxmLCBuYW1l
KToNCiAgICAgICAgIiIiDQogICAgICAgIEFkZHMgYSB0ZXh0dXJlIGFuZCB0
aHJlZSBjb2xvciByZXNvdXJjZXMsIHVzaW5nIGJhc2VuYW1lIG5hbWUuDQog
ICAgICAgICIiIg0KICAgICAgICBzZWxmLmFkZFJlc291cmNlKG5hbWUsIFRl
eHR1cmVSZXNvdXJjZSkNCiAgICAgICAgc2VsZi5hZGRSZXNvdXJjZSgnJXMu
Y29sb3InICUgbmFtZSwgQ29sb3JSZXNvdXJjZSkNCiAgICAgICAgc2VsZi5h
ZGRSZXNvdXJjZSgnJXMuY29sb3JUbycgJSBuYW1lLCBDb2xvclJlc291cmNl
KQ0KICAgICAgICBzZWxmLmFkZFJlc291cmNlKCclcy5ib3JkZXJDb2xvcicg
JSBuYW1lLCBDb2xvclJlc291cmNlKQ0KICAgIGRlZiBhZGRCdXR0b25UZXh0
dXJlKHNlbGYsIG5hbWUpOg0KICAgICAgICAiIiINCiAgICAgICAgQWRkcyBh
bGwgdGhpbmdzIGEgIlRleHR1cmUiIG5lZWRzLCBwbHVzIGEgcGljQ29sb3Iu
DQogICAgICAgICIiIg0KICAgICAgICBzZWxmLmFkZFRleHR1cmUobmFtZSkN
CiAgICAgICAgc2VsZi5hZGRSZXNvdXJjZSgnJXMucGljQ29sb3InICUgbmFt
ZSwgQ29sb3JSZXNvdXJjZSkNCiAgICBkZWYgYWRkVGV4dFRleHR1cmUoc2Vs
ZiwgbmFtZSk6DQogICAgICAgICIiIg0KICAgICAgICBBZGRzIGFsbCB0aGlu
Z3MgYSAiVGV4dHVyZSIgbmVlZHMsIHBsdXMgYSB0ZXh0Q29sb3IuDQogICAg
ICAgICIiIg0KICAgICAgICBzZWxmLmFkZFRleHR1cmUobmFtZSkNCiAgICAg
ICAgc2VsZi5hZGRSZXNvdXJjZSgnJXMudGV4dENvbG9yJyAlIG5hbWUsIENv
bG9yUmVzb3VyY2UpDQogICAgZGVmIGFkZEZvbnQoc2VsZiwgbmFtZSk6DQog
ICAgICAgICIiIg0KICAgICAgICBBZGRzIGZvbnQtc3BlY2lmaWMgcmVzb3Vy
Y2VzICh3aGljaCBpbmNsdWRlIGp1c3RpZnkpLg0KICAgICAgICAiIiINCiAg
ICAgICAgc2VsZi5hZGRSZXNvdXJjZSgnJXMuanVzdGlmeScgJSBuYW1lLCBK
dXN0aWZ5UmVzb3VyY2UpDQogICAgICAgIHNlbGYuYWRkUmVzb3VyY2VXaXRo
RGVmYXVsdCgnJXMuZm9udCcgJSBuYW1lLCAnZml4ZWQnKQ0KICAgICAgICBz
ZWxmLmFkZFJlc291cmNlKCclcy54ZnQnICUgbmFtZSwgWGZ0Rm9udFJlc291
cmNlKQ0KICAgICAgICBzZWxmLmFkZFJlc291cmNlV2l0aERlZmF1bHQoJyVz
LnhmdC5zaGFkb3cub2Zmc2V0JyAlIG5hbWUsIDEsIEludGVnZXJSZXNvdXJj
ZSkNCiAgICAgICAgc2VsZi5hZGRSZXNvdXJjZVdpdGhEZWZhdWx0KCclcy54
ZnQuc2hhZG93LnRpbnQnICUgbmFtZSwgMjUsIEludGVnZXJSZXNvdXJjZSkN
CiAgICBkZWYgYWRkRm9udFRleHRUZXh0dXJlKHNlbGYsIG5hbWUpOg0KICAg
ICAgICAiIiINCiAgICAgICAgQ29tYmluZXMgZm9udC1zcGVjaWZpYyByZXNv
dXJjZXMgd2l0aCBhIFRleHRUZXh0dXJlLg0KICAgICAgICAiIiINCiAgICAg
ICAgc2VsZi5hZGRUZXh0VGV4dHVyZShuYW1lKQ0KICAgICAgICBzZWxmLmFk
ZEZvbnQobmFtZSkNCiAgICANCiMgdmltOiBzZXQgZmRtPWV4cHI6IA0K

--8323328-1655603711-1142598252=:7597
Content-Type: TEXT/x-python; charset=US-ASCII; name=StyleBox.py
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.64.0603171324121.7597 at localhost>
Content-Description: 
Content-Disposition: attachment; filename=StyleBox.py

IyBTdHlsZUJveDogYSBzdHlsZS90aGVtZSBlZGl0b3IgZm9yIE9wZW5ib3gg
Mi4NCiMgQ29weXJpZ2h0IChDKSAyMDAzICBBdmEgQXJhY2huZSBKYXJ2aXMg
PGFqYXJAa2F0YW5hbHlueC5keW5kbnMub3JnPg0KIw0KIyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQ0KIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KIyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvcg0KIyAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLg0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YNCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIw0KIyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQoNCmZyb20gWGxpYiBpbXBvcnQg
WGF0b20NCmZyb20gWGxpYi5kaXNwbGF5IGltcG9ydCBEaXNwbGF5DQpmcm9t
IFhsaWIucmRiIGltcG9ydCBSZXNvdXJjZURCDQppbXBvcnQgZ3RrLCBnb2Jq
ZWN0LCBwYW5nbw0KDQppbXBvcnQgc3lzLCBvcywgb3MucGF0aCwgc2lnbmFs
DQpmcm9tIFRoZW1lIGltcG9ydCAqDQoNCmltcG9ydCBzdHJpbmcNCg0KIyBD
b252ZW5pZW5jZSBHVUkgd2lkZ2V0IGNsYXNzZXMuIA0KY2xhc3MgU3R5bGVP
cHRpb25NZW51KGd0ay5PcHRpb25NZW51KToNCiAgICAiIiINCiAgICBBbiBP
cHRpb25NZW51IHdpdGggZGVmYXVsdCBjYWxsYmFja3MuDQoNCiAgICBJbnN0
YW5jZSBWYXJpYWJsZXM6DQogICAgICAgIGl0ZW1zIDogbGlzdCAqICAgICAg
QW55IHB5dGhvbiBvYmplY3QgdGhhdCBjYW4gYmUgc3RyJ2QuDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGluZyBfX2VxX18gaXMgcHJv
YmFibHkgbm90IGEgYmFkIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkZWEgZWl0aGVyLg0KICAgICAgICBjYWxsYmFjayAgICAgICAgICAgIEEg
ZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCBvZiB0aGUgDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBpdGVtIHR5cGUuICBOZWVk
ZWQgc28gdGhlIGNhbGxiYWNrIA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZSBkb2Vzbid0IGRpc2FwcGVhci4NCiAgICAiIiINCiAg
ICBkZWYgX19pbml0X18oc2VsZiwgaXRlbXMsIHNlbGVjdGVkX2l0ZW0gPSBO
b25lLCBjYWxsYmFjayA9IE5vbmUsIHJ3aWRnZXQgPSBOb25lKToNCiAgICAg
ICAgIiIiDQogICAgICAgIFBhcmFtZXRlcnM6DQogICAgICAgICAgICBpdGVt
cyA6IGxpc3QgKiAgICAgICAgICAgLSBTZWUgaW5zdGFuY2UgdmFyaWFibGVz
OiBpdGVtcy4NCiAgICAgICAgICAgIHNlbGVjdGVkX2l0ZW0gOiAqICAgICAg
ICAtIEFuIGl0ZW0gb2YgdGhlIHNhbWUgdHlwZSBhcyB0aG9zZSBpbiBpdGVt
cywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRpY2F0aW5nIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsbHkgc2VsZWN0ZWQN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRo
ZSBvcHRpb24gbWVudS4NCiAgICAgICAgICAgIGNhbGxiYWNrICAgICAgICAg
ICAgICAgICAgIFNlZSBpbnN0YW5jZSB2YXJpYWJsZXM6IGNhbGxiYWNrLg0K
ICAgICAgICAgICAgcndpZGdldCA6IFJlc291cmNlV2lkZ2V0IC0gc28gdGhh
dCB3ZSBjYW4gYWRkIHRoZSBjb25uZWN0aW9uIElEIG9mIHRoZSANCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLg0K
ICAgICAgICAiIiINCiAgICAgICAgZ3RrLk9wdGlvbk1lbnUuX19pbml0X18o
c2VsZikNCiAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zDQoNCiAgICAgICAg
bWVudSA9IGd0ay5NZW51KCkNCiAgICAgICAgZm9yIGkgaW4gaXRlbXM6IG1l
bnUuYXBwZW5kKGd0ay5NZW51SXRlbShzdHIoaSkpKQ0KICAgICAgICBzZWxm
LnNldF9tZW51KG1lbnUpDQogICAgICAgIGlmIHNlbGVjdGVkX2l0ZW06IHNl
bGYuc2V0X2hpc3RvcnkoaXRlbXMuaW5kZXgoc2VsZWN0ZWRfaXRlbSkpDQog
ICAgICAgIGlmIGNhbGxiYWNrOiANCiAgICAgICAgICAgIHNlbGYuY2FsbGJh
Y2sgPSBjYWxsYmFjaw0KICAgICAgICAgICAgaWYgcndpZGdldDoNCiAgICAg
ICAgICAgICAgICByd2lkZ2V0LmNvbm5lY3RXaWRnZXQoc2VsZiwgImNoYW5n
ZWQiLCBzZWxmLmRvQ2FsbGJhY2spDQogICAgICAgICAgICBlbHNlOg0KICAg
ICAgICAgICAgICAgIHNlbGYuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuZG9D
YWxsYmFjaykNCiAgICBkZWYgZG9DYWxsYmFjayhzZWxmLCB3KToNCiAgICAg
ICAgc2VsZi5jYWxsYmFjayhzZWxmLml0ZW1zW3NlbGYuZ2V0X2hpc3Rvcnko
KV0pDQogICAgZGVmIHNob3dJdGVtKHNlbGYsIGl0ZW0pOg0KICAgICAgICBz
ZWxmLnNldF9oaXN0b3J5KHNlbGYuaXRlbXMuaW5kZXgoaXRlbSkpDQpjbGFz
cyBTdHlsZVRhYmxlKGd0ay5UYWJsZSk6DQogICAgIiIiDQogICAgQSBUYWJs
ZSBsYXlvdXQgd2lkZ2V0IHRoYXQgdGFrZXMgY2FyZSBvZiBrZWVwaW5nIHRy
YWNrIG9mIGl0cyANCiAgICBvd24gY3VycmVudCByb3cvY29sdW1uIHRvIHNp
bXBsaWZ5IGNoaWxkIHBhY2tpbmcuDQoNCiAgICBJbnN0YW5jZSBWYXJpYWJs
ZXM6DQogICAgICAgIGN1cnJlbnRfcm93IDogaW50ICAgICAgIC0gY3VycmVu
dCByb3cgZm9yIG5leHQgd2lkZ2V0IHBsYWNlbWVudA0KICAgICAgICBjdXJy
ZW50X2NvbCA6IGludCAgICAgICAtIGN1cnJlbnQgY29sdW1uIGZvciBuZXh0
IHdpZGdldCBwbGFjZW1lbnQNCiAgICAgICAgbWF4X2NvbHMgOiBpbnQgICAg
ICAgICAgLSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zDQogICAgIiIiDQog
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heGNvbHMgPSA0KToNCiAgICAgICAg
Z3RrLlRhYmxlLl9faW5pdF9fKHNlbGYpDQogICAgICAgIHNlbGYuc2V0X2Jv
cmRlcl93aWR0aCg1KQ0KICAgICAgICBzZWxmLnNldF9yb3dfc3BhY2luZ3Mo
NSkNCiAgICAgICAgc2VsZi5zZXRfY29sX3NwYWNpbmdzKDUpDQogICAgICAg
IHNlbGYuc2V0X2hvbW9nZW5lb3VzKDEpDQoNCiAgICAgICAgc2VsZi5jdXJy
ZW50X3JvdyA9IDANCiAgICAgICAgc2VsZi5jdXJyZW50X2NvbCA9IDANCiAg
ICAgICAgc2VsZi5tYXhfY29scyA9IG1heGNvbHMNCiAgICBkZWYgbmV4dFJv
dyhzZWxmLCBhZHZhbmNlPTEpOg0KICAgICAgICAiIiJBZHZhbmNlIHRvIHRo
ZSBuZXh0IHJvdyBldmVuIGlmIHRoZSBjdXJyZW50IHJvdyBpc24ndCBmdWxs
LiIiIg0KICAgICAgICBzZWxmLmN1cnJlbnRfY29sID0gMA0KICAgICAgICBz
ZWxmLmN1cnJlbnRfcm93ICs9IGFkdmFuY2UNCiAgICBkZWYgcGFjayhzZWxm
LCB3aWRnZXQsIGNvbHNwYW49MSwgcm93c3Bhbj0xKToNCiAgICAgICAgIiIi
DQogICAgICAgIFBhY2tzIHdpZGdldCBpbiB0aGUgY3VycmVudCByb3cgYW5k
IGN1cnJlbnQgY29sdW1uLg0KICAgICAgICBQYXJhbWV0ZXJzOg0KICAgICAg
ICAgICAgd2lkZ2V0IDogZ3RrLldpZGdldCAtIHdpZGdldCB0byBwYWNrDQog
ICAgICAgICAgICBjb2xzcGFuIDogaW50ICAgICAgIC0gbnVtYmVyIG9mIGNv
bHVtbnMgd2lkZ2V0IHNob3VsZCBzcGFuDQogICAgICAgICAgICByb3dzcGFu
IDogaW50ICAgICAgIC0gbnVtYmVyIG9mIHJvd3Mgd2lkZ2V0IHNob3VsZCBz
cGFuDQogICAgICAgICIiIg0KICAgICAgICBvbGRjb2wgPSBzZWxmLmN1cnJl
bnRfY29sDQogICAgICAgIHNlbGYuY3VycmVudF9jb2wgKz0gY29sc3Bhbg0K
ICAgICAgICBzZWxmLmF0dGFjaCh3aWRnZXQsIG9sZGNvbCwgc2VsZi5jdXJy
ZW50X2NvbCwgDQogICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9y
b3csIHNlbGYuY3VycmVudF9yb3cgKyByb3dzcGFuLCB5b3B0aW9ucyA9IGd0
ay5GSUxMKQ0KICAgICAgICBpZiBzZWxmLmN1cnJlbnRfY29sID49IHNlbGYu
bWF4X2NvbHM6IHNlbGYubmV4dFJvdyhyb3dzcGFuKQ0KICAgIGRlZiBwYWNr
TGFiZWxlZChzZWxmLCAqbHdpZGdldHMpOg0KICAgICAgICAiIiINCiAgICAg
ICAgUGFja3MgYSBsaXN0IG9mIExhYmVsZWRSZXNvdXJjZVdpZGdldHMuICBJ
ZiB0aGUgbGFzdCBpdGVtIGluIA0KICAgICAgICB0aGUgYXJndW1lbnQgbGlz
dCBpcyBhbiBpbnRlZ2VyLCBpdCBpcyB0YWtlbiBhcyB0aGUgY29sdW1uIHNw
YW4gDQogICAgICAgIG9mIHRoZSBtYWluIHdpZGdldCBvZiBlYWNoIExhYmVs
ZWRSZXNvdXJjZVdpZGdldC4NCiAgICAgICAgIiIiDQogICAgICAgIHdjb2xz
cGFuID0gMQ0KICAgICAgICBpZiB0eXBlKGx3aWRnZXRzWy0xXSkgPT0gaW50
OiANCiAgICAgICAgICAgIHdjb2xzcGFuID0gbHdpZGdldHNbLTFdDQogICAg
ICAgICAgICBsd2lkZ2V0cyA9IGx3aWRnZXRzWzotMV0NCiAgICAgICAgZm9y
IHcgaW4gbHdpZGdldHM6IHNlbGYucGFjayh3LmxhYmVsKTsgc2VsZi5wYWNr
KHcud2lkZ2V0LCB3Y29sc3BhbikNCg0KIyBDbGFzc2VzIGZvciB3b3JraW5n
IHdpdGggYW4gdW5kby9yZWRvIHN0YWNrLg0KY2xhc3MgVW5kb1N0YWNrOg0K
ICAgIGNsYXNzIEl0ZW06DQogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
eXBlLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk6DQogICAgICAgICAgICBzZWxm
LnR5cGUgPSB0eXBlDQogICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IG9s
ZF92YWx1ZQ0KICAgICAgICAgICAgc2VsZi5uZXdfdmFsdWUgPSBuZXdfdmFs
dWUNCiAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOg0KICAgICAgICAgICAg
cmV0dXJuICc8JXM6ICVzIC0+ICVzPicgJSAoc2VsZi50eXBlLHNlbGYub2xk
X3ZhbHVlLHNlbGYubmV3X3ZhbHVlKQ0KICAgIGRlZiBfX2luaXRfXyhzZWxm
KToNCiAgICAgICAgc2VsZi51bmRvX3N0YWNrID0gW10NCiAgICAgICAgc2Vs
Zi5yZWRvX3N0YWNrID0gW10NCiAgICBkZWYgYWRkKHNlbGYsIHR5cGUsIG9s
ZF92YWx1ZSwgbmV3X3ZhbHVlKToNCiAgICAgICAgc2VsZi51bmRvX3N0YWNr
LmFwcGVuZChVbmRvU3RhY2suSXRlbSh0eXBlLCBvbGRfdmFsdWUsIG5ld192
YWx1ZSkpDQogICAgICAgIGlmIHNlbGYucmVkb19zdGFjazogc2VsZi5yZWRv
X3N0YWNrID0gW10NCiAgICBkZWYgdW5kbyhzZWxmKToNCiAgICAgICAgaWYg
c2VsZi51bmRvX3N0YWNrOg0KICAgICAgICAgICAgaXRlbSA9IHNlbGYudW5k
b19zdGFjay5wb3AoKQ0KICAgICAgICAgICAgc2VsZi5yZWRvX3N0YWNrLmFw
cGVuZChpdGVtKQ0KICAgICAgICAgICAgcmV0dXJuIGl0ZW0NCiAgICBkZWYg
cmVkbyhzZWxmKToNCiAgICAgICAgaWYgc2VsZi5yZWRvX3N0YWNrOg0KICAg
ICAgICAgICAgaXRlbSA9IHNlbGYucmVkb19zdGFjay5wb3AoKQ0KICAgICAg
ICAgICAgc2VsZi51bmRvX3N0YWNrLmFwcGVuZChpdGVtKQ0KICAgICAgICAg
ICAgcmV0dXJuIGl0ZW0NCiAgICBkZWYgX19yZXByX18oc2VsZik6DQogICAg
ICAgIHMgPSAnPCcgKyBgc2VsZi51bmRvX3N0YWNrYCArICcgJw0KICAgICAg
ICBzZWxmLnJlZG9fc3RhY2sucmV2ZXJzZSgpDQogICAgICAgIHMgKz0gYHNl
bGYucmVkb19zdGFja2AgKyAnPicNCiAgICAgICAgc2VsZi5yZWRvX3N0YWNr
LnJldmVyc2UoKQ0KICAgICAgICByZXR1cm4gcw0KDQojIENsYXNzZXMgZm9y
IG11Y2tpbmcgYXJvdW5kIHdpdGggUmVzb3VyY2VzLiANCmNsYXNzIFJlc291
cmNlV2lkZ2V0Og0KICAgICIiIg0KICAgIEFuIGFic3RyYWN0IGNsYXNzIHRo
YXQgcHJvdmlkZXMgYSBmZXcgYmFzaWMgbWV0aG9kcyBmb3Igd2lkZ2V0cyAN
CiAgICB0aGF0IGRlYWwgd2l0aCB0aGVtZSByZXNvdXJjZXMuDQoNCiAgICBJ
bnN0YW5jZSBWYXJpYWJsZXM6DQogICAgICAgIHJlc25hbWUgIDogc3RyICAg
ICAgLSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0aGlzIHdpZGdldCBoYW5kbGVz
DQogICAgICAgIHN0eWxlYm94IDogU3R5bGVCb3ggLSB0aGUgc3R5bGVib3gg
bWFpbiB3aW5kb3cgKGZvciBjYWxsaW5nIA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlhbG9ncyBhbmQgYWNjZXNzaW5nIGdsb2JhbCB0aGVt
ZSB2YXJpYWJsZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
ZCBtZXRob2RzKS4NCiAgICAgICAgY2FsbGJhY2tzIDogbGlzdCAgICAtIGxp
c3Qgb2YgcGFpcnM6ICh3aWRnZXQsIGNhbGxiYWNraWQpLCBmb3IgYmxvY2tp
bmcgc2lnbmFscw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hl
biB3aWRnZXRzIGFyZSByZXNldC4NCiAgICAiIiINCiAgICBkZWYgX19pbml0
X18oc2VsZiwgcmVzbmFtZSwgc3R5bGVib3gpOg0KICAgICAgICBzZWxmLnJl
c25hbWUgPSByZXNuYW1lDQogICAgICAgIHNlbGYuc3R5bGVib3ggPSBzdHls
ZWJveA0KICAgICAgICBzZWxmLmNhbGxiYWNrcyA9IFtdDQogICAgICAgIHNl
bGYuc3R5bGVib3gud2lkZ2V0cy5hcHBlbmQoc2VsZikNCiAgICBkZWYgZ2V0
VmFsdWUoc2VsZik6DQogICAgICAgICIiIg0KICAgICAgICBSZXR1cm5zIHRo
ZSB2YWx1ZSBzaXR0aW5nIGJlaGluZCB0aGUgcmVzb3VyY2UuICBUaGlzIHZh
bHVlIGNhbiANCiAgICAgICAgaGF2ZSBpbmRpdmlkdWFsIGZpZWxkcyBtb2Rp
ZmllZCBhbmQgdGhlIGxpa2UuDQogICAgICAgICIiIg0KICAgICAgICByZXR1
cm4gc2VsZi5zdHlsZWJveC50aGVtZVtzZWxmLnJlc25hbWVdLnZhbHVlDQog
ICAgZGVmIHNldFZhbHVlKHNlbGYsIHZhbCk6DQogICAgICAgICIiIg0KICAg
ICAgICBTZXRzIHRoZSBlbnRpcmUgdmFsdWUgc2l0dGluZyBiZWhpbmQgdGhl
IHJlc291cmNlIHRvIGEgbmV3IHZhbHVlLg0KICAgICAgICAiIiINCiAgICAg
ICAgaWYgc2VsZi5zdHlsZWJveC50aGVtZVtzZWxmLnJlc25hbWVdLnZhbHVl
ICE9IHZhbDoNCiAgICAgICAgICAgIHNlbGYuc3R5bGVib3gudGhlbWVbc2Vs
Zi5yZXNuYW1lXS52YWx1ZSA9IHZhbA0KICAgICAgICAgICAgc2VsZi5zdHls
ZWJveC5zZXRDaGFuZ2VkKCkNCiAgICBkZWYgY29ubmVjdFdpZGdldChzZWxm
LCB3aWRnZXQsIHNpZ25hbCwgY2FsbGJhY2spOg0KICAgICAgICBzZWxmLmNh
bGxiYWNrcy5hcHBlbmQoKHdpZGdldCwgd2lkZ2V0LmNvbm5lY3Qoc2lnbmFs
LCBjYWxsYmFjaykpKQ0KICAgIGRlZiByZXNldChzZWxmKToNCiAgICAgICAg
IiIiUmVzZXRzIHRvIHNob3cgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCB0
aGVtZSBpbiBzdHlsZWJveC4iIiINCiAgICAgICAgZm9yIHcsIGNpZCBpbiBz
ZWxmLmNhbGxiYWNrczogdy5oYW5kbGVyX2Jsb2NrKGNpZCkNCiAgICAgICAg
c2VsZi5yZXNldENvbXBvbmVudHMoKQ0KICAgICAgICBmb3IgdywgY2lkIGlu
IHNlbGYuY2FsbGJhY2tzOiB3LmhhbmRsZXJfdW5ibG9jayhjaWQpDQogICAg
ZGVmIHJlc2V0Q29tcG9uZW50cyhzZWxmKToNCiAgICAgICAgIiIiDQogICAg
ICAgIFVzZWQgYnkgcmVzZXQoKSB0byByZXNldCB0aGUgYXBwcm9wcmlhdGUg
d2lkZ2V0cy4gIERvbid0IHdvcnJ5IA0KICAgICAgICBhYm91dCBibG9ja2lu
ZyBzaWduYWxzIGhlcmUsIHdoaWNoIGlzIGRvbmUgYnkgcmVzZXQoKS4gIEFs
c28sIGRvbid0IA0KICAgICAgICB3b3JyeSBhYm91dCBhbnkgUmVzb3VyY2VX
aWRnZXQgY2hpbGRyZW4geW91IG1pZ2h0IGhhdmUsIGJlY2F1c2UgDQogICAg
ICAgIHRoZSByZXNldCgpIGNhbGwgd2lsbCBiZSBtYWRlIG9uICphbGwqIFJl
c291cmNlV2lkZ2V0cyBvZiBhIFN0eWxlQm94IA0KICAgICAgICB3aW5kb3cu
DQogICAgICAgICIiIg0KICAgICAgICBwYXNzDQogICAgZGVmIHVuZG8oc2Vs
ZiwgaXRlbSk6DQogICAgICAgICIiIlByb2Nlc3NlcyBhbiB1bmRvIHJlcXVl
c3QsIHdoZXJlIGl0ZW0gaXMgYW4gVW5kb0l0ZW0uIiIiDQogICAgICAgIHNl
bGYucHJvY2Vzc1VuZG8oaXRlbS50eXBlLCBpdGVtLm9sZF92YWx1ZSkNCiAg
ICAgICAgc2VsZi5yZXNldCgpDQogICAgZGVmIHJlZG8oc2VsZiwgaXRlbSk6
DQogICAgICAgICIiIlByb2Nlc3NlcyBhbiByZWRvIHJlcXVlc3QsIHdoZXJl
IGl0ZW0gaXMgYW4gVW5kb0l0ZW0uIiIiDQogICAgICAgIHNlbGYucHJvY2Vz
c1VuZG8oaXRlbS50eXBlLCBpdGVtLm5ld192YWx1ZSkNCiAgICAgICAgc2Vs
Zi5yZXNldCgpDQogICAgZGVmIHByb2Nlc3NVbmRvKHNlbGYsIHR5cGUsIHZh
bHVlKToNCiAgICAgICAgIiIiDQogICAgICAgIEdpdmVuIGFuIHVuZG8gdHlw
ZSBhbmQgYSB2YWx1ZSwgc2V0IHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSANCiAg
ICAgICAgb24gdGhlIHJlc291cmNlIHRoaXMgd2lkZ2V0IG1vZGVscy4gIFRo
aXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gDQogICAgICAgIGJ5IGNoaWxkIGNs
YXNzZXMuDQogICAgICAgICIiIg0KICAgICAgICBzZWxmLnNldFZhbHVlKHZh
bHVlKQ0KY2xhc3MgTGFiZWxlZFJlc291cmNlV2lkZ2V0KFJlc291cmNlV2lk
Z2V0KToNCiAgICAiIiINCiAgICBBIFJlc291cmNlIHdpZGdldCB3aXRoIGEg
c2luZ2xlIGxhYmVsIGFuZCBhIHdpZGdldC4NCg0KICAgIEluc3RhbmNlIFZh
cmlhYmxlczoNCiAgICAgICAgbGFiZWwgOiBndGsuTGFiZWwgICAgICAgLSBs
YWJlbCBvZiB0aGlzIHdpZGdldA0KICAgICAgICB3aWRnZXQgOiBndGsuV2lk
Z2V0ICAgICAtIGFueSBraW5kIG9mIHdpZGdldA0KICAgICIiIg0KICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByZXNuYW1lLCBzdHlsZWJveCwgbGFiZWwgPSBO
b25lKToNCiAgICAgICAgUmVzb3VyY2VXaWRnZXQuX19pbml0X18oc2VsZiwg
cmVzbmFtZSwgc3R5bGVib3gpDQogICAgICAgIGlmIG5vdCBsYWJlbDoNCiAg
ICAgICAgICAgIGkgPSByZXNuYW1lLnJmaW5kKCcuJykNCiAgICAgICAgICAg
IGlmIGkgPCAwOiBsYWJlbCA9IHJlc25hbWUNCiAgICAgICAgICAgIGVsc2U6
IGxhYmVsID0gcmVzbmFtZVtpKzE6XQ0KICAgICAgICBzZWxmLmxhYmVsID0g
Z3RrLkxhYmVsKGxhYmVsKQ0KICAgICAgICBzZWxmLndpZGdldCA9IE5vbmUN
CiAgICBkZWYgZGVmYXVsdFBhY2soc2VsZik6DQogICAgICAgICIiIg0KICAg
ICAgICBSZXR1cm5zIGEgZ3RrLldpZGdldCB3aXRoIGEgZGVmYXVsdCBwYWNr
aW5nIG9mIGxhYmVsIGFuZCB3aWRnZXQuDQogICAgICAgICIiIg0KICAgICAg
ICBoYm94ID0gZ3RrLkhCb3goKQ0KICAgICAgICBoYm94LnBhY2tfc3RhcnQo
c2VsZi5sYWJlbCwgMCwgMCwgNSkNCiAgICAgICAgaGJveC5wYWNrX3N0YXJ0
KHNlbGYud2lkZ2V0LCAwLCAwLCA1KQ0KICAgICAgICByZXR1cm4gaGJveA0K
ICAgIGRlZiBzZXRTZW5zaXRpdmUoc2VsZiwgc2Vuc2l0aXZlKToNCiAgICAg
ICAgc2VsZi5sYWJlbC5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkNCiAgICAg
ICAgc2VsZi53aWRnZXQuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpDQoNCmNs
YXNzIFN0cmluZ1Jlc291cmNlV2lkZ2V0KExhYmVsZWRSZXNvdXJjZVdpZGdl
dCk6DQogICAgIiIiDQogICAgSGFuZGxlcyBhbnkgc3RyaW5nLXR5cGUgcmVz
b3VyY2UuDQogICAgIiIiDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc25h
bWUsIHN0eWxlYm94LCBsYWJlbCA9IE5vbmUpOg0KICAgICAgICBMYWJlbGVk
UmVzb3VyY2VXaWRnZXQuX19pbml0X18oc2VsZiwgcmVzbmFtZSwgc3R5bGVi
b3gsIGxhYmVsKQ0KICAgICAgICBzZWxmLndpZGdldCA9IGd0ay5FbnRyeSgp
DQogICAgICAgIHNlbGYuY29ubmVjdFdpZGdldChzZWxmLndpZGdldCwgImNo
YW5nZWQiLCANCiAgICAgICAgICAgIGxhbWJkYSB3OiBzZWxmLnNldFZhbHVl
KHcuZ2V0X3RleHQoKSkpDQogICAgICAgIHNlbGYucmVzZXQoKQ0KICAgIGRl
ZiByZXNldENvbXBvbmVudHMoc2VsZik6DQogICAgICAgIHNlbGYud2lkZ2V0
LnNldF90ZXh0KHNlbGYuZ2V0VmFsdWUoKSkNCmNsYXNzIEp1c3RpZnlSZXNv
dXJjZVdpZGdldChMYWJlbGVkUmVzb3VyY2VXaWRnZXQpOg0KICAgICIiIg0K
ICAgIEhhbmRsZXMgYSBqdXN0aWZ5IHJlc291cmNlLg0KICAgICIiIg0KICAg
IGRlZiBfX2luaXRfXyhzZWxmLCByZXNuYW1lLCBzdHlsZWJveCk6DQogICAg
ICAgIExhYmVsZWRSZXNvdXJjZVdpZGdldC5fX2luaXRfXyhzZWxmLCByZXNu
YW1lLCBzdHlsZWJveCkNCiAgICAgICAgc2VsZi53aWRnZXQgPSBTdHlsZU9w
dGlvbk1lbnUoSnVzdGlmeVJlc291cmNlLlZBTFVFUywgDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0VmFsdWUoKSwg
c2VsZi5zZXRWYWx1ZSwgc2VsZikNCiAgICBkZWYgcmVzZXRDb21wb25lbnRz
KHNlbGYpOg0KICAgICAgICBzZWxmLndpZGdldC5zaG93SXRlbShzZWxmLmdl
dFZhbHVlKCkpDQpjbGFzcyBGb250UmVzb3VyY2VXaWRnZXQoTGFiZWxlZFJl
c291cmNlV2lkZ2V0KToNCiAgICAiIiINCiAgICBIYW5kbGVzIGZvbnQtdHlw
ZSByZXNvdXJjZXMuICBNdWx0aXBsZSByZXNvdXJjZXMgYXJlIGhhbmRsZWQg
DQogICAgYXQgdGhlIHRvcCBsZXZlbCAoeGZ0LmZvbnQsIHhmdC5mbGFncywg
eGZ0LnNpemUsIGV0YykuDQogICAgIiIiDQogICAgRkRHID0gZ3RrLkZvbnRT
ZWxlY3Rpb25EaWFsb2coJ1NlbGVjdCBGb250JykNCiAgICBkZWYgZ2V0Rm9u
dChjbHMsIHByZXZfZm9udCA9IE5vbmUsIHRpdGxlID0gJ1NlbGVjdCBGb250
Jyk6DQogICAgICAgICIiIg0KICAgICAgICBRdWVyaWVzIHRoZSB1c2VyIGZv
ciBhIGZvbnQuDQoNCiAgICAgICAgUGFyYW1ldGVyczoNCiAgICAgICAgICAg
IHByZXZfZm9udCA6IHN0ciAgIC0gaWYgZ2l2ZW4sIHNldHMgdGhlIGZkZyBm
b250IHRvIHRoaXMuDQogICAgICAgICAgICB0aXRsZSA6IHN0ciAgICAgICAt
IHNldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuDQogICAgICAgIFJldHVy
bnM6DQogICAgICAgICAgICB0aGUgZm9udCBuYW1lIGlmIHRoZSB1c2VyIGhh
cyBzZWxlY3RlZCBvbmUsIE5vbmUgb3RoZXJ3aXNlLg0KICAgICAgICAiIiIN
CiAgICAgICAgY2xzLkZERy5zZXRfdGl0bGUodGl0bGUpDQogICAgICAgIGZv
bnQgPSBOb25lDQogICAgICAgIGlmIHByZXZfZm9udDogY2xzLkZERy5zZXRf
Zm9udF9uYW1lKHByZXZfZm9udCkNCiAgICAgICAgaWYgY2xzLkZERy5ydW4o
KSA9PSBndGsuUkVTUE9OU0VfT0s6DQogICAgICAgICAgICBmb250ID0gY2xz
LkZERy5nZXRfZm9udF9uYW1lKCkNCiAgICAgICAgY2xzLkZERy5oaWRlKCkN
CiAgICAgICAgcmV0dXJuIGZvbnQNCiAgICBnZXRGb250ID0gY2xhc3NtZXRo
b2QoZ2V0Rm9udCkNCg0KICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXNuYW1l
LCBzdHlsZWJveCk6DQogICAgICAgIExhYmVsZWRSZXNvdXJjZVdpZGdldC5f
X2luaXRfXyhzZWxmLCByZXNuYW1lLCBzdHlsZWJveCwgJ2ZvbnQnKQ0KDQog
ICAgICAgIHNlbGYuZW50cnkgPSBndGsuRW50cnkoKQ0KICAgICAgICBzZWxm
LmVudHJ5LnNldF9lZGl0YWJsZSgwKQ0KDQogICAgICAgIHNlbGYuYnV0dG9u
ID0gZ3RrLkJ1dHRvbignLi4uJykNCiAgICAgICAgc2VsZi5jb25uZWN0V2lk
Z2V0KHNlbGYuYnV0dG9uLCAiY2xpY2tlZCIsIGxhbWJkYSB3OiBzZWxmLnNl
dEZvbnQoKSkNCg0KICAgICAgICBzZWxmLnNoYWRvdyA9IGd0ay5DaGVja0J1
dHRvbignU2hhZG93JykNCiAgICAgICAgc2VsZi5jb25uZWN0V2lkZ2V0KHNl
bGYuc2hhZG93LCAidG9nZ2xlZCIsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYW1iZGEgdzogc2VsZi5zZXRTaGFkb3cody5nZXRfYWN0aXZlKCkp
KQ0KDQogICAgICAgIHNlbGYuc2hhZG93X29mZnNldCA9IEludGVnZXJSZXNv
dXJjZVdpZGdldChyZXNuYW1lKycuc2hhZG93Lm9mZnNldCcsIHN0eWxlYm94
KQ0KICAgICAgICBzZWxmLnNoYWRvd190aW50ID0gSW50ZWdlclJlc291cmNl
V2lkZ2V0KHJlc25hbWUrJy5zaGFkb3cudGludCcsIHN0eWxlYm94LCANCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaW4gPSAtMTAwLCBtYXggPSAxMDAsIGluY19wYWdlID0gMjApDQoNCiAg
ICAgICAgc2VsZi5yZXNldCgpDQogICAgZGVmIHNldFNoYWRvdyhzZWxmLCBz
aGFkb3cpOiANCiAgICAgICAgZm9udCA9IHNlbGYuZ2V0VmFsdWUoKQ0KICAg
ICAgICBpZiBmb250LnNoYWRvdyAhPSBzaGFkb3c6DQogICAgICAgICAgICBm
b250LnNoYWRvdyA9IHNoYWRvdw0KICAgICAgICAgICAgc2VsZi5zdHlsZWJv
eC5zZXRDaGFuZ2VkKCkNCiAgICAgICAgICAgIHNlbGYuc2V0U2hhZG93U2Vu
c2l0aXZlcygpDQogICAgZGVmIHNldFNoYWRvd1NlbnNpdGl2ZXMoc2VsZik6
DQogICAgICAgIHNoYWRvdyA9IHNlbGYuZ2V0VmFsdWUoKS5zaGFkb3cNCiAg
ICAgICAgc2VsZi5zaGFkb3dfb2Zmc2V0LnNldFNlbnNpdGl2ZShzaGFkb3cp
DQogICAgICAgIHNlbGYuc2hhZG93X3RpbnQuc2V0U2Vuc2l0aXZlKHNoYWRv
dykNCiAgICBkZWYgc2V0Rm9udChzZWxmKToNCiAgICAgICAgZm9udG5hbWUg
PSBGb250UmVzb3VyY2VXaWRnZXQuZ2V0Rm9udChzZWxmLmVudHJ5LmdldF90
ZXh0KCksIHNlbGYucmVzbmFtZSkNCiAgICAgICAgaWYgZm9udG5hbWU6DQog
ICAgICAgICAgICBzZWxmLmVudHJ5LnNldF90ZXh0KGZvbnRuYW1lKQ0KICAg
ICAgICAgICAgcGZkID0gcGFuZ28uRm9udERlc2NyaXB0aW9uKGZvbnRuYW1l
KQ0KICAgICAgICAgICAgZm9udCA9IHNlbGYuZ2V0VmFsdWUoKQ0KICAgICAg
ICAgICAgZm9udC5mYW1pbHkgPSBwZmQuZ2V0X2ZhbWlseSgpDQogICAgICAg
ICAgICBmb250LnNpemUgPSBwZmQuZ2V0X3NpemUoKSAvIDEwMjQgIyBQQU5H
T19TQ0FMRQ0KICAgICAgICAgICAgZm9udC5ib2xkID0gcGZkLmdldF93ZWln
aHQoKSA+PSBwYW5nby5XRUlHSFRfQk9MRA0KICAgICAgICAgICAgZm9udC5p
dGFsaWMgPSBwZmQuZ2V0X3N0eWxlKCkgPT0gcGFuZ28uU1RZTEVfSVRBTElD
DQogICAgICAgICAgICBzZWxmLnN0eWxlYm94LnNldENoYW5nZWQoKQ0KICAg
IGRlZiByZXNldENvbXBvbmVudHMoc2VsZik6DQogICAgICAgIGZvbnQgPSBz
ZWxmLmdldFZhbHVlKCkNCiAgICAgICAgc2VsZi5lbnRyeS5zZXRfdGV4dCgn
JXMgJXMgJWQnICUgXA0KICAgICAgICAgICAgKGZvbnQuZmFtaWx5LCBmb250
LmJvbGQgYW5kICdib2xkJyBvciAnJywgZm9udC5zaXplKSkNCiAgICAgICAg
c2VsZi5zaGFkb3cuc2V0X2FjdGl2ZShmb250LnNoYWRvdykNCiAgICAgICAg
c2VsZi5zZXRTaGFkb3dTZW5zaXRpdmVzKCkNCiAgICBkZWYgZGVmYXVsdFBh
Y2soc2VsZik6DQogICAgICAgIHRhYmxlID0gU3R5bGVUYWJsZSg1KQ0KDQog
ICAgICAgIHRhYmxlLnBhY2soc2VsZi5sYWJlbCkNCiAgICAgICAgaGJveCA9
IGd0ay5IQm94KCkNCiAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYuZW50
cnkpDQogICAgICAgIGhib3gucGFja19zdGFydChzZWxmLmJ1dHRvbiwgMCwg
MCkNCiAgICAgICAgdGFibGUucGFjayhoYm94LCA0KQ0KDQogICAgICAgIHRh
YmxlLnBhY2soc2VsZi5zaGFkb3cpDQogICAgICAgIHRhYmxlLnBhY2tMYWJl
bGVkKHNlbGYuc2hhZG93X29mZnNldCwgc2VsZi5zaGFkb3dfdGludCkNCg0K
ICAgICAgICByZXR1cm4gdGFibGUNCg0KY2xhc3MgQ29sb3JSZXNvdXJjZVdp
ZGdldChMYWJlbGVkUmVzb3VyY2VXaWRnZXQpOg0KICAgICIiIg0KICAgIEhh
bmRsZXMgYSBjb2xvciByZXNvdXJjZS4NCiAgICAiIiINCiAgICBDT0xPUl9E
SUFMT0cgPSBndGsuQ29sb3JTZWxlY3Rpb25EaWFsb2coJ1NlbGVjdCBDb2xv
cicpDQogICAgQ09MT1JfRElBTE9HLmNvbG9yc2VsLnNldF9oYXNfcGFsZXR0
ZSgxKQ0KICAgIGRlZiBnZXRDb2xvcihjbHMsIHByZXZfY29sb3IgPSBOb25l
LCB0aXRsZSA9ICdTZWxlY3QgQ29sb3InKToNCiAgICAgICAgIiIiDQogICAg
ICAgIFF1ZXJpZXMgdGhlIHVzZXIgZm9yIGEgY29sb3IuDQoNCiAgICAgICAg
UGFyYW1ldGVyczoNCiAgICAgICAgICAgIHByZXZfY29sb3IgOiBndGsuZ2Rr
LkNvbG9yICAtIGlmIGdpdmVuLCBzZXRzIHRoZSBjZGcgY29sb3IgdG8gdGhp
cy4NCiAgICAgICAgICAgIHRpdGxlIDogc3RyICAgICAgICAgICAgICAgICAt
IHNldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuDQogICAgICAgIFJldHVy
bnM6DQogICAgICAgICAgICBhIGd0ay5nZGsuQ29sb3IgaW5kaWNhdGluZyB0
aGUgc2VsZWN0aW9uIG9mIHRoZSB1c2VyLCBvciBOb25lIA0KICAgICAgICAg
ICAgaWYgdGhlIHVzZXIgaGFzbid0IHNlbGVjdGVkIGFueXRoaW5nLg0KICAg
ICAgICAiIiINCiAgICAgICAgY2xzLkNPTE9SX0RJQUxPRy5zZXRfdGl0bGUo
dGl0bGUpDQogICAgICAgIGlmIHByZXZfY29sb3I6IGNscy5DT0xPUl9ESUFM
T0cuY29sb3JzZWwuc2V0X2N1cnJlbnRfY29sb3IocHJldl9jb2xvcikNCiAg
ICAgICAgY29sb3IgPSBOb25lDQogICAgICAgIGlmIGNscy5DT0xPUl9ESUFM
T0cucnVuKCkgPT0gZ3RrLlJFU1BPTlNFX09LOg0KICAgICAgICAgICAgY29s
b3IgPSBjbHMuQ09MT1JfRElBTE9HLmNvbG9yc2VsLmdldF9jdXJyZW50X2Nv
bG9yKCkNCiAgICAgICAgY2xzLkNPTE9SX0RJQUxPRy5oaWRlKCkNCiAgICAg
ICAgcmV0dXJuIGNvbG9yDQogICAgZ2V0Q29sb3IgPSBjbGFzc21ldGhvZChn
ZXRDb2xvcikNCg0KICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXNuYW1lLCBz
dHlsZWJveCwgbGFiZWwgPSBOb25lKToNCiAgICAgICAgTGFiZWxlZFJlc291
cmNlV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIHJlc25hbWUsIHN0eWxlYm94LCBs
YWJlbCkNCiAgICAgICAgc2VsZi53aWRnZXQgPSBndGsuQnV0dG9uKCkNCiAg
ICAgICAgc2VsZi53aWRnZXQuc2V0X3NpemVfcmVxdWVzdCgyNCwgMjApDQog
ICAgICAgIHNlbGYuY29ubmVjdFdpZGdldChzZWxmLndpZGdldCwgImNsaWNr
ZWQiLCBsYW1iZGEgdzogc2VsZi5zZXRDb2xvcigpKQ0KICAgICAgICBzZWxm
LnJlc2V0KCkNCiAgICBkZWYgcmVzZXRDb21wb25lbnRzKHNlbGYpOg0KICAg
ICAgICBzZWxmLnNldEJhY2tncm91bmQoc2VsZi5nZXRHZGtDb2xvcigpKQ0K
ICAgIGRlZiBzZXRCYWNrZ3JvdW5kKHNlbGYsIGdka19jb2xvcik6DQogICAg
ICAgIGZvciBzdGF0ZSBpbiBbZ3RrLlNUQVRFX0FDVElWRSwgZ3RrLlNUQVRF
X05PUk1BTCwgDQogICAgICAgICAgICAgICAgICAgICAgZ3RrLlNUQVRFX1BS
RUxJR0hULCBndGsuU1RBVEVfU0VMRUNURURdOiANCiAgICAgICAgICAgIHNl
bGYud2lkZ2V0Lm1vZGlmeV9iZyhzdGF0ZSwgZ2RrX2NvbG9yKQ0KICAgIGRl
ZiBnZXRHZGtDb2xvcihzZWxmKToNCiAgICAgICAgcmV0dXJuIGd0ay5nZGsu
Y29sb3JfcGFyc2Uoc3RyKHNlbGYuZ2V0VmFsdWUoKSkpDQogICAgZGVmIHNl
dENvbG9yKHNlbGYpOg0KICAgICAgICBnZGtjb2xvciA9IENvbG9yUmVzb3Vy
Y2VXaWRnZXQuZ2V0Q29sb3Ioc2VsZi5nZXRHZGtDb2xvcigpLCBzZWxmLnJl
c25hbWUpDQogICAgICAgIGlmIGdka2NvbG9yOg0KICAgICAgICAgICAgc2Vs
Zi5zZXRCYWNrZ3JvdW5kKGdka2NvbG9yKQ0KICAgICAgICAgICAgY29sb3Ig
PSBzZWxmLmdldFZhbHVlKCkNCiAgICAgICAgICAgIGNvbG9yLnJlZCAgID0g
cm91bmQoKGdka2NvbG9yLnJlZCAgIC8gNjU1MzUuMCkgKiAyNTUpDQogICAg
ICAgICAgICBjb2xvci5ncmVlbiA9IHJvdW5kKChnZGtjb2xvci5ncmVlbiAv
IDY1NTM1LjApICogMjU1KQ0KICAgICAgICAgICAgY29sb3IuYmx1ZSAgPSBy
b3VuZCgoZ2RrY29sb3IuYmx1ZSAgLyA2NTUzNS4wKSAqIDI1NSkNCiAgICAg
ICAgICAgIHNlbGYuc3R5bGVib3guc2V0Q2hhbmdlZCgpDQpjbGFzcyBUZXh0
dXJlV2lkZ2V0KFN0eWxlVGFibGUsIFJlc291cmNlV2lkZ2V0KToNCiAgICAi
IiINCiAgICBIYW5kbGVzIGEgdGV4dHVyZSByZXNvdXJjZSBhbmQgdHdvIGNv
bG9ycy4gIEV2ZW4gdGhvdWdoIHRoaXMgY2xhc3MgDQogICAgaGFuZGxlcyBt
dWx0aXBsZSByZXNvdXJjZXMsIGl0IGRvZXNuJ3QgaGFuZGxlIG11bHRpcGxl
IG9uZXMgYXQgaXRzIA0KICAgIG93biBsZXZlbCAtLSBjb2xvcnMgYXJlIHBh
c3NlZCBvZmYgdG8gQ29sb3JSZXNvdXJjZVdpZGdldHMuDQoNCiAgICBJbnN0
YW5jZSBWYXJpYWJsZXM6DQogICAgICAgIHJlbGllZnMgOiBndGsuT3B0aW9u
TWVudSAgICAtIGF2YWlsYWJsZSB0ZXh0dXJlIHJlbGllZnMuDQogICAgICAg
IGJvcmRlciA6IGd0ay5DaGVja0JveCAgICAgICAtIGFjdGl2ZSBpZmYgcmVs
aWVmcyBpcyBzZXQgdG8gImZsYXQiLg0KICAgICAgICBncmFkaWVudCA6IGd0
ay5DaGVja0JveCAgICAgLSB3aGV0aGVyIHRleHR1cmUgaXMgZ3JhZGllbnQg
b3Igc29saWQuDQogICAgICAgIHR5cGVzIDogZ3RrLk9wdGlvbk1lbnUgICAg
ICAtIGF2YWlsYWJsZSBncmFkaWVudCB0eXBlcy4gIGFjdGl2ZSBpZmYNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQg
aXMgYWN0aXZlLg0KICAgICAgICBpbnRlcmxhY2VkIDogZ3RrLkNoZWNrQm94
ICAgDQogICAgICAgIGJldmVscyA6IGd0ay5PcHRpb25NZW51ICAgIA0KICAg
ICAgICBjb2xvciwgY29sb3JUbywgYm9yZGVyQ29sb3IgOiBDb2xvclJlc291
cmNlV2lkZ2V0DQoNCiAgICAgICAgcm93ICAgOiBpbnQgICAgICAgICAgICAg
ICAgIC0ga2VlcHMgdHJhY2sgb2YgY3VycmVudCByb3cuICBFYWNoIHJvdyAN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGhh
dmUgdXAgdG8gdHdvIHdpZGdldHMuDQogICAgIiIiDQogICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJhc2VuYW1lLCBzdHlsZWJveCwgcGFyZW50cmVsYXRpdmUg
PSAxKToNCiAgICAgICAgIiIiDQogICAgICAgIFBhcmFtZXRlcnMgb2Ygbm90
ZToNCiAgICAgICAgICAgIHBhcmVudHJlbGF0aXZlIDogYm9vbCAgIC0gaWYg
ZmFsc2UsIG5vIHBhcmVudHJlbGF0aXZlIHN0dWZmIGlzIA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93biBpbiB0aGlzIHdp
ZGdldC4NCiAgICAgICAgIiIiDQogICAgICAgIFN0eWxlVGFibGUuX19pbml0
X18oc2VsZiwgNCkNCiAgICAgICAgUmVzb3VyY2VXaWRnZXQuX19pbml0X18o
c2VsZiwgYmFzZW5hbWUsIHN0eWxlYm94KQ0KDQogICAgICAgIGlmIHBhcmVu
dHJlbGF0aXZlOg0KICAgICAgICAgICAgc2VsZi5wYXJlbnRyZWxhdGl2ZSA9
IHNlbGYuY3JlYXRlQ2hlY2tCb3goJ3BhcmVudHJlbGF0aXZlJywgDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnNldFBhcmVudFJlbGF0aXZlLCA0KQ0KDQogICAgICAgIHNl
bGYucmVsaWVmcyA9IHNlbGYuY3JlYXRlT3B0aW9uKFRleHR1cmUuUkVMSUVG
Uywgc2VsZi5zZXRSZWxpZWYsIDIpDQogICAgICAgIHNlbGYuYm9yZGVyID0g
c2VsZi5jcmVhdGVDaGVja0JveCgnQm9yZGVyJywgc2VsZi5zZXRCb3JkZXIs
IDIpDQogICAgICAgIHNlbGYuc2V0UmVsaWVmU2Vuc2l0aXZlcygpDQoNCiAg
ICAgICAgc2VsZi5ncmFkaWVudCA9IHNlbGYuY3JlYXRlQ2hlY2tCb3goJ0dy
YWRpZW50Jywgc2VsZi5zZXRHcmFkaWVudCwgMikNCiAgICAgICAgc2VsZi50
eXBlcyA9IHNlbGYuY3JlYXRlT3B0aW9uKFRleHR1cmUuVFlQRVMsIHNlbGYu
c2V0VHlwZSwgMikNCiAgICAgICAgc2VsZi5zZXRHcmFkaWVudFNlbnNpdGl2
ZXMoKQ0KDQogICAgICAgIHNlbGYuaW50ZXJsYWNlZCA9IHNlbGYuY3JlYXRl
Q2hlY2tCb3goJ0ludGVybGFjZWQnLCBzZWxmLnNldEludGVybGFjZWQsIDIp
DQogICAgICAgIHNlbGYuYmV2ZWxzID0gc2VsZi5jcmVhdGVPcHRpb24oVGV4
dHVyZS5CRVZFTFMsIHNlbGYuc2V0QmV2ZWwsIDIpDQoNCiAgICAgICAgc2Vs
Zi5jb2xvciA9IENvbG9yUmVzb3VyY2VXaWRnZXQoYmFzZW5hbWUgKyAnLmNv
bG9yJywgc3R5bGVib3gpDQogICAgICAgIHNlbGYuY29sb3JUbyA9IENvbG9y
UmVzb3VyY2VXaWRnZXQoYmFzZW5hbWUgKyAnLmNvbG9yVG8nLCBzdHlsZWJv
eCkNCiAgICAgICAgc2VsZi5ib3JkZXJDb2xvciA9IENvbG9yUmVzb3VyY2VX
aWRnZXQoYmFzZW5hbWUgKyAnLmJvcmRlckNvbG9yJywgc3R5bGVib3gpDQog
ICAgICAgIHNlbGYucGFja0xhYmVsZWQoc2VsZi5jb2xvciwgc2VsZi5jb2xv
clRvKQ0KICAgICAgICBzZWxmLnBhY2tMYWJlbGVkKHNlbGYuYm9yZGVyQ29s
b3IpDQoNCiAgICAgICAgc2VsZi5yZXNldCgpDQogICAgZGVmIHJlc2V0Q29t
cG9uZW50cyhzZWxmKToNCiAgICAgICAgZm9yIG9wbWVudSBpbiBbc2VsZi5y
ZWxpZWZzLCBzZWxmLnR5cGVzLCBzZWxmLmJldmVsc106DQogICAgICAgICAg
ICBvcG1lbnUuc2V0X2hpc3RvcnkoMCkNCiAgICAgICAgZm9yIGNib3ggaW4g
W3NlbGYuYm9yZGVyLCBzZWxmLmdyYWRpZW50LCBzZWxmLmludGVybGFjZWRd
Og0KICAgICAgICAgICAgY2JveC5zZXRfYWN0aXZlKDApDQoNCiAgICAgICAg
dGV4dHVyZSA9IHNlbGYuZ2V0VmFsdWUoKQ0KICAgICAgICBzZWxmLnJlbGll
ZnMuc2V0X2hpc3RvcnkodGV4dHVyZS5yZWxpZWYpDQogICAgICAgIHNlbGYu
Ym9yZGVyLnNldF9hY3RpdmUodGV4dHVyZS5ib3JkZXIpDQogICAgICAgIHNl
bGYuc2V0UmVsaWVmU2Vuc2l0aXZlcygpDQogICAgICAgIHNlbGYuc2V0Qm9y
ZGVyU2Vuc2l0aXZlcygpDQoNCiAgICAgICAgc2VsZi5ncmFkaWVudC5zZXRf
YWN0aXZlKHRleHR1cmUuZ3JhZGllbnQpDQogICAgICAgIHNlbGYudHlwZXMu
c2V0X2hpc3RvcnkodGV4dHVyZS50eXBlKQ0KICAgICAgICBzZWxmLnNldEdy
YWRpZW50U2Vuc2l0aXZlcygpDQoNCiAgICAgICAgc2VsZi5iZXZlbHMuc2V0
X2hpc3RvcnkodGV4dHVyZS5iZXZlbCkNCiAgICAgICAgc2VsZi5pbnRlcmxh
Y2VkLnNldF9hY3RpdmUodGV4dHVyZS5pbnRlcmxhY2VkKQ0KDQogICAgICAg
IGlmIGhhc2F0dHIoc2VsZiwgJ3BhcmVudHJlbGF0aXZlJyk6DQogICAgICAg
ICAgICBzZWxmLnBhcmVudHJlbGF0aXZlLnNldF9hY3RpdmUodGV4dHVyZS5w
YXJlbnRyZWxhdGl2ZSkNCiAgICAgICAgICAgIHNlbGYuc2V0UGFyZW50UmVs
YXRpdmVTZW5zaXRpdmVzKCkNCg0KICAgICMgU2lnbmFsIG1ldGhvZHMgDQog
ICAgZGVmIHNldFBhcmVudFJlbGF0aXZlKHNlbGYsIHcpOg0KICAgICAgICBz
ZWxmLmdldFZhbHVlKCkucGFyZW50cmVsYXRpdmUgPSB3LmdldF9hY3RpdmUo
KQ0KICAgICAgICBzZWxmLnNldFBhcmVudFJlbGF0aXZlU2Vuc2l0aXZlcygp
DQogICAgICAgIHNlbGYuc3R5bGVib3guc2V0Q2hhbmdlZCgpDQogICAgZGVm
IHNldFBhcmVudFJlbGF0aXZlU2Vuc2l0aXZlcyhzZWxmKToNCiAgICAgICAg
Zm9yIHcgaW4gW3NlbGYucmVsaWVmcywgc2VsZi5ib3JkZXIsIHNlbGYuZ3Jh
ZGllbnQsIHNlbGYudHlwZXMsIA0KICAgICAgICAgICAgICAgICAgc2VsZi5p
bnRlcmxhY2VkLCBzZWxmLmJldmVscywgDQogICAgICAgICAgICAgICAgICBz
ZWxmLmNvbG9yLmxhYmVsLCBzZWxmLmNvbG9yLndpZGdldCwgDQogICAgICAg
ICAgICAgICAgICBzZWxmLmNvbG9yVG8ubGFiZWwsIHNlbGYuY29sb3JUby53
aWRnZXRdOg0KICAgICAgICAgICAgdy5zZXRfc2Vuc2l0aXZlKG5vdCBzZWxm
LnBhcmVudHJlbGF0aXZlLmdldF9hY3RpdmUoKSkNCiAgICAgICAgIyBQYXJl
bnRSZWxhdGl2ZSBjb3ZlcnMgbXVsdGlwbGUgd2lkZ2V0cyB3aGljaCBtYXkg
aGF2ZSAic2Vuc2l0aXZlIg0KICAgICAgICAjIHJlbGF0aW9ucyB3aXRoIGVh
Y2ggb3RoZXIsIHNvIGlmIHdlIGFjdGl2YXRlIHRoZW0gYWxsLCB3ZSdsbCBu
ZWVkIA0KICAgICAgICAjIHRvIGNoZWNrIHRoZSByZXN0IHRvIG1ha2Ugc3Vy
ZSB3ZSBkaWRuJ3Qgc2NyZXcgdXAgYW55IG90aGVyIA0KICAgICAgICAjIHJl
bGF0aW9uc2hpcHMuDQogICAgICAgIGlmIG5vdCBzZWxmLnBhcmVudHJlbGF0
aXZlLmdldF9hY3RpdmUoKToNCiAgICAgICAgICAgIHNlbGYuc2V0UmVsaWVm
U2Vuc2l0aXZlcygpDQogICAgICAgICAgICBzZWxmLnNldEdyYWRpZW50U2Vu
c2l0aXZlcygpDQogICAgZGVmIHNldFJlbGllZihzZWxmLCB3KToNCiAgICAg
ICAgc2VsZi5nZXRWYWx1ZSgpLnJlbGllZiA9IHcuZ2V0X2hpc3RvcnkoKQ0K
ICAgICAgICBzZWxmLnNldFJlbGllZlNlbnNpdGl2ZXMoKQ0KICAgICAgICBz
ZWxmLnN0eWxlYm94LnNldENoYW5nZWQoKQ0KICAgIGRlZiBzZXRSZWxpZWZT
ZW5zaXRpdmVzKHNlbGYpOg0KICAgICAgICBzZWxmLmJvcmRlci5zZXRfc2Vu
c2l0aXZlKA0KICAgICAgICAgICAgVGV4dHVyZS5SRUxJRUZTW3NlbGYuZ2V0
VmFsdWUoKS5yZWxpZWZdID09ICdmbGF0JykNCiAgICBkZWYgc2V0Qm9yZGVy
KHNlbGYsIHcpOg0KICAgICAgICBzZWxmLmdldFZhbHVlKCkuYm9yZGVyID0g
dy5nZXRfYWN0aXZlKCkNCiAgICAgICAgc2VsZi5zZXRCb3JkZXJTZW5zaXRp
dmVzKCkNCiAgICAgICAgc2VsZi5zdHlsZWJveC5zZXRDaGFuZ2VkKCkNCiAg
ICBkZWYgc2V0Qm9yZGVyU2Vuc2l0aXZlcyhzZWxmKToNCiAgICAgICAgc2Vs
Zi5ib3JkZXJDb2xvci5zZXRTZW5zaXRpdmUoc2VsZi5nZXRWYWx1ZSgpLmJv
cmRlcikNCiAgICBkZWYgc2V0R3JhZGllbnQoc2VsZiwgdyk6DQogICAgICAg
IHNlbGYuZ2V0VmFsdWUoKS5ncmFkaWVudCA9IHcuZ2V0X2FjdGl2ZSgpDQog
ICAgICAgIHNlbGYuc2V0R3JhZGllbnRTZW5zaXRpdmVzKCkNCiAgICAgICAg
c2VsZi5zdHlsZWJveC5zZXRDaGFuZ2VkKCkNCiAgICBkZWYgc2V0VHlwZShz
ZWxmLCB3KToNCiAgICAgICAgc2VsZi5nZXRWYWx1ZSgpLnR5cGUgPSB3Lmdl
dF9oaXN0b3J5KCkNCiAgICAgICAgc2VsZi5zdHlsZWJveC5zZXRDaGFuZ2Vk
KCkNCiAgICBkZWYgc2V0R3JhZGllbnRTZW5zaXRpdmVzKHNlbGYpOg0KICAg
ICAgICBzZWxmLnR5cGVzLnNldF9zZW5zaXRpdmUoc2VsZi5nZXRWYWx1ZSgp
LmdyYWRpZW50KQ0KICAgIGRlZiBzZXRJbnRlcmxhY2VkKHNlbGYsIHcpOg0K
ICAgICAgICBzZWxmLmdldFZhbHVlKCkuaW50ZXJsYWNlZCA9IHcuZ2V0X2Fj
dGl2ZSgpDQogICAgICAgIHNlbGYuc3R5bGVib3guc2V0Q2hhbmdlZCgpDQog
ICAgZGVmIHNldEJldmVsKHNlbGYsIHcpOg0KICAgICAgICBzZWxmLmdldFZh
bHVlKCkuYmV2ZWwgPSB3LmdldF9oaXN0b3J5KCkNCiAgICAgICAgc2VsZi5z
dHlsZWJveC5zZXRDaGFuZ2VkKCkNCiAgICANCiAgICAjIFdpZGdldCBjcmVh
dGlvbiBtZXRob2RzIA0KICAgIGRlZiBjcmVhdGVPcHRpb24oc2VsZiwgaXRl
bXMsIGNhbGxiYWNrLCBudW1jb2xzID0gMik6DQogICAgICAgICIiIg0KICAg
ICAgICBQYXJhbWV0ZXJzOg0KICAgICAgICAgICAgaXRlbXMgOiBzdHIgbGlz
dCAgICAtIGl0ZW1zIHRvIGJlIHB1dCBpbnRvIHRoZSBvcHRpb24gbWVudSdz
IG1lbnUNCiAgICAgICAgICAgIGNhbGxiYWNrICAgICAgICAgICAgLSBhIGd0
ayBjYWxsYmFjayBmb3IgdGhlICJjaGFuZ2VkIiBzaWduYWwuDQogICAgICAg
ICAgICBsZWZ0IDogaW50ICAgICAgICAgIC0gbGVmdCBhdHRhY2ggb2Ygd2lk
Z2V0DQogICAgICAgICAgICByaWdodCA6IGludCAgICAgICAgIC0gcmlnaHQg
YXR0YWNoIG9mIHdpZGdldA0KICAgICAgICBSZXR1cm5zOg0KICAgICAgICAg
ICAgYW4gb3B0aW9uIG1lbnUNCiAgICAgICAgIiIiDQogICAgICAgIG9wbWVu
dSA9IFN0eWxlT3B0aW9uTWVudShpdGVtcykNCiAgICAgICAgc2VsZi5jb25u
ZWN0V2lkZ2V0KG9wbWVudSwgImNoYW5nZWQiLCBjYWxsYmFjaykNCiAgICAg
ICAgc2VsZi5wYWNrKG9wbWVudSwgbnVtY29scykNCiAgICAgICAgcmV0dXJu
IG9wbWVudQ0KICAgIGRlZiBjcmVhdGVDaGVja0JveChzZWxmLCBuYW1lLCBj
YWxsYmFjaywgbnVtY29scyk6DQogICAgICAgICIiIg0KICAgICAgICBQYXJh
bWV0ZXJzOg0KICAgICAgICAgICAgbmFtZSA6IHN0ciAgICAgIC0gbGFiZWwg
b2YgdGhpcyBjaGVjayBib3guDQogICAgICAgICAgICBjYWxsYmFjayAgICAg
ICAgLSBhIGd0ayBjYWxsYmFjayBmb3IgdGhlICJ0b2dnbGVkIiBzaWduYWwN
CiAgICAgICAgICAgIGxlZnQgOiBpbnQgICAgICAtIGxlZnQgYXR0YWNoIG9m
IHdpZGdldA0KICAgICAgICAgICAgcmlnaHQgOiBpbnQgICAgIC0gcmlnaHQg
YXR0YWNoIG9mIHdpZGdldA0KICAgICAgICBSZXR1cm5zOg0KICAgICAgICAg
ICAgYSBjaGVjayBidXR0b24uDQogICAgICAgICIiIg0KICAgICAgICBjYnV0
dG9uID0gZ3RrLkNoZWNrQnV0dG9uKG5hbWUpDQogICAgICAgIHNlbGYuY29u
bmVjdFdpZGdldChjYnV0dG9uLCAidG9nZ2xlZCIsIGNhbGxiYWNrKQ0KICAg
ICAgICBzZWxmLnBhY2soY2J1dHRvbiwgbnVtY29scykNCiAgICAgICAgcmV0
dXJuIGNidXR0b24NCmNsYXNzIEJ1dHRvblRleHR1cmVXaWRnZXQoVGV4dHVy
ZVdpZGdldCk6DQogICAgIiIiDQogICAgSGFuZGxlcyBhIHRleHR1cmUgcmVz
b3VyY2Ugd2l0aCBhbiBhZGRpdGlvbmFsIHBpY0NvbG9yLg0KICAgICIiIg0K
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlbmFtZSwgc3R5bGVib3gsIHBh
cmVudHJlbGF0aXZlPTEpOg0KICAgICAgICBUZXh0dXJlV2lkZ2V0Ll9faW5p
dF9fKHNlbGYsIGJhc2VuYW1lLCBzdHlsZWJveCwgcGFyZW50cmVsYXRpdmUp
DQogICAgICAgIHNlbGYucGljQ29sb3IgPSBDb2xvclJlc291cmNlV2lkZ2V0
KGJhc2VuYW1lICsgJy5waWNDb2xvcicsIHN0eWxlYm94KQ0KICAgICAgICBz
ZWxmLnBhY2tMYWJlbGVkKHNlbGYucGljQ29sb3IpDQpjbGFzcyBUZXh0VGV4
dHVyZVdpZGdldChUZXh0dXJlV2lkZ2V0KToNCiAgICAiIiINCiAgICBIYW5k
bGVzIGEgdGV4dHVyZSByZXNvdXJjZSB3aXRoIGFuIGFkZGl0aW9uYWwgdGV4
dENvbG9yLg0KICAgICIiIg0KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNl
bmFtZSwgc3R5bGVib3gsIHBhcmVudHJlbGF0aXZlPTEpOg0KICAgICAgICBU
ZXh0dXJlV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIGJhc2VuYW1lLCBzdHlsZWJv
eCwgcGFyZW50cmVsYXRpdmUpDQogICAgICAgIHNlbGYudGV4dENvbG9yID0g
Q29sb3JSZXNvdXJjZVdpZGdldChiYXNlbmFtZSArICcudGV4dENvbG9yJywg
c3R5bGVib3gpDQogICAgICAgIHNlbGYucGFja0xhYmVsZWQoc2VsZi50ZXh0
Q29sb3IpDQpjbGFzcyBGb250VGV4dFRleHR1cmVXaWRnZXQoVGV4dFRleHR1
cmVXaWRnZXQpOg0KICAgICIiIg0KICAgIEhhbmRsZXMgYSB0ZXh0dXJlIHJl
c291cmNlIHdpdGggYSB0ZXh0Q29sb3IgYW5kIGZvbnQgc2V0dGluZ3MuDQog
ICAgIiIiDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VuYW1lLCBzdHls
ZWJveCwgcGFyZW50cmVsYXRpdmU9MSk6DQogICAgICAgIFRleHRUZXh0dXJl
V2lkZ2V0Ll9faW5pdF9fKHNlbGYsIGJhc2VuYW1lLCBzdHlsZWJveCwgcGFy
ZW50cmVsYXRpdmUpDQogICAgICAgIHNlbGYubmV4dFJvdygpDQogICAgICAg
IHNlbGYuZm9udCA9IEZvbnRSZXNvdXJjZVdpZGdldChiYXNlbmFtZSArICcu
eGZ0Jywgc3R5bGVib3gpDQogICAgICAgIHNlbGYucGFjayhzZWxmLmZvbnQu
ZGVmYXVsdFBhY2soKSwgNCwgMikNCiAgICAgICAgc2VsZi5qdXN0aWZ5ID0g
SnVzdGlmeVJlc291cmNlV2lkZ2V0KGJhc2VuYW1lKycuanVzdGlmeScsIHN0
eWxlYm94KQ0KICAgICAgICBzZWxmLnBhY2tMYWJlbGVkKHNlbGYuanVzdGlm
eSkNCmNsYXNzIE1hc2tSZXNvdXJjZVdpZGdldChMYWJlbGVkUmVzb3VyY2VX
aWRnZXQpOg0KICAgIEJVVFRPTl9ESVIgPSBvcy5wYXRoLmV4cGFuZHVzZXIo
J34vLm9wZW5ib3gvYnV0dG9ucycpDQogICAgRklMRV9TRUxFQ1RPUiA9IGd0
ay5GaWxlU2VsZWN0aW9uKCdTZWxlY3QgWEJNIE1hc2snKQ0KICAgIEZJTEVf
U0VMRUNUT1Iuc2V0X2ZpbGVuYW1lKEJVVFRPTl9ESVIgKyAnLycpDQogICAg
RklMRV9TRUxFQ1RPUi5zZXRfc2VsZWN0X211bHRpcGxlKDApDQogICAgRklM
RV9TRUxFQ1RPUi5oaWRlX2ZpbGVvcF9idXR0b25zKCkNCiAgICBkZWYgZ2V0
RmlsZW5hbWUoY2xzLCB0aXRsZSA9ICdTZWxlY3QgWEJNIE1hc2snKToNCiAg
ICAgICAgY2xzLkZJTEVfU0VMRUNUT1Iuc2V0X3RpdGxlKHRpdGxlKQ0KICAg
ICAgICBjbHMuRklMRV9TRUxFQ1RPUi5jb21wbGV0ZSgnKi54Ym0nKQ0KICAg
ICAgICBmaWxlbmFtZSA9IE5vbmUNCiAgICAgICAgaWYgY2xzLkZJTEVfU0VM
RUNUT1IucnVuKCkgPT0gZ3RrLlJFU1BPTlNFX09LOg0KICAgICAgICAgICAg
ZmlsZW5hbWUgPSBjbHMuRklMRV9TRUxFQ1RPUi5nZXRfZmlsZW5hbWUoKQ0K
ICAgICAgICAgICAgaWYgY2xzLkJVVFRPTl9ESVIgPT0gb3MucGF0aC5kaXJu
YW1lKGZpbGVuYW1lKToNCiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9z
LnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpDQogICAgICAgIGNscy5GSUxFX1NF
TEVDVE9SLmhpZGUoKQ0KICAgICAgICByZXR1cm4gZmlsZW5hbWUNCiAgICBn
ZXRGaWxlbmFtZSA9IGNsYXNzbWV0aG9kKGdldEZpbGVuYW1lKQ0KDQogICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJlc25hbWUsIHN0eWxlYm94LCBsYWJlbCA9
IE5vbmUpOg0KICAgICAgICBMYWJlbGVkUmVzb3VyY2VXaWRnZXQuX19pbml0
X18oc2VsZiwgcmVzbmFtZSwgc3R5bGVib3gsIGxhYmVsKQ0KICAgICAgICBz
ZWxmLndpZGdldCA9IGd0ay5IQm94KCkNCg0KICAgICAgICBzZWxmLmVudHJ5
ID0gZ3RrLkVudHJ5KCkNCiAgICAgICAgc2VsZi5jb25uZWN0V2lkZ2V0KHNl
bGYuZW50cnksICJjaGFuZ2VkIiwgDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYW1iZGEgdzogc2VsZi5zZXRWYWx1ZSh3LmdldF90ZXh0KCkpKQ0K
ICAgICAgICBzZWxmLndpZGdldC5wYWNrX3N0YXJ0KHNlbGYuZW50cnkpDQoN
CiAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbignLi4uJykNCiAgICAgICAg
c2VsZi5jb25uZWN0V2lkZ2V0KGJ1dHRvbiwgImNsaWNrZWQiLCBzZWxmLnNl
dE1hc2tGaWxlKQ0KICAgICAgICBzZWxmLndpZGdldC5wYWNrX3N0YXJ0KGJ1
dHRvbiwgMCwgMCkNCg0KICAgICAgICBzZWxmLnJlc2V0KCkNCiAgICBkZWYg
cmVzZXRDb21wb25lbnRzKHNlbGYpOg0KICAgICAgICBzZWxmLmVudHJ5LnNl
dF90ZXh0KHNlbGYuZ2V0VmFsdWUoKSkNCiAgICBkZWYgc2V0TWFza0ZpbGUo
c2VsZiwgdyk6DQogICAgICAgIGZpbGVuYW1lID0gTWFza1Jlc291cmNlV2lk
Z2V0LmdldEZpbGVuYW1lKHNlbGYucmVzbmFtZSkNCiAgICAgICAgaWYgZmls
ZW5hbWU6DQogICAgICAgICAgICBzZWxmLnNldFZhbHVlKGZpbGVuYW1lKQ0K
ICAgICAgICAgICAgc2VsZi5lbnRyeS5zZXRfdGV4dChmaWxlbmFtZSkNCiAg
ICAgICAgICAgIHNlbGYuc3R5bGVib3guc2V0Q2hhbmdlZCgpDQpjbGFzcyBC
dWxsZXRNZW51UmVzb3VyY2VXaWRnZXQoTGFiZWxlZFJlc291cmNlV2lkZ2V0
KToNCiAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzbmFtZSwgc3R5bGVib3gp
Og0KICAgICAgICBMYWJlbGVkUmVzb3VyY2VXaWRnZXQuX19pbml0X18oc2Vs
ZiwgcmVzbmFtZSwgc3R5bGVib3gsICd0eXBlJykNCiAgICAgICAgc2VsZi53
aWRnZXQgPSBTdHlsZU9wdGlvbk1lbnUoQnVsbGV0UmVzb3VyY2UuVkFMVUVT
LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5nZXRWYWx1ZSgpLCBzZWxmLnNldFZhbHVlLCBzZWxmKQ0KICAgIGRlZiBy
ZXNldENvbXBvbmVudHMoc2VsZik6DQogICAgICAgIHNlbGYud2lkZ2V0LnNo
b3dJdGVtKHNlbGYuZ2V0VmFsdWUoKSkNCmNsYXNzIEJ1bGxldFBvc2l0aW9u
UmVzb3VyY2VXaWRnZXQoTGFiZWxlZFJlc291cmNlV2lkZ2V0KToNCiAgICBk
ZWYgX19pbml0X18oc2VsZiwgcmVzbmFtZSwgc3R5bGVib3gpOg0KICAgICAg
ICBMYWJlbGVkUmVzb3VyY2VXaWRnZXQuX19pbml0X18oc2VsZiwgcmVzbmFt
ZSwgc3R5bGVib3gsICdwb3NpdGlvbicpDQogICAgICAgIHNlbGYud2lkZ2V0
ID0gU3R5bGVPcHRpb25NZW51KEJ1bGxldFBvc2l0aW9uUmVzb3VyY2UuVkFM
VUVTLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5nZXRWYWx1ZSgpLCBzZWxmLnNldFZhbHVlLCBzZWxmKQ0KICAgIGRl
ZiByZXNldENvbXBvbmVudHMoc2VsZik6DQogICAgICAgIHNlbGYud2lkZ2V0
LnNob3dJdGVtKHNlbGYuZ2V0VmFsdWUoKSkNCmNsYXNzIEludGVnZXJSZXNv
dXJjZVdpZGdldChMYWJlbGVkUmVzb3VyY2VXaWRnZXQpOg0KICAgIGRlZiBf
X2luaXRfXyhzZWxmLCByZXNuYW1lLCBzdHlsZWJveCwgbGFiZWwgPSBOb25l
LCANCiAgICAgICAgICAgICAgICAgbWluID0gMSwgbWF4ID0gMjAsIGluY19z
dGVwID0gMSwgaW5jX3BhZ2UgPSA1KToNCiAgICAgICAgTGFiZWxlZFJlc291
cmNlV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIHJlc25hbWUsIHN0eWxlYm94LCBs
YWJlbCkNCg0KICAgICAgICBzZWxmLndpZGdldCA9IGd0ay5TcGluQnV0dG9u
KCkNCiAgICAgICAgc2VsZi53aWRnZXQuc2V0X251bWVyaWMoMSkNCiAgICAg
ICAgc2VsZi53aWRnZXQuc2V0X3JhbmdlKG1pbiwgbWF4KQ0KICAgICAgICBz
ZWxmLndpZGdldC5zZXRfaW5jcmVtZW50cyhpbmNfc3RlcCwgaW5jX3BhZ2Up
DQogICAgICAgIHNlbGYuY29ubmVjdFdpZGdldChzZWxmLndpZGdldCwgInZh
bHVlX2NoYW5nZWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh
bWJkYSB3OiBzZWxmLnNldFZhbHVlKHcuZ2V0X3ZhbHVlX2FzX2ludCgpKSkN
CiAgICAgICAgc2VsZi5yZXNldCgpDQogICAgZGVmIHJlc2V0Q29tcG9uZW50
cyhzZWxmKToNCiAgICAgICAgc2VsZi53aWRnZXQuc2V0X3ZhbHVlKHNlbGYu
Z2V0VmFsdWUoKSkNCg0KY2xhc3MgU3R5bGVCb3goZ3RrLldpbmRvdyk6DQog
ICAgIiIiDQogICAgTWFpbiB3aW5kb3cgb2YgdGhlIFN0eWxlQm94IGFwcGxp
Y2F0aW9uLiAgQ3VycmVudGx5LCBpdCBjYW4gb25seSBoYW5kbGUgDQogICAg
b25lIHRoZW1lIGF0IGEgdGltZS4NCg0KICAgIEluc3RhbmNlIFZhcmlhYmxl
czoNCiAgICAgICAgdGhlbWUgOiBUaGVtZSAgICAgICAgICAgLSBjdXJyZW50
IHRoZW1lIGJlaW5nIGVkaXRlZC4NCiAgICAgICAgbm90ZWJvb2sgOiBndGsu
Tm90ZUJvb2sgLSBrZWVwcyB0cmFjayBvZiBzZXBhcmF0ZSBwYWdlcy4gDQog
ICAgICAgIHRyZWUgOiBndGsuVHJlZVN0b3JlICAgIC0gdHJlZSBmb3IgaGll
cmFyY2h5IG9mIG5vdGVib29rIHBhZ2VzDQogICAgICAgIGl0ZW1mYWN0b3J5
IDogZ3RrLkl0ZW1GYWN0b3J5IC0gZmFjdG9yeSBmb3IgbWVudSBpdGVtcy4g
IG11c3Qga2VlcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGEgcmVmZXJlbmNlIHRvLg0KICAgICAgICByb290IDogWGxpYi5E
aXNwbGF5ICAgICAtIGN1cnJlbnQgWCBkaXNwbGF5OyBuZWVkZWQgdG8gZ2V0
IGluZm9ybWF0aW9uIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFib3V0IGN1cnJlbnRseSBydW5uaW5nIG9wZW5ib3gNCiAgICAgICAg
Y2hlY2twb2ludCA6IGludCAgICAgICAgLSBjdXJyZW50IGNoZWNrcG9pbnQg
bnVtYmVyDQogICAgIiIiDQogICAgT1BFTkJPWF9SQyA9IG9zLmVudmlyb25b
J0hPTUUnXSArICcvLm9wZW5ib3gvcmMnDQogICAgRlJPTlRJUyA9ICdTdHls
ZWJveCB2ZXJzaW9uIDAuMywgQ29weXJpZ2h0IChDKSAyMDAzICBBdmEgQXJh
Y2huZSBKYXJ2aXMuXG4nICsgXA0KICAgICAgICAgICAgJ1N0eWxlYm94IGNv
bWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMg
c2VlIExJQ0VOU0UuJyArXA0KICAgICAgICAgICAgJ1RoaXMgaXMgZnJlZSBz
b2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUg
aXQnICsgXA0KICAgICAgICAgICAgJ3VuZGVyIGNlcnRhaW4gY29uZGl0aW9u
czsgc2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuJw0KDQogICAgZGVmIF9faW5p
dF9fKHNlbGYpOg0KICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYp
DQogICAgICAgIHNlbGYuY29ubmVjdCgiZGVzdHJveSIsIHNlbGYucXVpdCkN
Cg0KICAgICAgICBzZWxmLmNoYW5nZWQgPSAwDQogICAgICAgIHNlbGYudGhl
bWUgPSBOb25lDQogICAgICAgIHNlbGYuZGlzcGxheSA9IERpc3BsYXkoKQ0K
DQogICAgICAgIHNlbGYud2lkZ2V0cyA9IFtdDQoNCiAgICAgICAgdmJveCA9
IGd0ay5WQm94KCkNCiAgICAgICAgc2VsZi5hZGQodmJveCkNCiAgICAgICAg
dmJveC5wYWNrX3N0YXJ0KHNlbGYuY3JlYXRlTWVudUJhcigpLCAwLCAwKQ0K
ICAgICAgICBoYm94ID0gZ3RrLkhCb3goKQ0KICAgICAgICB2Ym94LnBhY2tf
c3RhcnQoaGJveCkNCiAgICAgICAgdmJveDIgPSBndGsuVkJveCgpDQogICAg
ICAgIHZib3gyLnBhY2tfc3RhcnQoc2VsZi5jcmVhdGVOb3RlYm9vaygpKQ0K
ICAgICAgICB2Ym94Mi5wYWNrX3N0YXJ0KHNlbGYuY3JlYXRlQnV0dG9uQXJl
YSgpLCAwLCAwKQ0KICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi5jcmVh
dGVUcmVlVmlldygpKQ0KICAgICAgICBoYm94LnBhY2tfc3RhcnQodmJveDIp
DQogICAgICAgIHNlbGYuc3RhdHVzYmFyID0gZ3RrLlN0YXR1c2JhcigpDQog
ICAgICAgIHZib3gucGFja19zdGFydChzZWxmLnN0YXR1c2JhciwgMCwgMCkN
Cg0KICAgICAgICBzZWxmLmdldEN1cnJlbnRUaGVtZSgpDQogICAgICAgIHNl
bGYuY3JlYXRlUGFuZWxzKCkNCiAgICAgICAgc2VsZi5jcmVhdGVEaWFsb2dz
KCkNCiAgICBkZWYgc2V0VGl0bGUoc2VsZik6DQogICAgICAgIHNlbGYuc2V0
X3RpdGxlKCdTdHlsZWJveDogJyArIChzZWxmLnRoZW1lLmZpbGVuYW1lIG9y
ICcqbmV3KicpICsgXA0KICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYu
Y2hhbmdlZCBhbmQgJyBbY2hhbmdlZF0nIG9yICcnKSkNCiAgICBkZWYgc2V0
Q2hhbmdlZChzZWxmKToNCiAgICAgICAgaWYgbm90IHNlbGYuY2hhbmdlZDoN
CiAgICAgICAgICAgIHNlbGYuY2hhbmdlZCA9IDENCiAgICAgICAgICAgIHNl
bGYuc2V0VGl0bGUoKQ0KICAgIGRlZiBnZXRDdXJyZW50VGhlbWUoc2VsZik6
DQogICAgICAgIHJjX3JkYiA9IFJlc291cmNlREIoU3R5bGVCb3guT1BFTkJP
WF9SQykNCiAgICAgICAgZmlsZW5hbWUgPSByY19yZGIuZ2V0KCdzZXNzaW9u
LnN0eWxlRmlsZScsICdzZXNzaW9uLnN0eWxlRmlsZScpDQogICAgICAgIHNl
bGYub3BlblRoZW1lKGZpbGVuYW1lKQ0KICAgICAgICBzZWxmLnNldFN0YXR1
cygnT3BlbmJveCBsb2FkZWQgY3VycmVudCBzdHlsZScpDQogICAgZGVmIHNl
dEN1cnJlbnRUaGVtZShzZWxmLCBmaWxlbmFtZSk6DQogICAgICAgIHJjX3Jk
YiA9IFJlc291cmNlREIoU3R5bGVCb3guT1BFTkJPWF9SQykNCiAgICAgICAg
cmNfcmRiLmluc2VydCgnc2Vzc2lvbi5zdHlsZUZpbGUnLCBmaWxlbmFtZSkN
CiAgICAgICAgcmRiX2ZpbGUgPSBvcGVuKFN0eWxlQm94Lk9QRU5CT1hfUkMs
ICd3JykNCiAgICAgICAgcmRiX2ZpbGUud3JpdGUocmNfcmRiLm91dHB1dCgp
KQ0KICAgICAgICByZGJfZmlsZS5jbG9zZSgpDQogICAgICAgIHNlbGYucmVj
b25maWd1cmVPcGVuYm94KCkNCiAgICAgICAgc2VsZi5zZXRTdGF0dXMoJ09w
ZW5ib3ggbG9hZGVkICcgKyBmaWxlbmFtZSkNCg0KICAgICMgU2lnbmFsIG1l
dGhvZHMNCiAgICBkZWYgcXVpdChzZWxmLCAqcmVzdCk6DQogICAgICAgIGlm
IHNlbGYuY2hhbmdlZDoNCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFza1Vz
ZXIoIlRoZW1lIGNoYW5nZWQgYW5kIG5vdCBzYXZlZC4gIFN0aWxsIHF1aXQ/
Iik6DQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgIGd0ay5tYWlu
X3F1aXQoKQ0KICAgIGRlZiBzaG93UGFnZUJ1dHRvblByZXNzKHNlbGYsIHZp
ZXcsIGV2ZW50KToNCiAgICAgICAgcGF0aCA9IHZpZXcuZ2V0X3BhdGhfYXRf
cG9zKGV2ZW50LngsIGV2ZW50LnkpWzBdDQogICAgICAgIHNlbGYubm90ZWJv
b2suc2V0X2N1cnJlbnRfcGFnZSgNCiAgICAgICAgICAgIHNlbGYudHJlZS5n
ZXRfdmFsdWUoc2VsZi50cmVlLmdldF9pdGVyKHBhdGgpLCAwKSkNCiAgICAg
ICAgc2VsZWN0aW9uID0gdmlldy5nZXRfc2VsZWN0aW9uKCkNCiAgICAgICAg
c2VsZWN0aW9uLnNlbGVjdF9wYXRoKHBhdGgpDQogICAgZGVmIHNob3dQYWdl
S2V5UmVsZWFzZShzZWxmLCB2aWV3LCBldmVudCk6DQogICAgICAgIHNlbGVj
dGlvbiA9IHZpZXcuZ2V0X3NlbGVjdGlvbigpDQogICAgICAgIG1vZGVsLCBp
dGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpDQogICAgICAgIGtleW5h
bWUgPSBndGsuZ2RrLmtleXZhbF9uYW1lKGV2ZW50LmtleXZhbCkNCiAgICAg
ICAgaWYga2V5bmFtZSBpbiBbJ0Rvd24nLCAnVXAnXTogDQogICAgICAgICAg
ICBzZWxmLm5vdGVib29rLnNldF9jdXJyZW50X3BhZ2UobW9kZWwuZ2V0X3Zh
bHVlKGl0ZXIsIDApKQ0KICAgICAgICBlbGlmIGtleW5hbWUgPT0gJ0xlZnQn
Og0KICAgICAgICAgICAgZGVmIGNvbGxhcHNlX3BhcmVudCgpOg0KICAgICAg
ICAgICAgICAgIHBhcmVudF9pdGVyID0gbW9kZWwuaXRlcl9wYXJlbnQoaXRl
cikNCiAgICAgICAgICAgICAgICBpZiBwYXJlbnRfaXRlcjoNCiAgICAgICAg
ICAgICAgICAgICAgcGF0aCA9IG1vZGVsLmdldF9wYXRoKHBhcmVudF9pdGVy
KQ0KICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbGxhcHNlX3JvdyhwYXRo
KQ0KICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0X3BhdGgo
cGF0aCkNCiAgICAgICAgICAgIGlmIG1vZGVsLml0ZXJfaGFzX2NoaWxkKGl0
ZXIpOg0KICAgICAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChp
dGVyKQ0KICAgICAgICAgICAgICAgIGlmIHZpZXcucm93X2V4cGFuZGVkKHBh
dGgpOg0KICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbGxhcHNlX3Jvdyhw
YXRoKQ0KICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAg
ICAgIGNvbGxhcHNlX3BhcmVudCgpDQogICAgICAgICAgICBlbHNlOg0KICAg
ICAgICAgICAgICAgIGNvbGxhcHNlX3BhcmVudCgpDQogICAgICAgIGVsaWYg
a2V5bmFtZSA9PSAnUmlnaHQnOg0KICAgICAgICAgICAgcGF0aCA9IG1vZGVs
LmdldF9wYXRoKGl0ZXIpDQogICAgICAgICAgICB2aWV3LmV4cGFuZF9yb3co
cGF0aCwgMCkNCiAgICBkZWYgb3BlblRoZW1lKHNlbGYsIGZpbGVuYW1lID0g
Tm9uZSk6DQogICAgICAgIHNlbGYudGhlbWUgPSBUaGVtZShmaWxlbmFtZSkN
CiAgICAgICAgZm9yIHcgaW4gc2VsZi53aWRnZXRzOiB3LnJlc2V0KCkNCiAg
ICAgICAgIyBzZXQgY2hhbmdlZCBhZnRlciByZXNldHRpbmcgd2lkZ2V0cywg
YmVjYXVzZSB0aGV5IA0KICAgICAgICAjIG1pZ2h0IGZhbHNlbHkgaW5kaWNh
dGUgY2hhbmdlIHdoaWxlIHJlYWRpbmcgbmV3IHZhbHVlcw0KICAgICAgICBz
ZWxmLmNoYW5nZWQgPSAwIA0KICAgICAgICBzZWxmLnNldFRpdGxlKCkNCiAg
ICAgICAgc2VsZi5zZXRTdGF0dXMoJ09wZW5lZCAnICsgKGZpbGVuYW1lIG9y
ICcqbmV3KicpKQ0KICAgIGRlZiBjaG9vc2VUaGVtZShzZWxmLCAqcmVzdCk6
DQogICAgICAgIGlmIHNlbGYuY2hhbmdlZDoNCiAgICAgICAgICAgIGlmIG5v
dCBzZWxmLmFza1VzZXIoIlRoZW1lIGNoYW5nZXMgYW5kIG5vdCBzYXZlZC4g
IFN0aWxsIG9wZW4/Iik6DQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAg
ICAgIGZpbGVuYW1lID0gc2VsZi5nZXRGaWxlbmFtZSgnU2VsZWN0IFRoZW1l
JykNCiAgICAgICAgaWYgZmlsZW5hbWU6IA0KICAgICAgICAgICAgc2VsZi5v
cGVuVGhlbWUoZmlsZW5hbWUpDQogICAgICAgICAgICBzZWxmLnNldEN1cnJl
bnRUaGVtZShmaWxlbmFtZSkNCiAgICBkZWYgc2F2ZVRoZW1lKHNlbGYsIGZp
bGVuYW1lID0gTm9uZSk6DQogICAgICAgIGlmIGZpbGVuYW1lOg0KICAgICAg
ICAgICAgc2VsZi50aGVtZS5zYXZlKGZpbGVuYW1lKQ0KICAgICAgICAgICAg
c2VsZi5zZXRTdGF0dXMoJ1NhdmVkIGFzICcgKyBmaWxlbmFtZSkNCiAgICAg
ICAgICAgIHNlbGYuY2hhbmdlZCA9IDANCiAgICAgICAgICAgIHNlbGYuc2V0
VGl0bGUoKQ0KICAgICAgICAgICAgc2VsZi5zZXRDdXJyZW50VGhlbWUoZmls
ZW5hbWUpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBpZiBub3Qgc2Vs
Zi50aGVtZS5maWxlbmFtZToNCiAgICAgICAgICAgICAgICBzZWxmLnNhdmVU
aGVtZUFzKCkNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAg
c2VsZi50aGVtZS5zYXZlKCkNCiAgICAgICAgICAgICAgICBzZWxmLmNoYW5n
ZWQgPSAwDQogICAgICAgICAgICAgICAgc2VsZi5zZXRUaXRsZSgpDQogICAg
ICAgICAgICAgICAgc2VsZi5zZXRTdGF0dXMoJ1NhdmVkLicpDQogICAgICAg
ICAgICAgICAgc2VsZi5yZWNvbmZpZ3VyZU9wZW5ib3goKQ0KICAgIGRlZiBz
YXZlVGhlbWVBcyhzZWxmLCAqcmVzdCk6DQogICAgICAgIGZpbGVuYW1lID0g
c2VsZi5nZXRGaWxlbmFtZSgnU2F2ZSBUaGVtZSBBcy4uLicpDQogICAgICAg
IGlmIG5vdCBmaWxlbmFtZTogcmV0dXJuDQogICAgICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKGZpbGVuYW1lKToNCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFz
a1VzZXIoJyVzIGFscmVhZHkgZXhpc3RzLiAgT3ZlcndyaXRlPycgJSBmaWxl
bmFtZSk6DQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgIHNlbGYu
c2F2ZVRoZW1lKGZpbGVuYW1lKQ0KICAgIGRlZiBzZXRTdGF0dXMoc2VsZiwg
bWVzc2FnZSk6DQogICAgICAgIHNlbGYuc3RhdHVzYmFyLnB1c2goc2VsZi5z
dGF0dXNiYXIuZ2V0X2NvbnRleHRfaWQoJ01haW4gV2luZG93JyksIG1lc3Nh
Z2UpDQogICAgZGVmIHJlY29uZmlndXJlT3BlbmJveChzZWxmLCAqcmVzdCk6
DQogICAgICAgIHJvb3QgPSBzZWxmLmRpc3BsYXkuc2NyZWVuKCkucm9vdA0K
ICAgICAgICBibGFja2JveF9waWRfYXRvbSA9IHNlbGYuZGlzcGxheS5kaXNw
bGF5LmdldF9hdG9tKCdfQkxBQ0tCT1hfUElEJykNCiAgICAgICAgcHJvcCA9
IHJvb3QuZ2V0X3Byb3BlcnR5KGJsYWNrYm94X3BpZF9hdG9tLCBYYXRvbS5D
QVJESU5BTCwgMCwgMSkNCiAgICAgICAgaWYgcHJvcDoNCiAgICAgICAgICAg
IG9iX3BpZCA9IGludChwcm9wLnZhbHVlLnRvbGlzdCgpWzBdKQ0KICAgICAg
ICAgICAgb3Mua2lsbChvYl9waWQsIHNpZ25hbC5TSUdIVVApDQogICAgICAg
ICAgICBzZWxmLnNldFN0YXR1cygnT3BlbmJveCByZWNvbmZpZ3VyZWQuJykN
Cg0KICAgICMgRGlhbG9ncw0KICAgIGRlZiBnZXRGaWxlbmFtZShzZWxmLCB0
aXRsZSk6DQogICAgICAgIHNlbGYuZmRnLnNldF90aXRsZSh0aXRsZSkNCiAg
ICAgICAgZmlsZW5hbWUgPSBOb25lDQogICAgICAgIGlmIHNlbGYuZmRnLnJ1
bigpID09IGd0ay5SRVNQT05TRV9PSzoNCiAgICAgICAgICAgIGZpbGVuYW1l
ID0gc2VsZi5mZGcuZ2V0X2ZpbGVuYW1lKCkNCiAgICAgICAgc2VsZi5mZGcu
aGlkZSgpDQogICAgICAgIHJldHVybiBmaWxlbmFtZQ0KICAgIGRlZiBhc2tV
c2VyKHNlbGYsIG1lc3NhZ2UpOg0KICAgICAgICBhc2tfZGlhbG9nID0gZ3Rr
Lk1lc3NhZ2VEaWFsb2coc2VsZiwgZ3RrLkRJQUxPR19NT0RBTCwgDQogICAg
ICAgICAgICBndGsuTUVTU0FHRV9XQVJOSU5HLCBndGsuQlVUVE9OU19ZRVNf
Tk8sIG1lc3NhZ2UpDQogICAgICAgIHJlc3BvbnNlID0gYXNrX2RpYWxvZy5y
dW4oKQ0KICAgICAgICBhc2tfZGlhbG9nLmRlc3Ryb3koKQ0KICAgICAgICBy
ZXR1cm4gKHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVMpDQogICAgZGVm
IHNob3dBYm91dChzZWxmLCAqcmVzdCk6DQogICAgICAgIG1kID0gZ3RrLk1l
c3NhZ2VEaWFsb2coc2VsZiwgYnV0dG9ucz1ndGsuQlVUVE9OU19PSywgDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mb3JtYXQ9
U3R5bGVCb3guRlJPTlRJUykNCiAgICAgICAgbWQuc2V0X3RpdGxlKCdBYm91
dCBTdHlsZWJveCcpDQogICAgICAgIG1kLnJ1bigpDQogICAgICAgIG1kLmRl
c3Ryb3koKQ0KDQogICAgIyBXaWRnZXQtY3JlYXRpbmcgbWV0aG9kcw0KICAg
IGRlZiBjcmVhdGVNZW51QmFyKHNlbGYpOg0KICAgICAgICBtZW51X2l0ZW1z
ID0gKCANCiAgICAgICAgICAgICgnL19GaWxlJywgTm9uZSwgTm9uZSwgMCwg
JzxCcmFuY2g+JyksDQogICAgICAgICAgICAoJy9GaWxlL19OZXcnLCAnPGNv
bnRyb2w+TicsIGxhbWJkYSAqdzogc2VsZi5vcGVuVGhlbWUoKSwgMCwgDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxTdG9ja0l0ZW0+JywgZ3Rr
LlNUT0NLX05FVyksIA0KICAgICAgICAgICAgKCcvRmlsZS9fT3BlbicsICc8
Y29udHJvbD5PJywgc2VsZi5jaG9vc2VUaGVtZSwgMCwgDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzxTdG9ja0l0ZW0+JywgZ3RrLlNUT0NLX09Q
RU4pLCANCiAgICAgICAgICAgICgnL0ZpbGUvX1NhdmUnLCAnPGNvbnRyb2w+
UycsIGxhbWJkYSAqdzogc2VsZi5zYXZlVGhlbWUoKSwgMCwgDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzxTdG9ja0l0ZW0+JywgZ3RrLlNUT0NL
X1NBVkUpLA0KICAgICAgICAgICAgKCcvRmlsZS9TYXZlIF9Bcy4uLicsICc8
Y29udHJvbD5BJywgc2VsZi5zYXZlVGhlbWVBcywgMCwgDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzxTdG9ja0l0ZW0+JywgZ3RrLlNUT0NLX1NB
VkVfQVMpLCANCiAgICAgICAgICAgICgnL0ZpbGUvc2VwMScsIE5vbmUsIE5v
bmUsIDAsICc8U2VwYXJhdG9yPicpLA0KICAgICAgICAgICAgKCcvRmlsZS9f
UXVpdCcsICc8Y29udHJvbD5RJywgc2VsZi5xdWl0LCAwLCAnPFN0b2NrSXRl
bT4nLCBndGsuU1RPQ0tfUVVJVCksDQoNCiAgICAgICAgICAgICMoJy9fRWRp
dCcsIE5vbmUsIE5vbmUsIDAsICc8QnJhbmNoPicpLA0KICAgICAgICAgICAg
IygnL0VkaXQvX1JldmVydCcsICc8Y29udHJvbD5SJywgTm9uZSwgMCwgJzxT
dG9ja0l0ZW0+JyxndGsuU1RPQ0tfUkVWRVJUX1RPX1NBVkVEKSwNCg0KICAg
ICAgICAgICAgKCcvSGVscCcsIE5vbmUsIE5vbmUsIDAsICc8TGFzdEJyYW5j
aD4nKSwNCiAgICAgICAgICAgICgnL0hlbHAvQWJvdXQnLCBOb25lLCBzZWxm
LnNob3dBYm91dCwgMCwgJycpDQogICAgICAgICkNCiAgICAgICAgYWNjZWxn
cm91cCA9IGd0ay5BY2NlbEdyb3VwKCkNCiAgICAgICAgc2VsZi5hZGRfYWNj
ZWxfZ3JvdXAoYWNjZWxncm91cCkNCiAgICAgICAgc2VsZi5pdGVtX2ZhY3Rv
cnkgPSBndGsuSXRlbUZhY3RvcnkoZ3RrLk1lbnVCYXIsICc8bWFpbj4nLCBh
Y2NlbGdyb3VwKQ0KICAgICAgICBzZWxmLml0ZW1fZmFjdG9yeS5jcmVhdGVf
aXRlbXMobWVudV9pdGVtcykNCiAgICAgICAgcmV0dXJuIHNlbGYuaXRlbV9m
YWN0b3J5LmdldF93aWRnZXQoJzxtYWluPicpDQogICAgZGVmIGNyZWF0ZUJ1
dHRvbkFyZWEoc2VsZik6DQogICAgICAgIHF1aXRfYnV0dG9uID0gZ3RrLkJ1
dHRvbihndGsuU1RPQ0tfUVVJVCkNCiAgICAgICAgcXVpdF9idXR0b24uY29u
bmVjdCgiY2xpY2tlZCIsIHNlbGYucXVpdCkNCiAgICAgICAgc2F2ZV9idXR0
b24gPSBndGsuQnV0dG9uKGd0ay5TVE9DS19TQVZFKQ0KICAgICAgICBzYXZl
X2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhICp3OiBzZWxmLnNh
dmVUaGVtZSgpKQ0KICAgICAgICBzYXZlYXNfYnV0dG9uID0gZ3RrLkJ1dHRv
bihndGsuU1RPQ0tfU0FWRV9BUykNCiAgICAgICAgc2F2ZWFzX2J1dHRvbi5j
b25uZWN0KCJjbGlja2VkIiwgbGFtYmRhICp3OiBzZWxmLnNhdmVUaGVtZUFz
KCkpDQogICAgICAgIGJ1dHRvbnMgPSBbc2F2ZV9idXR0b24sIHNhdmVhc19i
dXR0b24sIHF1aXRfYnV0dG9uXQ0KICAgICAgICBidXR0b25hcmVhID0gZ3Rr
LkhCdXR0b25Cb3goKQ0KICAgICAgICBidXR0b25hcmVhLnNldF9sYXlvdXQo
Z3RrLkJVVFRPTkJPWF9FTkQpDQogICAgICAgIGZvciBiIGluIGJ1dHRvbnM6
DQogICAgICAgICAgICBiLnNldF91c2Vfc3RvY2soMSkNCiAgICAgICAgICAg
IGJ1dHRvbmFyZWEucGFja19zdGFydChiKQ0KICAgICAgICByZXR1cm4gYnV0
dG9uYXJlYQ0KICAgIGRlZiBjcmVhdGVUcmVlVmlldyhzZWxmKToNCiAgICAg
ICAgc2VsZi50cmVlID0gZ3RrLlRyZWVTdG9yZShnb2JqZWN0LlRZUEVfSU5U
LCBnb2JqZWN0LlRZUEVfU1RSSU5HKQ0KICAgICAgICB0cmVldmlldyA9IGd0
ay5UcmVlVmlldyhzZWxmLnRyZWUpDQogICAgICAgIHRyZWV2aWV3LnNldF9o
ZWFkZXJzX3Zpc2libGUoMCkNCiAgICAgICAgdHJlZXZpZXcuYXBwZW5kX2Nv
bHVtbigNCiAgICAgICAgICAgIGd0ay5UcmVlVmlld0NvbHVtbignJywgZ3Rr
LkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD0xKSkNCiAgICAgICAgdHJlZXZp
ZXcuY29ubmVjdCgiYnV0dG9uX3ByZXNzX2V2ZW50Iiwgc2VsZi5zaG93UGFn
ZUJ1dHRvblByZXNzKQ0KICAgICAgICB0cmVldmlldy5jb25uZWN0KCJrZXlf
cmVsZWFzZV9ldmVudCIsIHNlbGYuc2hvd1BhZ2VLZXlSZWxlYXNlKQ0KDQog
ICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkNCiAgICAg
ICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywg
Z3RrLlBPTElDWV9BVVRPTUFUSUMpDQogICAgICAgIHNjcm9sbGVkLmFkZF93
aXRoX3ZpZXdwb3J0KHRyZWV2aWV3KQ0KICAgICAgICBzY3JvbGxlZC5zZXRf
c2l6ZV9yZXF1ZXN0KDE3NSwgMjAwKQ0KDQogICAgICAgIHJldHVybiBzY3Jv
bGxlZA0KICAgIGRlZiBjcmVhdGVOb3RlYm9vayhzZWxmKToNCiAgICAgICAg
c2VsZi5ub3RlYm9vayA9IGd0ay5Ob3RlYm9vaygpDQogICAgICAgIHNlbGYu
bm90ZWJvb2suc2V0X3Nob3dfdGFicygwKQ0KICAgICAgICBzZWxmLm5vdGVi
b29rLnNldF9zaG93X2JvcmRlcigwKQ0KICAgICAgICByZXR1cm4gc2VsZi5u
b3RlYm9vaw0KICAgIGRlZiBjcmVhdGVEaWFsb2dzKHNlbGYpOg0KICAgICAg
ICBzZWxmLmZkZyA9IGd0ay5GaWxlU2VsZWN0aW9uKCdTZWxlY3QgRmlsZScp
DQoNCiAgICAjIFBhbmVsLWNyZWF0aW5nIGZ1bmN0aW9ucw0KICAgIGRlZiBj
cmVhdGVQYW5lbChzZWxmLCBuYW1lLCBwYXJlbnQgPSBOb25lKToNCiAgICAg
ICAgIiIiDQogICAgICAgIENyZWF0ZXMgYSBwYW5lbCBpbiB0aGUgbWFpbiB3
aW5kb3cncyBub3RlYm9vay4NCiAgICAgICAgUGFyYW1ldGVyczoNCiAgICAg
ICAgICAgIG5hbWUgOiBzdHIgICAgICAtIG5hbWUgb2YgdGhlIHBhbmVsDQog
ICAgICAgICAgICBwYXJlbnQgOiBndGsuVHJlZUl0ZXIgLSBwYXJlbnQgbm9k
ZSBvZiB0aGlzIHBhbmVsDQogICAgICAgIFJldHVybnM6DQogICAgICAgICAg
ICBhIFBhbmVsIGFuZCBhbiBpdGVyIGludG8gdGhlIG1haW4gd2luZG93J3Mg
dHJlZS4NCiAgICAgICAgIiIiDQogICAgICAgIHBhbmVsID0gZ3RrLkZyYW1l
KCkNCiAgICAgICAgcGFuZWwuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1df
Tk9ORSkNCiAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZV9tZW51
KHBhbmVsLCBndGsuTGFiZWwobmFtZSksIGd0ay5MYWJlbChuYW1lKSkNCg0K
ICAgICAgICBpdGVyID0gc2VsZi50cmVlLmluc2VydF9iZWZvcmUocGFyZW50
LCBOb25lKQ0KICAgICAgICBzZWxmLnRyZWUuc2V0X3ZhbHVlKGl0ZXIsIDAs
IHNlbGYucGFnZSkNCiAgICAgICAgc2VsZi50cmVlLnNldF92YWx1ZShpdGVy
LCAxLCBuYW1lKQ0KICAgICAgICBzZWxmLnBhZ2UgKz0gMQ0KDQogICAgICAg
IHJldHVybiBwYW5lbCwgaXRlcg0KICAgIGRlZiBjcmVhdGVQYW5lbHMoc2Vs
Zik6DQogICAgICAgIHNlbGYucGFnZSA9IDANCiAgICAgICAgc2VsZi5jcmVh
dGVJbmZvUGFuZWwoKQ0KICAgICAgICBzZWxmLmNyZWF0ZVRvb2xiYXJQYW5l
bCgpDQogICAgICAgIHNlbGYuY3JlYXRlTWVudVBhbmVsKCkNCiAgICAgICAg
c2VsZi5jcmVhdGVXaW5kb3dQYW5lbCgpDQogICAgICAgIHNlbGYuY3JlYXRl
TWlzY1BhbmVsKCkNCiAgICAgICAgZGVsIHNlbGYucGFnZQ0KICAgIGRlZiBj
cmVhdGVJbmZvUGFuZWwoc2VsZik6DQogICAgICAgIHBhbmVsLCBpdGVyID0g
c2VsZi5jcmVhdGVQYW5lbCgic3R5bGUiKQ0KICAgICAgICB0YWJsZSA9IFN0
eWxlVGFibGUoNCkNCiAgICAgICAgcGFuZWwuYWRkKHRhYmxlKQ0KDQogICAg
ICAgIGZvciBzIGluIFsnbmFtZScsICdhdXRob3InLCAnZGF0ZScsICdjcmVk
aXRzJywgJ2NvbW1lbnRzJ106DQogICAgICAgICAgICB0YWJsZS5wYWNrTGFi
ZWxlZChTdHJpbmdSZXNvdXJjZVdpZGdldCgnc3R5bGUuJyArIHMsIHNlbGYp
LCAzKQ0KICAgIGRlZiBjcmVhdGVUb29sYmFyUGFuZWwoc2VsZik6DQogICAg
ICAgIHBhbmVsLCB0b29sYmFyX2l0ZXIgPSBzZWxmLmNyZWF0ZVBhbmVsKCJ0
b29sYmFyIikNCiAgICAgICAgdCA9IFRleHR1cmVXaWRnZXQoJ3Rvb2xiYXIn
LCBzZWxmLCBwYXJlbnRyZWxhdGl2ZT0wKQ0KICAgICAgICB0Lm5leHRSb3co
KQ0KICAgICAgICB0LnBhY2soRm9udFJlc291cmNlV2lkZ2V0KCd0b29sYmFy
LnhmdCcsIHNlbGYpLmRlZmF1bHRQYWNrKCksIDQsIDIpDQogICAgICAgIHQu
cGFja0xhYmVsZWQoSnVzdGlmeVJlc291cmNlV2lkZ2V0KCd0b29sYmFyLmp1
c3RpZnknLHNlbGYpKQ0KICAgICAgICBwYW5lbC5hZGQodCkNCg0KICAgICAg
ICBmb3IgcyBpbiBbJ2xhYmVsJywgJ3dpbmRvd0xhYmVsJywgJ2Nsb2NrJ106
DQogICAgICAgICAgICBwYW5lbCwgaXRlciA9IHNlbGYuY3JlYXRlUGFuZWwo
cywgdG9vbGJhcl9pdGVyKQ0KICAgICAgICAgICAgcGFuZWwuYWRkKFRleHRU
ZXh0dXJlV2lkZ2V0KCd0b29sYmFyLicrcywgc2VsZikpDQoNCiAgICAgICAg
cGFuZWwsIGJ1dHRvbl9pdGVyID0gc2VsZi5jcmVhdGVQYW5lbCgnYnV0dG9u
JywgdG9vbGJhcl9pdGVyKQ0KICAgICAgICB0ID0gQnV0dG9uVGV4dHVyZVdp
ZGdldCgndG9vbGJhci5idXR0b24nLCBzZWxmKQ0KICAgICAgICB0Lm5leHRS
b3coKQ0KICAgICAgICB0LnBhY2tMYWJlbGVkKE1hc2tSZXNvdXJjZVdpZGdl
dCgndG9vbGJhci5idXR0b24ubGVmdC5tYXNrJywgc2VsZiwgJ2xlZnQnKSwg
MykNCiAgICAgICAgdC5wYWNrTGFiZWxlZChNYXNrUmVzb3VyY2VXaWRnZXQo
J3Rvb2xiYXIuYnV0dG9uLnJpZ2h0Lm1hc2snLHNlbGYsJ3JpZ2h0JyksIDMp
DQogICAgICAgIHBhbmVsLmFkZCh0KQ0KDQogICAgICAgIHBhbmVsLCBpdGVy
ID0gc2VsZi5jcmVhdGVQYW5lbCgncHJlc3NlZCcsIGJ1dHRvbl9pdGVyKQ0K
ICAgICAgICBwYW5lbC5hZGQoVGV4dHVyZVdpZGdldCgndG9vbGJhci5idXR0
b24ucHJlc3NlZCcsIHNlbGYpKQ0KICAgIGRlZiBjcmVhdGVNZW51UGFuZWwo
c2VsZik6DQogICAgICAgIHBhbmVsLCBtZW51X2l0ZXIgPSBzZWxmLmNyZWF0
ZVBhbmVsKCdtZW51JykNCiAgICAgICAgdGFibGUgPSBTdHlsZVRhYmxlKCkN
CiAgICAgICAgdGFibGUucGFjayhndGsuTGFiZWwoJ01lbnUgTWFza3MnKSwg
NCkNCiAgICAgICAgdGFibGUucGFja0xhYmVsZWQoTWFza1Jlc291cmNlV2lk
Z2V0KCdtZW51LmFycm93Lm1hc2snLCBzZWxmLCAnYXJyb3cnKSwgMykNCiAg
ICAgICAgdGFibGUucGFja0xhYmVsZWQoTWFza1Jlc291cmNlV2lkZ2V0KCdt
ZW51LnNlbGVjdGVkLm1hc2snLCBzZWxmLCAnc2VsZWN0ZWQnKSwgMykNCiAg
ICAgICAgcGFuZWwuYWRkKHRhYmxlKQ0KDQogICAgICAgIHBhbmVsLCBpdGVy
ID0gc2VsZi5jcmVhdGVQYW5lbCgndGl0bGUnLCBtZW51X2l0ZXIpDQogICAg
ICAgIHBhbmVsLmFkZChGb250VGV4dFRleHR1cmVXaWRnZXQoJ21lbnUudGl0
bGUnLCBzZWxmLCBwYXJlbnRyZWxhdGl2ZT0wKSkNCg0KICAgICAgICBwYW5l
bCwgaXRlciA9IHNlbGYuY3JlYXRlUGFuZWwoJ2ZyYW1lJywgbWVudV9pdGVy
KQ0KICAgICAgICB0ID0gVGV4dHVyZVdpZGdldCgnbWVudS5mcmFtZScsIHNl
bGYsIHBhcmVudHJlbGF0aXZlPTApDQogICAgICAgIHRleHRDb2xvciA9IENv
bG9yUmVzb3VyY2VXaWRnZXQoJ21lbnUuZnJhbWUudGV4dENvbG9yJywgc2Vs
ZikNCiAgICAgICAgZGlzYWJsZUNvbG9yID0gQ29sb3JSZXNvdXJjZVdpZGdl
dCgnbWVudS5mcmFtZS5kaXNhYmxlQ29sb3InLCBzZWxmKQ0KICAgICAgICB0
LnBhY2tMYWJlbGVkKHRleHRDb2xvciwgZGlzYWJsZUNvbG9yKQ0KICAgICAg
ICB0Lm5leHRSb3coKQ0KICAgICAgICB0LnBhY2soRm9udFJlc291cmNlV2lk
Z2V0KCdtZW51LmZyYW1lLnhmdCcsIHNlbGYpLmRlZmF1bHRQYWNrKCksIDQs
IDIpDQogICAgICAgIHQucGFja0xhYmVsZWQoSnVzdGlmeVJlc291cmNlV2lk
Z2V0KCdtZW51LmZyYW1lLmp1c3RpZnknLCBzZWxmKSkNCiAgICAgICAgcGFu
ZWwuYWRkKHQpDQoNCiAgICAgICAgcGFuZWwsIGl0ZXIgPSBzZWxmLmNyZWF0
ZVBhbmVsKCdoaWxpdGUnLCBtZW51X2l0ZXIpDQogICAgICAgIHQgPSBUZXh0
VGV4dHVyZVdpZGdldCgnbWVudS5oaWxpdGUnLCBzZWxmKQ0KICAgICAgICBw
YW5lbC5hZGQodCkNCg0KICAgICAgICBwYW5lbCwgaXRlciA9IHNlbGYuY3Jl
YXRlUGFuZWwoJ2J1bGxldCcsIG1lbnVfaXRlcikNCiAgICAgICAgdGFibGUg
PSBTdHlsZVRhYmxlKDIpDQogICAgICAgIHRhYmxlLnBhY2tMYWJlbGVkKEJ1
bGxldE1lbnVSZXNvdXJjZVdpZGdldCgnbWVudS5idWxsZXQnLCBzZWxmKSwg
DQogICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGxldFBvc2l0aW9uUmVz
b3VyY2VXaWRnZXQoJ21lbnUuYnVsbGV0LnBvc2l0aW9uJywgc2VsZikpDQog
ICAgICAgIHBhbmVsLmFkZCh0YWJsZSkNCiAgICBkZWYgY3JlYXRlV2luZG93
UGFuZWwoc2VsZik6DQogICAgICAgIHBhbmVsLCB3aW5kb3dfaXRlciA9IHNl
bGYuY3JlYXRlUGFuZWwoJ3dpbmRvdycpDQogICAgICAgIHZib3ggPSBndGsu
VkJveCgpDQogICAgICAgIHZib3gucGFja19zdGFydCgNCiAgICAgICAgICAg
IEZvbnRSZXNvdXJjZVdpZGdldCgnd2luZG93LnhmdCcsIHNlbGYpLmRlZmF1
bHRQYWNrKCksIDAsIDApDQogICAgICAgIHZib3gucGFja19zdGFydCgNCiAg
ICAgICAgICAgIEp1c3RpZnlSZXNvdXJjZVdpZGdldCgnd2luZG93Lmp1c3Rp
ZnknLCBzZWxmKS5kZWZhdWx0UGFjaygpLCAwLCAwKQ0KICAgICAgICBwYW5l
bC5hZGQodmJveCkNCg0KICAgICAgICBmb2N1c19saXN0ID0gWydmb2N1cycs
ICd1bmZvY3VzJ10NCg0KICAgICAgICBmb3IgdGV4dHVyZSx3Y2xhc3MscGFy
ZW50cmVsYXRpdmUgaW4gWyAoJ3RpdGxlJywgVGV4dHVyZVdpZGdldCwgMCks
IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoJ2xhYmVsJywgVGV4dFRleHR1cmVXaWRnZXQsIDEpLCANCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdi
dXR0b24nLCBCdXR0b25UZXh0dXJlV2lkZ2V0LCAxKSBdOg0KICAgICAgICAg
ICAgdF9wYW5lbCwgdF9pdGVyID0gc2VsZi5jcmVhdGVQYW5lbCh0ZXh0dXJl
LCB3aW5kb3dfaXRlcikNCiAgICAgICAgICAgIGZvciBmb2N1cyBpbiBmb2N1
c19saXN0Og0KICAgICAgICAgICAgICAgIGZfcGFuZWwsIGZfaXRlciA9IHNl
bGYuY3JlYXRlUGFuZWwoZm9jdXMsIHRfaXRlcikNCiAgICAgICAgICAgICAg
ICBmX3BhbmVsLmFkZCh3Y2xhc3MoJ3dpbmRvdy4lcy4lcycgJSAodGV4dHVy
ZSxmb2N1cyksIHNlbGYsIHBhcmVudHJlbGF0aXZlKSkNCg0KICAgICAgICBi
dXR0b25faXRlciA9IHNlbGYudHJlZS5pdGVyX3BhcmVudChmX2l0ZXIpDQog
ICAgICAgIGJ1dHRvbl9wYW5lbCA9IFwNCiAgICAgICAgICAgIHNlbGYubm90
ZWJvb2suZ2V0X250aF9wYWdlKHNlbGYudHJlZS5nZXRfdmFsdWUoYnV0dG9u
X2l0ZXIsIDApKQ0KICAgICAgICB0YWJsZSA9IFN0eWxlVGFibGUoKQ0KICAg
ICAgICB0YWJsZS5wYWNrKGd0ay5MYWJlbCgnQnV0dG9uIE1hc2tzOicpLCA0
KQ0KICAgICAgICBmb3IgYiBpbiBbJ2Nsb3NlJywgJ21heCcsICdzdGljaycs
ICdpY29uJ106DQogICAgICAgICAgICB0YWJsZS5wYWNrTGFiZWxlZChNYXNr
UmVzb3VyY2VXaWRnZXQoJ3dpbmRvdy5idXR0b24uJXMubWFzaycgJSBiLCBz
ZWxmLCBiKSwgMykNCiAgICAgICAgYnV0dG9uX3BhbmVsLmFkZCh0YWJsZSkN
Cg0KICAgICAgICBwcmVzc2VkLCBwcmVzc2VkX2l0ZXIgPSBzZWxmLmNyZWF0
ZVBhbmVsKCdwcmVzc2VkJywgYnV0dG9uX2l0ZXIpDQogICAgICAgIHZib3gg
PSBndGsuVkJveCgpDQogICAgICAgIHZib3gucGFja19zdGFydChndGsuTGFi
ZWwoJyhDb21wYXRhYmlsaXR5IHdpdGggQmxhY2tib3gpJyksIDAsIDAsIDEw
KQ0KICAgICAgICB2Ym94LnBhY2tfc3RhcnQoVGV4dHVyZVdpZGdldCgnd2lu
ZG93LmJ1dHRvbi5wcmVzc2VkJywgc2VsZiwgcGFyZW50cmVsYXRpdmU9MCkp
DQogICAgICAgIHByZXNzZWQuYWRkKHZib3gpDQoNCiAgICAgICAgZm9yIGZv
Y3VzIGluIGZvY3VzX2xpc3Q6DQogICAgICAgICAgICBmX3BhbmVsLCBmX2l0
ZXIgPSBzZWxmLmNyZWF0ZVBhbmVsKGZvY3VzLCBwcmVzc2VkX2l0ZXIpDQog
ICAgICAgICAgICBmX3BhbmVsLmFkZChUZXh0dXJlV2lkZ2V0KCd3aW5kb3cu
YnV0dG9uLnByZXNzZWQuJytmb2N1cyxzZWxmLHBhcmVudHJlbGF0aXZlPTAp
KQ0KDQogICAgICAgIGZvciB0ZXh0dXJlLHdjbGFzcywgcGFyZW50cmVsYXRp
dmUgaW4gWyAoJ2hhbmRsZScsIFRleHR1cmVXaWRnZXQsIDApLCANCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgn
Z3JpcCcsIFRleHR1cmVXaWRnZXQsIDEpIF06DQogICAgICAgICAgICB0X3Bh
bmVsLCB0X2l0ZXIgPSBzZWxmLmNyZWF0ZVBhbmVsKHRleHR1cmUsIHdpbmRv
d19pdGVyKQ0KICAgICAgICAgICAgZm9yIGZvY3VzIGluIGZvY3VzX2xpc3Q6
DQogICAgICAgICAgICAgICAgZl9wYW5lbCwgZl9pdGVyID0gc2VsZi5jcmVh
dGVQYW5lbChmb2N1cywgdF9pdGVyKQ0KICAgICAgICAgICAgICAgIGZfcGFu
ZWwuYWRkKHdjbGFzcygnd2luZG93LiVzLiVzJyAlICh0ZXh0dXJlLGZvY3Vz
KSwgc2VsZiwgcGFyZW50cmVsYXRpdmUpKQ0KDQogICAgICAgIGZyYW1lX3Bh
bmVsLCBmcmFtZV9pdGVyID0gc2VsZi5jcmVhdGVQYW5lbCgnZnJhbWUnLCB3
aW5kb3dfaXRlcikNCiAgICAgICAgdGFibGUgPSBTdHlsZVRhYmxlKCkNCiAg
ICAgICAgZm9yIGZvY3VzIGluIGZvY3VzX2xpc3Q6DQogICAgICAgICAgICB0
YWJsZS5wYWNrTGFiZWxlZChDb2xvclJlc291cmNlV2lkZ2V0KCd3aW5kb3cu
ZnJhbWUuJXNDb2xvcicgJSBmb2N1cywgc2VsZikpDQogICAgICAgIGZyYW1l
X3BhbmVsLmFkZCh0YWJsZSkNCiAgICBkZWYgY3JlYXRlTWlzY1BhbmVsKHNl
bGYpOg0KICAgICAgICBwYW5lbCwgbWlzY19pdGVyID0gc2VsZi5jcmVhdGVQ
YW5lbCgnTWlzY2VsbGFuZW91cycpDQogICAgICAgIHRhYmxlID0gU3R5bGVU
YWJsZSg0KQ0KICAgICAgICBmb3IgdyBpbiBbJ2JvcmRlcldpZHRoJywgJ2Jl
dmVsV2lkdGgnLCAnaGFuZGxlV2lkdGgnLCAnZnJhbWVXaWR0aCddOg0KICAg
ICAgICAgICAgdGFibGUucGFja0xhYmVsZWQoSW50ZWdlclJlc291cmNlV2lk
Z2V0KHcsIHNlbGYpKQ0KICAgICAgICB0YWJsZS5wYWNrTGFiZWxlZChDb2xv
clJlc291cmNlV2lkZ2V0KCdib3JkZXJDb2xvcicsIHNlbGYpKQ0KICAgICAg
ICB0YWJsZS5uZXh0Um93KCkNCiAgICAgICAgdGFibGUucGFja0xhYmVsZWQo
U3RyaW5nUmVzb3VyY2VXaWRnZXQoJ3Jvb3RDb21tYW5kJywgc2VsZiksIDMp
DQogICAgICAgIHBhbmVsLmFkZCh0YWJsZSkNCg0KIyB2aW06IHNldCBmZG09
ZXhwcjogDQo=

--8323328-1655603711-1142598252=:7597
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=stylebox
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.64.0603171324122.7597 at localhost>
Content-Description: 
Content-Disposition: attachment; filename=stylebox

IyEvdXNyL2Jpbi9weXRob24NCiMNCiMgU3R5bGVCb3g6IGEgc3R5bGUvdGhl
bWUgZWRpdG9yIGZvciBPcGVuYm94IDIuDQojIENvcHlyaWdodCAoQykgMjAw
MyAgQXZhIEFyYWNobmUgSmFydmlzIDxhamFyQGthdGFuYWx5bnguZHluZG5z
Lm9yZz4NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkNCiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMg
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMNCiMgVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4NCiMNCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUNCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVT
QQ0KDQppbXBvcnQgc3lzDQpzeXMucGF0aC5hcHBlbmQoJy91c3IvbG9jYWwv
bGliL3N0eWxlYm94JykNCg0KaW1wb3J0IHB5Z3RrDQpweWd0ay5yZXF1aXJl
KCcyLjAnKQ0KaW1wb3J0IGd0aw0KDQpmcm9tIFN0eWxlQm94IGltcG9ydCBT
dHlsZUJveA0KDQpwcmludCBTdHlsZUJveC5GUk9OVElTDQoNCnMgPSBTdHls
ZUJveCgpDQpzLnNob3dfYWxsKCkNCmd0ay5tYWluKCkNCg==

--8323328-1655603711-1142598252=:7597--



More information about the openbox mailing list