pooch

package
v0.0.0-...-9df334c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2023 License: GPL-3.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DOES_NOT_APPLY = OntoCheckResult(iota)
	MATCH_OK
	MATCH_FAIL
)
View Source
const (
	TRACE = LogLevel(iota)
	DEBUG
	INFO
	WARN
	ERROR
)
View Source
const (
	ID_IS_ID = IdType(iota)
	ID_IS_CATLIST
	ID_IS_CATLIST_AND_PRIORITY
	ID_IS_SAVEDQUERY
	ID_IS_SAVEDQUERY_AND_PRIORITY
	ID_IS_COMPLEX
	ID_IS_COMPLEX_AND_PRIORITY
)
View Source
const TEXT_COLS_SEPARATOR = "\n#+\n"
View Source
const TRIGGER_AT_FORMAT = "2006-01-02 15:04"

Variables

View Source
var CURSOR string = "cursor"
View Source
var DateTimeFormats []DateTimeFormat = []DateTimeFormat{
	{"2006-1-2 15:04:05", false, true},
	{"2006-1-2,15:04:05", false, true},
	{"2006-1-2 15:04", false, true},
	{"2006-1-2,15:04", false, true},

	{"2/1 15:04:05", true, true},
	{"2/1,15:04:05", true, true},
	{"2/1 15:04", true, true},
	{"2/1,15:04", true, true},
	{"2/1 15", true, true},
	{"2/1,15", true, true},

	{"2/1", true, false},
	{"2006-1-2", false, false},
}
View Source
var FILES map[string]string = map[string]string{
	"advanced.html":                       "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkFkdmFuY2VkIE9wZXJhdGlvbnM8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249Ii9yZW50YWciPgogICAgICA8aDI+UmVuYW1lIFRhZzwvaDI+CiAgICAgIEZyb206IDxpbnB1dCBuYW1lPSdmcm9tJyB0eXBlPSd0ZXh0JyBzaXplPScyMCcvPjxicj4KICAgICAgVG86IDxpbnB1dCBuYW1lPSd0bycgdHlwZT0ndGV4dCcgc2l6ZT0nMjAnLz48YnI+CiAgICAgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdyZW5hbWUnLz4KICAgIDwvZm9ybT4KICA8L2JvZHk+CjwvaHRtbD4K",
	"animals-dog.png":                     "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",
	"cal.css":                             "LyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCgouYWx0MCwgLmZjLWFnZW5kYSAuYWx0MCwgLmZjLWV2ZW50LXRpbWUsIC5hbHQwIGEsIC5hbHQwIC5mYy1ldmVudC1pbm5lciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMzZjOwoJYm9yZGVyLWNvbG9yOiAjMzZjOwp9CgouYWx0MSwgLmZjLWFnZW5kYSAuYWx0MSwgLmZjLWV2ZW50LXRpbWUsIC5hbHQxIGEsIC5hbHQxIC5mYy1ldmVudC1pbm5lciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXJvb247CiAgICBib3JkZXItY29sb3I6IG1hcm9vbjsKfQoKLmFsdDIsIC5mYy1hZ2VuZGEgLmFsdDIsIC5mYy1ldmVudC10aW1lLCAuYWx0MiBhLCAuYWx0MiAuZmMtZXZlbnQtaW5uZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogbmF2eTsKICAgIGJvcmRlci1jb2xvcjogbmF2eTsKfQoKLmFsdDMsIC5mYy1hZ2VuZGEgLmFsdDMsIC5mYy1ldmVudC10aW1lLCAuYWx0MyBhLCAuYWx0MyAuZmMtZXZlbnQtaW5uZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CiAgICBib3JkZXItY29sb3I6IGdyZWVuOwp9CgouYWx0NCwgLmZjLWFnZW5kYSAuYWx0NCwgLmZjLWV2ZW50LXRpbWUsIC5hbHQ0IGEsIC5hbHQ0IC5mYy1ldmVudC1pbm5lciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmdWNoc2lhOwogICAgYm9yZGVyLWNvbG9yOiBmdWNoc2lhOwp9CgouYWx0NSwgLmZjLWFnZW5kYSAuYWx0NSwgLmZjLWV2ZW50LXRpbWUsIC5hbHQ1IGEsLmFsdDUgLmZjLWV2ZW50LWlubmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZTsKICAgIGJvcmRlci1jb2xvcjogcHVycGxlOwp9Cgo=",
	"cint.js":                             "LyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAkKCcjY2FsZW5kYXInKS5mdWxsQ2FsZW5kYXIoewogICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsIC8vIHN0YXJ0IHdpdGggbW9uZGF5CiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGV2ZW50czogIi9jYWxldmVudHM/cT0iK2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSksCiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogJ3ByZXYsbmV4dCB0b2RheScsCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcjogJ3RpdGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICdtb250aCxiYXNpY1dlZWsnCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7Cgo=",
	"dlist.css":                           "LyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCgoqIHsKICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwp9CgphIHsKICAgIGNvbG9yOiBjeWFuOwp9Cgpib2R5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyRDI4Mjg7CiAgICBjb2xvcjogI0VBRThFOTsKICAgIGZvbnQtc2l6ZTogOHB0Owp9CgoucG9wdXAgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzJEMjgyODsKfQoKdGFibGUgewogICAgZm9udC1zaXplOiA4cHQ7Cn0KCi5wcmNoYW5nZSA+IHRkIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgZm9udC1zaXplOiBsYXJnZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouZW50cnkgewogICAgYmFja2dyb3VuZDogbm9uZSByZXBlYXQgc2Nyb2xsIDAgMCAjNTU1NTU1OwogICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDQ0NDsKfQoKLmVudHJ5ID4gdGQgewogICAgcGFkZGluZzogNHB4Owp9CgouZXRpdGxlIHsKICAgIHdpZHRoOiA2NSU7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmV0aXRsZSA+IHByZSB7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgouZXRpdGxlID4gYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogI0VBRThFOQp9CgoucHJpb3JpdHlidXR0b24gewogICAgd2lkdGg6IDYwcHg7CiAgICBjb2xvcjogYmxhY2s7CiAgICBmb250LXNpemU6IHh4LXNtYWxsOwp9CgoucHJpb3JpdHljbGFzc19OT1cgewogICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47Cn0KLnByaW9yaXR5Y2xhc3NfTEFURVIgewogICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93Owp9Ci5wcmlvcml0eWNsYXNzX1RJTUVEIHsKICAgIGJhY2tncm91bmQtY29sb3I6IG9yYW5nZTsKfQoucHJpb3JpdHljbGFzc19ET05FIHsKICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheTsKfQoucHJpb3JpdHljbGFzc19TVElDS1kgewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlOwp9Ci5wcmlvcml0eWNsYXNzX05PVEVTIHsKICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZTsKfQoKLnNjcmVycm9yIHsKICAgIGNvbG9yOiByZWQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQ==",
	"fontawesome.woff":                    "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",
	"fullcalendar.css":                    "LyoKICogRnVsbENhbGVuZGFyIHYxLjUuNCBTdHlsZXNoZWV0CiAqCiAqIENvcHlyaWdodCAoYykgMjAxMSBBZGFtIFNoYXcKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMsIGxvY2F0ZWQgaW4KICogTUlULUxJQ0VOU0UudHh0IGFuZCBHUEwtTElDRU5TRS50eHQgcmVzcGVjdGl2ZWx5LgogKgogKiBEYXRlOiBUdWUgU2VwIDQgMjM6Mzg6MzMgMjAxMiAtMDcwMAogKgogKi8KCgouZmMgewoJZGlyZWN0aW9uOiBsdHI7Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJfQoKLmZjIHRhYmxlIHsKCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cglib3JkZXItc3BhY2luZzogMDsKCX0KCmh0bWwgLmZjLAouZmMgdGFibGUgewoJZm9udC1zaXplOiAxZW07Cgl9CgouZmMgdGQsCi5mYyB0aCB7CglwYWRkaW5nOiAwOwoJdmVydGljYWwtYWxpZ246IHRvcDsKCX0KCgoKLyogSGVhZGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtaGVhZGVyIHRkIHsKCXdoaXRlLXNwYWNlOiBub3dyYXA7Cgl9CgouZmMtaGVhZGVyLWxlZnQgewoJd2lkdGg6IDI1JTsKCXRleHQtYWxpZ246IGxlZnQ7Cgl9CgouZmMtaGVhZGVyLWNlbnRlciB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl9CgouZmMtaGVhZGVyLXJpZ2h0IHsKCXdpZHRoOiAyNSU7Cgl0ZXh0LWFsaWduOiByaWdodDsKCX0KCi5mYy1oZWFkZXItdGl0bGUgewoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJdmVydGljYWwtYWxpZ246IHRvcDsKCX0KCi5mYy1oZWFkZXItdGl0bGUgaDIgewoJbWFyZ2luLXRvcDogMDsKCXdoaXRlLXNwYWNlOiBub3dyYXA7Cgl9CgouZmMgLmZjLWhlYWRlci1zcGFjZSB7CglwYWRkaW5nLWxlZnQ6IDEwcHg7Cgl9CgouZmMtaGVhZGVyIC5mYy1idXR0b24gewoJbWFyZ2luLWJvdHRvbTogMWVtOwoJdmVydGljYWwtYWxpZ246IHRvcDsKCX0KCi8qIGJ1dHRvbnMgZWRnZXMgYnV0dGluZyB0b2dldGhlciAqLwoKLmZjLWhlYWRlciAuZmMtYnV0dG9uIHsKCW1hcmdpbi1yaWdodDogLTFweDsKCX0KCi5mYy1oZWFkZXIgLmZjLWNvcm5lci1yaWdodCB7CgltYXJnaW4tcmlnaHQ6IDFweDsgLyogYmFjayB0byBub3JtYWwgKi8KCX0KCi5mYy1oZWFkZXIgLnVpLWNvcm5lci1yaWdodCB7CgltYXJnaW4tcmlnaHQ6IDA7IC8qIGJhY2sgdG8gbm9ybWFsICovCgl9CgovKiBidXR0b24gbGF5ZXJpbmcgKGZvciBib3JkZXIgcHJlY2VkZW5jZSkgKi8KCi5mYy1oZWFkZXIgLmZjLXN0YXRlLWhvdmVyLAouZmMtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciB7Cgl6LWluZGV4OiAyOwoJfQoKLmZjLWhlYWRlciAuZmMtc3RhdGUtZG93biB7Cgl6LWluZGV4OiAzOwoJfQoKLmZjLWhlYWRlciAuZmMtc3RhdGUtYWN0aXZlLAouZmMtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmUgewoJei1pbmRleDogNDsKCX0KCgoKLyogQ29udGVudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLmZjLWNvbnRlbnQgewoJY2xlYXI6IGJvdGg7Cgl9CgouZmMtdmlldyB7Cgl3aWR0aDogMTAwJTsgLyogbmVlZGVkIGZvciB2aWV3IHN3aXRjaGluZyAod2hlbiB2aWV3IGlzIGFic29sdXRlKSAqLwoJb3ZlcmZsb3c6IGhpZGRlbjsKCX0KCgoKLyogQ2VsbCBTdHlsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi5mYy13aWRnZXQtaGVhZGVyLCAgICAvKiA8dGg+LCB1c3VhbGx5ICovCi5mYy13aWRnZXQtY29udGVudCB7ICAvKiA8dGQ+LCB1c3VhbGx5ICovCglib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJfQoKLmZjLXN0YXRlLWhpZ2hsaWdodCB7IC8qIDx0ZD4gdG9kYXkgY2VsbCAqLyAvKiBUT0RPOiBhZGQgLmZjLXRvZGF5IHRvIDx0aD4gKi8KCWJhY2tncm91bmQ6ICNmZmM7Cgl9CgouZmMtY2VsbC1vdmVybGF5IHsgLyogc2VtaS10cmFuc3BhcmVudCByZWN0YW5nbGUgd2hpbGUgZHJhZ2dpbmcgKi8KCWJhY2tncm91bmQ6ICM5Y2Y7CglvcGFjaXR5OiAuMjsKCWZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7IC8qIGZvciBJRSAqLwoJfQoKCgovKiBCdXR0b25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtYnV0dG9uIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWN1cnNvcjogcG9pbnRlcjsKCX0KCi5mYy1zdGF0ZS1kZWZhdWx0IHsgLyogbm9uLXRoZW1lICovCglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLXdpZHRoOiAxcHggMDsKCX0KCi5mYy1idXR0b24taW5uZXIgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJZmxvYXQ6IGxlZnQ7CglvdmVyZmxvdzogaGlkZGVuOwoJfQoKLmZjLXN0YXRlLWRlZmF1bHQgLmZjLWJ1dHRvbi1pbm5lciB7IC8qIG5vbi10aGVtZSAqLwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWJvcmRlci13aWR0aDogMCAxcHg7Cgl9CgouZmMtYnV0dG9uLWNvbnRlbnQgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJZmxvYXQ6IGxlZnQ7CgloZWlnaHQ6IDEuOWVtOwoJbGluZS1oZWlnaHQ6IDEuOWVtOwoJcGFkZGluZzogMCAuNmVtOwoJd2hpdGUtc3BhY2U6IG5vd3JhcDsKCX0KCi8qIGljb24gKGZvciBqcXVlcnkgdWkpICovCgouZmMtYnV0dG9uLWNvbnRlbnQgLmZjLWljb24td3JhcCB7Cglwb3NpdGlvbjogcmVsYXRpdmU7CglmbG9hdDogbGVmdDsKCXRvcDogNTAlOwoJfQoKLmZjLWJ1dHRvbi1jb250ZW50IC51aS1pY29uIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCWZsb2F0OiBsZWZ0OwoJbWFyZ2luLXRvcDogLTUwJTsKCSptYXJnaW4tdG9wOiAwOwoJKnRvcDogLTUwJTsKCX0KCi8qIGdsb3NzIGVmZmVjdCAqLwoKLmZjLXN0YXRlLWRlZmF1bHQgLmZjLWJ1dHRvbi1lZmZlY3QgewoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiA1MCU7CglsZWZ0OiAwOwoJfQoKLmZjLXN0YXRlLWRlZmF1bHQgLmZjLWJ1dHRvbi1lZmZlY3Qgc3BhbiB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IC0xMDBweDsKCWxlZnQ6IDA7Cgl3aWR0aDogNTAwcHg7CgloZWlnaHQ6IDEwMHB4OwoJYm9yZGVyLXdpZHRoOiAxMDBweCAwIDAgMXB4OwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWJvcmRlci1jb2xvcjogI2ZmZjsKCWJhY2tncm91bmQ6ICM0NDQ7CglvcGFjaXR5OiAuMDk7CglmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OSk7Cgl9CgovKiBidXR0b24gc3RhdGVzIChkZXRlcm1pbmVzIGNvbG9ycykgICovCgouZmMtc3RhdGUtZGVmYXVsdCwKLmZjLXN0YXRlLWRlZmF1bHQgLmZjLWJ1dHRvbi1pbm5lciB7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLWNvbG9yOiAjY2NjICNiYmIgI2FhYTsKCWJhY2tncm91bmQ6ICNGM0YzRjM7Cgljb2xvcjogIzAwMDsKCX0KCi5mYy1zdGF0ZS1ob3ZlciwKLmZjLXN0YXRlLWhvdmVyIC5mYy1idXR0b24taW5uZXIgewoJYm9yZGVyLWNvbG9yOiAjOTk5OwoJfQoKLmZjLXN0YXRlLWRvd24sCi5mYy1zdGF0ZS1kb3duIC5mYy1idXR0b24taW5uZXIgewoJYm9yZGVyLWNvbG9yOiAjNTU1OwoJYmFja2dyb3VuZDogIzc3NzsKCX0KCi5mYy1zdGF0ZS1hY3RpdmUsCi5mYy1zdGF0ZS1hY3RpdmUgLmZjLWJ1dHRvbi1pbm5lciB7Cglib3JkZXItY29sb3I6ICM1NTU7CgliYWNrZ3JvdW5kOiAjNzc3OwoJY29sb3I6ICNmZmY7Cgl9CgouZmMtc3RhdGUtZGlzYWJsZWQsCi5mYy1zdGF0ZS1kaXNhYmxlZCAuZmMtYnV0dG9uLWlubmVyIHsKCWNvbG9yOiAjOTk5OwoJYm9yZGVyLWNvbG9yOiAjZGRkOwoJfQoKLmZjLXN0YXRlLWRpc2FibGVkIHsKCWN1cnNvcjogZGVmYXVsdDsKCX0KCi5mYy1zdGF0ZS1kaXNhYmxlZCAuZmMtYnV0dG9uLWVmZmVjdCB7CglkaXNwbGF5OiBub25lOwoJfQoKCgovKiBHbG9iYWwgRXZlbnQgU3R5bGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtZXZlbnQgewoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWJvcmRlci13aWR0aDogMDsKCWZvbnQtc2l6ZTogLjg1ZW07CgljdXJzb3I6IGRlZmF1bHQ7Cgl9CgphLmZjLWV2ZW50LAouZmMtZXZlbnQtZHJhZ2dhYmxlIHsKCWN1cnNvcjogcG9pbnRlcjsKCX0KCmEuZmMtZXZlbnQgewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJfQoKLmZjLXJ0bCAuZmMtZXZlbnQgewoJdGV4dC1hbGlnbjogcmlnaHQ7Cgl9CgouZmMtZXZlbnQtc2tpbiB7CgkvKiBib3JkZXItY29sb3I6ICMzNmM7ICAgICAvKiBkZWZhdWx0IEJPUkRFUiBjb2xvciAqLwoJLyogYmFja2dyb3VuZC1jb2xvcjogIzM2YzsgLyogZGVmYXVsdCBCQUNLR1JPVU5EIGNvbG9yICovCgljb2xvcjogI2ZmZjsgICAgICAgICAgICAvKiBkZWZhdWx0IFRFWFQgY29sb3IgKi8KCX0KCi5mYy1ldmVudC1pbm5lciB7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogMTAwJTsKCWJvcmRlci1zdHlsZTogc29saWQ7Cglib3JkZXItd2lkdGg6IDA7CglvdmVyZmxvdzogaGlkZGVuOwoJfQoKLmZjLWV2ZW50LXRpbWUsCi5mYy1ldmVudC10aXRsZSB7CglwYWRkaW5nOiAwIDFweDsKCX0KCi5mYyAudWktcmVzaXphYmxlLWhhbmRsZSB7IC8qKiogVE9ETzogZG9uJ3QgdXNlIHVpLXJlc2l6YWJsZSBhbnltb3JlLCBjaGFuZ2UgY2xhc3MgKioqLwoJZGlzcGxheTogYmxvY2s7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl6LWluZGV4OiA5OTk5OTsKCW92ZXJmbG93OiBoaWRkZW47IC8qIGhhY2t5IHNwYWNlcyAoSUU2LzcpICovCglmb250LXNpemU6IDMwMCU7ICAvKiAqLwoJbGluZS1oZWlnaHQ6IDUwJTsgLyogKi8KCX0KCgoKLyogSG9yaXpvbnRhbCBFdmVudHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi5mYy1ldmVudC1ob3JpIHsKCWJvcmRlci13aWR0aDogMXB4IDA7CgltYXJnaW4tYm90dG9tOiAxcHg7Cgl9CgovKiByZXNpemFibGUgKi8KCi5mYy1ldmVudC1ob3JpIC51aS1yZXNpemFibGUtZSB7Cgl0b3A6IDAgICAgICAgICAgICFpbXBvcnRhbnQ7IC8qIGltcG9ydGFudHMgb3ZlcnJpZGUgcHJlIGpxdWVyeSB1aSAxLjcgc3R5bGVzICovCglyaWdodDogLTNweCAgICAgICFpbXBvcnRhbnQ7Cgl3aWR0aDogN3B4ICAgICAgICFpbXBvcnRhbnQ7CgloZWlnaHQ6IDEwMCUgICAgICFpbXBvcnRhbnQ7CgljdXJzb3I6IGUtcmVzaXplOwoJfQoKLmZjLWV2ZW50LWhvcmkgLnVpLXJlc2l6YWJsZS13IHsKCXRvcDogMCAgICAgICAgICAgIWltcG9ydGFudDsKCWxlZnQ6IC0zcHggICAgICAgIWltcG9ydGFudDsKCXdpZHRoOiA3cHggICAgICAgIWltcG9ydGFudDsKCWhlaWdodDogMTAwJSAgICAgIWltcG9ydGFudDsKCWN1cnNvcjogdy1yZXNpemU7Cgl9CgouZmMtZXZlbnQtaG9yaSAudWktcmVzaXphYmxlLWhhbmRsZSB7CglfcGFkZGluZy1ib3R0b206IDE0cHg7IC8qIElFNiBoYWQgMCBoZWlnaHQgKi8KCX0KCgoKLyogRmFrZSBSb3VuZGVkIENvcm5lcnMgKGZvciBidXR0b25zIGFuZCBldmVudHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtY29ybmVyLWxlZnQgewoJbWFyZ2luLWxlZnQ6IDFweDsKCX0KCi5mYy1jb3JuZXItbGVmdCAuZmMtYnV0dG9uLWlubmVyLAouZmMtY29ybmVyLWxlZnQgLmZjLWV2ZW50LWlubmVyIHsKCW1hcmdpbi1sZWZ0OiAtMXB4OwoJfQoKLmZjLWNvcm5lci1yaWdodCB7CgltYXJnaW4tcmlnaHQ6IDFweDsKCX0KCi5mYy1jb3JuZXItcmlnaHQgLmZjLWJ1dHRvbi1pbm5lciwKLmZjLWNvcm5lci1yaWdodCAuZmMtZXZlbnQtaW5uZXIgewoJbWFyZ2luLXJpZ2h0OiAtMXB4OwoJfQoKLmZjLWNvcm5lci10b3AgewoJbWFyZ2luLXRvcDogMXB4OwoJfQoKLmZjLWNvcm5lci10b3AgLmZjLWV2ZW50LWlubmVyIHsKCW1hcmdpbi10b3A6IC0xcHg7Cgl9CgouZmMtY29ybmVyLWJvdHRvbSB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cgl9CgouZmMtY29ybmVyLWJvdHRvbSAuZmMtZXZlbnQtaW5uZXIgewoJbWFyZ2luLWJvdHRvbTogLTFweDsKCX0KCgoKLyogRmFrZSBSb3VuZGVkIENvcm5lcnMgU1BFQ0lGSUNBTExZIEZPUiBFVkVOVFMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLmZjLWNvcm5lci1sZWZ0IC5mYy1ldmVudC1pbm5lciB7Cglib3JkZXItbGVmdC13aWR0aDogMXB4OwoJfQoKLmZjLWNvcm5lci1yaWdodCAuZmMtZXZlbnQtaW5uZXIgewoJYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7Cgl9CgouZmMtY29ybmVyLXRvcCAuZmMtZXZlbnQtaW5uZXIgewoJYm9yZGVyLXRvcC13aWR0aDogMXB4OwoJfQoKLmZjLWNvcm5lci1ib3R0b20gLmZjLWV2ZW50LWlubmVyIHsKCWJvcmRlci1ib3R0b20td2lkdGg6IDFweDsKCX0KCgoKLyogUmV1c2FibGUgU2VwYXJhdGUtYm9yZGVyIFRhYmxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp0YWJsZS5mYy1ib3JkZXItc2VwYXJhdGUgewoJYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKCX0KCi5mYy1ib3JkZXItc2VwYXJhdGUgdGgsCi5mYy1ib3JkZXItc2VwYXJhdGUgdGQgewoJYm9yZGVyLXdpZHRoOiAxcHggMCAwIDFweDsKCX0KCi5mYy1ib3JkZXItc2VwYXJhdGUgdGguZmMtbGFzdCwKLmZjLWJvcmRlci1zZXBhcmF0ZSB0ZC5mYy1sYXN0IHsKCWJvcmRlci1yaWdodC13aWR0aDogMXB4OwoJfQoKLmZjLWJvcmRlci1zZXBhcmF0ZSB0ci5mYy1sYXN0IHRoLAouZmMtYm9yZGVyLXNlcGFyYXRlIHRyLmZjLWxhc3QgdGQgewoJYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4OwoJfQoKLmZjLWJvcmRlci1zZXBhcmF0ZSB0Ym9keSB0ci5mYy1maXJzdCB0ZCwKLmZjLWJvcmRlci1zZXBhcmF0ZSB0Ym9keSB0ci5mYy1maXJzdCB0aCB7Cglib3JkZXItdG9wLXdpZHRoOiAwOwoJfQoKCgovKiBNb250aCBWaWV3LCBCYXNpYyBXZWVrIFZpZXcsIEJhc2ljIERheSBWaWV3Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtZ3JpZCB0aCB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl9CgouZmMtZ3JpZCAuZmMtZGF5LW51bWJlciB7CglmbG9hdDogcmlnaHQ7CglwYWRkaW5nOiAwIDJweDsKCX0KCi5mYy1ncmlkIC5mYy1vdGhlci1tb250aCAuZmMtZGF5LW51bWJlciB7CglvcGFjaXR5OiAwLjM7CglmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MzApOyAvKiBmb3IgSUUgKi8KCS8qIG9wYWNpdHkgd2l0aCBzbWFsbCBmb250IGNhbiBzb21ldGltZXMgbG9vayB0b28gZmFkZWQKCSAgIG1pZ2h0IHdhbnQgdG8gc2V0IHRoZSAnY29sb3InIHByb3BlcnR5IGluc3RlYWQKCSAgIG1ha2luZyBkYXktbnVtYmVycyBib2xkIGFsc28gZml4ZXMgdGhlIHByb2JsZW0gKi8KCX0KCi5mYy1ncmlkIC5mYy1kYXktY29udGVudCB7CgljbGVhcjogYm90aDsKCXBhZGRpbmc6IDJweCAycHggMXB4OyAvKiBkaXN0YW5jZSBiZXR3ZWVuIGV2ZW50cyBhbmQgZGF5IGVkZ2VzICovCgl9CgovKiBldmVudCBzdHlsZXMgKi8KCi5mYy1ncmlkIC5mYy1ldmVudC10aW1lIHsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJfQoKLyogcmlnaHQtdG8tbGVmdCAqLwoKLmZjLXJ0bCAuZmMtZ3JpZCAuZmMtZGF5LW51bWJlciB7CglmbG9hdDogbGVmdDsKCX0KCi5mYy1ydGwgLmZjLWdyaWQgLmZjLWV2ZW50LXRpbWUgewoJZmxvYXQ6IHJpZ2h0OwoJfQoKCgovKiBBZ2VuZGEgV2VlayBWaWV3LCBBZ2VuZGEgRGF5IFZpZXcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi5mYy1hZ2VuZGEgdGFibGUgewoJYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKCX0KCi5mYy1hZ2VuZGEtZGF5cyB0aCB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl9CgouZmMtYWdlbmRhIC5mYy1hZ2VuZGEtYXhpcyB7Cgl3aWR0aDogNTBweDsKCXBhZGRpbmc6IDAgNHB4OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCXRleHQtYWxpZ246IHJpZ2h0OwoJd2hpdGUtc3BhY2U6IG5vd3JhcDsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cgl9CgouZmMtYWdlbmRhIC5mYy1kYXktY29udGVudCB7CglwYWRkaW5nOiAycHggMnB4IDFweDsKCX0KCi8qIG1ha2UgYXhpcyBib3JkZXIgdGFrZSBwcmVjZWRlbmNlICovCgouZmMtYWdlbmRhLWRheXMgLmZjLWFnZW5kYS1heGlzIHsKCWJvcmRlci1yaWdodC13aWR0aDogMXB4OwoJfQoKLmZjLWFnZW5kYS1kYXlzIC5mYy1jb2wwIHsKCWJvcmRlci1sZWZ0LXdpZHRoOiAwOwoJfQoKLyogYWxsLWRheSBhcmVhICovCgouZmMtYWdlbmRhLWFsbGRheSB0aCB7Cglib3JkZXItd2lkdGg6IDAgMXB4OwoJfQoKLmZjLWFnZW5kYS1hbGxkYXkgLmZjLWRheS1jb250ZW50IHsKCW1pbi1oZWlnaHQ6IDM0cHg7IC8qIFRPRE86IGRvZXNudCB3b3JrIHdlbGwgaW4gcXVpcmtzbW9kZSAqLwoJX2hlaWdodDogMzRweDsKCX0KCi8qIGRpdmlkZXIgKGJldHdlZW4gYWxsLWRheSBhbmQgc2xvdHMpICovCgouZmMtYWdlbmRhLWRpdmlkZXItaW5uZXIgewoJaGVpZ2h0OiAycHg7CglvdmVyZmxvdzogaGlkZGVuOwoJfQoKLmZjLXdpZGdldC1oZWFkZXIgLmZjLWFnZW5kYS1kaXZpZGVyLWlubmVyIHsKCWJhY2tncm91bmQ6ICNlZWU7Cgl9CgovKiBzbG90IHJvd3MgKi8KCi5mYy1hZ2VuZGEtc2xvdHMgdGggewoJYm9yZGVyLXdpZHRoOiAxcHggMXB4IDA7Cgl9CgouZmMtYWdlbmRhLXNsb3RzIHRkIHsKCWJvcmRlci13aWR0aDogMXB4IDAgMDsKCWJhY2tncm91bmQ6IG5vbmU7Cgl9CgouZmMtYWdlbmRhLXNsb3RzIHRkIGRpdiB7CgloZWlnaHQ6IDIwcHg7Cgl9CgouZmMtYWdlbmRhLXNsb3RzIHRyLmZjLXNsb3QwIHRoLAouZmMtYWdlbmRhLXNsb3RzIHRyLmZjLXNsb3QwIHRkIHsKCWJvcmRlci10b3Atd2lkdGg6IDA7Cgl9CgouZmMtYWdlbmRhLXNsb3RzIHRyLmZjLW1pbm9yIHRoLAouZmMtYWdlbmRhLXNsb3RzIHRyLmZjLW1pbm9yIHRkIHsKCWJvcmRlci10b3Atc3R5bGU6IGRvdHRlZDsKCX0KCi5mYy1hZ2VuZGEtc2xvdHMgdHIuZmMtbWlub3IgdGgudWktd2lkZ2V0LWhlYWRlciB7CgkqYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7IC8qIGRvZXNuJ3Qgd29yayB3aXRoIGJhY2tncm91bmQgaW4gSUU2LzcgKi8KCX0KCgoKLyogVmVydGljYWwgRXZlbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgouZmMtZXZlbnQtdmVydCB7Cglib3JkZXItd2lkdGg6IDAgMXB4OwoJfQoKLmZjLWV2ZW50LXZlcnQgLmZjLWV2ZW50LWhlYWQsCi5mYy1ldmVudC12ZXJ0IC5mYy1ldmVudC1jb250ZW50IHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCXotaW5kZXg6IDI7Cgl3aWR0aDogMTAwJTsKCW92ZXJmbG93OiBoaWRkZW47Cgl9CgouZmMtZXZlbnQtdmVydCAuZmMtZXZlbnQtdGltZSB7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJZm9udC1zaXplOiAxMHB4OwoJfQoKLmZjLWV2ZW50LXZlcnQgLmZjLWV2ZW50LWJnIHsgLyogbWFrZXMgdGhlIGV2ZW50IGxpZ2h0ZXIgdy8gYSBzZW1pLXRyYW5zcGFyZW50IG92ZXJsYXkgICovCglwb3NpdGlvbjogYWJzb2x1dGU7Cgl6LWluZGV4OiAxOwoJdG9wOiAwOwoJbGVmdDogMDsKCXdpZHRoOiAxMDAlOwoJaGVpZ2h0OiAxMDAlOwoJYmFja2dyb3VuZDogI2ZmZjsKCW9wYWNpdHk6IC4zOwoJZmlsdGVyOiBhbHBoYShvcGFjaXR5PTMwKTsKCX0KCi5mYyAudWktZHJhZ2dhYmxlLWRyYWdnaW5nIC5mYy1ldmVudC1iZywgLyogVE9ETzogc29tZXRoaW5nIG5pY2VyIGxpa2UgLmZjLW9wYWNpdHkgKi8KLmZjLXNlbGVjdC1oZWxwZXIgLmZjLWV2ZW50LWJnIHsKCWRpc3BsYXk6IG5vbmVcOTsgLyogZm9yIElFNi83LzguIG5lc3RlZCBvcGFjaXR5IGZpbHRlcnMgd2hpbGUgZHJhZ2dpbmcgZG9uJ3Qgd29yayAqLwoJfQoKLyogcmVzaXphYmxlICovCgouZmMtZXZlbnQtdmVydCAudWktcmVzaXphYmxlLXMgewoJYm90dG9tOiAwICAgICAgICAhaW1wb3J0YW50OyAvKiBpbXBvcnRhbnRzIG92ZXJyaWRlIHByZSBqcXVlcnkgdWkgMS43IHN0eWxlcyAqLwoJd2lkdGg6IDEwMCUgICAgICAhaW1wb3J0YW50OwoJaGVpZ2h0OiA4cHggICAgICAhaW1wb3J0YW50OwoJb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwoJbGluZS1oZWlnaHQ6IDhweCAhaW1wb3J0YW50OwoJZm9udC1zaXplOiAxMXB4ICAhaW1wb3J0YW50OwoJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKCXRleHQtYWxpZ246IGNlbnRlcjsKCWN1cnNvcjogcy1yZXNpemU7Cgl9CgouZmMtYWdlbmRhIC51aS1yZXNpemFibGUtcmVzaXppbmcgeyAvKiBUT0RPOiBiZXR0ZXIgc2VsZWN0b3IgKi8KCV9vdmVyZmxvdzogaGlkZGVuOwoJfQoKCg==",
	"fullcalendar.js":                     "LyoKCiBGdWxsQ2FsZW5kYXIgdjEuNS40CiBodHRwOi8vYXJzaGF3LmNvbS9mdWxsY2FsZW5kYXIvCgogVXNlIGZ1bGxjYWxlbmRhci5jc3MgZm9yIGJhc2ljIHN0eWxpbmcuCiBGb3IgZXZlbnQgZHJhZyAmIGRyb3AsIHJlcXVpcmVzIGpRdWVyeSBVSSBkcmFnZ2FibGUuCiBGb3IgZXZlbnQgcmVzaXppbmcsIHJlcXVpcmVzIGpRdWVyeSBVSSByZXNpemFibGUuCgogQ29weXJpZ2h0IChjKSAyMDExIEFkYW0gU2hhdwogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMsIGxvY2F0ZWQgaW4KIE1JVC1MSUNFTlNFLnR4dCBhbmQgR1BMLUxJQ0VOU0UudHh0IHJlc3BlY3RpdmVseS4KCiBEYXRlOiBUdWUgU2VwIDQgMjM6Mzg6MzMgMjAxMiAtMDcwMAoKKi8KKGZ1bmN0aW9uKG0sbWEpe2Z1bmN0aW9uIHdiKGEpe20uZXh0ZW5kKHRydWUsWWEsYSl9ZnVuY3Rpb24gWWIoYSxiLGUpe2Z1bmN0aW9uIGQoayl7aWYoRSl7dSgpO3EoKTtuYSgpO1Moayl9ZWxzZSBmKCl9ZnVuY3Rpb24gZigpe0I9Yi50aGVtZT8idWkiOiJmYyI7YS5hZGRDbGFzcygiZmMiKTtiLmlzUlRMJiZhLmFkZENsYXNzKCJmYy1ydGwiKTtiLnRoZW1lJiZhLmFkZENsYXNzKCJ1aS13aWRnZXQiKTtFPW0oIjxkaXYgY2xhc3M9J2ZjLWNvbnRlbnQnIHN0eWxlPSdwb3NpdGlvbjpyZWxhdGl2ZScvPiIpLnByZXBlbmRUbyhhKTtDPW5ldyBaYihYLGIpOyhQPUMucmVuZGVyKCkpJiZhLnByZXBlbmQoUCk7eShiLmRlZmF1bHRWaWV3KTttKHdpbmRvdykucmVzaXplKG9hKTt0KCl8fGcoKX1mdW5jdGlvbiBnKCl7c2V0VGltZW91dChmdW5jdGlvbigpeyFuLnN0YXJ0JiZ0KCkmJlMoKX0sMCl9ZnVuY3Rpb24gbCgpe20od2luZG93KS51bmJpbmQoInJlc2l6ZSIsb2EpO0MuZGVzdHJveSgpOwpFLnJlbW92ZSgpO2EucmVtb3ZlQ2xhc3MoImZjIGZjLXJ0bCB1aS13aWRnZXQiKX1mdW5jdGlvbiBqKCl7cmV0dXJuIGkub2Zmc2V0V2lkdGghPT0wfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbSgiYm9keSIpWzBdLm9mZnNldFdpZHRoIT09MH1mdW5jdGlvbiB5KGspe2lmKCFufHxrIT1uLm5hbWUpe0YrKztwYSgpO3ZhciBEPW4sWjtpZihEKXsoRC5iZWZvcmVIaWRlfHx4YikoKTtaYShFLEUuaGVpZ2h0KCkpO0QuZWxlbWVudC5oaWRlKCl9ZWxzZSBaYShFLDEpO0UuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpO2lmKG49WVtrXSluLmVsZW1lbnQuc2hvdygpO2Vsc2Ugbj1ZW2tdPW5ldyBKYVtrXShaPXM9bSgiPGRpdiBjbGFzcz0nZmMtdmlldyBmYy12aWV3LSIraysiJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGUnLz4iKS5hcHBlbmRUbyhFKSxYKTtEJiZDLmRlYWN0aXZhdGVCdXR0b24oRC5uYW1lKTtDLmFjdGl2YXRlQnV0dG9uKGspO1MoKTtFLmNzcygib3ZlcmZsb3ciLCIiKTtEJiYKWmEoRSwxKTtafHwobi5hZnRlclNob3d8fHhiKSgpO0YtLX19ZnVuY3Rpb24gUyhrKXtpZihqKCkpe0YrKztwYSgpO289PT1tYSYmdSgpO3ZhciBEPWZhbHNlO2lmKCFuLnN0YXJ0fHxrfHxyPG4uc3RhcnR8fHI+PW4uZW5kKXtuLnJlbmRlcihyLGt8fDApO2ZhKHRydWUpO0Q9dHJ1ZX1lbHNlIGlmKG4uc2l6ZURpcnR5KXtuLmNsZWFyRXZlbnRzKCk7ZmEoKTtEPXRydWV9ZWxzZSBpZihuLmV2ZW50c0RpcnR5KXtuLmNsZWFyRXZlbnRzKCk7RD10cnVlfW4uc2l6ZURpcnR5PWZhbHNlO24uZXZlbnRzRGlydHk9ZmFsc2U7Z2EoRCk7Vz1hLm91dGVyV2lkdGgoKTtDLnVwZGF0ZVRpdGxlKG4udGl0bGUpO2s9bmV3IERhdGU7az49bi5zdGFydCYmazxuLmVuZD9DLmRpc2FibGVCdXR0b24oInRvZGF5Iik6Qy5lbmFibGVCdXR0b24oInRvZGF5Iik7Ri0tO24udHJpZ2dlcigidmlld0Rpc3BsYXkiLGkpfX1mdW5jdGlvbiBRKCl7cSgpO2lmKGooKSl7dSgpO2ZhKCk7cGEoKTtuLmNsZWFyRXZlbnRzKCk7Cm4ucmVuZGVyRXZlbnRzKEopO24uc2l6ZURpcnR5PWZhbHNlfX1mdW5jdGlvbiBxKCl7bS5lYWNoKFksZnVuY3Rpb24oayxEKXtELnNpemVEaXJ0eT10cnVlfSl9ZnVuY3Rpb24gdSgpe289Yi5jb250ZW50SGVpZ2h0P2IuY29udGVudEhlaWdodDpiLmhlaWdodD9iLmhlaWdodC0oUD9QLmhlaWdodCgpOjApLVNhKEUpOk1hdGgucm91bmQoRS53aWR0aCgpL01hdGgubWF4KGIuYXNwZWN0UmF0aW8sMC41KSl9ZnVuY3Rpb24gZmEoayl7RisrO24uc2V0SGVpZ2h0KG8sayk7aWYocyl7cy5jc3MoInBvc2l0aW9uIiwicmVsYXRpdmUiKTtzPW51bGx9bi5zZXRXaWR0aChFLndpZHRoKCksayk7Ri0tfWZ1bmN0aW9uIG9hKCl7aWYoIUYpaWYobi5zdGFydCl7dmFyIGs9Kyt2O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihrPT12JiYhRiYmaigpKWlmKFchPShXPWEub3V0ZXJXaWR0aCgpKSl7RisrO1EoKTtuLnRyaWdnZXIoIndpbmRvd1Jlc2l6ZSIsaSk7Ri0tfX0sMjAwKX1lbHNlIGcoKX1mdW5jdGlvbiBnYShrKXtpZighYi5sYXp5RmV0Y2hpbmd8fAp5YShuLnZpc1N0YXJ0LG4udmlzRW5kKSlyYSgpO2Vsc2UgayYmZGEoKX1mdW5jdGlvbiByYSgpe0sobi52aXNTdGFydCxuLnZpc0VuZCl9ZnVuY3Rpb24gc2Eoayl7Sj1rO2RhKCl9ZnVuY3Rpb24gaGEoayl7ZGEoayl9ZnVuY3Rpb24gZGEoayl7bmEoKTtpZihqKCkpe24uY2xlYXJFdmVudHMoKTtuLnJlbmRlckV2ZW50cyhKLGspO24uZXZlbnRzRGlydHk9ZmFsc2V9fWZ1bmN0aW9uIG5hKCl7bS5lYWNoKFksZnVuY3Rpb24oayxEKXtELmV2ZW50c0RpcnR5PXRydWV9KX1mdW5jdGlvbiB1YShrLEQsWil7bi5zZWxlY3QoayxELFo9PT1tYT90cnVlOlopfWZ1bmN0aW9uIHBhKCl7biYmbi51bnNlbGVjdCgpfWZ1bmN0aW9uIFUoKXtTKC0xKX1mdW5jdGlvbiBjYSgpe1MoMSl9ZnVuY3Rpb24ga2EoKXtnYihyLC0xKTtTKCl9ZnVuY3Rpb24gcWEoKXtnYihyLDEpO1MoKX1mdW5jdGlvbiBHKCl7cj1uZXcgRGF0ZTtTKCl9ZnVuY3Rpb24gcChrLEQsWil7aWYoayBpbnN0YW5jZW9mIERhdGUpcj0KTihrKTtlbHNlIHliKHIsayxELFopO1MoKX1mdW5jdGlvbiBMKGssRCxaKXtrIT09bWEmJmdiKHIsayk7RCE9PW1hJiZoYihyLEQpO1ohPT1tYSYmYmEocixaKTtTKCl9ZnVuY3Rpb24gYygpe3JldHVybiBOKHIpfWZ1bmN0aW9uIHooKXtyZXR1cm4gbn1mdW5jdGlvbiBIKGssRCl7aWYoRD09PW1hKXJldHVybiBiW2tdO2lmKGs9PSJoZWlnaHQifHxrPT0iY29udGVudEhlaWdodCJ8fGs9PSJhc3BlY3RSYXRpbyIpe2Jba109RDtRKCl9fWZ1bmN0aW9uIFQoayxEKXtpZihiW2tdKXJldHVybiBiW2tdLmFwcGx5KER8fGksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKX12YXIgWD10aGlzO1gub3B0aW9ucz1iO1gucmVuZGVyPWQ7WC5kZXN0cm95PWw7WC5yZWZldGNoRXZlbnRzPXJhO1gucmVwb3J0RXZlbnRzPXNhO1gucmVwb3J0RXZlbnRDaGFuZ2U9aGE7WC5yZXJlbmRlckV2ZW50cz1kYTtYLmNoYW5nZVZpZXc9eTtYLnNlbGVjdD11YTtYLnVuc2VsZWN0PXBhOwpYLnByZXY9VTtYLm5leHQ9Y2E7WC5wcmV2WWVhcj1rYTtYLm5leHRZZWFyPXFhO1gudG9kYXk9RztYLmdvdG9EYXRlPXA7WC5pbmNyZW1lbnREYXRlPUw7WC5mb3JtYXREYXRlPWZ1bmN0aW9uKGssRCl7cmV0dXJuIE9hKGssRCxiKX07WC5mb3JtYXREYXRlcz1mdW5jdGlvbihrLEQsWil7cmV0dXJuIGliKGssRCxaLGIpfTtYLmdldERhdGU9YztYLmdldFZpZXc9ejtYLm9wdGlvbj1IO1gudHJpZ2dlcj1UOyRiLmNhbGwoWCxiLGUpO3ZhciB5YT1YLmlzRmV0Y2hOZWVkZWQsSz1YLmZldGNoRXZlbnRzLGk9YVswXSxDLFAsRSxCLG4sWT17fSxXLG8scyx2PTAsRj0wLHI9bmV3IERhdGUsSj1bXSxNO3liKHIsYi55ZWFyLGIubW9udGgsYi5kYXRlKTtiLmRyb3BwYWJsZSYmbShkb2N1bWVudCkuYmluZCgiZHJhZ3N0YXJ0IixmdW5jdGlvbihrLEQpe3ZhciBaPWsudGFyZ2V0LGphPW0oWik7aWYoIWphLnBhcmVudHMoIi5mYyIpLmxlbmd0aCl7dmFyIGlhPWIuZHJvcEFjY2VwdDtpZihtLmlzRnVuY3Rpb24oaWEpPwppYS5jYWxsKFosamEpOmphLmlzKGlhKSl7TT1aO24uZHJhZ1N0YXJ0KE0sayxEKX19fSkuYmluZCgiZHJhZ3N0b3AiLGZ1bmN0aW9uKGssRCl7aWYoTSl7bi5kcmFnU3RvcChNLGssRCk7TT1udWxsfX0pfWZ1bmN0aW9uIFpiKGEsYil7ZnVuY3Rpb24gZSgpe3E9Yi50aGVtZT8idWkiOiJmYyI7aWYoYi5oZWFkZXIpcmV0dXJuIFE9bSgiPHRhYmxlIGNsYXNzPSdmYy1oZWFkZXInIHN0eWxlPSd3aWR0aDoxMDAlJy8+IikuYXBwZW5kKG0oIjx0ci8+IikuYXBwZW5kKGYoImxlZnQiKSkuYXBwZW5kKGYoImNlbnRlciIpKS5hcHBlbmQoZigicmlnaHQiKSkpfWZ1bmN0aW9uIGQoKXtRLnJlbW92ZSgpfWZ1bmN0aW9uIGYodSl7dmFyIGZhPW0oIjx0ZCBjbGFzcz0nZmMtaGVhZGVyLSIrdSsiJy8+Iik7KHU9Yi5oZWFkZXJbdV0pJiZtLmVhY2godS5zcGxpdCgiICIpLGZ1bmN0aW9uKG9hKXtvYT4wJiZmYS5hcHBlbmQoIjxzcGFuIGNsYXNzPSdmYy1oZWFkZXItc3BhY2UnLz4iKTt2YXIgZ2E7Cm0uZWFjaCh0aGlzLnNwbGl0KCIsIiksZnVuY3Rpb24ocmEsc2Epe2lmKHNhPT0idGl0bGUiKXtmYS5hcHBlbmQoIjxzcGFuIGNsYXNzPSdmYy1oZWFkZXItdGl0bGUnPjxoMj4mbmJzcDs8L2gyPjwvc3Bhbj4iKTtnYSYmZ2EuYWRkQ2xhc3MocSsiLWNvcm5lci1yaWdodCIpO2dhPW51bGx9ZWxzZXt2YXIgaGE7aWYoYVtzYV0paGE9YVtzYV07ZWxzZSBpZihKYVtzYV0paGE9ZnVuY3Rpb24oKXtuYS5yZW1vdmVDbGFzcyhxKyItc3RhdGUtaG92ZXIiKTthLmNoYW5nZVZpZXcoc2EpfTtpZihoYSl7cmE9Yi50aGVtZT9qYihiLmJ1dHRvbkljb25zLHNhKTpudWxsO3ZhciBkYT1qYihiLmJ1dHRvblRleHQsc2EpLG5hPW0oIjxzcGFuIGNsYXNzPSdmYy1idXR0b24gZmMtYnV0dG9uLSIrc2ErIiAiK3ErIi1zdGF0ZS1kZWZhdWx0Jz48c3BhbiBjbGFzcz0nZmMtYnV0dG9uLWlubmVyJz48c3BhbiBjbGFzcz0nZmMtYnV0dG9uLWNvbnRlbnQnPiIrKHJhPyI8c3BhbiBjbGFzcz0nZmMtaWNvbi13cmFwJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLSIrCnJhKyInLz48L3NwYW4+IjpkYSkrIjwvc3Bhbj48c3BhbiBjbGFzcz0nZmMtYnV0dG9uLWVmZmVjdCc+PHNwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPiIpO2lmKG5hKXtuYS5jbGljayhmdW5jdGlvbigpe25hLmhhc0NsYXNzKHErIi1zdGF0ZS1kaXNhYmxlZCIpfHxoYSgpfSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7bmEubm90KCIuIitxKyItc3RhdGUtYWN0aXZlIikubm90KCIuIitxKyItc3RhdGUtZGlzYWJsZWQiKS5hZGRDbGFzcyhxKyItc3RhdGUtZG93biIpfSkubW91c2V1cChmdW5jdGlvbigpe25hLnJlbW92ZUNsYXNzKHErIi1zdGF0ZS1kb3duIil9KS5ob3ZlcihmdW5jdGlvbigpe25hLm5vdCgiLiIrcSsiLXN0YXRlLWFjdGl2ZSIpLm5vdCgiLiIrcSsiLXN0YXRlLWRpc2FibGVkIikuYWRkQ2xhc3MocSsiLXN0YXRlLWhvdmVyIil9LGZ1bmN0aW9uKCl7bmEucmVtb3ZlQ2xhc3MocSsiLXN0YXRlLWhvdmVyIikucmVtb3ZlQ2xhc3MocSsiLXN0YXRlLWRvd24iKX0pLmFwcGVuZFRvKGZhKTsKZ2F8fG5hLmFkZENsYXNzKHErIi1jb3JuZXItbGVmdCIpO2dhPW5hfX19fSk7Z2EmJmdhLmFkZENsYXNzKHErIi1jb3JuZXItcmlnaHQiKX0pO3JldHVybiBmYX1mdW5jdGlvbiBnKHUpe1EuZmluZCgiaDIiKS5odG1sKHUpfWZ1bmN0aW9uIGwodSl7US5maW5kKCJzcGFuLmZjLWJ1dHRvbi0iK3UpLmFkZENsYXNzKHErIi1zdGF0ZS1hY3RpdmUiKX1mdW5jdGlvbiBqKHUpe1EuZmluZCgic3Bhbi5mYy1idXR0b24tIit1KS5yZW1vdmVDbGFzcyhxKyItc3RhdGUtYWN0aXZlIil9ZnVuY3Rpb24gdCh1KXtRLmZpbmQoInNwYW4uZmMtYnV0dG9uLSIrdSkuYWRkQ2xhc3MocSsiLXN0YXRlLWRpc2FibGVkIil9ZnVuY3Rpb24geSh1KXtRLmZpbmQoInNwYW4uZmMtYnV0dG9uLSIrdSkucmVtb3ZlQ2xhc3MocSsiLXN0YXRlLWRpc2FibGVkIil9dmFyIFM9dGhpcztTLnJlbmRlcj1lO1MuZGVzdHJveT1kO1MudXBkYXRlVGl0bGU9ZztTLmFjdGl2YXRlQnV0dG9uPWw7Uy5kZWFjdGl2YXRlQnV0dG9uPQpqO1MuZGlzYWJsZUJ1dHRvbj10O1MuZW5hYmxlQnV0dG9uPXk7dmFyIFE9bShbXSkscX1mdW5jdGlvbiAkYihhLGIpe2Z1bmN0aW9uIGUoYyx6KXtyZXR1cm4hY2F8fGM8Y2F8fHo+a2F9ZnVuY3Rpb24gZChjLHope2NhPWM7a2E9ejtMPVtdO2M9KytxYTtHPXo9VS5sZW5ndGg7Zm9yKHZhciBIPTA7SDx6O0grKylmKFVbSF0sYyl9ZnVuY3Rpb24gZihjLHope2coYyxmdW5jdGlvbihIKXtpZih6PT1xYSl7aWYoSCl7Zm9yKHZhciBUPTA7VDxILmxlbmd0aDtUKyspe0hbVF0uc291cmNlPWM7b2EoSFtUXSl9TD1MLmNvbmNhdChIKX1HLS07R3x8dWEoTCl9fSl9ZnVuY3Rpb24gZyhjLHope3ZhciBILFQ9QWEuc291cmNlRmV0Y2hlcnMsWDtmb3IoSD0wO0g8VC5sZW5ndGg7SCsrKXtYPVRbSF0oYyxjYSxrYSx6KTtpZihYPT09dHJ1ZSlyZXR1cm47ZWxzZSBpZih0eXBlb2YgWD09Im9iamVjdCIpe2coWCx6KTtyZXR1cm59fWlmKEg9Yy5ldmVudHMpaWYobS5pc0Z1bmN0aW9uKEgpKXt1KCk7CkgoTihjYSksTihrYSksZnVuY3Rpb24oQyl7eihDKTtmYSgpfSl9ZWxzZSBtLmlzQXJyYXkoSCk/eihIKTp6KCk7ZWxzZSBpZihjLnVybCl7dmFyIHlhPWMuc3VjY2VzcyxLPWMuZXJyb3IsaT1jLmNvbXBsZXRlO0g9bS5leHRlbmQoe30sYy5kYXRhfHx7fSk7VD1UYShjLnN0YXJ0UGFyYW0sYS5zdGFydFBhcmFtKTtYPVRhKGMuZW5kUGFyYW0sYS5lbmRQYXJhbSk7aWYoVClIW1RdPU1hdGgucm91bmQoK2NhLzFFMyk7aWYoWClIW1hdPU1hdGgucm91bmQoK2thLzFFMyk7dSgpO20uYWpheChtLmV4dGVuZCh7fSxhYyxjLHtkYXRhOkgsc3VjY2VzczpmdW5jdGlvbihDKXtDPUN8fFtdO3ZhciBQPSRhKHlhLHRoaXMsYXJndW1lbnRzKTtpZihtLmlzQXJyYXkoUCkpQz1QO3ooQyl9LGVycm9yOmZ1bmN0aW9uKCl7JGEoSyx0aGlzLGFyZ3VtZW50cyk7eigpfSxjb21wbGV0ZTpmdW5jdGlvbigpeyRhKGksdGhpcyxhcmd1bWVudHMpO2ZhKCl9fSkpfWVsc2UgeigpfWZ1bmN0aW9uIGwoYyl7aWYoYz0KaihjKSl7RysrO2YoYyxxYSl9fWZ1bmN0aW9uIGooYyl7aWYobS5pc0Z1bmN0aW9uKGMpfHxtLmlzQXJyYXkoYykpYz17ZXZlbnRzOmN9O2Vsc2UgaWYodHlwZW9mIGM9PSJzdHJpbmciKWM9e3VybDpjfTtpZih0eXBlb2YgYz09Im9iamVjdCIpe2dhKGMpO1UucHVzaChjKTtyZXR1cm4gY319ZnVuY3Rpb24gdChjKXtVPW0uZ3JlcChVLGZ1bmN0aW9uKHope3JldHVybiFyYSh6LGMpfSk7TD1tLmdyZXAoTCxmdW5jdGlvbih6KXtyZXR1cm4hcmEoei5zb3VyY2UsYyl9KTt1YShMKX1mdW5jdGlvbiB5KGMpe3ZhciB6LEg9TC5sZW5ndGgsVCxYPW5hKCkuZGVmYXVsdEV2ZW50RW5kLHlhPWMuc3RhcnQtYy5fc3RhcnQsSz1jLmVuZD9jLmVuZC0oYy5fZW5kfHxYKGMpKTowO2Zvcih6PTA7ejxIO3orKyl7VD1MW3pdO2lmKFQuX2lkPT1jLl9pZCYmVCE9Yyl7VC5zdGFydD1uZXcgRGF0ZSgrVC5zdGFydCt5YSk7VC5lbmQ9Yy5lbmQ/VC5lbmQ/bmV3IERhdGUoK1QuZW5kK0spOm5ldyBEYXRlKCtYKFQpKwpLKTpudWxsO1QudGl0bGU9Yy50aXRsZTtULnVybD1jLnVybDtULmFsbERheT1jLmFsbERheTtULmNsYXNzTmFtZT1jLmNsYXNzTmFtZTtULmVkaXRhYmxlPWMuZWRpdGFibGU7VC5jb2xvcj1jLmNvbG9yO1QuYmFja2dyb3VkQ29sb3I9Yy5iYWNrZ3JvdWRDb2xvcjtULmJvcmRlckNvbG9yPWMuYm9yZGVyQ29sb3I7VC50ZXh0Q29sb3I9Yy50ZXh0Q29sb3I7b2EoVCl9fW9hKGMpO3VhKEwpfWZ1bmN0aW9uIFMoYyx6KXtvYShjKTtpZighYy5zb3VyY2Upe2lmKHope3BhLmV2ZW50cy5wdXNoKGMpO2Muc291cmNlPXBhfUwucHVzaChjKX11YShMKX1mdW5jdGlvbiBRKGMpe2lmKGMpe2lmKCFtLmlzRnVuY3Rpb24oYykpe3ZhciB6PWMrIiI7Yz1mdW5jdGlvbihUKXtyZXR1cm4gVC5faWQ9PXp9fUw9bS5ncmVwKEwsYyx0cnVlKTtmb3IoSD0wO0g8VS5sZW5ndGg7SCsrKWlmKG0uaXNBcnJheShVW0hdLmV2ZW50cykpVVtIXS5ldmVudHM9bS5ncmVwKFVbSF0uZXZlbnRzLGMsdHJ1ZSl9ZWxzZXtMPQpbXTtmb3IodmFyIEg9MDtIPFUubGVuZ3RoO0grKylpZihtLmlzQXJyYXkoVVtIXS5ldmVudHMpKVVbSF0uZXZlbnRzPVtdfXVhKEwpfWZ1bmN0aW9uIHEoYyl7aWYobS5pc0Z1bmN0aW9uKGMpKXJldHVybiBtLmdyZXAoTCxjKTtlbHNlIGlmKGMpe2MrPSIiO3JldHVybiBtLmdyZXAoTCxmdW5jdGlvbih6KXtyZXR1cm4gei5faWQ9PWN9KX1yZXR1cm4gTH1mdW5jdGlvbiB1KCl7cCsrfHxkYSgibG9hZGluZyIsbnVsbCx0cnVlKX1mdW5jdGlvbiBmYSgpey0tcHx8ZGEoImxvYWRpbmciLG51bGwsZmFsc2UpfWZ1bmN0aW9uIG9hKGMpe3ZhciB6PWMuc291cmNlfHx7fSxIPVRhKHouaWdub3JlVGltZXpvbmUsYS5pZ25vcmVUaW1lem9uZSk7Yy5faWQ9Yy5faWR8fChjLmlkPT09bWE/Il9mYyIrYmMrKzpjLmlkKyIiKTtpZihjLmRhdGUpe2lmKCFjLnN0YXJ0KWMuc3RhcnQ9Yy5kYXRlO2RlbGV0ZSBjLmRhdGV9Yy5fc3RhcnQ9TihjLnN0YXJ0PWtiKGMuc3RhcnQsSCkpO2MuZW5kPWtiKGMuZW5kLApIKTtpZihjLmVuZCYmYy5lbmQ8PWMuc3RhcnQpYy5lbmQ9bnVsbDtjLl9lbmQ9Yy5lbmQ/TihjLmVuZCk6bnVsbDtpZihjLmFsbERheT09PW1hKWMuYWxsRGF5PVRhKHouYWxsRGF5RGVmYXVsdCxhLmFsbERheURlZmF1bHQpO2lmKGMuY2xhc3NOYW1lKXtpZih0eXBlb2YgYy5jbGFzc05hbWU9PSJzdHJpbmciKWMuY2xhc3NOYW1lPWMuY2xhc3NOYW1lLnNwbGl0KC9ccysvKX1lbHNlIGMuY2xhc3NOYW1lPVtdfWZ1bmN0aW9uIGdhKGMpe2lmKGMuY2xhc3NOYW1lKXtpZih0eXBlb2YgYy5jbGFzc05hbWU9PSJzdHJpbmciKWMuY2xhc3NOYW1lPWMuY2xhc3NOYW1lLnNwbGl0KC9ccysvKX1lbHNlIGMuY2xhc3NOYW1lPVtdO2Zvcih2YXIgej1BYS5zb3VyY2VOb3JtYWxpemVycyxIPTA7SDx6Lmxlbmd0aDtIKyspeltIXShjKX1mdW5jdGlvbiByYShjLHope3JldHVybiBjJiZ6JiZzYShjKT09c2Eoeil9ZnVuY3Rpb24gc2EoYyl7cmV0dXJuKHR5cGVvZiBjPT0ib2JqZWN0Ij9jLmV2ZW50c3x8CmMudXJsOiIiKXx8Y312YXIgaGE9dGhpcztoYS5pc0ZldGNoTmVlZGVkPWU7aGEuZmV0Y2hFdmVudHM9ZDtoYS5hZGRFdmVudFNvdXJjZT1sO2hhLnJlbW92ZUV2ZW50U291cmNlPXQ7aGEudXBkYXRlRXZlbnQ9eTtoYS5yZW5kZXJFdmVudD1TO2hhLnJlbW92ZUV2ZW50cz1RO2hhLmNsaWVudEV2ZW50cz1xO2hhLm5vcm1hbGl6ZUV2ZW50PW9hO3ZhciBkYT1oYS50cmlnZ2VyLG5hPWhhLmdldFZpZXcsdWE9aGEucmVwb3J0RXZlbnRzLHBhPXtldmVudHM6W119LFU9W3BhXSxjYSxrYSxxYT0wLEc9MCxwPTAsTD1bXTtmb3IoaGE9MDtoYTxiLmxlbmd0aDtoYSsrKWooYltoYV0pfWZ1bmN0aW9uIGdiKGEsYixlKXthLnNldEZ1bGxZZWFyKGEuZ2V0RnVsbFllYXIoKStiKTtlfHxLYShhKTtyZXR1cm4gYX1mdW5jdGlvbiBoYihhLGIsZSl7aWYoK2Epe2I9YS5nZXRNb250aCgpK2I7dmFyIGQ9TihhKTtkLnNldERhdGUoMSk7ZC5zZXRNb250aChiKTthLnNldE1vbnRoKGIpO2ZvcihlfHxLYShhKTthLmdldE1vbnRoKCkhPQpkLmdldE1vbnRoKCk7KWEuc2V0RGF0ZShhLmdldERhdGUoKSsoYTxkPzE6LTEpKX1yZXR1cm4gYX1mdW5jdGlvbiBiYShhLGIsZSl7aWYoK2Epe2I9YS5nZXREYXRlKCkrYjt2YXIgZD1OKGEpO2Quc2V0SG91cnMoOSk7ZC5zZXREYXRlKGIpO2Euc2V0RGF0ZShiKTtlfHxLYShhKTtsYihhLGQpfXJldHVybiBhfWZ1bmN0aW9uIGxiKGEsYil7aWYoK2EpZm9yKDthLmdldERhdGUoKSE9Yi5nZXREYXRlKCk7KWEuc2V0VGltZSgrYSsoYTxiPzE6LTEpKmNjKX1mdW5jdGlvbiB4YShhLGIpe2Euc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKStiKTtyZXR1cm4gYX1mdW5jdGlvbiBLYShhKXthLnNldEhvdXJzKDApO2Euc2V0TWludXRlcygwKTthLnNldFNlY29uZHMoMCk7YS5zZXRNaWxsaXNlY29uZHMoMCk7cmV0dXJuIGF9ZnVuY3Rpb24gTihhLGIpe2lmKGIpcmV0dXJuIEthKG5ldyBEYXRlKCthKSk7cmV0dXJuIG5ldyBEYXRlKCthKX1mdW5jdGlvbiB6Yigpe3ZhciBhPTAsYjtkbyBiPW5ldyBEYXRlKDE5NzAsCmErKywxKTt3aGlsZShiLmdldEhvdXJzKCkpO3JldHVybiBifWZ1bmN0aW9uIEZhKGEsYixlKXtmb3IoYj1ifHwxOyFhLmdldERheSgpfHxlJiZhLmdldERheSgpPT0xfHwhZSYmYS5nZXREYXkoKT09NjspYmEoYSxiKTtyZXR1cm4gYX1mdW5jdGlvbiBDYShhLGIpe3JldHVybiBNYXRoLnJvdW5kKChOKGEsdHJ1ZSktTihiLHRydWUpKS9BYil9ZnVuY3Rpb24geWIoYSxiLGUsZCl7aWYoYiE9PW1hJiZiIT1hLmdldEZ1bGxZZWFyKCkpe2Euc2V0RGF0ZSgxKTthLnNldE1vbnRoKDApO2Euc2V0RnVsbFllYXIoYil9aWYoZSE9PW1hJiZlIT1hLmdldE1vbnRoKCkpe2Euc2V0RGF0ZSgxKTthLnNldE1vbnRoKGUpfWQhPT1tYSYmYS5zZXREYXRlKGQpfWZ1bmN0aW9uIGtiKGEsYil7aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiBhO2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gbmV3IERhdGUoYSoxRTMpO2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7aWYoYS5tYXRjaCgvXlxkKyhcLlxkKyk/JC8pKXJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KGEpKgoxRTMpO2lmKGI9PT1tYSliPXRydWU7cmV0dXJuIEJiKGEsYil8fChhP25ldyBEYXRlKGEpOm51bGwpfXJldHVybiBudWxsfWZ1bmN0aW9uIEJiKGEsYil7YT1hLm1hdGNoKC9eKFswLTldezR9KSgtKFswLTldezJ9KSgtKFswLTldezJ9KShbVCBdKFswLTldezJ9KTooWzAtOV17Mn0pKDooWzAtOV17Mn0pKFwuKFswLTldKykpPyk/KFp8KChbLStdKShbMC05XXsyfSkoOj8oWzAtOV17Mn0pKT8pKT8pPyk/KT8kLyk7aWYoIWEpcmV0dXJuIG51bGw7dmFyIGU9bmV3IERhdGUoYVsxXSwwLDEpO2lmKGJ8fCFhWzEzXSl7Yj1uZXcgRGF0ZShhWzFdLDAsMSw5LDApO2lmKGFbM10pe2Uuc2V0TW9udGgoYVszXS0xKTtiLnNldE1vbnRoKGFbM10tMSl9aWYoYVs1XSl7ZS5zZXREYXRlKGFbNV0pO2Iuc2V0RGF0ZShhWzVdKX1sYihlLGIpO2FbN10mJmUuc2V0SG91cnMoYVs3XSk7YVs4XSYmZS5zZXRNaW51dGVzKGFbOF0pO2FbMTBdJiZlLnNldFNlY29uZHMoYVsxMF0pO2FbMTJdJiZlLnNldE1pbGxpc2Vjb25kcyhOdW1iZXIoIjAuIisKYVsxMl0pKjFFMyk7bGIoZSxiKX1lbHNle2Uuc2V0VVRDRnVsbFllYXIoYVsxXSxhWzNdP2FbM10tMTowLGFbNV18fDEpO2Uuc2V0VVRDSG91cnMoYVs3XXx8MCxhWzhdfHwwLGFbMTBdfHwwLGFbMTJdP051bWJlcigiMC4iK2FbMTJdKSoxRTM6MCk7aWYoYVsxNF0pe2I9TnVtYmVyKGFbMTZdKSo2MCsoYVsxOF0/TnVtYmVyKGFbMThdKTowKTtiKj1hWzE1XT09Ii0iPzE6LTE7ZT1uZXcgRGF0ZSgrZStiKjYwKjFFMyl9fXJldHVybiBlfWZ1bmN0aW9uIG1iKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYSo2MDtpZih0eXBlb2YgYT09Im9iamVjdCIpcmV0dXJuIGEuZ2V0SG91cnMoKSo2MCthLmdldE1pbnV0ZXMoKTtpZihhPWEubWF0Y2goLyhcZCspKD86OihcZCspKT9ccyooXHcrKT8vKSl7dmFyIGI9cGFyc2VJbnQoYVsxXSwxMCk7aWYoYVszXSl7YiU9MTI7aWYoYVszXS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKT09InAiKWIrPTEyfXJldHVybiBiKjYwKyhhWzJdP3BhcnNlSW50KGFbMl0sCjEwKTowKX19ZnVuY3Rpb24gT2EoYSxiLGUpe3JldHVybiBpYihhLG51bGwsYixlKX1mdW5jdGlvbiBpYihhLGIsZSxkKXtkPWR8fFlhO3ZhciBmPWEsZz1iLGwsaj1lLmxlbmd0aCx0LHksUyxRPSIiO2ZvcihsPTA7bDxqO2wrKyl7dD1lLmNoYXJBdChsKTtpZih0PT0iJyIpZm9yKHk9bCsxO3k8ajt5Kyspe2lmKGUuY2hhckF0KHkpPT0iJyIpe2lmKGYpe1ErPXk9PWwrMT8iJyI6ZS5zdWJzdHJpbmcobCsxLHkpO2w9eX1icmVha319ZWxzZSBpZih0PT0iKCIpZm9yKHk9bCsxO3k8ajt5Kyspe2lmKGUuY2hhckF0KHkpPT0iKSIpe2w9T2EoZixlLnN1YnN0cmluZyhsKzEseSksZCk7aWYocGFyc2VJbnQobC5yZXBsYWNlKC9cRC8sIiIpLDEwKSlRKz1sO2w9eTticmVha319ZWxzZSBpZih0PT0iWyIpZm9yKHk9bCsxO3k8ajt5Kyspe2lmKGUuY2hhckF0KHkpPT0iXSIpe3Q9ZS5zdWJzdHJpbmcobCsxLHkpO2w9T2EoZix0LGQpO2lmKGwhPU9hKGcsdCxkKSlRKz1sO2w9eTticmVha319ZWxzZSBpZih0PT0KInsiKXtmPWI7Zz1hfWVsc2UgaWYodD09In0iKXtmPWE7Zz1ifWVsc2V7Zm9yKHk9ajt5Pmw7eS0tKWlmKFM9ZGNbZS5zdWJzdHJpbmcobCx5KV0pe2lmKGYpUSs9UyhmLGQpO2w9eS0xO2JyZWFrfWlmKHk9PWwpaWYoZilRKz10fX1yZXR1cm4gUX1mdW5jdGlvbiBVYShhKXtyZXR1cm4gYS5lbmQ/ZWMoYS5lbmQsYS5hbGxEYXkpOmJhKE4oYS5zdGFydCksMSl9ZnVuY3Rpb24gZWMoYSxiKXthPU4oYSk7cmV0dXJuIGJ8fGEuZ2V0SG91cnMoKXx8YS5nZXRNaW51dGVzKCk/YmEoYSwxKTpLYShhKX1mdW5jdGlvbiBmYyhhLGIpe3JldHVybihiLm1zTGVuZ3RoLWEubXNMZW5ndGgpKjEwMCsoYS5ldmVudC5zdGFydC1iLmV2ZW50LnN0YXJ0KX1mdW5jdGlvbiBDYihhLGIpe3JldHVybiBhLmVuZD5iLnN0YXJ0JiZhLnN0YXJ0PGIuZW5kfWZ1bmN0aW9uIG5iKGEsYixlLGQpe3ZhciBmPVtdLGcsbD1hLmxlbmd0aCxqLHQseSxTLFE7Zm9yKGc9MDtnPGw7ZysrKXtqPWFbZ107dD1qLnN0YXJ0Owp5PWJbZ107aWYoeT5lJiZ0PGQpe2lmKHQ8ZSl7dD1OKGUpO1M9ZmFsc2V9ZWxzZXt0PXQ7Uz10cnVlfWlmKHk+ZCl7eT1OKGQpO1E9ZmFsc2V9ZWxzZXt5PXk7UT10cnVlfWYucHVzaCh7ZXZlbnQ6aixzdGFydDp0LGVuZDp5LGlzU3RhcnQ6Uyxpc0VuZDpRLG1zTGVuZ3RoOnktdH0pfX1yZXR1cm4gZi5zb3J0KGZjKX1mdW5jdGlvbiBvYihhKXt2YXIgYj1bXSxlLGQ9YS5sZW5ndGgsZixnLGwsajtmb3IoZT0wO2U8ZDtlKyspe2Y9YVtlXTtmb3IoZz0wOzspe2w9ZmFsc2U7aWYoYltnXSlmb3Ioaj0wO2o8YltnXS5sZW5ndGg7aisrKWlmKENiKGJbZ11bal0sZikpe2w9dHJ1ZTticmVha31pZihsKWcrKztlbHNlIGJyZWFrfWlmKGJbZ10pYltnXS5wdXNoKGYpO2Vsc2UgYltnXT1bZl19cmV0dXJuIGJ9ZnVuY3Rpb24gRGIoYSxiLGUpe2EudW5iaW5kKCJtb3VzZW92ZXIiKS5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Zm9yKHZhciBmPWQudGFyZ2V0LGc7ZiE9dGhpczspe2c9ZjtmPWYucGFyZW50Tm9kZX1pZigoZj0KZy5fZmNpKSE9PW1hKXtnLl9mY2k9bWE7Zz1iW2ZdO2UoZy5ldmVudCxnLmVsZW1lbnQsZyk7bShkLnRhcmdldCkudHJpZ2dlcihkKX1kLnN0b3BQcm9wYWdhdGlvbigpfSl9ZnVuY3Rpb24gVmEoYSxiLGUpe2Zvcih2YXIgZD0wLGY7ZDxhLmxlbmd0aDtkKyspe2Y9bShhW2RdKTtmLndpZHRoKE1hdGgubWF4KDAsYi1wYihmLGUpKSl9fWZ1bmN0aW9uIEViKGEsYixlKXtmb3IodmFyIGQ9MCxmO2Q8YS5sZW5ndGg7ZCsrKXtmPW0oYVtkXSk7Zi5oZWlnaHQoTWF0aC5tYXgoMCxiLVNhKGYsZSkpKX19ZnVuY3Rpb24gcGIoYSxiKXtyZXR1cm4gZ2MoYSkraGMoYSkrKGI/aWMoYSk6MCl9ZnVuY3Rpb24gZ2MoYSl7cmV0dXJuKHBhcnNlRmxvYXQobS5jc3MoYVswXSwicGFkZGluZ0xlZnQiLHRydWUpKXx8MCkrKHBhcnNlRmxvYXQobS5jc3MoYVswXSwicGFkZGluZ1JpZ2h0Iix0cnVlKSl8fDApfWZ1bmN0aW9uIGljKGEpe3JldHVybihwYXJzZUZsb2F0KG0uY3NzKGFbMF0sIm1hcmdpbkxlZnQiLAp0cnVlKSl8fDApKyhwYXJzZUZsb2F0KG0uY3NzKGFbMF0sIm1hcmdpblJpZ2h0Iix0cnVlKSl8fDApfWZ1bmN0aW9uIGhjKGEpe3JldHVybihwYXJzZUZsb2F0KG0uY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSkpfHwwKSsocGFyc2VGbG9hdChtLmNzcyhhWzBdLCJib3JkZXJSaWdodFdpZHRoIix0cnVlKSl8fDApfWZ1bmN0aW9uIFNhKGEsYil7cmV0dXJuIGpjKGEpK2tjKGEpKyhiP0ZiKGEpOjApfWZ1bmN0aW9uIGpjKGEpe3JldHVybihwYXJzZUZsb2F0KG0uY3NzKGFbMF0sInBhZGRpbmdUb3AiLHRydWUpKXx8MCkrKHBhcnNlRmxvYXQobS5jc3MoYVswXSwicGFkZGluZ0JvdHRvbSIsdHJ1ZSkpfHwwKX1mdW5jdGlvbiBGYihhKXtyZXR1cm4ocGFyc2VGbG9hdChtLmNzcyhhWzBdLCJtYXJnaW5Ub3AiLHRydWUpKXx8MCkrKHBhcnNlRmxvYXQobS5jc3MoYVswXSwibWFyZ2luQm90dG9tIix0cnVlKSl8fDApfWZ1bmN0aW9uIGtjKGEpe3JldHVybihwYXJzZUZsb2F0KG0uY3NzKGFbMF0sCiJib3JkZXJUb3BXaWR0aCIsdHJ1ZSkpfHwwKSsocGFyc2VGbG9hdChtLmNzcyhhWzBdLCJib3JkZXJCb3R0b21XaWR0aCIsdHJ1ZSkpfHwwKX1mdW5jdGlvbiBaYShhLGIpe2I9dHlwZW9mIGI9PSJudW1iZXIiP2IrInB4IjpiO2EuZWFjaChmdW5jdGlvbihlLGQpe2Quc3R5bGUuY3NzVGV4dCs9IjttaW4taGVpZ2h0OiIrYisiO19oZWlnaHQ6IitifSl9ZnVuY3Rpb24geGIoKXt9ZnVuY3Rpb24gR2IoYSxiKXtyZXR1cm4gYS1ifWZ1bmN0aW9uIEhiKGEpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGEpfWZ1bmN0aW9uIFBhKGEpe3JldHVybihhPDEwPyIwIjoiIikrYX1mdW5jdGlvbiBqYihhLGIpe2lmKGFbYl0hPT1tYSlyZXR1cm4gYVtiXTtiPWIuc3BsaXQoLyg/PVtBLVpdKS8pO2Zvcih2YXIgZT1iLmxlbmd0aC0xLGQ7ZT49MDtlLS0pe2Q9YVtiW2VdLnRvTG93ZXJDYXNlKCldO2lmKGQhPT1tYSlyZXR1cm4gZH1yZXR1cm4gYVsiIl19ZnVuY3Rpb24gUWEoYSl7cmV0dXJuIGEucmVwbGFjZSgvJi9nLAoiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8nL2csIiYjMDM5OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvXG4vZywiPGJyIC8+Iil9ZnVuY3Rpb24gSWIoYSl7cmV0dXJuIGEuaWQrIi8iK2EuY2xhc3NOYW1lKyIvIithLnN0eWxlLmNzc1RleHQucmVwbGFjZSgvKF58OylccyoodG9wfGxlZnR8d2lkdGh8aGVpZ2h0KVxzKjpbXjtdKi9pZywiIil9ZnVuY3Rpb24gcWIoYSl7YS5hdHRyKCJ1bnNlbGVjdGFibGUiLCJvbiIpLmNzcygiTW96VXNlclNlbGVjdCIsIm5vbmUiKS5iaW5kKCJzZWxlY3RzdGFydC51aSIsZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9KX1mdW5jdGlvbiBhYihhKXthLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoImZjLWZpcnN0IGZjLWxhc3QiKS5maWx0ZXIoIjpmaXJzdC1jaGlsZCIpLmFkZENsYXNzKCJmYy1maXJzdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QtY2hpbGQiKS5hZGRDbGFzcygiZmMtbGFzdCIpfQpmdW5jdGlvbiByYihhLGIpe2EuZWFjaChmdW5jdGlvbihlLGQpe2QuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLnJlcGxhY2UoL15mYy1cdyovLCJmYy0iK2xjW2IuZ2V0RGF5KCldKX0pfWZ1bmN0aW9uIEpiKGEsYil7dmFyIGU9YS5zb3VyY2V8fHt9LGQ9YS5jb2xvcixmPWUuY29sb3IsZz1iKCJldmVudENvbG9yIiksbD1hLmJhY2tncm91bmRDb2xvcnx8ZHx8ZS5iYWNrZ3JvdW5kQ29sb3J8fGZ8fGIoImV2ZW50QmFja2dyb3VuZENvbG9yIil8fGc7ZD1hLmJvcmRlckNvbG9yfHxkfHxlLmJvcmRlckNvbG9yfHxmfHxiKCJldmVudEJvcmRlckNvbG9yIil8fGc7YT1hLnRleHRDb2xvcnx8ZS50ZXh0Q29sb3J8fGIoImV2ZW50VGV4dENvbG9yIik7Yj1bXTtsJiZiLnB1c2goImJhY2tncm91bmQtY29sb3I6IitsKTtkJiZiLnB1c2goImJvcmRlci1jb2xvcjoiK2QpO2EmJmIucHVzaCgiY29sb3I6IithKTtyZXR1cm4gYi5qb2luKCI7Iil9ZnVuY3Rpb24gJGEoYSxiLGUpe2lmKG0uaXNGdW5jdGlvbihhKSlhPQpbYV07aWYoYSl7dmFyIGQsZjtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWY9YVtkXS5hcHBseShiLGUpfHxmO3JldHVybiBmfX1mdW5jdGlvbiBUYSgpe2Zvcih2YXIgYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspaWYoYXJndW1lbnRzW2FdIT09bWEpcmV0dXJuIGFyZ3VtZW50c1thXX1mdW5jdGlvbiBtYyhhLGIpe2Z1bmN0aW9uIGUoaix0KXtpZih0KXtoYihqLHQpO2ouc2V0RGF0ZSgxKX1qPU4oaix0cnVlKTtqLnNldERhdGUoMSk7dD1oYihOKGopLDEpO3ZhciB5PU4oaiksUz1OKHQpLFE9ZigiZmlyc3REYXkiKSxxPWYoIndlZWtlbmRzIik/MDoxO2lmKHEpe0ZhKHkpO0ZhKFMsLTEsdHJ1ZSl9YmEoeSwtKCh5LmdldERheSgpLU1hdGgubWF4KFEscSkrNyklNykpO2JhKFMsKDctUy5nZXREYXkoKStNYXRoLm1heChRLHEpKSU3KTtRPU1hdGgucm91bmQoKFMteSkvKEFiKjcpKTtpZihmKCJ3ZWVrTW9kZSIpPT0iZml4ZWQiKXtiYShTLCg2LVEpKjcpO1E9Nn1kLnRpdGxlPWwoaiwKZigidGl0bGVGb3JtYXQiKSk7ZC5zdGFydD1qO2QuZW5kPXQ7ZC52aXNTdGFydD15O2QudmlzRW5kPVM7Zyg2LFEscT81OjcsdHJ1ZSl9dmFyIGQ9dGhpcztkLnJlbmRlcj1lO3NiLmNhbGwoZCxhLGIsIm1vbnRoIik7dmFyIGY9ZC5vcHQsZz1kLnJlbmRlckJhc2ljLGw9Yi5mb3JtYXREYXRlfWZ1bmN0aW9uIG5jKGEsYil7ZnVuY3Rpb24gZShqLHQpe3QmJmJhKGosdCo3KTtqPWJhKE4oaiksLSgoai5nZXREYXkoKS1mKCJmaXJzdERheSIpKzcpJTcpKTt0PWJhKE4oaiksNyk7dmFyIHk9TihqKSxTPU4odCksUT1mKCJ3ZWVrZW5kcyIpO2lmKCFRKXtGYSh5KTtGYShTLC0xLHRydWUpfWQudGl0bGU9bCh5LGJhKE4oUyksLTEpLGYoInRpdGxlRm9ybWF0IikpO2Quc3RhcnQ9ajtkLmVuZD10O2QudmlzU3RhcnQ9eTtkLnZpc0VuZD1TO2coMSwxLFE/Nzo1LGZhbHNlKX12YXIgZD10aGlzO2QucmVuZGVyPWU7c2IuY2FsbChkLGEsYiwiYmFzaWNXZWVrIik7dmFyIGY9ZC5vcHQsZz1kLnJlbmRlckJhc2ljLApsPWIuZm9ybWF0RGF0ZXN9ZnVuY3Rpb24gb2MoYSxiKXtmdW5jdGlvbiBlKGosdCl7aWYodCl7YmEoaix0KTtmKCJ3ZWVrZW5kcyIpfHxGYShqLHQ8MD8tMToxKX1kLnRpdGxlPWwoaixmKCJ0aXRsZUZvcm1hdCIpKTtkLnN0YXJ0PWQudmlzU3RhcnQ9TihqLHRydWUpO2QuZW5kPWQudmlzRW5kPWJhKE4oZC5zdGFydCksMSk7ZygxLDEsMSxmYWxzZSl9dmFyIGQ9dGhpcztkLnJlbmRlcj1lO3NiLmNhbGwoZCxhLGIsImJhc2ljRGF5Iik7dmFyIGY9ZC5vcHQsZz1kLnJlbmRlckJhc2ljLGw9Yi5mb3JtYXREYXRlfWZ1bmN0aW9uIHNiKGEsYixlKXtmdW5jdGlvbiBkKHcsSSxSLFYpe3Y9STtGPVI7ZigpOyhJPSFDKT9nKHcsVik6eigpO2woSSl9ZnVuY3Rpb24gZigpe2lmKGs9TCgiaXNSVEwiKSl7RD0tMTtaPUYtMX1lbHNle0Q9MTtaPTB9amE9TCgiZmlyc3REYXkiKTtpYT1MKCJ3ZWVrZW5kcyIpPzA6MTtsYT1MKCJ0aGVtZSIpPyJ1aSI6ImZjIjskPUwoImNvbHVtbkZvcm1hdCIpfWZ1bmN0aW9uIGcodywKSSl7dmFyIFIsVj1sYSsiLXdpZGdldC1oZWFkZXIiLGVhPWxhKyItd2lkZ2V0LWNvbnRlbnQiLGFhO1I9Ijx0YWJsZSBjbGFzcz0nZmMtYm9yZGVyLXNlcGFyYXRlJyBzdHlsZT0nd2lkdGg6MTAwJScgY2VsbHNwYWNpbmc9JzAnPjx0aGVhZD48dHI+Ijtmb3IoYWE9MDthYTxGO2FhKyspUis9Ijx0aCBjbGFzcz0nZmMtICIrVisiJy8+IjtSKz0iPC90cj48L3RoZWFkPjx0Ym9keT4iO2ZvcihhYT0wO2FhPHc7YWErKyl7Uis9Ijx0ciBjbGFzcz0nZmMtd2VlayIrYWErIic+Ijtmb3IoVj0wO1Y8RjtWKyspUis9Ijx0ZCBjbGFzcz0nZmMtICIrZWErIiBmYy1kYXkiKyhhYSpGK1YpKyInPjxkaXY+IisoST8iPGRpdiBjbGFzcz0nZmMtZGF5LW51bWJlcicvPiI6IiIpKyI8ZGl2IGNsYXNzPSdmYy1kYXktY29udGVudCc+PGRpdiBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmUnPiZuYnNwOzwvZGl2PjwvZGl2PjwvZGl2PjwvdGQ+IjtSKz0iPC90cj4ifVIrPSI8L3Rib2R5PjwvdGFibGU+Ijt3PQptKFIpLmFwcGVuZFRvKGEpO0s9dy5maW5kKCJ0aGVhZCIpO2k9Sy5maW5kKCJ0aCIpO0M9dy5maW5kKCJ0Ym9keSIpO1A9Qy5maW5kKCJ0ciIpO0U9Qy5maW5kKCJ0ZCIpO0I9RS5maWx0ZXIoIjpmaXJzdC1jaGlsZCIpO249UC5lcSgwKS5maW5kKCJkaXYuZmMtZGF5LWNvbnRlbnQgZGl2Iik7YWIoSy5hZGQoSy5maW5kKCJ0ciIpKSk7YWIoUCk7UC5lcSgwKS5hZGRDbGFzcygiZmMtZmlyc3QiKTt5KEUpO1k9bSgiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo4O3RvcDowO2xlZnQ6MCcvPiIpLmFwcGVuZFRvKGEpfWZ1bmN0aW9uIGwodyl7dmFyIEk9d3x8dj09MSxSPXAuc3RhcnQuZ2V0TW9udGgoKSxWPUthKG5ldyBEYXRlKSxlYSxhYSx2YTtJJiZpLmVhY2goZnVuY3Rpb24od2EsR2Epe2VhPW0oR2EpO2FhPWNhKHdhKTtlYS5odG1sKHlhKGFhLCQpKTtyYihlYSxhYSl9KTtFLmVhY2goZnVuY3Rpb24od2EsR2Epe2VhPW0oR2EpO2FhPWNhKHdhKTthYS5nZXRNb250aCgpPT0KUj9lYS5yZW1vdmVDbGFzcygiZmMtb3RoZXItbW9udGgiKTplYS5hZGRDbGFzcygiZmMtb3RoZXItbW9udGgiKTsrYWE9PStWP2VhLmFkZENsYXNzKGxhKyItc3RhdGUtaGlnaGxpZ2h0IGZjLXRvZGF5Iik6ZWEucmVtb3ZlQ2xhc3MobGErIi1zdGF0ZS1oaWdobGlnaHQgZmMtdG9kYXkiKTtlYS5maW5kKCJkaXYuZmMtZGF5LW51bWJlciIpLnRleHQoYWEuZ2V0RGF0ZSgpKTtJJiZyYihlYSxhYSl9KTtQLmVhY2goZnVuY3Rpb24od2EsR2Epe3ZhPW0oR2EpO2lmKHdhPHYpe3ZhLnNob3coKTt3YT09di0xP3ZhLmFkZENsYXNzKCJmYy1sYXN0Iik6dmEucmVtb3ZlQ2xhc3MoImZjLWxhc3QiKX1lbHNlIHZhLmhpZGUoKX0pfWZ1bmN0aW9uIGoodyl7bz13O3c9by1LLmhlaWdodCgpO3ZhciBJLFIsVjtpZihMKCJ3ZWVrTW9kZSIpPT0idmFyaWFibGUiKUk9Uj1NYXRoLmZsb29yKHcvKHY9PTE/Mjo2KSk7ZWxzZXtJPU1hdGguZmxvb3Iody92KTtSPXctSSoodi0xKX1CLmVhY2goZnVuY3Rpb24oZWEsCmFhKXtpZihlYTx2KXtWPW0oYWEpO1phKFYuZmluZCgiPiBkaXYiKSwoZWE9PXYtMT9SOkkpLVNhKFYpKX19KX1mdW5jdGlvbiB0KHcpe1c9dztNLmNsZWFyKCk7cz1NYXRoLmZsb29yKFcvRik7VmEoaS5zbGljZSgwLC0xKSxzKX1mdW5jdGlvbiB5KHcpe3cuY2xpY2soUykubW91c2Vkb3duKFgpfWZ1bmN0aW9uIFModyl7aWYoIUwoInNlbGVjdGFibGUiKSl7dmFyIEk9cGFyc2VJbnQodGhpcy5jbGFzc05hbWUubWF0Y2goL2ZjXC1kYXkoXGQrKS8pWzFdKTtJPWNhKEkpO2MoImRheUNsaWNrIix0aGlzLEksdHJ1ZSx3KX19ZnVuY3Rpb24gUSh3LEksUil7UiYmci5idWlsZCgpO1I9TihwLnZpc1N0YXJ0KTtmb3IodmFyIFY9YmEoTihSKSxGKSxlYT0wO2VhPHY7ZWErKyl7dmFyIGFhPW5ldyBEYXRlKE1hdGgubWF4KFIsdykpLHZhPW5ldyBEYXRlKE1hdGgubWluKFYsSSkpO2lmKGFhPHZhKXt2YXIgd2E7aWYoayl7d2E9Q2EodmEsUikqRCtaKzE7YWE9Q2EoYWEsUikqRCtaKzF9ZWxzZXt3YT0KQ2EoYWEsUik7YWE9Q2EodmEsUil9eShxKGVhLHdhLGVhLGFhLTEpKX1iYShSLDcpO2JhKFYsNyl9fWZ1bmN0aW9uIHEodyxJLFIsVil7dz1yLnJlY3QodyxJLFIsVixhKTtyZXR1cm4gSCh3LGEpfWZ1bmN0aW9uIHUodyl7cmV0dXJuIE4odyl9ZnVuY3Rpb24gZmEodyxJKXtRKHcsYmEoTihJKSwxKSx0cnVlKX1mdW5jdGlvbiBvYSgpe1QoKX1mdW5jdGlvbiBnYSh3LEksUil7dmFyIFY9dWEodyk7YygiZGF5Q2xpY2siLEVbVi5yb3cqRitWLmNvbF0sdyxJLFIpfWZ1bmN0aW9uIHJhKHcsSSl7Si5zdGFydChmdW5jdGlvbihSKXtUKCk7UiYmcShSLnJvdyxSLmNvbCxSLnJvdyxSLmNvbCl9LEkpfWZ1bmN0aW9uIHNhKHcsSSxSKXt2YXIgVj1KLnN0b3AoKTtUKCk7aWYoVil7Vj1wYShWKTtjKCJkcm9wIix3LFYsdHJ1ZSxJLFIpfX1mdW5jdGlvbiBoYSh3KXtyZXR1cm4gTih3LnN0YXJ0KX1mdW5jdGlvbiBkYSh3KXtyZXR1cm4gTS5sZWZ0KHcpfWZ1bmN0aW9uIG5hKHcpe3JldHVybiBNLnJpZ2h0KHcpfQpmdW5jdGlvbiB1YSh3KXtyZXR1cm57cm93Ok1hdGguZmxvb3IoQ2EodyxwLnZpc1N0YXJ0KS83KSxjb2w6a2Eody5nZXREYXkoKSl9fWZ1bmN0aW9uIHBhKHcpe3JldHVybiBVKHcucm93LHcuY29sKX1mdW5jdGlvbiBVKHcsSSl7cmV0dXJuIGJhKE4ocC52aXNTdGFydCksdyo3K0kqRCtaKX1mdW5jdGlvbiBjYSh3KXtyZXR1cm4gVShNYXRoLmZsb29yKHcvRiksdyVGKX1mdW5jdGlvbiBrYSh3KXtyZXR1cm4ody1NYXRoLm1heChqYSxpYSkrRiklRipEK1p9ZnVuY3Rpb24gcWEodyl7cmV0dXJuIFAuZXEodyl9ZnVuY3Rpb24gRygpe3JldHVybntsZWZ0OjAscmlnaHQ6V319dmFyIHA9dGhpcztwLnJlbmRlckJhc2ljPWQ7cC5zZXRIZWlnaHQ9ajtwLnNldFdpZHRoPXQ7cC5yZW5kZXJEYXlPdmVybGF5PVE7cC5kZWZhdWx0U2VsZWN0aW9uRW5kPXU7cC5yZW5kZXJTZWxlY3Rpb249ZmE7cC5jbGVhclNlbGVjdGlvbj1vYTtwLnJlcG9ydERheUNsaWNrPWdhO3AuZHJhZ1N0YXJ0PXJhO3AuZHJhZ1N0b3A9CnNhO3AuZGVmYXVsdEV2ZW50RW5kPWhhO3AuZ2V0SG92ZXJMaXN0ZW5lcj1mdW5jdGlvbigpe3JldHVybiBKfTtwLmNvbENvbnRlbnRMZWZ0PWRhO3AuY29sQ29udGVudFJpZ2h0PW5hO3AuZGF5T2ZXZWVrQ29sPWthO3AuZGF0ZUNlbGw9dWE7cC5jZWxsRGF0ZT1wYTtwLmNlbGxJc0FsbERheT1mdW5jdGlvbigpe3JldHVybiB0cnVlfTtwLmFsbERheVJvdz1xYTtwLmFsbERheUJvdW5kcz1HO3AuZ2V0Um93Q250PWZ1bmN0aW9uKCl7cmV0dXJuIHZ9O3AuZ2V0Q29sQ250PWZ1bmN0aW9uKCl7cmV0dXJuIEZ9O3AuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gc307cC5nZXREYXlTZWdtZW50Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIFl9O0tiLmNhbGwocCxhLGIsZSk7TGIuY2FsbChwKTtNYi5jYWxsKHApO3BjLmNhbGwocCk7dmFyIEw9cC5vcHQsYz1wLnRyaWdnZXIsej1wLmNsZWFyRXZlbnRzLEg9cC5yZW5kZXJPdmVybGF5LFQ9cC5jbGVhck92ZXJsYXlzLFg9cC5kYXlTZWxlY3Rpb25Nb3VzZWRvd24sCnlhPWIuZm9ybWF0RGF0ZSxLLGksQyxQLEUsQixuLFksVyxvLHMsdixGLHIsSixNLGssRCxaLGphLGlhLGxhLCQ7cWIoYS5hZGRDbGFzcygiZmMtZ3JpZCIpKTtyPW5ldyBOYihmdW5jdGlvbih3LEkpe3ZhciBSLFYsZWE7aS5lYWNoKGZ1bmN0aW9uKGFhLHZhKXtSPW0odmEpO1Y9Ui5vZmZzZXQoKS5sZWZ0O2lmKGFhKWVhWzFdPVY7ZWE9W1ZdO0lbYWFdPWVhfSk7ZWFbMV09VitSLm91dGVyV2lkdGgoKTtQLmVhY2goZnVuY3Rpb24oYWEsdmEpe2lmKGFhPHYpe1I9bSh2YSk7Vj1SLm9mZnNldCgpLnRvcDtpZihhYSllYVsxXT1WO2VhPVtWXTt3W2FhXT1lYX19KTtlYVsxXT1WK1Iub3V0ZXJIZWlnaHQoKX0pO0o9bmV3IE9iKHIpO009bmV3IFBiKGZ1bmN0aW9uKHcpe3JldHVybiBuLmVxKHcpfSl9ZnVuY3Rpb24gcGMoKXtmdW5jdGlvbiBhKFUsY2Epe1MoVSk7dWEoZShVKSxjYSl9ZnVuY3Rpb24gYigpe1EoKTtnYSgpLmVtcHR5KCl9ZnVuY3Rpb24gZShVKXt2YXIgY2E9ZGEoKSxrYT0KbmEoKSxxYT1OKGcudmlzU3RhcnQpO2thPWJhKE4ocWEpLGthKTt2YXIgRz1tLm1hcChVLFVhKSxwLEwsYyx6LEgsVCxYPVtdO2ZvcihwPTA7cDxjYTtwKyspe0w9b2IobmIoVSxHLHFhLGthKSk7Zm9yKGM9MDtjPEwubGVuZ3RoO2MrKyl7ej1MW2NdO2ZvcihIPTA7SDx6Lmxlbmd0aDtIKyspe1Q9eltIXTtULnJvdz1wO1QubGV2ZWw9YztYLnB1c2goVCl9fWJhKHFhLDcpO2JhKGthLDcpfXJldHVybiBYfWZ1bmN0aW9uIGQoVSxjYSxrYSl7dChVKSYmZihVLGNhKTtrYS5pc0VuZCYmeShVKSYmcGEoVSxjYSxrYSk7cShVLGNhKX1mdW5jdGlvbiBmKFUsY2Epe3ZhciBrYT1yYSgpLHFhO2NhLmRyYWdnYWJsZSh7ekluZGV4OjksZGVsYXk6NTAsb3BhY2l0eTpsKCJkcmFnT3BhY2l0eSIpLHJldmVydER1cmF0aW9uOmwoImRyYWdSZXZlcnREdXJhdGlvbiIpLHN0YXJ0OmZ1bmN0aW9uKEcscCl7aigiZXZlbnREcmFnU3RhcnQiLGNhLFUsRyxwKTtmYShVLGNhKTtrYS5zdGFydChmdW5jdGlvbihMLApjLHosSCl7Y2EuZHJhZ2dhYmxlKCJvcHRpb24iLCJyZXZlcnQiLCFMfHwheiYmIUgpO2hhKCk7aWYoTCl7cWE9eio3K0gqKGwoImlzUlRMIik/LTE6MSk7c2EoYmEoTihVLnN0YXJ0KSxxYSksYmEoVWEoVSkscWEpKX1lbHNlIHFhPTB9LEcsImRyYWciKX0sc3RvcDpmdW5jdGlvbihHLHApe2thLnN0b3AoKTtoYSgpO2ooImV2ZW50RHJhZ1N0b3AiLGNhLFUsRyxwKTtpZihxYSlvYSh0aGlzLFUscWEsMCxVLmFsbERheSxHLHApO2Vsc2V7Y2EuY3NzKCJmaWx0ZXIiLCIiKTt1KFUsY2EpfX19KX12YXIgZz10aGlzO2cucmVuZGVyRXZlbnRzPWE7Zy5jb21waWxlRGF5U2Vncz1lO2cuY2xlYXJFdmVudHM9YjtnLmJpbmREYXlTZWc9ZDtRYi5jYWxsKGcpO3ZhciBsPWcub3B0LGo9Zy50cmlnZ2VyLHQ9Zy5pc0V2ZW50RHJhZ2dhYmxlLHk9Zy5pc0V2ZW50UmVzaXphYmxlLFM9Zy5yZXBvcnRFdmVudHMsUT1nLnJlcG9ydEV2ZW50Q2xlYXIscT1nLmV2ZW50RWxlbWVudEhhbmRsZXJzLHU9Zy5zaG93RXZlbnRzLApmYT1nLmhpZGVFdmVudHMsb2E9Zy5ldmVudERyb3AsZ2E9Zy5nZXREYXlTZWdtZW50Q29udGFpbmVyLHJhPWcuZ2V0SG92ZXJMaXN0ZW5lcixzYT1nLnJlbmRlckRheU92ZXJsYXksaGE9Zy5jbGVhck92ZXJsYXlzLGRhPWcuZ2V0Um93Q250LG5hPWcuZ2V0Q29sQ250LHVhPWcucmVuZGVyRGF5U2VncyxwYT1nLnJlc2l6YWJsZURheUV2ZW50fWZ1bmN0aW9uIHFjKGEsYil7ZnVuY3Rpb24gZShqLHQpe3QmJmJhKGosdCo3KTtqPWJhKE4oaiksLSgoai5nZXREYXkoKS1mKCJmaXJzdERheSIpKzcpJTcpKTt0PWJhKE4oaiksNyk7dmFyIHk9TihqKSxTPU4odCksUT1mKCJ3ZWVrZW5kcyIpO2lmKCFRKXtGYSh5KTtGYShTLC0xLHRydWUpfWQudGl0bGU9bCh5LGJhKE4oUyksLTEpLGYoInRpdGxlRm9ybWF0IikpO2Quc3RhcnQ9ajtkLmVuZD10O2QudmlzU3RhcnQ9eTtkLnZpc0VuZD1TO2coUT83OjUpfXZhciBkPXRoaXM7ZC5yZW5kZXI9ZTtSYi5jYWxsKGQsYSxiLCJhZ2VuZGFXZWVrIik7CnZhciBmPWQub3B0LGc9ZC5yZW5kZXJBZ2VuZGEsbD1iLmZvcm1hdERhdGVzfWZ1bmN0aW9uIHJjKGEsYil7ZnVuY3Rpb24gZShqLHQpe2lmKHQpe2JhKGosdCk7Zigid2Vla2VuZHMiKXx8RmEoaix0PDA/LTE6MSl9dD1OKGosdHJ1ZSk7dmFyIHk9YmEoTih0KSwxKTtkLnRpdGxlPWwoaixmKCJ0aXRsZUZvcm1hdCIpKTtkLnN0YXJ0PWQudmlzU3RhcnQ9dDtkLmVuZD1kLnZpc0VuZD15O2coMSl9dmFyIGQ9dGhpcztkLnJlbmRlcj1lO1JiLmNhbGwoZCxhLGIsImFnZW5kYURheSIpO3ZhciBmPWQub3B0LGc9ZC5yZW5kZXJBZ2VuZGEsbD1iLmZvcm1hdERhdGV9ZnVuY3Rpb24gUmIoYSxiLGUpe2Z1bmN0aW9uIGQoaCl7QmE9aDtmKCk7dj9QKCk6ZygpO2woKX1mdW5jdGlvbiBmKCl7V2E9aSgidGhlbWUiKT8idWkiOiJmYyI7U2I9aSgid2Vla2VuZHMiKT8wOjE7VGI9aSgiZmlyc3REYXkiKTtpZihVYj1pKCJpc1JUTCIpKXtIYT0tMTtJYT1CYS0xfWVsc2V7SGE9MTtJYT0wfUxhPW1iKGkoIm1pblRpbWUiKSk7CmJiPW1iKGkoIm1heFRpbWUiKSk7VmI9aSgiY29sdW1uRm9ybWF0Iil9ZnVuY3Rpb24gZygpe3ZhciBoPVdhKyItd2lkZ2V0LWhlYWRlciIsTz1XYSsiLXdpZGdldC1jb250ZW50Iix4LEEsdGEsemEsRGEsRWE9aSgic2xvdE1pbnV0ZXMiKSUxNT09MDt4PSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCUnIGNsYXNzPSdmYy1hZ2VuZGEtZGF5cyBmYy1ib3JkZXItc2VwYXJhdGUnIGNlbGxzcGFjaW5nPScwJz48dGhlYWQ+PHRyPjx0aCBjbGFzcz0nZmMtYWdlbmRhLWF4aXMgIitoKyInPiZuYnNwOzwvdGg+Ijtmb3IoQT0wO0E8QmE7QSsrKXgrPSI8dGggY2xhc3M9J2ZjLSBmYy1jb2wiK0ErIiAiK2grIicvPiI7eCs9Ijx0aCBjbGFzcz0nZmMtYWdlbmRhLWd1dHRlciAiK2grIic+Jm5ic3A7PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGggY2xhc3M9J2ZjLWFnZW5kYS1heGlzICIraCsiJz4mbmJzcDs8L3RoPiI7Zm9yKEE9MDtBPEJhO0ErKyl4Kz0iPHRkIGNsYXNzPSdmYy0gZmMtY29sIisKQSsiICIrTysiJz48ZGl2PjxkaXYgY2xhc3M9J2ZjLWRheS1jb250ZW50Jz48ZGl2IHN0eWxlPSdwb3NpdGlvbjpyZWxhdGl2ZSc+Jm5ic3A7PC9kaXY+PC9kaXY+PC9kaXY+PC90ZD4iO3grPSI8dGQgY2xhc3M9J2ZjLWFnZW5kYS1ndXR0ZXIgIitPKyInPiZuYnNwOzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+Ijt2PW0oeCkuYXBwZW5kVG8oYSk7Rj12LmZpbmQoInRoZWFkIik7cj1GLmZpbmQoInRoIikuc2xpY2UoMSwtMSk7Sj12LmZpbmQoInRib2R5Iik7TT1KLmZpbmQoInRkIikuc2xpY2UoMCwtMSk7az1NLmZpbmQoImRpdi5mYy1kYXktY29udGVudCBkaXYiKTtEPU0uZXEoMCk7Wj1ELmZpbmQoIj4gZGl2Iik7YWIoRi5hZGQoRi5maW5kKCJ0ciIpKSk7YWIoSi5hZGQoSi5maW5kKCJ0ciIpKSk7YWE9Ri5maW5kKCJ0aDpmaXJzdCIpO3ZhPXYuZmluZCgiLmZjLWFnZW5kYS1ndXR0ZXIiKTtqYT1tKCI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7bGVmdDowO3dpZHRoOjEwMCUnLz4iKS5hcHBlbmRUbyhhKTsKaWYoaSgiYWxsRGF5U2xvdCIpKXtpYT1tKCI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojg7dG9wOjA7bGVmdDowJy8+IikuYXBwZW5kVG8oamEpO3g9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJScgY2xhc3M9J2ZjLWFnZW5kYS1hbGxkYXknIGNlbGxzcGFjaW5nPScwJz48dHI+PHRoIGNsYXNzPSciK2grIiBmYy1hZ2VuZGEtYXhpcyc+IitpKCJhbGxEYXlUZXh0IikrIjwvdGg+PHRkPjxkaXYgY2xhc3M9J2ZjLWRheS1jb250ZW50Jz48ZGl2IHN0eWxlPSdwb3NpdGlvbjpyZWxhdGl2ZScvPjwvZGl2PjwvdGQ+PHRoIGNsYXNzPSciK2grIiBmYy1hZ2VuZGEtZ3V0dGVyJz4mbmJzcDs8L3RoPjwvdHI+PC90YWJsZT4iO2xhPW0oeCkuYXBwZW5kVG8oamEpOyQ9bGEuZmluZCgidHIiKTtxKCQuZmluZCgidGQiKSk7YWE9YWEuYWRkKGxhLmZpbmQoInRoOmZpcnN0IikpO3ZhPXZhLmFkZChsYS5maW5kKCJ0aC5mYy1hZ2VuZGEtZ3V0dGVyIikpO2phLmFwcGVuZCgiPGRpdiBjbGFzcz0nZmMtYWdlbmRhLWRpdmlkZXIgIisKaCsiJz48ZGl2IGNsYXNzPSdmYy1hZ2VuZGEtZGl2aWRlci1pbm5lcicvPjwvZGl2PiIpfWVsc2UgaWE9bShbXSk7dz1tKCI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bycvPiIpLmFwcGVuZFRvKGphKTtJPW0oIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuJy8+IikuYXBwZW5kVG8odyk7Uj1tKCI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojg7dG9wOjA7bGVmdDowJy8+IikuYXBwZW5kVG8oSSk7eD0iPHRhYmxlIGNsYXNzPSdmYy1hZ2VuZGEtc2xvdHMnIHN0eWxlPSd3aWR0aDoxMDAlJyBjZWxsc3BhY2luZz0nMCc+PHRib2R5PiI7dGE9emIoKTt6YT14YShOKHRhKSxiYik7eGEodGEsTGEpO2ZvcihBPXRiPTA7dGE8emE7QSsrKXtEYT10YS5nZXRNaW51dGVzKCk7eCs9Ijx0ciBjbGFzcz0nZmMtc2xvdCIrQSsiICIrCighRGE/IiI6ImZjLW1pbm9yIikrIic+PHRoIGNsYXNzPSdmYy1hZ2VuZGEtYXhpcyAiK2grIic+IisoIUVhfHwhRGE/cyh0YSxpKCJheGlzRm9ybWF0IikpOiImbmJzcDsiKSsiPC90aD48dGQgY2xhc3M9JyIrTysiJz48ZGl2IHN0eWxlPSdwb3NpdGlvbjpyZWxhdGl2ZSc+Jm5ic3A7PC9kaXY+PC90ZD48L3RyPiI7eGEodGEsaSgic2xvdE1pbnV0ZXMiKSk7dGIrK314Kz0iPC90Ym9keT48L3RhYmxlPiI7Vj1tKHgpLmFwcGVuZFRvKEkpO2VhPVYuZmluZCgiZGl2OmZpcnN0Iik7dShWLmZpbmQoInRkIikpO2FhPWFhLmFkZChWLmZpbmQoInRoOmZpcnN0IikpfWZ1bmN0aW9uIGwoKXt2YXIgaCxPLHgsQSx0YT1LYShuZXcgRGF0ZSk7Zm9yKGg9MDtoPEJhO2grKyl7QT11YShoKTtPPXIuZXEoaCk7Ty5odG1sKHMoQSxWYikpO3g9TS5lcShoKTsrQT09K3RhP3guYWRkQ2xhc3MoV2ErIi1zdGF0ZS1oaWdobGlnaHQgZmMtdG9kYXkiKTp4LnJlbW92ZUNsYXNzKFdhKyItc3RhdGUtaGlnaGxpZ2h0IGZjLXRvZGF5Iik7CnJiKE8uYWRkKHgpLEEpfX1mdW5jdGlvbiBqKGgsTyl7aWYoaD09PW1hKWg9V2I7V2I9aDt1Yj17fTt2YXIgeD1KLnBvc2l0aW9uKCkudG9wLEE9dy5wb3NpdGlvbigpLnRvcDtoPU1hdGgubWluKGgteCxWLmhlaWdodCgpK0ErMSk7Wi5oZWlnaHQoaC1TYShEKSk7amEuY3NzKCJ0b3AiLHgpO3cuaGVpZ2h0KGgtQS0xKTtYYT1lYS5oZWlnaHQoKSsxO08mJnkoKX1mdW5jdGlvbiB0KGgpe0dhPWg7Y2IuY2xlYXIoKTtNYT0wO1ZhKGFhLndpZHRoKCIiKS5lYWNoKGZ1bmN0aW9uKE8seCl7TWE9TWF0aC5tYXgoTWEsbSh4KS5vdXRlcldpZHRoKCkpfSksTWEpO2g9d1swXS5jbGllbnRXaWR0aDtpZih2Yj13LndpZHRoKCktaCl7VmEodmEsdmIpO3ZhLnNob3coKS5wcmV2KCkucmVtb3ZlQ2xhc3MoImZjLWxhc3QiKX1lbHNlIHZhLmhpZGUoKS5wcmV2KCkuYWRkQ2xhc3MoImZjLWxhc3QiKTtkYj1NYXRoLmZsb29yKChoLU1hKS9CYSk7VmEoci5zbGljZSgwLC0xKSxkYil9ZnVuY3Rpb24geSgpe2Z1bmN0aW9uIGgoKXt3LnNjcm9sbFRvcChBKX0KdmFyIE89emIoKSx4PU4oTyk7eC5zZXRIb3VycyhpKCJmaXJzdEhvdXIiKSk7dmFyIEE9Y2EoTyx4KSsxO2goKTtzZXRUaW1lb3V0KGgsMCl9ZnVuY3Rpb24gUygpe1hiPXcuc2Nyb2xsVG9wKCl9ZnVuY3Rpb24gUSgpe3cuc2Nyb2xsVG9wKFhiKX1mdW5jdGlvbiBxKGgpe2guY2xpY2soZmEpLm1vdXNlZG93bihXKX1mdW5jdGlvbiB1KGgpe2guY2xpY2soZmEpLm1vdXNlZG93bihIKX1mdW5jdGlvbiBmYShoKXtpZighaSgic2VsZWN0YWJsZSIpKXt2YXIgTz1NYXRoLm1pbihCYS0xLE1hdGguZmxvb3IoKGgucGFnZVgtdi5vZmZzZXQoKS5sZWZ0LU1hKS9kYikpLHg9dWEoTyksQT10aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLm1hdGNoKC9mYy1zbG90KFxkKykvKTtpZihBKXtBPXBhcnNlSW50KEFbMV0pKmkoInNsb3RNaW51dGVzIik7dmFyIHRhPU1hdGguZmxvb3IoQS82MCk7eC5zZXRIb3Vycyh0YSk7eC5zZXRNaW51dGVzKEElNjArTGEpO0MoImRheUNsaWNrIixNW09dLHgsZmFsc2UsCmgpfWVsc2UgQygiZGF5Q2xpY2siLE1bT10seCx0cnVlLGgpfX1mdW5jdGlvbiBvYShoLE8seCl7eCYmTmEuYnVpbGQoKTt2YXIgQT1OKEsudmlzU3RhcnQpO2lmKFViKXt4PUNhKE8sQSkqSGErSWErMTtoPUNhKGgsQSkqSGErSWErMX1lbHNle3g9Q2EoaCxBKTtoPUNhKE8sQSl9eD1NYXRoLm1heCgwLHgpO2g9TWF0aC5taW4oQmEsaCk7eDxoJiZxKGdhKDAseCwwLGgtMSkpfWZ1bmN0aW9uIGdhKGgsTyx4LEEpe2g9TmEucmVjdChoLE8seCxBLGphKTtyZXR1cm4gRShoLGphKX1mdW5jdGlvbiByYShoLE8pe2Zvcih2YXIgeD1OKEsudmlzU3RhcnQpLEE9YmEoTih4KSwxKSx0YT0wO3RhPEJhO3RhKyspe3ZhciB6YT1uZXcgRGF0ZShNYXRoLm1heCh4LGgpKSxEYT1uZXcgRGF0ZShNYXRoLm1pbihBLE8pKTtpZih6YTxEYSl7dmFyIEVhPXRhKkhhK0lhO0VhPU5hLnJlY3QoMCxFYSwwLEVhLEkpO3phPWNhKHgsemEpO0RhPWNhKHgsRGEpO0VhLnRvcD16YTtFYS5oZWlnaHQ9RGEtemE7dShFKEVhLApJKSl9YmEoeCwxKTtiYShBLDEpfX1mdW5jdGlvbiBzYShoKXtyZXR1cm4gY2IubGVmdChoKX1mdW5jdGlvbiBoYShoKXtyZXR1cm4gY2IucmlnaHQoaCl9ZnVuY3Rpb24gZGEoaCl7cmV0dXJue3JvdzpNYXRoLmZsb29yKENhKGgsSy52aXNTdGFydCkvNyksY29sOlUoaC5nZXREYXkoKSl9fWZ1bmN0aW9uIG5hKGgpe3ZhciBPPXVhKGguY29sKTtoPWgucm93O2koImFsbERheVNsb3QiKSYmaC0tO2g+PTAmJnhhKE8sTGEraCppKCJzbG90TWludXRlcyIpKTtyZXR1cm4gT31mdW5jdGlvbiB1YShoKXtyZXR1cm4gYmEoTihLLnZpc1N0YXJ0KSxoKkhhK0lhKX1mdW5jdGlvbiBwYShoKXtyZXR1cm4gaSgiYWxsRGF5U2xvdCIpJiYhaC5yb3d9ZnVuY3Rpb24gVShoKXtyZXR1cm4oaC1NYXRoLm1heChUYixTYikrQmEpJUJhKkhhK0lhfWZ1bmN0aW9uIGNhKGgsTyl7aD1OKGgsdHJ1ZSk7aWYoTzx4YShOKGgpLExhKSlyZXR1cm4gMDtpZihPPj14YShOKGgpLGJiKSlyZXR1cm4gVi5oZWlnaHQoKTsKaD1pKCJzbG90TWludXRlcyIpO089Ty5nZXRIb3VycygpKjYwK08uZ2V0TWludXRlcygpLUxhO3ZhciB4PU1hdGguZmxvb3IoTy9oKSxBPXViW3hdO2lmKEE9PT1tYSlBPXViW3hdPVYuZmluZCgidHI6ZXEoIit4KyIpIHRkIGRpdiIpWzBdLm9mZnNldFRvcDtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKEEtMStYYSooTyVoL2gpKSl9ZnVuY3Rpb24ga2EoKXtyZXR1cm57bGVmdDpNYSxyaWdodDpHYS12Yn19ZnVuY3Rpb24gcWEoKXtyZXR1cm4gJH1mdW5jdGlvbiBHKGgpe3ZhciBPPU4oaC5zdGFydCk7aWYoaC5hbGxEYXkpcmV0dXJuIE87cmV0dXJuIHhhKE8saSgiZGVmYXVsdEV2ZW50TWludXRlcyIpKX1mdW5jdGlvbiBwKGgsTyl7aWYoTylyZXR1cm4gTihoKTtyZXR1cm4geGEoTihoKSxpKCJzbG90TWludXRlcyIpKX1mdW5jdGlvbiBMKGgsTyx4KXtpZih4KWkoImFsbERheVNsb3QiKSYmb2EoaCxiYShOKE8pLDEpLHRydWUpO2Vsc2UgYyhoLE8pfWZ1bmN0aW9uIGMoaCxPKXt2YXIgeD0KaSgic2VsZWN0SGVscGVyIik7TmEuYnVpbGQoKTtpZih4KXt2YXIgQT1DYShoLEsudmlzU3RhcnQpKkhhK0lhO2lmKEE+PTAmJkE8QmEpe0E9TmEucmVjdCgwLEEsMCxBLEkpO3ZhciB0YT1jYShoLGgpLHphPWNhKGgsTyk7aWYoemE+dGEpe0EudG9wPXRhO0EuaGVpZ2h0PXphLXRhO0EubGVmdCs9MjtBLndpZHRoLT01O2lmKG0uaXNGdW5jdGlvbih4KSl7aWYoaD14KGgsTykpe0EucG9zaXRpb249ImFic29sdXRlIjtBLnpJbmRleD04O3dhPW0oaCkuY3NzKEEpLmFwcGVuZFRvKEkpfX1lbHNle0EuaXNTdGFydD10cnVlO0EuaXNFbmQ9dHJ1ZTt3YT1tKG8oe3RpdGxlOiIiLHN0YXJ0OmgsZW5kOk8sY2xhc3NOYW1lOlsiZmMtc2VsZWN0LWhlbHBlciJdLGVkaXRhYmxlOmZhbHNlfSxBKSk7d2EuY3NzKCJvcGFjaXR5IixpKCJkcmFnT3BhY2l0eSIpKX1pZih3YSl7dSh3YSk7SS5hcHBlbmQod2EpO1ZhKHdhLEEud2lkdGgsdHJ1ZSk7RWIod2EsQS5oZWlnaHQsdHJ1ZSl9fX19ZWxzZSByYShoLApPKX1mdW5jdGlvbiB6KCl7QigpO2lmKHdhKXt3YS5yZW1vdmUoKTt3YT1udWxsfX1mdW5jdGlvbiBIKGgpe2lmKGgud2hpY2g9PTEmJmkoInNlbGVjdGFibGUiKSl7WShoKTt2YXIgTztSYS5zdGFydChmdW5jdGlvbih4LEEpe3ooKTtpZih4JiZ4LmNvbD09QS5jb2wmJiFwYSh4KSl7QT1uYShBKTt4PW5hKHgpO089W0EseGEoTihBKSxpKCJzbG90TWludXRlcyIpKSx4LHhhKE4oeCksaSgic2xvdE1pbnV0ZXMiKSldLnNvcnQoR2IpO2MoT1swXSxPWzNdKX1lbHNlIE89bnVsbH0saCk7bShkb2N1bWVudCkub25lKCJtb3VzZXVwIixmdW5jdGlvbih4KXtSYS5zdG9wKCk7aWYoTyl7K09bMF09PStPWzFdJiZUKE9bMF0sZmFsc2UseCk7bihPWzBdLE9bM10sZmFsc2UseCl9fSl9fWZ1bmN0aW9uIFQoaCxPLHgpe0MoImRheUNsaWNrIixNW1UoaC5nZXREYXkoKSldLGgsTyx4KX1mdW5jdGlvbiBYKGgsTyl7UmEuc3RhcnQoZnVuY3Rpb24oeCl7QigpO2lmKHgpaWYocGEoeCkpZ2EoeC5yb3csCnguY29sLHgucm93LHguY29sKTtlbHNle3g9bmEoeCk7dmFyIEE9eGEoTih4KSxpKCJkZWZhdWx0RXZlbnRNaW51dGVzIikpO3JhKHgsQSl9fSxPKX1mdW5jdGlvbiB5YShoLE8seCl7dmFyIEE9UmEuc3RvcCgpO0IoKTtBJiZDKCJkcm9wIixoLG5hKEEpLHBhKEEpLE8seCl9dmFyIEs9dGhpcztLLnJlbmRlckFnZW5kYT1kO0suc2V0V2lkdGg9dDtLLnNldEhlaWdodD1qO0suYmVmb3JlSGlkZT1TO0suYWZ0ZXJTaG93PVE7Sy5kZWZhdWx0RXZlbnRFbmQ9RztLLnRpbWVQb3NpdGlvbj1jYTtLLmRheU9mV2Vla0NvbD1VO0suZGF0ZUNlbGw9ZGE7Sy5jZWxsRGF0ZT1uYTtLLmNlbGxJc0FsbERheT1wYTtLLmFsbERheVJvdz1xYTtLLmFsbERheUJvdW5kcz1rYTtLLmdldEhvdmVyTGlzdGVuZXI9ZnVuY3Rpb24oKXtyZXR1cm4gUmF9O0suY29sQ29udGVudExlZnQ9c2E7Sy5jb2xDb250ZW50UmlnaHQ9aGE7Sy5nZXREYXlTZWdtZW50Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGlhfTsKSy5nZXRTbG90U2VnbWVudENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiBSfTtLLmdldE1pbk1pbnV0ZT1mdW5jdGlvbigpe3JldHVybiBMYX07Sy5nZXRNYXhNaW51dGU9ZnVuY3Rpb24oKXtyZXR1cm4gYmJ9O0suZ2V0Qm9keUNvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSX07Sy5nZXRSb3dDbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gMX07Sy5nZXRDb2xDbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQmF9O0suZ2V0Q29sV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZGJ9O0suZ2V0U2xvdEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBYYX07Sy5kZWZhdWx0U2VsZWN0aW9uRW5kPXA7Sy5yZW5kZXJEYXlPdmVybGF5PW9hO0sucmVuZGVyU2VsZWN0aW9uPUw7Sy5jbGVhclNlbGVjdGlvbj16O0sucmVwb3J0RGF5Q2xpY2s9VDtLLmRyYWdTdGFydD1YO0suZHJhZ1N0b3A9eWE7S2IuY2FsbChLLGEsYixlKTtMYi5jYWxsKEspO01iLmNhbGwoSyk7c2MuY2FsbChLKTt2YXIgaT1LLm9wdCxDPUsudHJpZ2dlciwKUD1LLmNsZWFyRXZlbnRzLEU9Sy5yZW5kZXJPdmVybGF5LEI9Sy5jbGVhck92ZXJsYXlzLG49Sy5yZXBvcnRTZWxlY3Rpb24sWT1LLnVuc2VsZWN0LFc9Sy5kYXlTZWxlY3Rpb25Nb3VzZWRvd24sbz1LLnNsb3RTZWdIdG1sLHM9Yi5mb3JtYXREYXRlLHYsRixyLEosTSxrLEQsWixqYSxpYSxsYSwkLHcsSSxSLFYsZWEsYWEsdmEsd2EsR2EsV2IsTWEsZGIsdmIsWGEsWGIsQmEsdGIsTmEsUmEsY2IsdWI9e30sV2EsVGIsU2IsVWIsSGEsSWEsTGEsYmIsVmI7cWIoYS5hZGRDbGFzcygiZmMtYWdlbmRhIikpO05hPW5ldyBOYihmdW5jdGlvbihoLE8pe2Z1bmN0aW9uIHgoZWIpe3JldHVybiBNYXRoLm1heChFYSxNYXRoLm1pbih0YyxlYikpfXZhciBBLHRhLHphO3IuZWFjaChmdW5jdGlvbihlYix1Yyl7QT1tKHVjKTt0YT1BLm9mZnNldCgpLmxlZnQ7aWYoZWIpemFbMV09dGE7emE9W3RhXTtPW2ViXT16YX0pO3phWzFdPXRhK0Eub3V0ZXJXaWR0aCgpO2lmKGkoImFsbERheVNsb3QiKSl7QT0KJDt0YT1BLm9mZnNldCgpLnRvcDtoWzBdPVt0YSx0YStBLm91dGVySGVpZ2h0KCldfWZvcih2YXIgRGE9SS5vZmZzZXQoKS50b3AsRWE9dy5vZmZzZXQoKS50b3AsdGM9RWErdy5vdXRlckhlaWdodCgpLGZiPTA7ZmI8dGI7ZmIrKyloLnB1c2goW3goRGErWGEqZmIpLHgoRGErWGEqKGZiKzEpKV0pfSk7UmE9bmV3IE9iKE5hKTtjYj1uZXcgUGIoZnVuY3Rpb24oaCl7cmV0dXJuIGsuZXEoaCl9KX1mdW5jdGlvbiBzYygpe2Z1bmN0aW9uIGEobyxzKXtzYShvKTt2YXIgdixGPW8ubGVuZ3RoLHI9W10sSj1bXTtmb3Iodj0wO3Y8Rjt2Kyspb1t2XS5hbGxEYXk/ci5wdXNoKG9bdl0pOkoucHVzaChvW3ZdKTtpZih1KCJhbGxEYXlTbG90Iikpe0woZShyKSxzKTtuYSgpfWcoZChKKSxzKX1mdW5jdGlvbiBiKCl7aGEoKTt1YSgpLmVtcHR5KCk7cGEoKS5lbXB0eSgpfWZ1bmN0aW9uIGUobyl7bz1vYihuYihvLG0ubWFwKG8sVWEpLHEudmlzU3RhcnQscS52aXNFbmQpKTt2YXIgcyx2PW8ubGVuZ3RoLApGLHIsSixNPVtdO2ZvcihzPTA7czx2O3MrKyl7Rj1vW3NdO2ZvcihyPTA7cjxGLmxlbmd0aDtyKyspe0o9RltyXTtKLnJvdz0wO0oubGV2ZWw9cztNLnB1c2goSil9fXJldHVybiBNfWZ1bmN0aW9uIGQobyl7dmFyIHM9eigpLHY9a2EoKSxGPWNhKCkscj14YShOKHEudmlzU3RhcnQpLHYpLEo9bS5tYXAobyxmKSxNLGssRCxaLGphLGlhLGxhPVtdO2ZvcihNPTA7TTxzO00rKyl7az1vYihuYihvLEoscix4YShOKHIpLEYtdikpKTt2YyhrKTtmb3IoRD0wO0Q8ay5sZW5ndGg7RCsrKXtaPWtbRF07Zm9yKGphPTA7amE8Wi5sZW5ndGg7amErKyl7aWE9WltqYV07aWEuY29sPU07aWEubGV2ZWw9RDtsYS5wdXNoKGlhKX19YmEociwxLHRydWUpfXJldHVybiBsYX1mdW5jdGlvbiBmKG8pe3JldHVybiBvLmVuZD9OKG8uZW5kKTp4YShOKG8uc3RhcnQpLHUoImRlZmF1bHRFdmVudE1pbnV0ZXMiKSl9ZnVuY3Rpb24gZyhvLHMpe3ZhciB2LEY9by5sZW5ndGgscixKLE0sayxELFosamEsaWEsbGEsCiQ9IiIsdyxJLFI9e30sVj17fSxlYT1wYSgpLGFhO3Y9eigpO2lmKHc9dSgiaXNSVEwiKSl7ST0tMTthYT12LTF9ZWxzZXtJPTE7YWE9MH1mb3Iodj0wO3Y8Rjt2Kyspe3I9b1t2XTtKPXIuZXZlbnQ7TT1xYShyLnN0YXJ0LHIuc3RhcnQpO2s9cWEoci5zdGFydCxyLmVuZCk7RD1yLmNvbDtaPXIubGV2ZWw7amE9ci5mb3J3YXJkfHwwO2lhPUcoRCpJK2FhKTtsYT1wKEQqSSthYSktaWE7bGE9TWF0aC5taW4obGEtNixsYSowLjk1KTtEPVo/bGEvKForamErMSk6amE/KGxhLyhqYSsxKS02KSoyOmxhO1o9aWErbGEvKForamErMSkqWipJKyh3P2xhLUQ6MCk7ci50b3A9TTtyLmxlZnQ9WjtyLm91dGVyV2lkdGg9RDtyLm91dGVySGVpZ2h0PWstTTskKz1sKEoscil9ZWFbMF0uaW5uZXJIVE1MPSQ7dz1lYS5jaGlsZHJlbigpO2Zvcih2PTA7djxGO3YrKyl7cj1vW3ZdO0o9ci5ldmVudDskPW0od1t2XSk7ST1mYSgiZXZlbnRSZW5kZXIiLEosSiwkKTtpZihJPT09ZmFsc2UpJC5yZW1vdmUoKTsKZWxzZXtpZihJJiZJIT09dHJ1ZSl7JC5yZW1vdmUoKTskPW0oSSkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDpyLnRvcCxsZWZ0OnIubGVmdH0pLmFwcGVuZFRvKGVhKX1yLmVsZW1lbnQ9JDtpZihKLl9pZD09PXMpdChKLCQscik7ZWxzZSAkWzBdLl9mY2k9djt5YShKLCQpfX1EYihlYSxvLHQpO2Zvcih2PTA7djxGO3YrKyl7cj1vW3ZdO2lmKCQ9ci5lbGVtZW50KXtKPVJbcz1yLmtleT1JYigkWzBdKV07ci52c2lkZXM9Sj09PW1hPyhSW3NdPVNhKCQsdHJ1ZSkpOko7Sj1WW3NdO3IuaHNpZGVzPUo9PT1tYT8oVltzXT1wYigkLHRydWUpKTpKO3M9JC5maW5kKCJkaXYuZmMtZXZlbnQtY29udGVudCIpO2lmKHMubGVuZ3RoKXIuY29udGVudFRvcD1zWzBdLm9mZnNldFRvcH19Zm9yKHY9MDt2PEY7disrKXtyPW9bdl07aWYoJD1yLmVsZW1lbnQpeyRbMF0uc3R5bGUud2lkdGg9TWF0aC5tYXgoMCxyLm91dGVyV2lkdGgtci5oc2lkZXMpKyJweCI7Uj1NYXRoLm1heCgwLHIub3V0ZXJIZWlnaHQtCnIudnNpZGVzKTskWzBdLnN0eWxlLmhlaWdodD1SKyJweCI7Sj1yLmV2ZW50O2lmKHIuY29udGVudFRvcCE9PW1hJiZSLXIuY29udGVudFRvcDwxMCl7JC5maW5kKCJkaXYuZmMtZXZlbnQtdGltZSIpLnRleHQoWShKLnN0YXJ0LHUoInRpbWVGb3JtYXQiKSkrIiAtICIrSi50aXRsZSk7JC5maW5kKCJkaXYuZmMtZXZlbnQtdGl0bGUiKS5yZW1vdmUoKX1mYSgiZXZlbnRBZnRlclJlbmRlciIsSixKLCQpfX19ZnVuY3Rpb24gbChvLHMpe3ZhciB2PSI8IixGPW8udXJsLHI9SmIobyx1KSxKPXI/IiBzdHlsZT0nIityKyInIjoiIixNPVsiZmMtZXZlbnQiLCJmYy1ldmVudC1za2luIiwiZmMtZXZlbnQtdmVydCJdO29hKG8pJiZNLnB1c2goImZjLWV2ZW50LWRyYWdnYWJsZSIpO3MuaXNTdGFydCYmTS5wdXNoKCJmYy1jb3JuZXItdG9wIik7cy5pc0VuZCYmTS5wdXNoKCJmYy1jb3JuZXItYm90dG9tIik7TT1NLmNvbmNhdChvLmNsYXNzTmFtZSk7aWYoby5zb3VyY2UpTT1NLmNvbmNhdChvLnNvdXJjZS5jbGFzc05hbWV8fApbXSk7dis9Rj8iYSBocmVmPSciK1FhKG8udXJsKSsiJyI6ImRpdiI7dis9IiBjbGFzcz0nIitNLmpvaW4oIiAiKSsiJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo4O3RvcDoiK3MudG9wKyJweDtsZWZ0OiIrcy5sZWZ0KyJweDsiK3IrIic+PGRpdiBjbGFzcz0nZmMtZXZlbnQtaW5uZXIgZmMtZXZlbnQtc2tpbiciK0orIj48ZGl2IGNsYXNzPSdmYy1ldmVudC1oZWFkIGZjLWV2ZW50LXNraW4nIitKKyI+PGRpdiBjbGFzcz0nZmMtZXZlbnQtdGltZSc+IitRYShXKG8uc3RhcnQsby5lbmQsdSgidGltZUZvcm1hdCIpKSkrIjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2ZjLWV2ZW50LWNvbnRlbnQnPjxkaXYgY2xhc3M9J2ZjLWV2ZW50LXRpdGxlJz4iK1FhKG8udGl0bGUpKyI8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdmYy1ldmVudC1iZyc+PC9kaXY+PC9kaXY+IjtpZihzLmlzRW5kJiZnYShvKSl2Kz0iPGRpdiBjbGFzcz0ndWktcmVzaXphYmxlLWhhbmRsZSB1aS1yZXNpemFibGUtcyc+PTwvZGl2PiI7CnYrPSI8LyIrKEY/ImEiOiJkaXYiKSsiPiI7cmV0dXJuIHZ9ZnVuY3Rpb24gaihvLHMsdil7b2EobykmJnkobyxzLHYuaXNTdGFydCk7di5pc0VuZCYmZ2EobykmJmMobyxzLHYpO2RhKG8scyl9ZnVuY3Rpb24gdChvLHMsdil7dmFyIEY9cy5maW5kKCJkaXYuZmMtZXZlbnQtdGltZSIpO29hKG8pJiZTKG8scyxGKTt2LmlzRW5kJiZnYShvKSYmUShvLHMsRik7ZGEobyxzKX1mdW5jdGlvbiB5KG8scyx2KXtmdW5jdGlvbiBGKCl7aWYoIU0pe3Mud2lkdGgocikuaGVpZ2h0KCIiKS5kcmFnZ2FibGUoIm9wdGlvbiIsImdyaWQiLG51bGwpO009dHJ1ZX19dmFyIHIsSixNPXRydWUsayxEPXUoImlzUlRMIik/LTE6MSxaPVUoKSxqYT1IKCksaWE9VCgpLGxhPWthKCk7cy5kcmFnZ2FibGUoe3pJbmRleDo5LG9wYWNpdHk6dSgiZHJhZ09wYWNpdHkiLCJtb250aCIpLHJldmVydER1cmF0aW9uOnUoImRyYWdSZXZlcnREdXJhdGlvbiIpLHN0YXJ0OmZ1bmN0aW9uKCQsdyl7ZmEoImV2ZW50RHJhZ1N0YXJ0IiwKcyxvLCQsdyk7aShvLHMpO3I9cy53aWR0aCgpO1ouc3RhcnQoZnVuY3Rpb24oSSxSLFYsZWEpe0IoKTtpZihJKXtKPWZhbHNlO2s9ZWEqRDtpZihJLnJvdylpZih2KXtpZihNKXtzLndpZHRoKGphLTEwKTtFYihzLGlhKk1hdGgucm91bmQoKG8uZW5kPyhvLmVuZC1vLnN0YXJ0KS93Yzp1KCJkZWZhdWx0RXZlbnRNaW51dGVzIikpL3UoInNsb3RNaW51dGVzIikpKTtzLmRyYWdnYWJsZSgib3B0aW9uIiwiZ3JpZCIsW2phLDFdKTtNPWZhbHNlfX1lbHNlIEo9dHJ1ZTtlbHNle0UoYmEoTihvLnN0YXJ0KSxrKSxiYShVYShvKSxrKSk7RigpfUo9Snx8TSYmIWt9ZWxzZXtGKCk7Sj10cnVlfXMuZHJhZ2dhYmxlKCJvcHRpb24iLCJyZXZlcnQiLEopfSwkLCJkcmFnIil9LHN0b3A6ZnVuY3Rpb24oJCx3KXtaLnN0b3AoKTtCKCk7ZmEoImV2ZW50RHJhZ1N0b3AiLHMsbywkLHcpO2lmKEope0YoKTtzLmNzcygiZmlsdGVyIiwiIik7SyhvLHMpfWVsc2V7dmFyIEk9MDtNfHwoST1NYXRoLnJvdW5kKChzLm9mZnNldCgpLnRvcC0KWCgpLm9mZnNldCgpLnRvcCkvaWEpKnUoInNsb3RNaW51dGVzIikrbGEtKG8uc3RhcnQuZ2V0SG91cnMoKSo2MCtvLnN0YXJ0LmdldE1pbnV0ZXMoKSkpO0ModGhpcyxvLGssSSxNLCQsdyl9fX0pfWZ1bmN0aW9uIFMobyxzLHYpe2Z1bmN0aW9uIEYoSSl7dmFyIFI9eGEoTihvLnN0YXJ0KSxJKSxWO2lmKG8uZW5kKVY9eGEoTihvLmVuZCksSSk7di50ZXh0KFcoUixWLHUoInRpbWVGb3JtYXQiKSkpfWZ1bmN0aW9uIHIoKXtpZihNKXt2LmNzcygiZGlzcGxheSIsIiIpO3MuZHJhZ2dhYmxlKCJvcHRpb24iLCJncmlkIixbJCx3XSk7TT1mYWxzZX19dmFyIEosTT1mYWxzZSxrLEQsWixqYT11KCJpc1JUTCIpPy0xOjEsaWE9VSgpLGxhPXooKSwkPUgoKSx3PVQoKTtzLmRyYWdnYWJsZSh7ekluZGV4Ojksc2Nyb2xsOmZhbHNlLGdyaWQ6WyQsd10sYXhpczpsYT09MT8ieSI6ZmFsc2Usb3BhY2l0eTp1KCJkcmFnT3BhY2l0eSIpLHJldmVydER1cmF0aW9uOnUoImRyYWdSZXZlcnREdXJhdGlvbiIpLApzdGFydDpmdW5jdGlvbihJLFIpe2ZhKCJldmVudERyYWdTdGFydCIscyxvLEksUik7aShvLHMpO0o9cy5wb3NpdGlvbigpO0Q9Wj0wO2lhLnN0YXJ0KGZ1bmN0aW9uKFYsZWEsYWEsdmEpe3MuZHJhZ2dhYmxlKCJvcHRpb24iLCJyZXZlcnQiLCFWKTtCKCk7aWYoVil7az12YSpqYTtpZih1KCJhbGxEYXlTbG90IikmJiFWLnJvdyl7aWYoIU0pe009dHJ1ZTt2LmhpZGUoKTtzLmRyYWdnYWJsZSgib3B0aW9uIiwiZ3JpZCIsbnVsbCl9RShiYShOKG8uc3RhcnQpLGspLGJhKFVhKG8pLGspKX1lbHNlIHIoKX19LEksImRyYWciKX0sZHJhZzpmdW5jdGlvbihJLFIpe0Q9TWF0aC5yb3VuZCgoUi5wb3NpdGlvbi50b3AtSi50b3ApL3cpKnUoInNsb3RNaW51dGVzIik7aWYoRCE9Wil7TXx8RihEKTtaPUR9fSxzdG9wOmZ1bmN0aW9uKEksUil7dmFyIFY9aWEuc3RvcCgpO0IoKTtmYSgiZXZlbnREcmFnU3RvcCIscyxvLEksUik7aWYoViYmKGt8fER8fE0pKUModGhpcyxvLGssTT8wOkQsTSxJLFIpOwplbHNle3IoKTtzLmNzcygiZmlsdGVyIiwiIik7cy5jc3MoSik7RigwKTtLKG8scyl9fX0pfWZ1bmN0aW9uIFEobyxzLHYpe3ZhciBGLHIsSj1UKCk7cy5yZXNpemFibGUoe2hhbmRsZXM6e3M6ImRpdi51aS1yZXNpemFibGUtcyJ9LGdyaWQ6SixzdGFydDpmdW5jdGlvbihNLGspe0Y9cj0wO2kobyxzKTtzLmNzcygiei1pbmRleCIsOSk7ZmEoImV2ZW50UmVzaXplU3RhcnQiLHRoaXMsbyxNLGspfSxyZXNpemU6ZnVuY3Rpb24oTSxrKXtGPU1hdGgucm91bmQoKE1hdGgubWF4KEoscy5oZWlnaHQoKSktay5vcmlnaW5hbFNpemUuaGVpZ2h0KS9KKTtpZihGIT1yKXt2LnRleHQoVyhvLnN0YXJ0LCFGJiYhby5lbmQ/bnVsbDp4YShyYShvKSx1KCJzbG90TWludXRlcyIpKkYpLHUoInRpbWVGb3JtYXQiKSkpO3I9Rn19LHN0b3A6ZnVuY3Rpb24oTSxrKXtmYSgiZXZlbnRSZXNpemVTdG9wIix0aGlzLG8sTSxrKTtpZihGKVAodGhpcyxvLDAsdSgic2xvdE1pbnV0ZXMiKSpGLE0sayk7ZWxzZXtzLmNzcygiei1pbmRleCIsCjgpO0sobyxzKX19fSl9dmFyIHE9dGhpcztxLnJlbmRlckV2ZW50cz1hO3EuY29tcGlsZURheVNlZ3M9ZTtxLmNsZWFyRXZlbnRzPWI7cS5zbG90U2VnSHRtbD1sO3EuYmluZERheVNlZz1qO1FiLmNhbGwocSk7dmFyIHU9cS5vcHQsZmE9cS50cmlnZ2VyLG9hPXEuaXNFdmVudERyYWdnYWJsZSxnYT1xLmlzRXZlbnRSZXNpemFibGUscmE9cS5ldmVudEVuZCxzYT1xLnJlcG9ydEV2ZW50cyxoYT1xLnJlcG9ydEV2ZW50Q2xlYXIsZGE9cS5ldmVudEVsZW1lbnRIYW5kbGVycyxuYT1xLnNldEhlaWdodCx1YT1xLmdldERheVNlZ21lbnRDb250YWluZXIscGE9cS5nZXRTbG90U2VnbWVudENvbnRhaW5lcixVPXEuZ2V0SG92ZXJMaXN0ZW5lcixjYT1xLmdldE1heE1pbnV0ZSxrYT1xLmdldE1pbk1pbnV0ZSxxYT1xLnRpbWVQb3NpdGlvbixHPXEuY29sQ29udGVudExlZnQscD1xLmNvbENvbnRlbnRSaWdodCxMPXEucmVuZGVyRGF5U2VncyxjPXEucmVzaXphYmxlRGF5RXZlbnQsej1xLmdldENvbENudCwKSD1xLmdldENvbFdpZHRoLFQ9cS5nZXRTbG90SGVpZ2h0LFg9cS5nZXRCb2R5Q29udGVudCx5YT1xLnJlcG9ydEV2ZW50RWxlbWVudCxLPXEuc2hvd0V2ZW50cyxpPXEuaGlkZUV2ZW50cyxDPXEuZXZlbnREcm9wLFA9cS5ldmVudFJlc2l6ZSxFPXEucmVuZGVyRGF5T3ZlcmxheSxCPXEuY2xlYXJPdmVybGF5cyxuPXEuY2FsZW5kYXIsWT1uLmZvcm1hdERhdGUsVz1uLmZvcm1hdERhdGVzfWZ1bmN0aW9uIHZjKGEpe3ZhciBiLGUsZCxmLGcsbDtmb3IoYj1hLmxlbmd0aC0xO2I+MDtiLS0pe2Y9YVtiXTtmb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKXtnPWZbZV07Zm9yKGQ9MDtkPGFbYi0xXS5sZW5ndGg7ZCsrKXtsPWFbYi0xXVtkXTtpZihDYihnLGwpKWwuZm9yd2FyZD1NYXRoLm1heChsLmZvcndhcmR8fDAsKGcuZm9yd2FyZHx8MCkrMSl9fX19ZnVuY3Rpb24gS2IoYSxiLGUpe2Z1bmN0aW9uIGQoRyxwKXtHPXFhW0ddO2lmKHR5cGVvZiBHPT0ib2JqZWN0IilyZXR1cm4gamIoRyxwfHxlKTsKcmV0dXJuIEd9ZnVuY3Rpb24gZihHLHApe3JldHVybiBiLnRyaWdnZXIuYXBwbHkoYixbRyxwfHxkYV0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxbZGFdKSl9ZnVuY3Rpb24gZyhHKXtyZXR1cm4gaihHKSYmIWQoImRpc2FibGVEcmFnZ2luZyIpfWZ1bmN0aW9uIGwoRyl7cmV0dXJuIGooRykmJiFkKCJkaXNhYmxlUmVzaXppbmciKX1mdW5jdGlvbiBqKEcpe3JldHVybiBUYShHLmVkaXRhYmxlLChHLnNvdXJjZXx8e30pLmVkaXRhYmxlLGQoImVkaXRhYmxlIikpfWZ1bmN0aW9uIHQoRyl7VT17fTt2YXIgcCxMPUcubGVuZ3RoLGM7Zm9yKHA9MDtwPEw7cCsrKXtjPUdbcF07aWYoVVtjLl9pZF0pVVtjLl9pZF0ucHVzaChjKTtlbHNlIFVbYy5faWRdPVtjXX19ZnVuY3Rpb24geShHKXtyZXR1cm4gRy5lbmQ/TihHLmVuZCk6bmEoRyl9ZnVuY3Rpb24gUyhHLHApe2NhLnB1c2gocCk7aWYoa2FbRy5faWRdKWthW0cuX2lkXS5wdXNoKHApO2Vsc2Uga2FbRy5faWRdPQpbcF19ZnVuY3Rpb24gUSgpe2NhPVtdO2thPXt9fWZ1bmN0aW9uIHEoRyxwKXtwLmNsaWNrKGZ1bmN0aW9uKEwpe2lmKCFwLmhhc0NsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSYmIXAuaGFzQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpKXJldHVybiBmKCJldmVudENsaWNrIix0aGlzLEcsTCl9KS5ob3ZlcihmdW5jdGlvbihMKXtmKCJldmVudE1vdXNlb3ZlciIsdGhpcyxHLEwpfSxmdW5jdGlvbihMKXtmKCJldmVudE1vdXNlb3V0Iix0aGlzLEcsTCl9KX1mdW5jdGlvbiB1KEcscCl7b2EoRyxwLCJzaG93Iil9ZnVuY3Rpb24gZmEoRyxwKXtvYShHLHAsImhpZGUiKX1mdW5jdGlvbiBvYShHLHAsTCl7Rz1rYVtHLl9pZF07dmFyIGMsej1HLmxlbmd0aDtmb3IoYz0wO2M8ejtjKyspaWYoIXB8fEdbY11bMF0hPXBbMF0pR1tjXVtMXSgpfWZ1bmN0aW9uIGdhKEcscCxMLGMseixILFQpe3ZhciBYPXAuYWxsRGF5LHlhPXAuX2lkO3NhKFVbeWFdLEwsYyx6KTtmKCJldmVudERyb3AiLApHLHAsTCxjLHosZnVuY3Rpb24oKXtzYShVW3lhXSwtTCwtYyxYKTtwYSh5YSl9LEgsVCk7cGEoeWEpfWZ1bmN0aW9uIHJhKEcscCxMLGMseixIKXt2YXIgVD1wLl9pZDtoYShVW1RdLEwsYyk7ZigiZXZlbnRSZXNpemUiLEcscCxMLGMsZnVuY3Rpb24oKXtoYShVW1RdLC1MLC1jKTtwYShUKX0seixIKTtwYShUKX1mdW5jdGlvbiBzYShHLHAsTCxjKXtMPUx8fDA7Zm9yKHZhciB6LEg9Ry5sZW5ndGgsVD0wO1Q8SDtUKyspe3o9R1tUXTtpZihjIT09bWEpei5hbGxEYXk9Yzt4YShiYSh6LnN0YXJ0LHAsdHJ1ZSksTCk7aWYoei5lbmQpei5lbmQ9eGEoYmEoei5lbmQscCx0cnVlKSxMKTt1YSh6LHFhKX19ZnVuY3Rpb24gaGEoRyxwLEwpe0w9THx8MDtmb3IodmFyIGMsej1HLmxlbmd0aCxIPTA7SDx6O0grKyl7Yz1HW0hdO2MuZW5kPXhhKGJhKHkoYykscCx0cnVlKSxMKTt1YShjLHFhKX19dmFyIGRhPXRoaXM7ZGEuZWxlbWVudD1hO2RhLmNhbGVuZGFyPWI7ZGEubmFtZT1lO2RhLm9wdD0KZDtkYS50cmlnZ2VyPWY7ZGEuaXNFdmVudERyYWdnYWJsZT1nO2RhLmlzRXZlbnRSZXNpemFibGU9bDtkYS5yZXBvcnRFdmVudHM9dDtkYS5ldmVudEVuZD15O2RhLnJlcG9ydEV2ZW50RWxlbWVudD1TO2RhLnJlcG9ydEV2ZW50Q2xlYXI9UTtkYS5ldmVudEVsZW1lbnRIYW5kbGVycz1xO2RhLnNob3dFdmVudHM9dTtkYS5oaWRlRXZlbnRzPWZhO2RhLmV2ZW50RHJvcD1nYTtkYS5ldmVudFJlc2l6ZT1yYTt2YXIgbmE9ZGEuZGVmYXVsdEV2ZW50RW5kLHVhPWIubm9ybWFsaXplRXZlbnQscGE9Yi5yZXBvcnRFdmVudENoYW5nZSxVPXt9LGNhPVtdLGthPXt9LHFhPWIub3B0aW9uc31mdW5jdGlvbiBRYigpe2Z1bmN0aW9uIGEoaSxDKXt2YXIgUD16KCksRT1wYSgpLEI9VSgpLG49MCxZLFcsbz1pLmxlbmd0aCxzLHY7UFswXS5pbm5lckhUTUw9ZShpKTtkKGksUC5jaGlsZHJlbigpKTtmKGkpO2coaSxQLEMpO2woaSk7aihpKTt0KGkpO0M9eSgpO2ZvcihQPTA7UDxFO1ArKyl7WT1bXTtmb3IoVz0KMDtXPEI7VysrKVlbV109MDtmb3IoO248byYmKHM9aVtuXSkucm93PT1QOyl7Vz1IYihZLnNsaWNlKHMuc3RhcnRDb2wscy5lbmRDb2wpKTtzLnRvcD1XO1crPXMub3V0ZXJIZWlnaHQ7Zm9yKHY9cy5zdGFydENvbDt2PHMuZW5kQ29sO3YrKylZW3ZdPVc7bisrfUNbUF0uaGVpZ2h0KEhiKFkpKX1RKGksUyhDKSl9ZnVuY3Rpb24gYihpLEMsUCl7dmFyIEU9bSgiPGRpdi8+IiksQj16KCksbj1pLmxlbmd0aCxZO0VbMF0uaW5uZXJIVE1MPWUoaSk7RT1FLmNoaWxkcmVuKCk7Qi5hcHBlbmQoRSk7ZChpLEUpO2woaSk7aihpKTt0KGkpO1EoaSxTKHkoKSkpO0U9W107Zm9yKEI9MDtCPG47QisrKWlmKFk9aVtCXS5lbGVtZW50KXtpW0JdLnJvdz09PUMmJlkuY3NzKCJ0b3AiLFApO0UucHVzaChZWzBdKX1yZXR1cm4gbShFKX1mdW5jdGlvbiBlKGkpe3ZhciBDPWZhKCJpc1JUTCIpLFAsRT1pLmxlbmd0aCxCLG4sWSxXO1A9a2EoKTt2YXIgbz1QLmxlZnQscz1QLnJpZ2h0LHYsRixyLEosTSxrPQoiIjtmb3IoUD0wO1A8RTtQKyspe0I9aVtQXTtuPUIuZXZlbnQ7Vz1bImZjLWV2ZW50IiwiZmMtZXZlbnQtc2tpbiIsImZjLWV2ZW50LWhvcmkiXTtnYShuKSYmVy5wdXNoKCJmYy1ldmVudC1kcmFnZ2FibGUiKTtpZihDKXtCLmlzU3RhcnQmJlcucHVzaCgiZmMtY29ybmVyLXJpZ2h0Iik7Qi5pc0VuZCYmVy5wdXNoKCJmYy1jb3JuZXItbGVmdCIpO3Y9cChCLmVuZC5nZXREYXkoKS0xKTtGPXAoQi5zdGFydC5nZXREYXkoKSk7cj1CLmlzRW5kP3FhKHYpOm87Sj1CLmlzU3RhcnQ/RyhGKTpzfWVsc2V7Qi5pc1N0YXJ0JiZXLnB1c2goImZjLWNvcm5lci1sZWZ0Iik7Qi5pc0VuZCYmVy5wdXNoKCJmYy1jb3JuZXItcmlnaHQiKTt2PXAoQi5zdGFydC5nZXREYXkoKSk7Rj1wKEIuZW5kLmdldERheSgpLTEpO3I9Qi5pc1N0YXJ0P3FhKHYpOm87Sj1CLmlzRW5kP0coRik6c31XPVcuY29uY2F0KG4uY2xhc3NOYW1lKTtpZihuLnNvdXJjZSlXPVcuY29uY2F0KG4uc291cmNlLmNsYXNzTmFtZXx8CltdKTtZPW4udXJsO009SmIobixmYSk7ays9WT8iPGEgaHJlZj0nIitRYShZKSsiJyI6IjxkaXYiO2srPSIgY2xhc3M9JyIrVy5qb2luKCIgIikrIicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6ODtsZWZ0OiIrcisicHg7IitNKyInPjxkaXYgY2xhc3M9J2ZjLWV2ZW50LWlubmVyIGZjLWV2ZW50LXNraW4nIisoTT8iIHN0eWxlPSciK00rIiciOiIiKSsiPiI7aWYoIW4uYWxsRGF5JiZCLmlzU3RhcnQpays9IjxzcGFuIGNsYXNzPSdmYy1ldmVudC10aW1lJz4iK1FhKFQobi5zdGFydCxuLmVuZCxmYSgidGltZUZvcm1hdCIpKSkrIjwvc3Bhbj4iO2srPSI8c3BhbiBjbGFzcz0nZmMtZXZlbnQtdGl0bGUnPiIrUWEobi50aXRsZSkrIjwvc3Bhbj48L2Rpdj4iO2lmKEIuaXNFbmQmJnJhKG4pKWsrPSI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlIHVpLXJlc2l6YWJsZS0iKyhDPyJ3IjoiZSIpKyInPiZuYnNwOyZuYnNwOyZuYnNwOzwvZGl2PiI7ays9IjwvIisoWT8KImEiOiJkaXYiKSsiPiI7Qi5sZWZ0PXI7Qi5vdXRlcldpZHRoPUotcjtCLnN0YXJ0Q29sPXY7Qi5lbmRDb2w9RisxfXJldHVybiBrfWZ1bmN0aW9uIGQoaSxDKXt2YXIgUCxFPWkubGVuZ3RoLEIsbixZO2ZvcihQPTA7UDxFO1ArKyl7Qj1pW1BdO249Qi5ldmVudDtZPW0oQ1tQXSk7bj1vYSgiZXZlbnRSZW5kZXIiLG4sbixZKTtpZihuPT09ZmFsc2UpWS5yZW1vdmUoKTtlbHNle2lmKG4mJm4hPT10cnVlKXtuPW0obikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Qi5sZWZ0fSk7WS5yZXBsYWNlV2l0aChuKTtZPW59Qi5lbGVtZW50PVl9fX1mdW5jdGlvbiBmKGkpe3ZhciBDLFA9aS5sZW5ndGgsRSxCO2ZvcihDPTA7QzxQO0MrKyl7RT1pW0NdOyhCPUUuZWxlbWVudCkmJmhhKEUuZXZlbnQsQil9fWZ1bmN0aW9uIGcoaSxDLFApe3ZhciBFLEI9aS5sZW5ndGgsbixZLFc7Zm9yKEU9MDtFPEI7RSsrKXtuPWlbRV07aWYoWT1uLmVsZW1lbnQpe1c9bi5ldmVudDtpZihXLl9pZD09PQpQKUgoVyxZLG4pO2Vsc2UgWVswXS5fZmNpPUV9fURiKEMsaSxIKX1mdW5jdGlvbiBsKGkpe3ZhciBDLFA9aS5sZW5ndGgsRSxCLG4sWSxXPXt9O2ZvcihDPTA7QzxQO0MrKyl7RT1pW0NdO2lmKEI9RS5lbGVtZW50KXtuPUUua2V5PUliKEJbMF0pO1k9V1tuXTtpZihZPT09bWEpWT1XW25dPXBiKEIsdHJ1ZSk7RS5oc2lkZXM9WX19fWZ1bmN0aW9uIGooaSl7dmFyIEMsUD1pLmxlbmd0aCxFLEI7Zm9yKEM9MDtDPFA7QysrKXtFPWlbQ107aWYoQj1FLmVsZW1lbnQpQlswXS5zdHlsZS53aWR0aD1NYXRoLm1heCgwLEUub3V0ZXJXaWR0aC1FLmhzaWRlcykrInB4In19ZnVuY3Rpb24gdChpKXt2YXIgQyxQPWkubGVuZ3RoLEUsQixuLFksVz17fTtmb3IoQz0wO0M8UDtDKyspe0U9aVtDXTtpZihCPUUuZWxlbWVudCl7bj1FLmtleTtZPVdbbl07aWYoWT09PW1hKVk9V1tuXT1GYihCKTtFLm91dGVySGVpZ2h0PUJbMF0ub2Zmc2V0SGVpZ2h0K1l9fX1mdW5jdGlvbiB5KCl7dmFyIGksQz1wYSgpLApQPVtdO2ZvcihpPTA7aTxDO2krKylQW2ldPWNhKGkpLmZpbmQoInRkOmZpcnN0IGRpdi5mYy1kYXktY29udGVudCA+IGRpdiIpO3JldHVybiBQfWZ1bmN0aW9uIFMoaSl7dmFyIEMsUD1pLmxlbmd0aCxFPVtdO2ZvcihDPTA7QzxQO0MrKylFW0NdPWlbQ11bMF0ub2Zmc2V0VG9wO3JldHVybiBFfWZ1bmN0aW9uIFEoaSxDKXt2YXIgUCxFPWkubGVuZ3RoLEIsbjtmb3IoUD0wO1A8RTtQKyspe0I9aVtQXTtpZihuPUIuZWxlbWVudCl7blswXS5zdHlsZS50b3A9Q1tCLnJvd10rKEIudG9wfHwwKSsicHgiO0I9Qi5ldmVudDtvYSgiZXZlbnRBZnRlclJlbmRlciIsQixCLG4pfX19ZnVuY3Rpb24gcShpLEMsUCl7dmFyIEU9ZmEoImlzUlRMIiksQj1FPyJ3IjoiZSIsbj1DLmZpbmQoImRpdi51aS1yZXNpemFibGUtIitCKSxZPWZhbHNlO3FiKEMpO0MubW91c2Vkb3duKGZ1bmN0aW9uKFcpe1cucHJldmVudERlZmF1bHQoKX0pLmNsaWNrKGZ1bmN0aW9uKFcpe2lmKFkpe1cucHJldmVudERlZmF1bHQoKTsKVy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19KTtuLm1vdXNlZG93bihmdW5jdGlvbihXKXtmdW5jdGlvbiBvKGlhKXtvYSgiZXZlbnRSZXNpemVTdG9wIix0aGlzLGksaWEpO20oImJvZHkiKS5jc3MoImN1cnNvciIsIiIpO3Muc3RvcCgpO3lhKCk7ayYmdWEodGhpcyxpLGssMCxpYSk7c2V0VGltZW91dChmdW5jdGlvbigpe1k9ZmFsc2V9LDApfWlmKFcud2hpY2g9PTEpe1k9dHJ1ZTt2YXIgcz11LmdldEhvdmVyTGlzdGVuZXIoKSx2PXBhKCksRj1VKCkscj1FPy0xOjEsSj1FP0YtMTowLE09Qy5jc3MoInRvcCIpLGssRCxaPW0uZXh0ZW5kKHt9LGkpLGphPUwoaS5zdGFydCk7SygpO20oImJvZHkiKS5jc3MoImN1cnNvciIsQisiLXJlc2l6ZSIpLm9uZSgibW91c2V1cCIsbyk7b2EoImV2ZW50UmVzaXplU3RhcnQiLHRoaXMsaSxXKTtzLnN0YXJ0KGZ1bmN0aW9uKGlhLGxhKXtpZihpYSl7dmFyICQ9TWF0aC5tYXgoamEucm93LGlhLnJvdyk7aWE9aWEuY29sO2lmKHY9PTEpJD0wOwppZigkPT1qYS5yb3cpaWE9RT9NYXRoLm1pbihqYS5jb2wsaWEpOk1hdGgubWF4KGphLmNvbCxpYSk7az0kKjcraWEqcitKLShsYS5yb3cqNytsYS5jb2wqcitKKTtsYT1iYShzYShpKSxrLHRydWUpO2lmKGspe1ouZW5kPWxhOyQ9RDtEPWIoYyhbWl0pLFAucm93LE0pO0QuZmluZCgiKiIpLmNzcygiY3Vyc29yIixCKyItcmVzaXplIik7JCYmJC5yZW1vdmUoKTtuYShpKX1lbHNlIGlmKEQpe2RhKGkpO0QucmVtb3ZlKCk7RD1udWxsfXlhKCk7WChpLnN0YXJ0LGJhKE4obGEpLDEpKX19LFcpfX0pfXZhciB1PXRoaXM7dS5yZW5kZXJEYXlTZWdzPWE7dS5yZXNpemFibGVEYXlFdmVudD1xO3ZhciBmYT11Lm9wdCxvYT11LnRyaWdnZXIsZ2E9dS5pc0V2ZW50RHJhZ2dhYmxlLHJhPXUuaXNFdmVudFJlc2l6YWJsZSxzYT11LmV2ZW50RW5kLGhhPXUucmVwb3J0RXZlbnRFbGVtZW50LGRhPXUuc2hvd0V2ZW50cyxuYT11LmhpZGVFdmVudHMsdWE9dS5ldmVudFJlc2l6ZSxwYT11LmdldFJvd0NudCwKVT11LmdldENvbENudCxjYT11LmFsbERheVJvdyxrYT11LmFsbERheUJvdW5kcyxxYT11LmNvbENvbnRlbnRMZWZ0LEc9dS5jb2xDb250ZW50UmlnaHQscD11LmRheU9mV2Vla0NvbCxMPXUuZGF0ZUNlbGwsYz11LmNvbXBpbGVEYXlTZWdzLHo9dS5nZXREYXlTZWdtZW50Q29udGFpbmVyLEg9dS5iaW5kRGF5U2VnLFQ9dS5jYWxlbmRhci5mb3JtYXREYXRlcyxYPXUucmVuZGVyRGF5T3ZlcmxheSx5YT11LmNsZWFyT3ZlcmxheXMsSz11LmNsZWFyU2VsZWN0aW9ufWZ1bmN0aW9uIE1iKCl7ZnVuY3Rpb24gYShRLHEsdSl7YigpO3F8fChxPWooUSx1KSk7dChRLHEsdSk7ZShRLHEsdSl9ZnVuY3Rpb24gYihRKXtpZihTKXtTPWZhbHNlO3koKTtsKCJ1bnNlbGVjdCIsbnVsbCxRKX19ZnVuY3Rpb24gZShRLHEsdSxmYSl7Uz10cnVlO2woInNlbGVjdCIsbnVsbCxRLHEsdSxmYSl9ZnVuY3Rpb24gZChRKXt2YXIgcT1mLmNlbGxEYXRlLHU9Zi5jZWxsSXNBbGxEYXksZmE9Zi5nZXRIb3Zlckxpc3RlbmVyKCksCm9hPWYucmVwb3J0RGF5Q2xpY2s7aWYoUS53aGljaD09MSYmZygic2VsZWN0YWJsZSIpKXtiKFEpO3ZhciBnYTtmYS5zdGFydChmdW5jdGlvbihyYSxzYSl7eSgpO2lmKHJhJiZ1KHJhKSl7Z2E9W3Eoc2EpLHEocmEpXS5zb3J0KEdiKTt0KGdhWzBdLGdhWzFdLHRydWUpfWVsc2UgZ2E9bnVsbH0sUSk7bShkb2N1bWVudCkub25lKCJtb3VzZXVwIixmdW5jdGlvbihyYSl7ZmEuc3RvcCgpO2lmKGdhKXsrZ2FbMF09PStnYVsxXSYmb2EoZ2FbMF0sdHJ1ZSxyYSk7ZShnYVswXSxnYVsxXSx0cnVlLHJhKX19KX19dmFyIGY9dGhpcztmLnNlbGVjdD1hO2YudW5zZWxlY3Q9YjtmLnJlcG9ydFNlbGVjdGlvbj1lO2YuZGF5U2VsZWN0aW9uTW91c2Vkb3duPWQ7dmFyIGc9Zi5vcHQsbD1mLnRyaWdnZXIsaj1mLmRlZmF1bHRTZWxlY3Rpb25FbmQsdD1mLnJlbmRlclNlbGVjdGlvbix5PWYuY2xlYXJTZWxlY3Rpb24sUz1mYWxzZTtnKCJzZWxlY3RhYmxlIikmJmcoInVuc2VsZWN0QXV0byIpJiZtKGRvY3VtZW50KS5tb3VzZWRvd24oZnVuY3Rpb24oUSl7dmFyIHE9CmcoInVuc2VsZWN0Q2FuY2VsIik7aWYocSlpZihtKFEudGFyZ2V0KS5wYXJlbnRzKHEpLmxlbmd0aClyZXR1cm47YihRKX0pfWZ1bmN0aW9uIExiKCl7ZnVuY3Rpb24gYShnLGwpe3ZhciBqPWYuc2hpZnQoKTtqfHwoaj1tKCI8ZGl2IGNsYXNzPSdmYy1jZWxsLW92ZXJsYXknIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjMnLz4iKSk7alswXS5wYXJlbnROb2RlIT1sWzBdJiZqLmFwcGVuZFRvKGwpO2QucHVzaChqLmNzcyhnKS5zaG93KCkpO3JldHVybiBqfWZ1bmN0aW9uIGIoKXtmb3IodmFyIGc7Zz1kLnNoaWZ0KCk7KWYucHVzaChnLmhpZGUoKS51bmJpbmQoKSl9dmFyIGU9dGhpcztlLnJlbmRlck92ZXJsYXk9YTtlLmNsZWFyT3ZlcmxheXM9Yjt2YXIgZD1bXSxmPVtdfWZ1bmN0aW9uIE5iKGEpe3ZhciBiPXRoaXMsZSxkO2IuYnVpbGQ9ZnVuY3Rpb24oKXtlPVtdO2Q9W107YShlLGQpfTtiLmNlbGw9ZnVuY3Rpb24oZixnKXt2YXIgbD1lLmxlbmd0aCxqPWQubGVuZ3RoLAp0LHk9LTEsUz0tMTtmb3IodD0wO3Q8bDt0KyspaWYoZz49ZVt0XVswXSYmZzxlW3RdWzFdKXt5PXQ7YnJlYWt9Zm9yKHQ9MDt0PGo7dCsrKWlmKGY+PWRbdF1bMF0mJmY8ZFt0XVsxXSl7Uz10O2JyZWFrfXJldHVybiB5Pj0wJiZTPj0wP3tyb3c6eSxjb2w6U306bnVsbH07Yi5yZWN0PWZ1bmN0aW9uKGYsZyxsLGosdCl7dD10Lm9mZnNldCgpO3JldHVybnt0b3A6ZVtmXVswXS10LnRvcCxsZWZ0OmRbZ11bMF0tdC5sZWZ0LHdpZHRoOmRbal1bMV0tZFtnXVswXSxoZWlnaHQ6ZVtsXVsxXS1lW2ZdWzBdfX19ZnVuY3Rpb24gT2IoYSl7ZnVuY3Rpb24gYihqKXt4YyhqKTtqPWEuY2VsbChqLnBhZ2VYLGoucGFnZVkpO2lmKCFqIT0hbHx8aiYmKGoucm93IT1sLnJvd3x8ai5jb2whPWwuY29sKSl7aWYoail7Z3x8KGc9aik7ZihqLGcsai5yb3ctZy5yb3csai5jb2wtZy5jb2wpfWVsc2UgZihqLGcpO2w9an19dmFyIGU9dGhpcyxkLGYsZyxsO2Uuc3RhcnQ9ZnVuY3Rpb24oaix0LHkpe2Y9ajsKZz1sPW51bGw7YS5idWlsZCgpO2IodCk7ZD15fHwibW91c2Vtb3ZlIjttKGRvY3VtZW50KS5iaW5kKGQsYil9O2Uuc3RvcD1mdW5jdGlvbigpe20oZG9jdW1lbnQpLnVuYmluZChkLGIpO3JldHVybiBsfX1mdW5jdGlvbiB4YyhhKXtpZihhLnBhZ2VYPT09bWEpe2EucGFnZVg9YS5vcmlnaW5hbEV2ZW50LnBhZ2VYO2EucGFnZVk9YS5vcmlnaW5hbEV2ZW50LnBhZ2VZfX1mdW5jdGlvbiBQYihhKXtmdW5jdGlvbiBiKGwpe3JldHVybiBkW2xdPWRbbF18fGEobCl9dmFyIGU9dGhpcyxkPXt9LGY9e30sZz17fTtlLmxlZnQ9ZnVuY3Rpb24obCl7cmV0dXJuIGZbbF09ZltsXT09PW1hP2IobCkucG9zaXRpb24oKS5sZWZ0OmZbbF19O2UucmlnaHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGdbbF09Z1tsXT09PW1hP2UubGVmdChsKStiKGwpLndpZHRoKCk6Z1tsXX07ZS5jbGVhcj1mdW5jdGlvbigpe2Q9e307Zj17fTtnPXt9fX12YXIgWWE9e2RlZmF1bHRWaWV3OiJtb250aCIsYXNwZWN0UmF0aW86MS4zNSwKaGVhZGVyOntsZWZ0OiJ0aXRsZSIsY2VudGVyOiIiLHJpZ2h0OiJ0b2RheSBwcmV2LG5leHQifSx3ZWVrZW5kczp0cnVlLGFsbERheURlZmF1bHQ6dHJ1ZSxpZ25vcmVUaW1lem9uZTp0cnVlLGxhenlGZXRjaGluZzp0cnVlLHN0YXJ0UGFyYW06InN0YXJ0IixlbmRQYXJhbToiZW5kIix0aXRsZUZvcm1hdDp7bW9udGg6Ik1NTU0geXl5eSIsd2VlazoiTU1NIGRbIHl5eXldeyAnJiM4MjEyOydbIE1NTV0gZCB5eXl5fSIsZGF5OiJkZGRkLCBNTU0gZCwgeXl5eSJ9LGNvbHVtbkZvcm1hdDp7bW9udGg6ImRkZCIsd2VlazoiZGRkIE0vZCIsZGF5OiJkZGRkIE0vZCJ9LHRpbWVGb3JtYXQ6eyIiOiJoKDptbSl0In0saXNSVEw6ZmFsc2UsZmlyc3REYXk6MCxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLAoiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxidXR0b25UZXh0OntwcmV2OiImbmJzcDsmIzk2Njg7Jm5ic3A7IixuZXh0OiImbmJzcDsmIzk2NTg7Jm5ic3A7IixwcmV2WWVhcjoiJm5ic3A7Jmx0OyZsdDsmbmJzcDsiLG5leHRZZWFyOiImbmJzcDsmZ3Q7Jmd0OyZuYnNwOyIsdG9kYXk6InRvZGF5Iixtb250aDoibW9udGgiLHdlZWs6IndlZWsiLGRheToiZGF5In0sdGhlbWU6ZmFsc2UsYnV0dG9uSWNvbnM6e3ByZXY6ImNpcmNsZS10cmlhbmdsZS13IixuZXh0OiJjaXJjbGUtdHJpYW5nbGUtZSJ9LHVuc2VsZWN0QXV0bzp0cnVlLGRyb3BBY2NlcHQ6IioifSx5Yz0Ke2hlYWRlcjp7bGVmdDoibmV4dCxwcmV2IHRvZGF5IixjZW50ZXI6IiIscmlnaHQ6InRpdGxlIn0sYnV0dG9uVGV4dDp7cHJldjoiJm5ic3A7JiM5NjU4OyZuYnNwOyIsbmV4dDoiJm5ic3A7JiM5NjY4OyZuYnNwOyIscHJldlllYXI6IiZuYnNwOyZndDsmZ3Q7Jm5ic3A7IixuZXh0WWVhcjoiJm5ic3A7Jmx0OyZsdDsmbmJzcDsifSxidXR0b25JY29uczp7cHJldjoiY2lyY2xlLXRyaWFuZ2xlLWUiLG5leHQ6ImNpcmNsZS10cmlhbmdsZS13In19LEFhPW0uZnVsbENhbGVuZGFyPXt2ZXJzaW9uOiIxLjUuNCJ9LEphPUFhLnZpZXdzPXt9O20uZm4uZnVsbENhbGVuZGFyPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGU7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9bS5kYXRhKHRoaXMsImZ1bGxDYWxlbmRhciIpO2lmKGYmJm0uaXNGdW5jdGlvbihmW2FdKSl7Zj1mW2FdLmFwcGx5KGYsCmIpO2lmKGU9PT1tYSllPWY7YT09ImRlc3Ryb3kiJiZtLnJlbW92ZURhdGEodGhpcywiZnVsbENhbGVuZGFyIil9fSk7aWYoZSE9PW1hKXJldHVybiBlO3JldHVybiB0aGlzfXZhciBkPWEuZXZlbnRTb3VyY2VzfHxbXTtkZWxldGUgYS5ldmVudFNvdXJjZXM7aWYoYS5ldmVudHMpe2QucHVzaChhLmV2ZW50cyk7ZGVsZXRlIGEuZXZlbnRzfWE9bS5leHRlbmQodHJ1ZSx7fSxZYSxhLmlzUlRMfHxhLmlzUlRMPT09bWEmJllhLmlzUlRMP3ljOnt9LGEpO3RoaXMuZWFjaChmdW5jdGlvbihmLGcpe2Y9bShnKTtnPW5ldyBZYihmLGEsZCk7Zi5kYXRhKCJmdWxsQ2FsZW5kYXIiLGcpO2cucmVuZGVyKCl9KTtyZXR1cm4gdGhpc307QWEuc291cmNlTm9ybWFsaXplcnM9W107QWEuc291cmNlRmV0Y2hlcnM9W107dmFyIGFjPXtkYXRhVHlwZToianNvbiIsY2FjaGU6ZmFsc2V9LGJjPTE7QWEuYWRkRGF5cz1iYTtBYS5jbG9uZURhdGU9TjtBYS5wYXJzZURhdGU9a2I7QWEucGFyc2VJU084NjAxPQpCYjtBYS5wYXJzZVRpbWU9bWI7QWEuZm9ybWF0RGF0ZT1PYTtBYS5mb3JtYXREYXRlcz1pYjt2YXIgbGM9WyJzdW4iLCJtb24iLCJ0dWUiLCJ3ZWQiLCJ0aHUiLCJmcmkiLCJzYXQiXSxBYj04NjRFNSxjYz0zNkU1LHdjPTZFNCxkYz17czpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRTZWNvbmRzKCl9LHNzOmZ1bmN0aW9uKGEpe3JldHVybiBQYShhLmdldFNlY29uZHMoKSl9LG06ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0TWludXRlcygpfSxtbTpmdW5jdGlvbihhKXtyZXR1cm4gUGEoYS5nZXRNaW51dGVzKCkpfSxoOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEhvdXJzKCklMTJ8fDEyfSxoaDpmdW5jdGlvbihhKXtyZXR1cm4gUGEoYS5nZXRIb3VycygpJTEyfHwxMil9LEg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKX0sSEg6ZnVuY3Rpb24oYSl7cmV0dXJuIFBhKGEuZ2V0SG91cnMoKSl9LGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0RGF0ZSgpfSxkZDpmdW5jdGlvbihhKXtyZXR1cm4gUGEoYS5nZXREYXRlKCkpfSwKZGRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIuZGF5TmFtZXNTaG9ydFthLmdldERheSgpXX0sZGRkZDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmRheU5hbWVzW2EuZ2V0RGF5KCldfSxNOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldE1vbnRoKCkrMX0sTU06ZnVuY3Rpb24oYSl7cmV0dXJuIFBhKGEuZ2V0TW9udGgoKSsxKX0sTU1NOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubW9udGhOYW1lc1Nob3J0W2EuZ2V0TW9udGgoKV19LE1NTU06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5tb250aE5hbWVzW2EuZ2V0TW9udGgoKV19LHl5OmZ1bmN0aW9uKGEpe3JldHVybihhLmdldEZ1bGxZZWFyKCkrIiIpLnN1YnN0cmluZygyKX0seXl5eTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRGdWxsWWVhcigpfSx0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEhvdXJzKCk8MTI/ImEiOiJwIn0sdHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKTwxMj8iYW0iOiJwbSJ9LFQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKTwKMTI/IkEiOiJQIn0sVFQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKTwxMj8iQU0iOiJQTSJ9LHU6ZnVuY3Rpb24oYSl7cmV0dXJuIE9hKGEsInl5eXktTU0tZGQnVCdISDptbTpzcydaJyIpfSxTOmZ1bmN0aW9uKGEpe2E9YS5nZXREYXRlKCk7aWYoYT4xMCYmYTwyMClyZXR1cm4idGgiO3JldHVyblsic3QiLCJuZCIsInJkIl1bYSUxMC0xXXx8InRoIn19O0FhLmFwcGx5QWxsPSRhO0phLm1vbnRoPW1jO0phLmJhc2ljV2Vlaz1uYztKYS5iYXNpY0RheT1vYzt3Yih7d2Vla01vZGU6ImZpeGVkIn0pO0phLmFnZW5kYVdlZWs9cWM7SmEuYWdlbmRhRGF5PXJjO3diKHthbGxEYXlTbG90OnRydWUsYWxsRGF5VGV4dDoiYWxsLWRheSIsZmlyc3RIb3VyOjYsc2xvdE1pbnV0ZXM6MzAsZGVmYXVsdEV2ZW50TWludXRlczoxMjAsYXhpc0Zvcm1hdDoiaCg6bW0pdHQiLHRpbWVGb3JtYXQ6e2FnZW5kYToiaDptbXsgLSBoOm1tfSJ9LGRyYWdPcGFjaXR5OnthZ2VuZGE6MC41fSxtaW5UaW1lOjAsCm1heFRpbWU6MjR9KX0pKGpRdWVyeSk7Cg==",
	"init.lua":                            "LS0gQ2hlY2tzIGlmIGVsZW1lbnQgaXMgYSBtZW1iZXIgb2YgYXNldApmdW5jdGlvbiBtZW1iZXJvZihhc2V0LCBlbGVtZW50KQogICBpZiBhc2V0W2VsZW1lbnRdIH49IG5pbCB0aGVuCiAgICAgIHJldHVybiB0cnVlCiAgIGVsc2UKICAgICAgcmV0dXJuIGZhbHNlCiAgIGVuZAplbmQKCi0tIE1ha2VzIHRoZSBjdXJyZW50IGl0ZW0gcmVwZWF0IG9uIHRoZSBzcGVjaWZpZWQgd2Vla2RheXMgKDAgPSBzdW5kYXkpCi0tIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGluIHRoZSAhdHJpZ2dlciBjb2x1bW4gZnVuY3Rpb24KLS0gd2Vla2RheXMgaXMgYSB0YWJsZSB3aXRoIHRoZSBkZXNpcmVkIHdlZWtkYXlzIGFzIGtleXMKLS0KLS0gZXhhbXBsZToKLS0gICAgcmVwZWF0X3dlZWtkYXlzKHsgWzBdID0gdHJ1ZSwgWzFdID0gdHJ1ZSB9KQotLSBtYWtlcyB0aGUgZW50cnkgcmVwZWF0IG9uIHN1bmRheSBhbmQgbW9uZGF5IG9ubHkKLS0KZnVuY3Rpb24gcmVwZWF0X3dlZWtkYXlzKHdlZWtkYXlzKQogICBuZXh0X3doZW4gPSB3aGVuKCkKICAgaWYgbmV4dF93aGVuIDw9IDAgdGhlbgogICAgICByZXR1cm4gZmFsc2UKICAgZW5kCgogICB3aGlsZSB0cnVlIGRvCiAgICAgIG5leHRfd2hlbiA9IG5leHRfd2hlbiArICg2MCAqIDYwICogMjQpCiAgICAgIHdlZWtkYXkgPSBsb2NhbHRpbWUobmV4dF93aGVuKS53ZWVrZGF5CiAgICAgIGlmIG1lbWJlcm9mKHdlZWtkYXlzLCB3ZWVrZGF5KSB0aGVuCgkgYnJlYWsKICAgICAgZW5kCiAgIGVuZAoKICAgcGVyc2lzdCgpCiAgIGNsb25lY3Vyc29yKCkKICAgd2hlbihuZXh0X3doZW4pCiAgIAogICByZXR1cm4gdHJ1ZQplbmQ=",
	"int.js":                              "LyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCiAKdmFyIGNoaWxkcmVuX3RyZWUgPSB7fTsKCmZ1bmN0aW9uIHRvZ2dsZShxdWVyeSkgewogICAgdmFyIGRpdiA9ICQocXVlcnkpLmdldCgwKTsKICAgIGlmIChkaXYuc3R5bGVbJ2Rpc3BsYXknXSA9PSAnbm9uZScpIHsKICAgICAgICBkaXYuc3R5bGVbJ2Rpc3BsYXknXSA9ICdibG9jayc7CiAgICAgICAgcmV0dXJuIHRydWUKICAgIH0gZWxzZSB7CiAgICAgICAgZGl2LnN0eWxlWydkaXNwbGF5J10gPSAnbm9uZSc7CiAgICAgICAgcmV0dXJuIGZhbHNlCiAgICB9Cn0KCmZ1bmN0aW9uIHRvZ2dsZV9zZWFyY2hwb3AoKSB7CiAgICB0b2dnbGUoIiNzZWFyY2hwb3AiKTsKICAgICQoIiNxIikuZ2V0KDApLmZvY3VzKCk7CiAgICAkKCIjcSIpLmdldCgwKS5zZWxlY3QoKTsKfQoKZnVuY3Rpb24gdG9nZ2xlX2FkZHBvcCgpIHsKICAgIHRvZ2dsZSgiI2FkZHBvcCIpOwogICAgJCgiI25ld2VudHJ5IikuZ2V0KDApLmZvY3VzKCk7Cn0KCmZ1bmN0aW9uIHRvZ2dsZV9hZGRwb3Bfc3ViKGlkKSB7CiAgICB0b2dnbGUoIiNhZGRwb3AiKTsKICAgIHZhciBuZSA9ICQoIiNuZXdlbnRyeSIpOwogICAgbmUudmFsKCIjc3ViLyIgKyBpZCArICIgIik7CiAgICBuZS5nZXQoMCkuc2V0U2VsZWN0aW9uUmFuZ2UoNiArIGlkLmxlbmd0aCwgNiArIGlkLmxlbmd0aCk7CiAgICBuZS5nZXQoMCkuZm9jdXMoKTsKfQoKZnVuY3Rpb24gdG9nZ2xlX3J1bnBvcCgpIHsKICAgIHRvZ2dsZSgiI3J1bnBvcCIpOwp9CgpmdW5jdGlvbiBrZXlwcmVzcyhlKSB7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gcGVyZm9ybV90b2dnbGVfb25fa2V5ZXZlbnQoZSkgewogICAgc3dpdGNoKGUud2hpY2gpIHsKICAgIGNhc2UgNjU6IC8vIGEga2V5CiAgICAgICAgdG9nZ2xlX2FkZHBvcCgpOwogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICBjYXNlIDgzOiAvLyBzIGtleQogICAgICAgIHRvZ2dsZV9zZWFyY2hwb3AoKTsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKZnVuY3Rpb24gc3VidHJlZV9zYXZlKG5hbWUpIHsKCXZhciB0ZXh0ID0gJCgiI3N1YnNyb3dfIitxdW90ZU5hbWUobmFtZSkpLmZpbmQoInRleHRhcmVhIikuZ2V0KDApLnZhbHVlOwoJdmFyIGNvbnRlbnQgPSAiaWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudCgiI2lkPSIgKyBuYW1lKSArICImYm9keT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpOwoJJC5hamF4KHt0eXBlOiAiUE9TVCIsIHVybCA6ICJuZi91cGRhdGUuanNvbiIsIGRhdGE6IGNvbnRlbnQsIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewoJCWRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwoJCSQoIiNzdWJzcm93XyIgKyBuYW1lKS5maW5kKCIuc3Vic3RhYmxlX2NvbnRlbnQiKS5maW5kKCJkaXYiKS5nZXQoMCkuaW5uZXJIVE1MID0gY2hpbGRSZXByZXNlbnRhdGlvbkZyb21EYXRhKGRhdGEuT2JqZWN0c1swXSk7CgkJc2V0c2VsZWN0ZWQobmFtZSk7Cgl9fSkKfQoKZnVuY3Rpb24gc3VidHJlZV9yZW1vdmUobmFtZSwgcGlkKSB7CgkkLmFqYXgoeyB1cmw6ICJyZW1vdmU/aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArICImcGlkPSIgKyBlbmNvZGVVUklDb21wb25lbnQocGlkKSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CgkJaWYgKGRhdGEubWF0Y2goL15yZW1vdmVkLykpIHsKCQkJcmVsb2FkX2NoaWxkcmVucyhwaWQsIG51bGwpOwoJCX0KCX19KTsKfQoKZnVuY3Rpb24gZ2V0X2FmdGVyX3VuZGVyc2NvcmUodCkgewoJdiA9IHQuc3BsaXQoIl8iLCAxKVswXQoJcmV0dXJuIHQuc3Vic3RyaW5nKHYubGVuZ3RoKzEpCn0KCmZ1bmN0aW9uIGtleXRhYmxlKGUpIHsKICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7CiAgICBjYXNlIDI3OgogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic3Vic3RhYmxlX3RleHRhcmVhIikpIHsKICAgICAgICAgICAgdmFyIHJvdyA9ICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkucGFyZW50cygidHIiKS5nZXQoMCk7CiAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0X2FmdGVyX3VuZGVyc2NvcmUocm93LmlkKTsKICAgICAgICAgICAgc3VidHJlZV9zYXZlKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxkaXYgPSAkKCIuc2VsZWN0ZWQiKS5nZXQoMCk7CiAgICAgICAgICAgIGlmIChzZWxkaXYgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgc2VsZGl2LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJCgiI3NlYXJjaHBvcCIpLmdldCgwKS5zdHlsZVsnZGlzcGxheSddID0gJ25vbmUnOwogICAgICAgICQoIiNhZGRwb3AiKS5nZXQoMCkuc3R5bGVbJ2Rpc3BsYXknXSA9ICdub25lJzsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgY2FzZSAxMzoKICAgICAgICBpZiAoZS5hbHRLZXkpIHsKICAgICAgICAgICAgaWYgKCQoIiNzZWFyY2hwb3AiKS5nZXQoMCkuc3R5bGVbJ2Rpc3BsYXknXSAhPSAnbm9uZScpIHsKICAgICAgICAgICAgICAgICQoIiNzZWFyY2hmb3JtIikuZ2V0KDApLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGhsdHIgPSAkKCIuc2VsZWN0ZWQiKS5nZXQoMCk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpOwogICAgICAgICAgICBpZiAoKGhsdHIgIT0gbnVsbCkgJiYgKChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IG51bGwpIHx8IChkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPSAiVEVYVEFSRUEiKSkpIHsKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaGx0ci5pZC5zdWJzdHJpbmcoInN1YnNyb3dfIi5sZW5ndGgpCiAgICAgICAgICAgICAgICB2YXIgcGlkID0gbnVsbDsKICAgICAgICAgICAgICAgIGZvciAodmFyIGVsID0gaGx0ci5wYXJlbnRFbGVtZW50OyBlbCAhPSBudWxsOyBlbCA9IGVsLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PSAiVFIiKSAmJiAoZWwuaWQuaW5kZXhPZigiZWRpdG9yXyIpID09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZCA9IGVsLmlkLnN1YnN0cmluZygiZWRpdG9yXyIubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJC5hamF4KHsgdXJsOiAibmV3c3ViaXRlbT9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgIiZjaGlsZD0wIiwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CiAgICAgICAgICAgICAgICAgICAgcmVsb2FkX2NoaWxkcmVucyhwaWQsIGRhdGEpOwogICAgICAgICAgICAgICAgfX0pOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50LnR5cGUgPT0gbnVsbCkgewogICAgICAgIHZhciByID0gcGVyZm9ybV90b2dnbGVfb25fa2V5ZXZlbnQoZSk7CiAgICAgICAgcmV0dXJuIHI7CiAgICB9CiAgICBub3RoaW5nX2VuYWJsZWQgPSAoJCgiI3NlYXJjaHBvcCIpLmdldCgwKS5zdHlsZVsnZGlzcGxheSddID09ICdub25lJykgJiYgKCQoIiNhZGRwb3AiKS5nZXQoMCkuc3R5bGVbJ2Rpc3BsYXknXSA9PSAnbm9uZScpOwoKICAgIGlmICghbm90aGluZ19lbmFibGVkKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKChkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkID09ICJxIikgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgPT0gIm5ld2VudHJ5IikpIHsKICAgICAgICB2YXIgciA9IHBlcmZvcm1fdG9nZ2xlX29uX2tleWV2ZW50KGUpOwogICAgICAgIHJldHVybiByOwogICAgfQp9CgpmdW5jdGlvbiByZW1vdmVfZW50cnkobmFtZSkgewogIHZhciB0YmwgPSAkKCIjZWRpdG9yXyIrcXVvdGVOYW1lKG5hbWUpKS5wYXJlbnQoKS5wYXJlbnQoKS5maXJzdCgpLmdldCgwKTsKICAkLmFqYXgoeyB1cmw6ICJyZW1vdmU/aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CglpZiAoZGF0YS5tYXRjaCgvXnJlbW92ZWQvKSkgewoJICAvL3ZhciBtYWludGFibGUgPSAkKCIjbWFpbnRhYmxlIikuZ2V0KDApOwoJICBmb3IgKHZhciBpIGluIHRibC5yb3dzKSB7CgkgICAgaWYgKHRibC5yb3dzW2ldID09IG51bGwpIGNvbnRpbnVlOyAvLyBkZWxldGVkIHJvd3MKCSAgICBpZiAodGJsLnJvd3NbaV0uaWQgPT0gbnVsbCkgY29udGludWU7IC8vIHJvd3Mgd2l0aG91dCBpZAoKCSAgICBpZiAodGJsLnJvd3NbaV0uaWQgPT0gImVkaXRvcl8iICsgbmFtZSkgewoJICAgICAgdGJsLmRlbGV0ZVJvdyhpKTsKCSAgICAgIHRibC5kZWxldGVSb3coaS0xKTsgLy8gdGhpcyBpcyB0aGUgdGl0bGUKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfSBlbHNlIHsKCSAgJCgiI3RzXyIrdi5pZCkuaHRtbCgiUmVtb3ZlIGZhaWxlZDogIiArIGRhdGEpOwoJfQogICAgfX0pOwp9CgpmdW5jdGlvbiBzYXZlX2VkaXRvcihmb3JtKSB7CiAgICBpZiAoZm9ybSA9PSBudWxsKSByZXR1cm47CiAgICBpZiAoZm9ybS5lbGVtZW50c1snZWR0aXRsZSddLmRpc2FibGVkICE9ICIiKSByZXR1cm47CgogICAgb2JqID0gbmV3IE9iamVjdCgpOwogICAgb2JqLnRpdGxlID0gZm9ybS5lbGVtZW50c1snZWR0aXRsZSddLnZhbHVlOwogICAgb2JqLnRleHQgPSBmb3JtLmVsZW1lbnRzWydlZHRleHQnXS52YWx1ZTsKICAgIG9iai50cmlnZ2VyQXQgPSBmb3JtLmVsZW1lbnRzWydlZGF0J10udmFsdWU7CiAgICBvYmouc29ydCA9IGZvcm0uZWxlbWVudHNbJ2Vkc29ydCddLnZhbHVlOwogICAgb2JqLmlkID0gZm9ybS5lbGVtZW50c1snZWRpZCddLnZhbHVlOwogICAgb2JqLnByaW9yaXR5ID0gcGFyc2VJbnQoZm9ybS5lbGVtZW50c1snZWRwcmlvJ10udmFsdWUpOwogICAgJCgiI2xvYWRpbmdfIitxdW90ZU5hbWUob2JqLmlkKSkuZ2V0KDApLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKCiAgICAkLmFqYXgoeyB0eXBlOiAiUE9TVCIsIHVybDogIi9zYXZlIiwgZGF0YTogSlNPTi5zdHJpbmdpZnkob2JqKSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CgkgIGlmIChkYXRhLm1hdGNoKC9ec2F2ZWQtYXQtdGltZXN0YW1wOiAvKSkgewoJICAgICQoIiN0c18iK3F1b3RlTmFtZShvYmouaWQpKS5odG1sKGRhdGEuc3Vic3RyKCJzYXZlZC1hdC10aW1lc3RhbXA6ICIubGVuZ3RoKSk7CgkgIH0gZWxzZSB7CgkgICAgJCgiI3RzXyIrcXVvdGVOYW1lKG9iai5pZCkpLmh0bWwoIiBMQVNUIFNBVkUgRkFJTEVEOiAiICsgZGF0YSk7CgkgIH0KCSAgJCgiI2xvYWRpbmdfIitxdW90ZU5hbWUob2JqLmlkKSkuZ2V0KDApLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cgl9fSk7Cn0KCmZ1bmN0aW9uIGFkZF9yb3coaWQsIHBhcmVudCkgewogICQuYWpheCh7IHVybDogImh0bWxnZXQ/dHlwZT1hZGQmaWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChpZCksIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewogICAgdmFyIG5ld3Jvd3MgPSBkYXRhLnNwbGl0KCJcdTIwMjkiLCAyKTsKCiAgICB2YXIgdGJsID0gKHBhcmVudCA9PSB1bmRlZmluZWQpID8KICAgICAgICQoIiNtYWludGFibGUiKS5nZXQoMCkgOgogICAgICAgJCgiI3N1YnNfIiArIHBhcmVudCkuZ2V0KDApOwoKICAgIHZhciBuZXdyb3cxID0gdGJsLmluc2VydFJvdygwKTsKICAgIG5ld3JvdzEuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJlbnRyeSIpOwogICAgbmV3cm93MS5pbm5lckhUTUwgPSBuZXdyb3dzWzBdOwoKICAgIHZhciBuZXdyb3cyID0gdGJsLmluc2VydFJvdygxKTsKICAgIG5ld3JvdzIuc2V0QXR0cmlidXRlKCJpZCIsICJlZGl0b3JfIitlbmNvZGVVUklDb21wb25lbnQoaWQpKTsKICAgIG5ld3JvdzIuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJlZGl0b3IiKTsKICAgIG5ld3JvdzIuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJkaXNwbGF5OiBub25lIik7CiAgICBuZXdyb3cyLmlubmVySFRNTCA9IG5ld3Jvd3NbMV07CgogICAgaWYgKHBhcmVudCA9PSB1bmRlZmluZWQpIHsKICAgICAgc2F2ZV9vcGVuX2VkaXRvcih0cnVlKTsKICAgIH0KICB9fSk7Cn0KCmZ1bmN0aW9uIGFkZF9lbnRyeShxdWVyeSkgewogICAgdmFyIG5ldGV4dCA9ICQoJyNuZXdlbnRyeScpLnZhbCgpOwogICAgJC5hamF4KHsgdXJsOiAicWFkZD9xPSIgKyBlbmNvZGVVUklDb21wb25lbnQocXVlcnkpICsgIiZ0ZXh0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobmV0ZXh0KSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tYXRjaCgvXmFkZGVkOiAvKSkgewogICAgICAgICAgICAgICAgICAgIHJlc3AgPSBkYXRhLnN1YnN0cigiYWRkZWQ6ICIubGVuZ3RoKS5zcGxpdCgvIC8pOwoKICAgICAgICAgICAgICAgICAgICBhZGRfcm93KHJlc3BbMF0sIHJlc3BbMV0pOwoKICAgICAgICAgICAgICAgICAgICAkKCcjbmV3ZW50cnknKS52YWwoIiIpOwogICAgICAgICAgICAgICAgICAgICQoIiNhZGRwb3AiKS5nZXQoMCkuc3R5bGVbImRpc3BsYXkiXSA9ICJub25lIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkFERCBGQUlMRUQ6ICIgKyBkYXRhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfX0pOwogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBjaGFuZ2VfZWRpdG9yX2Rpc2FibGVkKGVkLCBkaXNhYmxlZFN0YXR1cykgewogICAgaWYgKGVkID09IG51bGwpIHJldHVybjsKICAgIGVkLmVsZW1lbnRzWydlZHRpdGxlJ10uZGlzYWJsZWQgPSBkaXNhYmxlZFN0YXR1czsKICAgIGVkLmVsZW1lbnRzWydlZHRleHQnXS5kaXNhYmxlZCA9IGRpc2FibGVkU3RhdHVzOwogICAgZWQuZWxlbWVudHNbJ2VkYXQnXS5kaXNhYmxlZCA9IGRpc2FibGVkU3RhdHVzOwogICAgZWQuZWxlbWVudHNbJ2Vkc29ydCddLmRpc2FibGVkID0gZGlzYWJsZWRTdGF0dXM7CiAgICBlZC5lbGVtZW50c1snZWRpZCddLmRpc2FibGVkID0gZGlzYWJsZWRTdGF0dXM7CiAgICBlZC5lbGVtZW50c1snZWRwcmlvJ10uZGlzYWJsZWQgPSBkaXNhYmxlZFN0YXR1czsKICAgIGVkLmVsZW1lbnRzWydzYXZlYnRuJ10uZGlzYWJsZWQgPSBkaXNhYmxlZFN0YXR1czsKfQoKZnVuY3Rpb24gY291bnRfbGluZXMoZGF0YSkgewoJaWYgKGRhdGEgPT0gbnVsbCkgewoJCXJldHVybiAwOwoJfQoJdmFyIG4gPSBkYXRhLmxlbmd0aDsKCWZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCW4gKz0gY291bnRfbGluZXMoZGF0YVtpXS5DaGlsZHJlbik7Cgl9CglyZXR1cm4gbjsKfQoKZnVuY3Rpb24gZmlsbF9lZGl0b3IobmFtZSwgY29udGZuKSB7CiAgICAkKCIjbG9hZGluZ18iK3F1b3RlTmFtZShuYW1lKSkuZ2V0KDApLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICQuYWpheCh7dXJsOiAiZ2V0P2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSksIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewogICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRhLnNwbGl0KCJcbiIsIDIpWzBdOwogICAgICAgIHZhciBqc29uT2JqID0gZGF0YS5zdWJzdHIodGltZXN0YW1wLmxlbmd0aCk7CiAgICAgICAgdiA9ICQucGFyc2VKU09OKGpzb25PYmopOwogICAgICAgIHZhciBlZCA9ICQoIiNlZGl2XyIgKyBxdW90ZU5hbWUobmFtZSkpLmZpcnN0KCkuZ2V0KDApOwogICAgICAgIGVkLmVsZW1lbnRzWydlZHRpdGxlJ10udmFsdWUgPSB2LlRpdGxlOwogICAgICAgIGVkLmVsZW1lbnRzWydlZHRleHQnXS52YWx1ZSA9IHYuVGV4dDsKICAgICAgICBlZC5lbGVtZW50c1snZWRhdCddLnZhbHVlID0gdi5UcmlnZ2VyQXQ7CiAgICAgICAgZWQuZWxlbWVudHNbJ2Vkc29ydCddLnZhbHVlID0gdi5Tb3J0OwogICAgICAgIGVkLmVsZW1lbnRzWydlZGlkJ10udmFsdWUgPSB2LklkOwogICAgICAgIGVkLmVsZW1lbnRzWydlZHByaW8nXS52YWx1ZSA9IHYuUHJpb3JpdHk7CgogICAgICAgICQoIiN0c18iICsgcXVvdGVOYW1lKHYuSWQpKS5odG1sKHRpbWVzdGFtcCk7CiAgICAgICAgY2hhbmdlX2VkaXRvcl9kaXNhYmxlZChlZCwgIiIpOwogICAgICAgICQoIiNsb2FkaW5nXyIrcXVvdGVOYW1lKG5hbWUpKS5nZXQoMCkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAkLmFqYXgoe3VybDogImNoaWxkcy5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQodi5JZCksIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewogICAgICAgICAgICB2YXIgdGJsID0gJCgiI3N1YnNfIiArIHF1b3RlTmFtZSh2LklkKSkuZmlyc3QoKS5nZXQoMCk7CiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgICAgICAgICBjaGlsZHJlbl90cmVlW3YuSWRdID0gZGF0YTsKICAgICAgICAgICAgZmlsbF9jaGlsZHJlbnModGJsLCB2LklkLCBkYXRhKTsKICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgc2hvd19zdWJzKHYuSWQpOwogICAgICAgICAgICAgICAgaWYgKGNvdW50X2xpbmVzKGRhdGEpID4gMTApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3Vic19jbGlja19mb2xkZXIoZGF0YVtpXS5JZCwgeyAidGFyZ2V0IjogJCgiI3N1YnNyb3dfIiArIGRhdGFbaV0uSWQpLmZpbmQoIi5zdWJzdGFibGVfZm9sZGVyIikuZmluZCgiYSIpLmdldCgwKSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoY29udGZuICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBjb250Zm4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNob3dfZWRpdG9yKHYuSWQpOwogICAgICAgICAgICB9CiAgICAgICAgfX0pOwoKICAgICAgICBpZiAoY29udGZuID09IG51bGwpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaCArICIjIiArIGVuY29kZVVSSUNvbXBvbmVudCh2LklkKTsKICAgICAgICB9CiAgICB9fSk7Cn0KCmZ1bmN0aW9uIGVkaXRvcl9mcm9tX3Jvdyhyb3cpIHsKICByZXR1cm4gJCgiI2VkaXZfIitxdW90ZU5hbWUocm93LmlkLnN1YnN0cigiZWRpdG9yXyIubGVuZ3RoKSkpLmdldCgwKTsKfQoKZnVuY3Rpb24gc2F2ZV9vcGVuX2VkaXRvcihzaG91bGRfY2xvc2VfZWRpdG9yKSB7CiAgICBvcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwogICAgZm9yICh2YXIgaSBpbiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKSkgewogICAgICAgIG9yb3cgPSBvcm93c1tpXTsKCiAgICAgICAgaWYgKG9yb3cgPT0gbnVsbCkgY29udGludWU7IC8vIGRlbGV0ZWQgcm93cwogICAgICAgIGlmIChvcm93LnN0eWxlID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChvcm93LmlkID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICBpZiAoKG9yb3cuaWQubWF0Y2goL15lZGl0b3JfLykpICYmIChvcm93LnN0eWxlWydkaXNwbGF5J10gIT0gJ25vbmUnKSkgewogICAgICAgICAgICBpZiAoc2hvdWxkX2Nsb3NlX2VkaXRvcikgewogICAgICAgICAgICAgICAgY2xvc2VfZWRpdG9yKG9yb3cpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzYXZlX2VkaXRvcihlZGl0b3JfZnJvbV9yb3cob3JvdykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBzYXZlX2VkaXRvcl9ieV9pZChuYW1lLCBldmVudCkgewogICAgc2F2ZV9lZGl0b3IoJCgiI2VkaXZfIitxdW90ZU5hbWUobmFtZSkpLmdldCgwKSk7Cn0KCmZ1bmN0aW9uIGV4cGxvZGVfYm9keShuYW1lKSB7CiAgICBzYXZlX29wZW5fZWRpdG9yKHRydWUpOwogICAgJC5hamF4KHsgdHlwZTogIkdFVCIsIHVybDogIi9leHBsb2RlP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSksICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCByZXEpIHsKICAgICAgICAvLyBub3RoaW5nIHRvIGRvCiAgICB9fSk7Cn0KCmZ1bmN0aW9uIGNsb3NlX2VkaXRvcihyb3cpIHsKICAgIHZhciBlZCA9IGVkaXRvcl9mcm9tX3Jvdyhyb3cpOwogICAgc2F2ZV9lZGl0b3IoZWQpOwogICAgY2hhbmdlX2VkaXRvcl9kaXNhYmxlZChlZCwgImRpc2FibGVkIik7CiAgICByb3cuc3R5bGVbJ2Rpc3BsYXknXSA9ICdub25lJzsKICAgIHZhciByZW1vdmVpZCA9IGVkLmVsZW1lbnRzWydlZGlkJ10udmFsdWU7CiAgICB2YXIgdnMgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zcGxpdCgiIyIpOwogICAgdmFyIHZyID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHZzW2ldID09ICIiKSBjb250aW51ZTsKICAgICAgICBpZiAodnNbaV0gPT0gcmVtb3ZlaWQpIGNvbnRpbnVlOwogICAgICAgIHZyLnB1c2godnNbaV0pOwogICAgfQogICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAiIyIgKyB2ci5qb2luKCIjIik7Cn0KCmZ1bmN0aW9uIHRvZ2dsZV9lZGl0b3IobmFtZSwgZXZlbnQsIGNvbnRmbikgewogICAgdmFyIHJvdyA9ICQoIiNlZGl0b3JfIitxdW90ZU5hbWUobmFtZSkpLmdldCgwKTsKICAgIGlmIChyb3cuc3R5bGVbJ2Rpc3BsYXknXSA9PSAnbm9uZScpIHsKICAgICAgICB2YXIgdGJsID0gJCgiI2VkaXRvcl8iK3F1b3RlTmFtZShuYW1lKSkucGFyZW50KCkucGFyZW50KCkuZmlyc3QoKS5nZXQoMCk7CiAgICAgICAgb3Jvd3MgPSB0YmwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7CiAgICAgICAgZm9yICh2YXIgaSBpbiB0YmwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIikpIHsKICAgICAgICAgICAgb3JvdyA9IG9yb3dzW2ldOwoKICAgICAgICAgICAgaWYgKG9yb3cgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgIGlmIChvcm93LnN0eWxlID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAob3Jvdy5pZCA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIGlmICgob3Jvdy5pZC5tYXRjaCgvXmVkaXRvcl8vKSkgJiYgKG9yb3cuc3R5bGVbJ2Rpc3BsYXknXSAhPSAnbm9uZScpKSB7CiAgICAgICAgICAgICAgICBjbG9zZV9lZGl0b3Iob3JvdykKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcm93LnN0eWxlWydkaXNwbGF5J10gPSAnJzsKCiAgICAgICAgZmlsbF9lZGl0b3IobmFtZSwgY29udGZuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2xvc2VfZWRpdG9yKHJvdyk7CiAgICB9Cn0KCmZ1bmN0aW9uIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCBwcmlvcml0eU51bSwgcHJpb3JpdHkpIHsKICAgIHZhciBlcHIgPSAkKCcjZXByXycrcXVvdGVOYW1lKG5hbWUpKTsKICAgIGVwci52YWwocHJpb3JpdHkpOwogICAgZXByLmF0dHIoImNsYXNzIiwgInByaW9yaXR5YnV0dG9uIHByaW9yaXR5Y2xhc3NfIiArIHByaW9yaXR5KTsKCiAgICAvLyBjaGFuZ2VzIHRoZSB2YWx1ZSBzYXZlZCBpbnNpZGUgdGhlIGVkaXRvciBkaXYgc28gdGhhdCBzYXZpbmcgdGhlIGVkaXRvciBjb250ZW50cyBkb2Vzbid0IHJldmVydCBhIGNoYW5nZWQgcHJpb3JpdHkKICAgIHZhciBlZCA9ICQoIiNlZGl2XyIrcXVvdGVOYW1lKG5hbWUpKS5nZXQoMCk7CiAgICBpZiAoZWQgIT0gbnVsbCkgewogICAgICAgIGVkLmVsZW1lbnRzWyJlZHByaW8iXS52YWx1ZSA9IHByaW9yaXR5TnVtOwogICAgfQp9CgpmdW5jdGlvbiBndWVzc19uZXh0X3ByaW9yaXR5KG5hbWUsIHNwZWNpYWwpIHsKICAgIHZhciBjdXJyZW50ID0gJCgnI2Vwcl8nK3F1b3RlTmFtZShuYW1lKSkudmFsKCk7CiAgICB2YXIgZXRpbWUgPSAkKCcjZXRpbWVfJytxdW90ZU5hbWUobmFtZSkpLmdldCgwKQogICAgdmFyIGV0aW1lX2luaXRpYWxfY2hhciA9ICctJzsKICAgIGlmIChldGltZSAhPSBudWxsKSB7CiAgICAgICAgZXRpbWUuaW5uZXJIVE1MWzBdOwogICAgfQoKICAgIGlmIChldGltZV9pbml0aWFsX2NoYXIgPT0gIkAiKSB7CiAgICAgICAgaWYgKGN1cnJlbnQgPT0gIk5PVyIpIHsKICAgICAgICAgICAgY2hhbmdlX3ByaW9yaXR5X3RvKG5hbWUsIDUsICJET05FIikKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gIlRJTUVEIikgewogICAgICAgICAgICBjaGFuZ2VfcHJpb3JpdHlfdG8obmFtZSwgNSwgIkRPTkUiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGFuZ2VfcHJpb3JpdHlfdG8obmFtZSwgNiwgIlVOS1ciKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gIk5PVEVTIikgewogICAgICAgIGlmIChzcGVjaWFsKSB7CiAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCAxLCAiTk9XIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2hhbmdlX3ByaW9yaXR5X3RvKG5hbWUsIDAsICJTVElDS1kiKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gIlNUSUNLWSIpIHsKICAgICAgICBpZiAoc3BlY2lhbCkgewogICAgICAgICAgICBjaGFuZ2VfcHJpb3JpdHlfdG8obmFtZSwgMSwgIk5PVyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCAzLCAiTk9URVMiKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChzcGVjaWFsKSB7CiAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCAzLCAiTk9URVMiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoY3VycmVudCA9PSAiVElNRUQiKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VfcHJpb3JpdHlfdG8obmFtZSwgMiwgIkxBVEVSIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAiRE9ORSIpIHsKICAgICAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCAyLCAiTEFURVIiKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICJMQVRFUiIpIHsKICAgICAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCAxLCAiTk9XIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAiTk9XIikgewogICAgICAgICAgICAgICAgY2hhbmdlX3ByaW9yaXR5X3RvKG5hbWUsIDUsICJET05FIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICIiOwp9CgpmdW5jdGlvbiBjaGFuZ2VfcHJpb3JpdHkobmFtZSwgZXZlbnQpIHsKICAgIHZhciBsb2FkaWRjID0gJCgiI3Bsb2FkaW5nXyIrcXVvdGVOYW1lKG5hbWUpKS5nZXQoMCk7CiAgICBpZiAobG9hZGlkYyAhPSBudWxsKSB7CiAgICAgICAgbG9hZGlkYy5zdHlsZVsndmlzaWJpbGl0eSddID0gJ3Zpc2libGUnOwogICAgfQoKICAgIGd1ZXNzX25leHRfcHJpb3JpdHkobmFtZSwgZXZlbnQuc2hpZnRLZXkpOwoKICAgICQuYWpheCh7IHVybDogImNoYW5nZS1wcmlvcml0eT9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgIiZzcGVjaWFsPSIgKyBldmVudC5zaGlmdEtleSwgc3VjY2VzczoKICAgICAgICAgICAgZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tYXRjaCgvXnByaW9yaXR5LWNoYW5nZS10bzogLykpIHsKICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSA9IGRhdGEuc3Vic3RyKCJwcmlvcml0eS1jaGFuZ2UtdG86ICIubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICBwcmlvcml0eU51bSA9IHByaW9yaXR5WzBdOwogICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gcHJpb3JpdHkuc3Vic3RyKDIpOwogICAgICAgICAgICAgICAgICAgIGNoYW5nZV9wcmlvcml0eV90byhuYW1lLCBwcmlvcml0eU51bSwgcHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaWRjICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGlkYy5zdHlsZVsndmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhbGVydChkYXRhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfX0pOwp9CgpmdW5jdGlvbiBzYXZlc2VhcmNoX2V4KG5hbWUsIHF1ZXJ5KSB7CiAgJC5hamF4KHsgdXJsOiAic2F2ZS1zZWFyY2g/bmFtZT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgIiZxdWVyeT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CglpZiAoIWRhdGEubWF0Y2goL15xdWVyeS1zYXZlZDogLykpIHsKCSAgYWxlcnQoZGF0YSk7CiAgICAgICAgfQogICAgICB9fSk7Cn0KCmZ1bmN0aW9uIHNhdmVzZWFyY2goKSB7CiAgICB2YXIgbmFtZSA9IHByb21wdCgic2F2ZSBzZWFyY2ggdG86Iik7CiAgICBzYXZlc2VhcmNoX2V4KG5hbWUsICQoJyNxJykudmFsKCkpCn0KCnZhciBlZGl0aW5nU2F2ZWRRdWVyeU1vZGUgPSBudWxsOwoKZnVuY3Rpb24gZWRpdHNlYXJjaCgpIHsKICAgIGlmIChlZGl0aW5nU2F2ZWRRdWVyeU1vZGUgPT0gbnVsbCkgewogICAgICAgIG5hbWUgPSAkKCcjcScpLnZhbCgpOwogICAgICAgICQuYWpheCh7IHVybDogInNhdmUtc2VhcmNoP25hbWU9IiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSwKICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCByZXEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tYXRjaCgvXnF1ZXJ5LXNhdmVkOiAvKSkgewogICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IGRhdGEuc3Vic3RyaW5nKDEzKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2VkaXRxdWVyeWJ0biIpLnZhbCgiU2F2ZSBxdWVyeSIpOwogICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nU2F2ZWRRdWVyeU1vZGUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAkKCcjcScpLnZhbChxdWVyeSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfX0pOwogICAgfSBlbHNlIHsKICAgICAgICBzYXZlc2VhcmNoX2V4KGVkaXRpbmdTYXZlZFF1ZXJ5TW9kZSwgJCgiI3EiKS52YWwoKSk7CiAgICB9Cn0KCmZ1bmN0aW9uIHJlbW92ZXNlYXJjaCgpIHsKICAkLmFqYXgoeyB1cmw6ICJyZW1vdmUtc2VhcmNoP3F1ZXJ5PSIgKyBlbmNvZGVVUklDb21wb25lbnQoJCgnI3EnKS52YWwoKSkgfSk7Cn0KCmZ1bmN0aW9uIHNhdmVfb250b2xvZ3koKSB7CiAgdmFyIG8gPSBKU09OLnN0cmluZ2lmeSgkKCIjb250b25hdiIpLmpzdHJlZSgiZ2V0X2pzb24iKSk7CiAgJCgiI29udG9zYXZpbmciKS5nZXQoMCkuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKICAkLmFqYXgoeyB0eXBlOiAiUE9TVCIsIHVybDogIi9vbnRvbG9neXNhdmU/c2F2ZT0xIiwgZGF0YTogbywgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CiAgICBpZiAoZGF0YSAhPSAib2siKSB7CiAgICAgIGFsZXJ0KGRhdGEpOwogICAgfQogICAgJCgiI29udG9zYXZpbmciKS5nZXQoMCkuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogIH19KTsKfQoKZnVuY3Rpb24gY2xpY2tfb250b2xvZ3koZXZlbnQpIHsKICB2YXIgcGF0aCA9ICIiOwogIHZhciBjID0gJChldmVudC50YXJnZXQpLnBhcmVudHMoKS5nZXQoMCk7CgogIGZvciAoOzspIHsKICAgIHZhciBuID0gJChjKS5jaGlsZHJlbigiYSIpLmdldCgwKS50ZXh0LnJlcGxhY2UoL1xzKy9nLCAiIik7CiAgICBwYXRoID0gbiArICIgIiArIHBhdGg7CgogICAgYyA9ICQoYykucGFyZW50cygpLmdldCgwKTsKICAgIGMgPSAkKGMpLnBhcmVudHMoKS5nZXQoMCk7CgogICAgaWYgKGMudGFnTmFtZSAhPSAiTEkiKSBicmVhazsKICB9CgogIHdpbmRvdy5sb2NhdGlvbiA9ICJsaXN0P3E9IiArIGVuY29kZVVSSUNvbXBvbmVudChwYXRoKTsKfQoKZnVuY3Rpb24gc2hvd19lZGl0b3IoaWQpIHsKICAkKCIjc3Vic18iICsgcXVvdGVOYW1lKGlkKSArICdfY29udGFpbmVyJykuZmlyc3QoKS5nZXQoMCkuc3R5bGVbImRpc3BsYXkiXSA9ICJub25lIjsKICAkKCIjZWRpdl8iICsgcXVvdGVOYW1lKGlkKSkuZmlyc3QoKS5nZXQoMCkuc3R5bGVbImRpc3BsYXkiXSA9ICJibG9jayI7Cn0KCmZ1bmN0aW9uIHNob3dfc3VicyhpZCkgewogICQoIiNzdWJzXyIgKyBxdW90ZU5hbWUoaWQpICsgJ19jb250YWluZXInKS5maXJzdCgpLmdldCgwKS5zdHlsZVsiZGlzcGxheSJdID0gImJsb2NrIjsKICAkKCIjZWRpdl8iICsgcXVvdGVOYW1lKGlkKSkuZmlyc3QoKS5nZXQoMCkuc3R5bGVbImRpc3BsYXkiXSA9ICJub25lIjsKfQoKZnVuY3Rpb24gb25sb2FkX29wZW5fZnVuY3Rpb24odiwgc3RhcnQpIHsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCB2Lmxlbmd0aDsgKytpKSB7CiAgICAgIGlmICh2W2ldID09ICIiKSBjb250aW51ZTsKICAgICAgdG9nZ2xlX2VkaXRvcih2W2ldLCBudWxsLCBvbmxvYWRfb3Blbl9mdW5jdGlvbih2LCBpKzEpKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KfQoKZnVuY3Rpb24gb250b25hdl9jbGlja19mb2xkZXIoZXYpIHsKCXZhciB0aGVhID0gZXYudGFyZ2V0OwoKCWlmIChldi50YXJnZXQuaW5uZXJIVE1MID09ICdcdWYwOTYnKSB7CgkJcmV0dXJuOwoJfQoKCXZhciBjaGlsZHVsID0gJChldi50YXJnZXQpLnBhcmVudHMoJ2xpJykuY2hpbGRyZW4oJ3VsJykuZ2V0KDApOwoKCWlmIChldi50YXJnZXQuaW5uZXJIVE1MID09ICdcdWYxNDcnKSB7CgkJY2hpbGR1bC5zdHlsZVsnZGlzcGxheSddID0gJ25vbmUnOwoJCWV2LnRhcmdldC5pbm5lckhUTUwgPSAnXHVmMTk2JzsKCX0gZWxzZSB7CgkJY2hpbGR1bC5zdHlsZVsnZGlzcGxheSddID0gJ2Jsb2NrJzsKCQlldi50YXJnZXQuaW5uZXJIVE1MID0gJ1x1ZjE0NycKCX0KfQoKZnVuY3Rpb24gb250b25hdl9kcm9wKGV2KSB7Cgl2YXIgZHN0dHlwZSA9ICgkKGV2LnRhcmdldCkucGFyZW50cygnc3BhbicpLmdldCgwKS5jbGFzc0xpc3QuY29udGFpbnMoJ3RyZWVfZm9sZGVyJykpID8gJ2NobGlkcmVuJyA6ICdzaWJsaW5nJzsKCXZhciBkc3QgPSAkKGV2LnRhcmdldCkucGFyZW50cygnbGknKS5jaGlsZHJlbignLnRyZWVfY29udGVudCcpLmNoaWxkcmVuKCdhJykuZ2V0KDApLmlubmVySFRNTDsKCXZhciBzcmMgPSBldi5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC90ZXh0Jyk7CgoJJC5hamF4KHsgdHlwZTogIkdFVCIsIHVybDogIi9vbnRvbG9neT9tb3ZlPTEmc3JjPSIgKyBlbmNvZGVVUklDb21wb25lbnQoc3JjKSArICImZHN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQoZHN0KSArICImbXR5PSIgKyBkc3R0eXBlLCBzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCByZXEpIHsKCQlsb2FkX29udG9uYXYoKTsKCX19KQp9CgpmdW5jdGlvbiBjYW5jZWxfc2hpdChldikgewoJZXYucHJldmVudERlZmF1bHQoKTsKCXJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gb250b25hdl9zdGFydF9kcmFnKGV2LCBzb3VyY2UpIHsKCWV2LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3RleHQiLCBzb3VyY2UpOwp9CgpmdW5jdGlvbiBsb2FkX29udG9uYXZfcmVjKG9ubCwgdCkgewoJZm9yICh2YXIgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7CgkJdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKCQlvbmwuYXBwZW5kQ2hpbGQobGkpOwoKCQlmdW5jdGlvbiBhZGRfZChmdHlwZSwgY29udGVudCkgewoJCQl2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKCQkJZC5jbGFzc0xpc3QuYWRkKCJ0cmVlX2ZvbGRlciIpOwoJCQlkLmlubmVySFRNTCA9ICI8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCknIG9uY2xpY2s9J29udG9uYXZfY2xpY2tfZm9sZGVyKGV2ZW50KScgZHJhZ2dhYmxlPSd0cnVlJyBvbmRyb3A9J29udG9uYXZfZHJvcChldmVudCknIG9uZHJhZ2VudGVyPSdjYW5jZWxfc2hpdChldmVudCknIG9uZHJhZ292ZXI9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnbGVhdmU9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnc3RhcnQ9J29udG9uYXZfc3RhcnRfZHJhZyhldmVudCwgXCIiICsgY29udGVudCArICJcIiknPiIgKyBmdHlwZSArICI8L2E+IjsKCQkJbGkuYXBwZW5kQ2hpbGQoZCk7CgoJCQlkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoJCQlkLmNsYXNzTGlzdC5hZGQoInRyZWVfY29udGVudCIpOwoKCQkJZC5pbm5lckhUTUwgPSAiPGEgaHJlZj0nbGlzdD9xPSIgKyBlbmNvZGVVUklDb21wb25lbnQoY29udGVudCkgKyAiJyBvbmRyb3A9J29udG9uYXZfZHJvcChldmVudCknIG9uZHJhZ2VudGVyPSdjYW5jZWxfc2hpdChldmVudCknIG9uZHJhZ292ZXI9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnbGVhdmU9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnc3RhcnQ9J29udG9uYXZfc3RhcnRfZHJhZyhldmVudCwgXCIiICsgY29udGVudCArICJcIiknPiIgKyBjb250ZW50ICsgIjwvYT4iOwoJCQlsaS5hcHBlbmRDaGlsZChkKTsKCQl9CgoKCQlpZiAodHlwZW9mKHRbaV0pID09ICJzdHJpbmciKSB7CgkJCWFkZF9kKCdcdWYwOTYnLCB0W2ldKTsKCQl9IGVsc2UgewoJCQlhZGRfZCgnXHVmMTQ3JywgdFtpXVsnZGF0YSddKQoKCQkJZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7CgkJCWxpLmFwcGVuZENoaWxkKGQpOwoJCQlsb2FkX29udG9uYXZfcmVjKGQsIHRbaV1bJ2NoaWxkcmVuJ10pOwoJCX0KCX0KfQoKZnVuY3Rpb24gbG9hZF9vbnRvbmF2KCkgewoJJC5hamF4KHsgdXJsOiAib250b2xvZ3kiLCBzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCByZXEpIHsKICAJCXZhciB0ID0gSlNPTi5wYXJzZShkYXRhKTsKICAJCXZhciBvbiA9ICQoIiNvbnRvbmF2IikuZmlyc3QoKS5nZXQoMCk7CiAgCQlvbi5pbm5lckhUTUwgPSAiIjsKICAJCXZhciBvbmwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpOwogIAkJb24uYXBwZW5kQ2hpbGQob25sKTsKICAJCWxvYWRfb250b25hdl9yZWMob25sLCB0KTsKCX19KQp9CgpmdW5jdGlvbiBzdWJzX2NsaWNrX2ZvbGRlcihuYW1lLCBldmVudCkgewoJdmFyIGJvZHlwYXJhID0gJCgiI3N1YnNyb3dfIiArIG5hbWUpLmZpbmQoIi5zdWJzdGFibGVfY29udGVudCIpLmZpbmQoInAiKS5nZXQoMCk7Cgl2YXIgc3VicyA9ICQoIiNzdWJzXyIgKyBxdW90ZU5hbWUobmFtZSkpLmdldCgwKTsKCWlmIChldmVudC50YXJnZXQuaW5uZXJIVE1MID09ICdcdWYxNDcnKSB7CgkJYm9keXBhcmEuc3R5bGVbJ2Rpc3BsYXknXSA9ICdub25lJzsKCQlpZiAoc3VicyAhPSBudWxsKSB7CgkJCXN1YnMuc3R5bGVbJ2Rpc3BsYXknXSA9ICdub25lJzsKCQl9CgkJZXZlbnQudGFyZ2V0LmlubmVySFRNTCA9ICdcdWYxOTYnOwoJfSBlbHNlIHsKCQlib2R5cGFyYS5zdHlsZVsnZGlzcGxheSddID0gJ2Jsb2NrJzsKCQlpZiAoc3VicyAhPSBudWxsKSB7CgkJCXN1YnMuc3R5bGVbJ2Rpc3BsYXknXSA9ICdibG9jayc7CgkJfQoJCWV2ZW50LnRhcmdldC5pbm5lckhUTUwgPSAnXHVmMTQ3JzsKCX0KfQoKZnVuY3Rpb24gZWRpdF9yb3cobmFtZSwgcGlkKSB7Cgl2YXIgdGhlZGl2ID0gJCgiI3N1YnNyb3dfIiArIG5hbWUpLmZpbmQoIi5zdWJzdGFibGVfY29udGVudCIpLmZpbmQoImRpdiIpLmdldCgwKTsKCWlmICh0aGVkaXYgPT0gbnVsbCkgewoJCXJldHVybjsKCX0KCXZhciB0aGV0YSA9ICQodGhlZGl2KS5maW5kKCJ0ZXh0YXJlYSIpLmdldCgwKTsKCWlmICh0aGV0YSAhPSBudWxsKSB7CgkJcmV0dXJuOwoJfQoJJC5hamF4KHsgdXJsOiAiZ2V0P25vY29scz0xJmlkPSIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSksIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewoJCWRhdGEgPSBKU09OLnBhcnNlKGRhdGEuc3BsaXQoIlxuIiwgMilbMV0pOwoJCXZhciB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CgkJdGEuY2xhc3NMaXN0LmFkZCgic3Vic3RhYmxlX3RleHRhcmVhIik7CgkJdGEucm93cyA9IDU7CgkJdGEudmFsdWUgPSBkYXRhLlRpdGxlICsgIlxuXG4iICsgZGF0YS5UZXh0OwoJCXRoZWRpdi5pbm5lckhUTUwgPSAiIjsKCQl0aGVkaXYuYXBwZW5kQ2hpbGQodGEpOwoJCQoJCXZhciBidXR0b25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJYnV0dG9ucy5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J1NhdmUnIG9uY2xpY2s9J3N1YnRyZWVfc2F2ZShcIiIgKyBuYW1lICsgIlwiKSc+Jm5ic3A7PGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J0RlbGV0ZScgb25jbGljaz0nc3VidHJlZV9yZW1vdmUoXCIiICsgbmFtZSArICJcIiwgXCIiICsgcGlkICsgIlwiKSc+ICgiICsgbmFtZSArICIpIjsKCQl0aGVkaXYuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7CgkJCgkJdGEuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7CgkJdGEuZm9jdXMoKTsKCQkKCX19KTsKfQoKZnVuY3Rpb24gc2V0c2VsZWN0ZWQobmFtZSkgewoJdmFyIHNlbGRpdiA9ICQoIi5zZWxlY3RlZCIpLmdldCgwKTsKCWlmIChzZWxkaXYgIT0gbnVsbCkgewoJCXNlbGRpdi5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpOwoJfQoJc2VsZGl2ID0gJCgiI3N1YnNyb3dfIiArIG5hbWUpLmdldCgwKTsKCWlmIChzZWxkaXYgIT0gbnVsbCkgewoJCXNlbGRpdi5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpCgl9Cn0KCmZ1bmN0aW9uIGFkZF9zdWJpdGVtKGV2ZW50LCBuYW1lLCBwaWQsIGNoaWxkKSB7CglpZiAoKGV2ZW50ICE9IG51bGwpICYmIChldmVudC5idXR0b25zICE9IDQpKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoJaWYgKGNoaWxkICE9IDApIHsKCQl2YXIgZm9sZGVyID0gJCgiI3N1YnNyb3dfIiArIG5hbWUpLmZpbmQoIi5zdWJzdGFibGVfZm9sZGVyIikuZmluZCgiYSIpLmdldCgwKTsKCQlpZiAoZm9sZGVyID09IG51bGwpIHsKCQkJc2hvd19zdWJzKG5hbWUpOwoJCX0gZWxzZSB7CgkJCWlmIChmb2xkZXIuaW5uZXJIVE1MICE9ICdcdWYxNDcnKSB7CgkJCQlzdWJzX2NsaWNrX2ZvbGRlcihuYW1lLCB7ICJ0YXJnZXQiOiAgZm9sZGVyIH0pOwoJCQl9CgkJfQoJfQoJJC5hamF4KHsgdXJsOiAibmV3c3ViaXRlbT9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgIiZjaGlsZD0iICsgY2hpbGQsIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewoJCXJlbG9hZF9jaGlsZHJlbnMocGlkLCBkYXRhKTsKCX19KQoJaWYgKGV2ZW50ICE9IG51bGwpIHsKCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJfQoJcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBzdWJzX2Ryb3AoZXYsIGRlc3QsIHBpZCwgY2hpbGQpIHsKCXZhciBzcmMgPSBldi5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC90ZXh0Jyk7CgkkLmFqYXgoeyB1cmw6ICJtb3ZlY2hpbGQ/c3JjPSIgKyBzcmMgKyAiJmRzdD0iICsgZGVzdCArICImY2hpbGQ9IiArIGNoaWxkLCBzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCByZXEpIHsKCQlyZWxvYWRfY2hpbGRyZW5zKHBpZCwgbnVsbCk7Cgl9fSkKfQoKZnVuY3Rpb24gZmlsbF9jaGlsZHJlbnModGJsLCBwaWQsIGRhdGEpIHsKCXRibC5pbm5lckhUTUwgPSAiIjsKCWZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCXZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwoJCXJvdy5pZCA9ICJzdWJzcm93XyIgKyBkYXRhW2ldLklkOwoJCQoJCS8vIEZvbGRlciBpY29uCgkJdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKCQl0ZC5jbGFzc0xpc3QuYWRkKCJzdWJzdGFibGVfZm9sZGVyIik7CgkJdGQuaW5uZXJIVE1MID0gIjxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKScgb25jbGljaz0nc3Vic19jbGlja19mb2xkZXIoXCIiICsgZGF0YVtpXS5JZCArICJcIiwgZXZlbnQpJyBkcmFnZ2FibGU9J3RydWUnIG9uZHJvcD0nc3Vic19kcm9wKGV2ZW50LCBcIiIgKyBkYXRhW2ldLklkICsgIlwiLCBcIiIgKyBwaWQgKyAiXCIsIDEpJyBvbmRyYWdlbnRlcj0nY2FuY2VsX3NoaXQoZXZlbnQpJyBvbmRyYWdvdmVyPSdjYW5jZWxfc2hpdChldmVudCknIG9uZHJhZ2xlYXZlPSdjYW5jZWxfc2hpdChldmVudCknIG9uZHJhZ3N0YXJ0PSdvbnRvbmF2X3N0YXJ0X2RyYWcoZXZlbnQsIFwiIiArIGRhdGFbaV0uSWQgKyAiXCIpJz5cdWYxNDc8L2E+IjsKCQlyb3cuYXBwZW5kQ2hpbGQodGQpOwoJCQoJCS8vIE5hbWUKCQl0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CgkJdGQuY2xhc3NMaXN0LmFkZCgic3Vic3RhYmxlX25hbWUiKTsKCQl0ZC5pbm5lckhUTUwgPSAiPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApJyBvbmRyb3A9J3N1YnNfZHJvcChldmVudCwgXCIiICsgZGF0YVtpXS5JZCArICJcIiwgXCIiICsgcGlkICsgIlwiLCAwKScgb25kcmFnZW50ZXI9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnb3Zlcj0nY2FuY2VsX3NoaXQoZXZlbnQpJyBvbmRyYWdsZWF2ZT0nY2FuY2VsX3NoaXQoZXZlbnQpJyBvbmRyYWdzdGFydD0nb250b25hdl9zdGFydF9kcmFnKGV2ZW50LCBcIiIgKyBkYXRhW2ldLklkICsgIlwiKSc+IiArIGRhdGFbaV0uTmFtZSArICI8L2E+IjsKCQlyb3cuYXBwZW5kQ2hpbGQodGQpCgkJCgkJLy8gUHJpb3JpdHkKCQl0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CgkJdGQuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdidXR0b24nIGNsYXNzPSdwcmlvcml0eWJ1dHRvbiBwcmlvcml0eWNsYXNzXyIgKyBkYXRhW2ldLlByaW9yaXR5LnRvVXBwZXJDYXNlKCkgKyAiJyBpZD0nZXByXyIgKyBkYXRhW2ldLklkICsgIicgdmFsdWU9JyIgKyBkYXRhW2ldLlByaW9yaXR5LnRvVXBwZXJDYXNlKCkgKyAiJyBvbmNsaWNrPSdqYXZhc2NyaXB0OmNoYW5nZV9wcmlvcml0eShcIiIgKyBkYXRhW2ldLklkICsgIlwiLCBldmVudCknLz4iOwoJCXJvdy5hcHBlbmRDaGlsZCh0ZCk7CgkJCgkJLy8gTmV3IGNoaWxkIGJ1dHRvbgoJCXRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKCQl0ZC5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2J1dHRvbicgY2xhc3M9J25ld2NoaWxkYnV0dG9uJyB2YWx1ZT0nTicgb25jbGljaz0nYWRkX3N1Yml0ZW0obnVsbCwgXCIiICsgZGF0YVtpXS5JZCArICJcIiwgXCIiICsgcGlkICsgIlwiLCAxKSc+IjsKCQlyb3cuYXBwZW5kQ2hpbGQodGQpOwoJCQoJCS8vIENvbnRlbnRzCgkJdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwoJCXRkLmNsYXNzTGlzdC5hZGQoInN1YnN0YWJsZV9jb250ZW50Iik7CgkJdGQuaW5uZXJIVE1MID0gIjxkaXYgb25jbGljaz0nc2V0c2VsZWN0ZWQoXCIiICsgZGF0YVtpXS5JZCArICJcIiknIG9uZGJsY2xpY2s9J2VkaXRfcm93KFwiIiArIGRhdGFbaV0uSWQgKyAiXCIsIFwiIiArIHBpZCArICJcIiknIG9ubW91c2V1cD0nYWRkX3N1Yml0ZW0oZXZlbnQsIFwiIiArIGRhdGFbaV0uSWQgKyAiXCIsIFwiIiArIHBpZCArICJcIiwgMCknIG9uZHJhZ2VudGVyPSdjYW5jZWxfc2hpdChldmVudCknIG9uZHJhZ292ZXI9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcmFnbGVhdmU9J2NhbmNlbF9zaGl0KGV2ZW50KScgb25kcm9wPSdzdWJzX2Ryb3AoZXZlbnQsIFwiIiArIGRhdGFbaV0uSWQgKyAiXCIsIFwiIiArIHBpZCArICJcIiwgMCknPiIgKyBjaGlsZFJlcHJlc2VudGF0aW9uRnJvbURhdGEoZGF0YVtpXSkgKyAiPC9kaXY+IjsKCQkKCQlpZiAoZGF0YVtpXS5DaGlsZHJlbi5sZW5ndGggPiAwKSB7CgkJCXZhciBzdGJsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKCQkJc3RibC5pZCA9ICJzdWJzXyIgKyBkYXRhW2ldLklkOwoJCQlzdGJsLmNsYXNzTGlzdC5hZGQoInN1YnN0YWJsZSIpOwoJCQlmaWxsX2NoaWxkcmVucyhzdGJsLCBwaWQsIGRhdGFbaV0uQ2hpbGRyZW4pOwoJCQl0ZC5hcHBlbmRDaGlsZChzdGJsKTsKCQkJc3RibC5kaXNwbGF5ID0gImJsb2NrIjsKCQl9CgkJCgkJcm93LmFwcGVuZENoaWxkKHRkKTsKCQkKCQl0YmwuYXBwZW5kQ2hpbGQocm93KTsKCX0KfQoKZnVuY3Rpb24gY2hpbGRSZXByZXNlbnRhdGlvbkZyb21EYXRhKGRhdGEpIHsKCXZhciB0aXRsZSA9IGRhdGEuVGl0bGUgIT0gIiIgPyBkYXRhLlRpdGxlIDogIihlbXB0eSkiOwoJcmV0dXJuICI8Yj4iICsgdGl0bGUgKyAiPC9iPiIgKyBkYXRhLkZvcm1hdHRlZFRleHQ7Cn0KCmZ1bmN0aW9uIHJlbG9hZF9jaGlsZHJlbnMocGlkLCBlZGl0TmFtZSkgewoJdmFyIHRibCA9ICQoIiNzdWJzXyIgKyBwaWQpOwoJdmFyIHRvaGlkZSA9IFtdOwoJJCh0YmwpLmZpbmQoInRyIikuZWFjaChmdW5jdGlvbigpIHsgCgkJdmFyIHAgPSAkKHRoaXMpLmZpbmQoIi5zdWJzdGFibGVfY29udGVudCIpLmZpbmQoInAiKS5nZXQoMCk7CgkJaWYgKChwICE9IG51bGwpICYmIChwLnN0eWxlWyJkaXNwbGF5Il0gPT0gIm5vbmUiKSkgewoJCQl0b2hpZGUucHVzaChnZXRfYWZ0ZXJfdW5kZXJzY29yZSh0aGlzLmlkKSk7CgkJfQoJfSk7CgkkLmFqYXgoe3VybDogImNoaWxkcy5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQocGlkKSwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CgkgICAgdmFyIHRibCA9ICQoIiNzdWJzXyIgKyBwaWQpLmZpcnN0KCkuZ2V0KDApOwoJICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwoJICAgIGNoaWxkcmVuX3RyZWVbcGlkXSA9IGRhdGE7CgkgICAgZmlsbF9jaGlsZHJlbnModGJsLCBwaWQsIGRhdGEpOwoJICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9oaWRlLmxlbmd0aDsgaSsrKSB7CgkgICAgCXN1YnNfY2xpY2tfZm9sZGVyKHRvaGlkZVtpXSwgeyAidGFyZ2V0IjogJCgiI3N1YnNyb3dfIiArIHRvaGlkZVtpXSkuZmluZCgiLnN1YnN0YWJsZV9mb2xkZXIiKS5maW5kKCJhIikuZ2V0KDApIH0pOwoJICAgIH0KCSAgICBpZiAoZWRpdE5hbWUgIT0gbnVsbCkgewoJICAgICAgICBlZGl0X3JvdyhlZGl0TmFtZSwgcGlkKTsKCSAgICB9Cgl9fSk7Cn0KCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICBsb2FkX29udG9uYXYoKTsKICB2YXIgdiA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNwbGl0KCIjIikKICB2YXIgZiA9IG9ubG9hZF9vcGVuX2Z1bmN0aW9uKHYsIDApOwogIGYoKTsKfTsKCmZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7CglyZXR1cm4gbmFtZS5yZXBsYWNlKC8nL2csICJcXCciKTsKfQo=",
	"jquery-ui-custom.js":                 "LyohIGpRdWVyeSBVSSAtIHYxLjEwLjEgLSAyMDEzLTAyLTE2CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLndpZGdldC5qcywganF1ZXJ5LnVpLm1vdXNlLmpzLCBqcXVlcnkudWkucG9zaXRpb24uanMsIGpxdWVyeS51aS5kcmFnZ2FibGUuanMsIGpxdWVyeS51aS5kcm9wcGFibGUuanMsIGpxdWVyeS51aS5yZXNpemFibGUuanMsIGpxdWVyeS51aS5zZWxlY3RhYmxlLmpzLCBqcXVlcnkudWkuc29ydGFibGUuanMsIGpxdWVyeS51aS5hY2NvcmRpb24uanMsIGpxdWVyeS51aS5hdXRvY29tcGxldGUuanMsIGpxdWVyeS51aS5idXR0b24uanMsIGpxdWVyeS51aS5kYXRlcGlja2VyLmpzLCBqcXVlcnkudWkuZGlhbG9nLmpzLCBqcXVlcnkudWkubWVudS5qcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmpzLCBqcXVlcnkudWkuc2xpZGVyLmpzLCBqcXVlcnkudWkuc3Bpbm5lci5qcywganF1ZXJ5LnVpLnRhYnMuanMsIGpxdWVyeS51aS50b29sdGlwLmpzLCBqcXVlcnkudWkuZWZmZWN0LmpzLCBqcXVlcnkudWkuZWZmZWN0LWJsaW5kLmpzLCBqcXVlcnkudWkuZWZmZWN0LWJvdW5jZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1jbGlwLmpzLCBqcXVlcnkudWkuZWZmZWN0LWRyb3AuanMsIGpxdWVyeS51aS5lZmZlY3QtZXhwbG9kZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mYWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWZvbGQuanMsIGpxdWVyeS51aS5lZmZlY3QtaGlnaGxpZ2h0LmpzLCBqcXVlcnkudWkuZWZmZWN0LXB1bHNhdGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2NhbGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2hha2UuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2xpZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtdHJhbnNmZXIuanMKKiBDb3B5cmlnaHQgKGMpIDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBMaWNlbnNlZCBNSVQgKi8KCihmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkodCxuKXt2YXIgcixpLG8sdT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09dT8ocj10LnBhcmVudE5vZGUsaT1yLm5hbWUsIXQuaHJlZnx8IWl8fHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJtYXAiPyExOihvPWUoImltZ1t1c2VtYXA9IyIraSsiXSIpWzBdLCEhbyYmcyhvKSkpOigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3QodSk/IXQuZGlzYWJsZWQ6ImEiPT09dT90LmhyZWZ8fG46bikmJnModCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZS5leHByLmZpbHRlcnMudmlzaWJsZSh0KSYmIWUodCkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5jc3ModGhpcywidmlzaWJpbGl0eSIpPT09ImhpZGRlbiJ9KS5sZW5ndGh9dmFyIG49MCxyPS9edWktaWQtXGQrJC87ZS51aT1lLnVpfHx7fTtpZihlLnVpLnZlcnNpb24pcmV0dXJuO2UuZXh0ZW5kKGUudWkse3ZlcnNpb246IjEuMTAuMSIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LE5VTVBBRF9BREQ6MTA3LE5VTVBBRF9ERUNJTUFMOjExMCxOVU1QQURfRElWSURFOjExMSxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NVUxUSVBMWToxMDYsTlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtfZm9jdXM6ZS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbih0LG4pe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShyKS5mb2N1cygpLG4mJm4uY2FsbChyKX0sdCl9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciB0O3JldHVybiBlLnVpLmllJiYvKHN0YXRpY3xyZWxhdGl2ZSkvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpfHwvYWJzb2x1dGUvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpP3Q9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoZS5jc3ModGhpcywicG9zaXRpb24iKSkmJi8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsIm92ZXJmbG93IikrZS5jc3ModGhpcywib3ZlcmZsb3cteSIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSl9KS5lcSgwKTp0PXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsIm92ZXJmbG93IikrZS5jc3ModGhpcywib3ZlcmZsb3cteSIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSl9KS5lcSgwKSwvZml4ZWQvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpfHwhdC5sZW5ndGg/ZShkb2N1bWVudCk6dH0sekluZGV4OmZ1bmN0aW9uKG4pe2lmKG4hPT10KXJldHVybiB0aGlzLmNzcygiekluZGV4IixuKTtpZih0aGlzLmxlbmd0aCl7dmFyIHI9ZSh0aGlzWzBdKSxpLHM7d2hpbGUoci5sZW5ndGgmJnJbMF0hPT1kb2N1bWVudCl7aT1yLmNzcygicG9zaXRpb24iKTtpZihpPT09ImFic29sdXRlInx8aT09PSJyZWxhdGl2ZSJ8fGk9PT0iZml4ZWQiKXtzPXBhcnNlSW50KHIuY3NzKCJ6SW5kZXgiKSwxMCk7aWYoIWlzTmFOKHMpJiZzIT09MClyZXR1cm4gc31yPXIucGFyZW50KCl9fXJldHVybiAwfSx1bmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD0idWktaWQtIisgKytuKX0pfSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtyLnRlc3QodGhpcy5pZCkmJmUodGhpcykucmVtb3ZlQXR0cigiaWQiKX0pfX0pLGUuZXh0ZW5kKGUuZXhwclsiOiJdLHtkYXRhOmUuZXhwci5jcmVhdGVQc2V1ZG8/ZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISFlLmRhdGEobix0KX19KTpmdW5jdGlvbih0LG4scil7cmV0dXJuISFlLmRhdGEodCxyWzNdKX0sZm9jdXNhYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQsIWlzTmFOKGUuYXR0cih0LCJ0YWJpbmRleCIpKSl9LHRhYmJhYmxlOmZ1bmN0aW9uKHQpe3ZhciBuPWUuYXR0cih0LCJ0YWJpbmRleCIpLHI9aXNOYU4obik7cmV0dXJuKHJ8fG4+PTApJiZpKHQsIXIpfX0pLGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5fHxlLmVhY2goWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gdSh0LG4scixzKXtyZXR1cm4gZS5lYWNoKGksZnVuY3Rpb24oKXtuLT1wYXJzZUZsb2F0KGUuY3NzKHQsInBhZGRpbmciK3RoaXMpKXx8MCxyJiYobi09cGFyc2VGbG9hdChlLmNzcyh0LCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwKSxzJiYobi09cGFyc2VGbG9hdChlLmNzcyh0LCJtYXJnaW4iK3RoaXMpKXx8MCl9KSxufXZhciBpPXI9PT0iV2lkdGgiP1siTGVmdCIsIlJpZ2h0Il06WyJUb3AiLCJCb3R0b20iXSxzPXIudG9Mb3dlckNhc2UoKSxvPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bImlubmVyIityXT1mdW5jdGlvbihuKXtyZXR1cm4gbj09PXQ/b1siaW5uZXIiK3JdLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3Mocyx1KHRoaXMsbikrInB4Iil9KX0sZS5mblsib3V0ZXIiK3JdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHR5cGVvZiB0IT0ibnVtYmVyIj9vWyJvdXRlciIrcl0uY2FsbCh0aGlzLHQpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKHMsdSh0aGlzLHQsITAsbikrInB4Iil9KX19KSxlLmZuLmFkZEJhY2t8fChlLmZuLmFkZEJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKGU9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfSksZSgiPGE+IikuZGF0YSgiYS1iIiwiYSIpLnJlbW92ZURhdGEoImEtYiIpLmRhdGEoImEtYiIpJiYoZS5mbi5yZW1vdmVEYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmNhbGwodGhpcyxlLmNhbWVsQ2FzZShuKSk6dC5jYWxsKHRoaXMpfX0oZS5mbi5yZW1vdmVEYXRhKSksZS51aS5pZT0hIS9tc2llIFtcdy5dKy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLGUuc3VwcG9ydC5zZWxlY3RzdGFydD0ib25zZWxlY3RzdGFydCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmZuLmV4dGVuZCh7ZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpbmQoKGUuc3VwcG9ydC5zZWxlY3RzdGFydD8ic2VsZWN0c3RhcnQiOiJtb3VzZWRvd24iKSsiLnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pfSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0aW9uIil9fSksZS5leHRlbmQoZS51aSx7cGx1Z2luOnthZGQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKGkgaW4gcilzLnBsdWdpbnNbaV09cy5wbHVnaW5zW2ldfHxbXSxzLnBsdWdpbnNbaV0ucHVzaChbbixyW2ldXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9ZS5wbHVnaW5zW3RdO2lmKCFpfHwhZS5lbGVtZW50WzBdLnBhcmVudE5vZGV8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTEpcmV0dXJuO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS5vcHRpb25zW2lbcl1bMF1dJiZpW3JdWzFdLmFwcGx5KGUuZWxlbWVudCxuKX19LGhhc1Njcm9sbDpmdW5jdGlvbih0LG4pe2lmKGUodCkuY3NzKCJvdmVyZmxvdyIpPT09ImhpZGRlbiIpcmV0dXJuITE7dmFyIHI9biYmbj09PSJsZWZ0Ij8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsaT0hMTtyZXR1cm4gdFtyXT4wPyEwOih0W3JdPTEsaT10W3JdPjAsdFtyXT0wLGkpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLGk9ZS5jbGVhbkRhdGE7ZS5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAscjsocj10W25dKSE9bnVsbDtuKyspdHJ5e2UocikudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKHMpe31pKHQpfSxlLndpZGdldD1mdW5jdGlvbih0LG4scil7dmFyIGkscyxvLHUsYT17fSxmPXQuc3BsaXQoIi4iKVswXTt0PXQuc3BsaXQoIi4iKVsxXSxpPWYrIi0iK3Qscnx8KHI9bixuPWUuV2lkZ2V0KSxlLmV4cHJbIjoiXVtpLnRvTG93ZXJDYXNlKCldPWZ1bmN0aW9uKHQpe3JldHVybiEhZS5kYXRhKHQsaSl9LGVbZl09ZVtmXXx8e30scz1lW2ZdW3RdLG89ZVtmXVt0XT1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLl9jcmVhdGVXaWRnZXQpcmV0dXJuIG5ldyBvKGUsdCk7YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGUsdCl9LGUuZXh0ZW5kKG8scyx7dmVyc2lvbjpyLnZlcnNpb24sX3Byb3RvOmUuZXh0ZW5kKHt9LHIpLF9jaGlsZENvbnN0cnVjdG9yczpbXX0pLHU9bmV3IG4sdS5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSx1Lm9wdGlvbnMpLGUuZWFjaChyLGZ1bmN0aW9uKHQscil7aWYoIWUuaXNGdW5jdGlvbihyKSl7YVt0XT1yO3JldHVybn1hW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5wcm90b3R5cGVbdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpPWZ1bmN0aW9uKGUpe3JldHVybiBuLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGUpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdXBlcixuPXRoaXMuX3N1cGVyQXBwbHkscztyZXR1cm4gdGhpcy5fc3VwZXI9ZSx0aGlzLl9zdXBlckFwcGx5PWkscz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdXBlcj10LHRoaXMuX3N1cGVyQXBwbHk9bixzfX0oKX0pLG8ucHJvdG90eXBlPWUud2lkZ2V0LmV4dGVuZCh1LHt3aWRnZXRFdmVudFByZWZpeDpzP3Uud2lkZ2V0RXZlbnRQcmVmaXg6dH0sYSx7Y29uc3RydWN0b3I6byxuYW1lc3BhY2U6Zix3aWRnZXROYW1lOnQsd2lkZ2V0RnVsbE5hbWU6aX0pLHM/KGUuZWFjaChzLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbih0LG4pe3ZhciByPW4ucHJvdG90eXBlO2Uud2lkZ2V0KHIubmFtZXNwYWNlKyIuIityLndpZGdldE5hbWUsbyxuLl9wcm90byl9KSxkZWxldGUgcy5fY2hpbGRDb25zdHJ1Y3RvcnMpOm4uX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gobyksZS53aWRnZXQuYnJpZGdlKHQsbyl9LGUud2lkZ2V0LmV4dGVuZD1mdW5jdGlvbihuKXt2YXIgaT1yLmNhbGwoYXJndW1lbnRzLDEpLHM9MCxvPWkubGVuZ3RoLHUsYTtmb3IoO3M8bztzKyspZm9yKHUgaW4gaVtzXSlhPWlbc11bdV0saVtzXS5oYXNPd25Qcm9wZXJ0eSh1KSYmYSE9PXQmJihlLmlzUGxhaW5PYmplY3QoYSk/blt1XT1lLmlzUGxhaW5PYmplY3Qoblt1XSk/ZS53aWRnZXQuZXh0ZW5kKHt9LG5bdV0sYSk6ZS53aWRnZXQuZXh0ZW5kKHt9LGEpOm5bdV09YSk7cmV0dXJuIG59LGUud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihuLGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHxuO2UuZm5bbl09ZnVuY3Rpb24obyl7dmFyIHU9dHlwZW9mIG89PSJzdHJpbmciLGE9ci5jYWxsKGFyZ3VtZW50cywxKSxmPXRoaXM7cmV0dXJuIG89IXUmJmEubGVuZ3RoP2Uud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFtvXS5jb25jYXQoYSkpOm8sdT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcixpPWUuZGF0YSh0aGlzLHMpO2lmKCFpKXJldHVybiBlLmVycm9yKCJjYW5ub3QgY2FsbCBtZXRob2RzIG9uICIrbisiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiKyJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIrbysiJyIpO2lmKCFlLmlzRnVuY3Rpb24oaVtvXSl8fG8uY2hhckF0KDApPT09Il8iKXJldHVybiBlLmVycm9yKCJubyBzdWNoIG1ldGhvZCAnIitvKyInIGZvciAiK24rIiB3aWRnZXQgaW5zdGFuY2UiKTtyPWlbb10uYXBwbHkoaSxhKTtpZihyIT09aSYmciE9PXQpcmV0dXJuIGY9ciYmci5qcXVlcnk/Zi5wdXNoU3RhY2soci5nZXQoKSk6ciwhMX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLHMpO3Q/dC5vcHRpb24ob3x8e30pLl9pbml0KCk6ZS5kYXRhKHRoaXMscyxuZXcgaShvLHRoaXMpKX0pLGZ9fSxlLldpZGdldD1mdW5jdGlvbigpe30sZS5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzPVtdLGUuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixkZWZhdWx0RWxlbWVudDoiPGRpdj4iLG9wdGlvbnM6e2Rpc2FibGVkOiExLGNyZWF0ZTpudWxsfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKHQscil7cj1lKHJ8fHRoaXMuZGVmYXVsdEVsZW1lbnR8fHRoaXMpWzBdLHRoaXMuZWxlbWVudD1lKHIpLHRoaXMudXVpZD1uKyssdGhpcy5ldmVudE5hbWVzcGFjZT0iLiIrdGhpcy53aWRnZXROYW1lK3RoaXMudXVpZCx0aGlzLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksdCksdGhpcy5iaW5kaW5ncz1lKCksdGhpcy5ob3ZlcmFibGU9ZSgpLHRoaXMuZm9jdXNhYmxlPWUoKSxyIT09dGhpcyYmKGUuZGF0YShyLHRoaXMud2lkZ2V0RnVsbE5hbWUsdGhpcyksdGhpcy5fb24oITAsdGhpcy5lbGVtZW50LHtyZW1vdmU6ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1yJiZ0aGlzLmRlc3Ryb3koKX19KSx0aGlzLmRvY3VtZW50PWUoci5zdHlsZT9yLm93bmVyRG9jdW1lbnQ6ci5kb2N1bWVudHx8ciksdGhpcy53aW5kb3c9ZSh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3fHx0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdykpLHRoaXMuX2NyZWF0ZSgpLHRoaXMuX3RyaWdnZXIoImNyZWF0ZSIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczplLm5vb3AsX2dldENyZWF0ZUV2ZW50RGF0YTplLm5vb3AsX2NyZWF0ZTplLm5vb3AsX2luaXQ6ZS5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95KCksdGhpcy5lbGVtZW50LnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldEZ1bGxOYW1lKS5yZW1vdmVEYXRhKGUuY2FtZWxDYXNlKHRoaXMud2lkZ2V0RnVsbE5hbWUpKSx0aGlzLndpZGdldCgpLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlQ2xhc3ModGhpcy53aWRnZXRGdWxsTmFtZSsiLWRpc2FibGVkICIrInVpLXN0YXRlLWRpc2FibGVkIiksdGhpcy5iaW5kaW5ncy51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSksdGhpcy5ob3ZlcmFibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LF9kZXN0cm95OmUubm9vcCx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxvcHRpb246ZnVuY3Rpb24obixyKXt2YXIgaT1uLHMsbyx1O2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiBlLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZih0eXBlb2Ygbj09InN0cmluZyIpe2k9e30scz1uLnNwbGl0KCIuIiksbj1zLnNoaWZ0KCk7aWYocy5sZW5ndGgpe289aVtuXT1lLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zW25dKTtmb3IodT0wO3U8cy5sZW5ndGgtMTt1Kyspb1tzW3VdXT1vW3NbdV1dfHx7fSxvPW9bc1t1XV07bj1zLnBvcCgpO2lmKHI9PT10KXJldHVybiBvW25dPT09dD9udWxsOm9bbl07b1tuXT1yfWVsc2V7aWYocj09PXQpcmV0dXJuIHRoaXMub3B0aW9uc1tuXT09PXQ/bnVsbDp0aGlzLm9wdGlvbnNbbl07aVtuXT1yfX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhpKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXRoaXMuX3NldE9wdGlvbih0LGVbdF0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LGU9PT0iZGlzYWJsZWQiJiYodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5ob3ZlcmFibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwhMSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsITApfSxfb246ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM9dGhpczt0eXBlb2YgdCE9ImJvb2xlYW4iJiYocj1uLG49dCx0PSExKSxyPyhuPWk9ZShuKSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKG4pKToocj1uLG49dGhpcy5lbGVtZW50LGk9dGhpcy53aWRnZXQoKSksZS5lYWNoKHIsZnVuY3Rpb24ocixvKXtmdW5jdGlvbiB1KCl7aWYoIXQmJihzLm9wdGlvbnMuZGlzYWJsZWQ9PT0hMHx8ZSh0aGlzKS5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSkpcmV0dXJuO3JldHVybih0eXBlb2Ygbz09InN0cmluZyI/c1tvXTpvKS5hcHBseShzLGFyZ3VtZW50cyl9dHlwZW9mIG8hPSJzdHJpbmciJiYodS5ndWlkPW8uZ3VpZD1vLmd1aWR8fHUuZ3VpZHx8ZS5ndWlkKyspO3ZhciBhPXIubWF0Y2goL14oXHcrKVxzKiguKikkLyksZj1hWzFdK3MuZXZlbnROYW1lc3BhY2UsbD1hWzJdO2w/aS5kZWxlZ2F0ZShsLGYsdSk6bi5iaW5kKGYsdSl9KX0sX29mZjpmdW5jdGlvbihlLHQpe3Q9KHR8fCIiKS5zcGxpdCgiICIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZSsiICIpK3RoaXMuZXZlbnROYW1lc3BhY2UsZS51bmJpbmQodCkudW5kZWxlZ2F0ZSh0KX0sX2RlbGF5OmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3JldHVybih0eXBlb2YgZT09InN0cmluZyI/cltlXTplKS5hcHBseShyLGFyZ3VtZW50cyl9dmFyIHI9dGhpcztyZXR1cm4gc2V0VGltZW91dChuLHR8fDApfSxfaG92ZXJhYmxlOmZ1bmN0aW9uKHQpe3RoaXMuaG92ZXJhYmxlPXRoaXMuaG92ZXJhYmxlLmFkZCh0KSx0aGlzLl9vbih0LHttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9fSl9LF9mb2N1c2FibGU6ZnVuY3Rpb24odCl7dGhpcy5mb2N1c2FibGU9dGhpcy5mb2N1c2FibGUuYWRkKHQpLHRoaXMuX29uKHQse2ZvY3VzaW46ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxmb2N1c291dDpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsbixyKXt2YXIgaSxzLG89dGhpcy5vcHRpb25zW3RdO3I9cnx8e30sbj1lLkV2ZW50KG4pLG4udHlwZT0odD09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/dDp0aGlzLndpZGdldEV2ZW50UHJlZml4K3QpLnRvTG93ZXJDYXNlKCksbi50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLHM9bi5vcmlnaW5hbEV2ZW50O2lmKHMpZm9yKGkgaW4gcylpIGluIG58fChuW2ldPXNbaV0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihuLHIpLCEoZS5pc0Z1bmN0aW9uKG8pJiZvLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbbl0uY29uY2F0KHIpKT09PSExfHxuLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LGUuZWFjaCh7c2hvdzoiZmFkZUluIixoaWRlOiJmYWRlT3V0In0sZnVuY3Rpb24odCxuKXtlLldpZGdldC5wcm90b3R5cGVbIl8iK3RdPWZ1bmN0aW9uKHIsaSxzKXt0eXBlb2YgaT09InN0cmluZyImJihpPXtlZmZlY3Q6aX0pO3ZhciBvLHU9aT9pPT09ITB8fHR5cGVvZiBpPT0ibnVtYmVyIj9uOmkuZWZmZWN0fHxuOnQ7aT1pfHx7fSx0eXBlb2YgaT09Im51bWJlciImJihpPXtkdXJhdGlvbjppfSksbz0hZS5pc0VtcHR5T2JqZWN0KGkpLGkuY29tcGxldGU9cyxpLmRlbGF5JiZyLmRlbGF5KGkuZGVsYXkpLG8mJmUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFt1XT9yW3RdKGkpOnUhPT10JiZyW3VdP3JbdV0oaS5kdXJhdGlvbixpLmVhc2luZyxzKTpyLnF1ZXVlKGZ1bmN0aW9uKG4pe2UodGhpcylbdF0oKSxzJiZzLmNhbGwoclswXSksbigpfSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSExO2UoZG9jdW1lbnQpLm1vdXNldXAoZnVuY3Rpb24oKXtuPSExfSksZS53aWRnZXQoInVpLm1vdXNlIix7dmVyc2lvbjoiMS4xMC4xIixvcHRpb25zOntjYW5jZWw6ImlucHV0LHRleHRhcmVhLGJ1dHRvbixzZWxlY3Qsb3B0aW9uIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxlbWVudC5iaW5kKCJtb3VzZWRvd24uIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21vdXNlRG93bihlKX0pLmJpbmQoImNsaWNrLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKG4pe2lmKCEwPT09ZS5kYXRhKG4udGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IikpcmV0dXJuIGUucmVtb3ZlRGF0YShuLnRhcmdldCx0LndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLG4uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITF9KSx0aGlzLnN0YXJ0ZWQ9ITF9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCIuIit0aGlzLndpZGdldE5hbWUpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlJiZlKGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYobilyZXR1cm47dGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKHQpLHRoaXMuX21vdXNlRG93bkV2ZW50PXQ7dmFyIHI9dGhpcyxpPXQud2hpY2g9PT0xLHM9dHlwZW9mIHRoaXMub3B0aW9ucy5jYW5jZWw9PSJzdHJpbmciJiZ0LnRhcmdldC5ub2RlTmFtZT9lKHQudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtpZighaXx8c3x8IXRoaXMuX21vdXNlQ2FwdHVyZSh0KSlyZXR1cm4hMDt0aGlzLm1vdXNlRGVsYXlNZXQ9IXRoaXMub3B0aW9ucy5kZWxheSx0aGlzLm1vdXNlRGVsYXlNZXR8fCh0aGlzLl9tb3VzZURlbGF5VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3IubW91c2VEZWxheU1ldD0hMH0sdGhpcy5vcHRpb25zLmRlbGF5KSk7aWYodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSl7dGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodCkhPT0hMTtpZighdGhpcy5fbW91c2VTdGFydGVkKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksITB9cmV0dXJuITA9PT1lLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSYmZS5yZW1vdmVEYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX21vdXNlTW92ZShlKX0sdGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLl9tb3VzZVVwKGUpfSxlKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0LnByZXZlbnREZWZhdWx0KCksbj0hMCwhMH0sX21vdXNlTW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw5KSYmIXQuYnV0dG9uP3RoaXMuX21vdXNlVXAodCk6dGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIGUoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEsdC50YXJnZXQ9PT10aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQmJmUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIsITApLHRoaXMuX21vdXNlU3RvcCh0KSksITF9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC1lLnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS1lLnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm5bcGFyc2VGbG9hdChlWzBdKSoobC50ZXN0KGVbMF0pP3QvMTAwOjEpLHBhcnNlRmxvYXQoZVsxXSkqKGwudGVzdChlWzFdKT9uLzEwMDoxKV19ZnVuY3Rpb24gcCh0LG4pe3JldHVybiBwYXJzZUludChlLmNzcyh0LG4pLDEwKXx8MH1mdW5jdGlvbiBkKHQpe3ZhciBuPXRbMF07cmV0dXJuIG4ubm9kZVR5cGU9PT05P3t3aWR0aDp0LndpZHRoKCksaGVpZ2h0OnQuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6MCxsZWZ0OjB9fTplLmlzV2luZG93KG4pP3t3aWR0aDp0LndpZHRoKCksaGVpZ2h0OnQuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6dC5zY3JvbGxUb3AoKSxsZWZ0OnQuc2Nyb2xsTGVmdCgpfX06bi5wcmV2ZW50RGVmYXVsdD97d2lkdGg6MCxoZWlnaHQ6MCxvZmZzZXQ6e3RvcDpuLnBhZ2VZLGxlZnQ6bi5wYWdlWH19Ont3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLG9mZnNldDp0Lm9mZnNldCgpfX1lLnVpPWUudWl8fHt9O3ZhciBuLHI9TWF0aC5tYXgsaT1NYXRoLmFicyxzPU1hdGgucm91bmQsbz0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxhPS9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLGY9L15cdysvLGw9LyUkLyxjPWUuZm4ucG9zaXRpb247ZS5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZihuIT09dClyZXR1cm4gbjt2YXIgcixpLHM9ZSgiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jazt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDoxMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+Iiksbz1zLmNoaWxkcmVuKClbMF07cmV0dXJuIGUoImJvZHkiKS5hcHBlbmQocykscj1vLm9mZnNldFdpZHRoLHMuY3NzKCJvdmVyZmxvdyIsInNjcm9sbCIpLGk9by5vZmZzZXRXaWR0aCxyPT09aSYmKGk9c1swXS5jbGllbnRXaWR0aCkscy5yZW1vdmUoKSxuPXItaX0sZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbih0KXt2YXIgbj10LmlzV2luZG93PyIiOnQuZWxlbWVudC5jc3MoIm92ZXJmbG93LXgiKSxyPXQuaXNXaW5kb3c/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLGk9bj09PSJzY3JvbGwifHxuPT09ImF1dG8iJiZ0LndpZHRoPHQuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxzPXI9PT0ic2Nyb2xsInx8cj09PSJhdXRvIiYmdC5oZWlnaHQ8dC5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtyZXR1cm57d2lkdGg6aT9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6cz9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24odCl7dmFyIG49ZSh0fHx3aW5kb3cpLHI9ZS5pc1dpbmRvdyhuWzBdKTtyZXR1cm57ZWxlbWVudDpuLGlzV2luZG93OnIsb2Zmc2V0Om4ub2Zmc2V0KCl8fHtsZWZ0OjAsdG9wOjB9LHNjcm9sbExlZnQ6bi5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOm4uc2Nyb2xsVG9wKCksd2lkdGg6cj9uLndpZHRoKCk6bi5vdXRlcldpZHRoKCksaGVpZ2h0OnI/bi5oZWlnaHQoKTpuLm91dGVySGVpZ2h0KCl9fX0sZS5mbi5wb3NpdGlvbj1mdW5jdGlvbih0KXtpZighdHx8IXQub2YpcmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Q9ZS5leHRlbmQoe30sdCk7dmFyIG4sbCx2LG0sZyx5LGI9ZSh0Lm9mKSx3PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyh0LndpdGhpbiksRT1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8odyksUz0odC5jb2xsaXNpb258fCJmbGlwIikuc3BsaXQoIiAiKSx4PXt9O3JldHVybiB5PWQoYiksYlswXS5wcmV2ZW50RGVmYXVsdCYmKHQuYXQ9ImxlZnQgdG9wIiksbD15LndpZHRoLHY9eS5oZWlnaHQsbT15Lm9mZnNldCxnPWUuZXh0ZW5kKHt9LG0pLGUuZWFjaChbIm15IiwiYXQiXSxmdW5jdGlvbigpe3ZhciBlPSh0W3RoaXNdfHwiIikuc3BsaXQoIiAiKSxuLHI7ZS5sZW5ndGg9PT0xJiYoZT1vLnRlc3QoZVswXSk/ZS5jb25jYXQoWyJjZW50ZXIiXSk6dS50ZXN0KGVbMF0pP1siY2VudGVyIl0uY29uY2F0KGUpOlsiY2VudGVyIiwiY2VudGVyIl0pLGVbMF09by50ZXN0KGVbMF0pP2VbMF06ImNlbnRlciIsZVsxXT11LnRlc3QoZVsxXSk/ZVsxXToiY2VudGVyIixuPWEuZXhlYyhlWzBdKSxyPWEuZXhlYyhlWzFdKSx4W3RoaXNdPVtuP25bMF06MCxyP3JbMF06MF0sdFt0aGlzXT1bZi5leGVjKGVbMF0pWzBdLGYuZXhlYyhlWzFdKVswXV19KSxTLmxlbmd0aD09PTEmJihTWzFdPVNbMF0pLHQuYXRbMF09PT0icmlnaHQiP2cubGVmdCs9bDp0LmF0WzBdPT09ImNlbnRlciImJihnLmxlZnQrPWwvMiksdC5hdFsxXT09PSJib3R0b20iP2cudG9wKz12OnQuYXRbMV09PT0iY2VudGVyIiYmKGcudG9wKz12LzIpLG49aCh4LmF0LGwsdiksZy5sZWZ0Kz1uWzBdLGcudG9wKz1uWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBvLHUsYT1lKHRoaXMpLGY9YS5vdXRlcldpZHRoKCksYz1hLm91dGVySGVpZ2h0KCksZD1wKHRoaXMsIm1hcmdpbkxlZnQiKSx5PXAodGhpcywibWFyZ2luVG9wIiksVD1mK2QrcCh0aGlzLCJtYXJnaW5SaWdodCIpK0Uud2lkdGgsTj1jK3krcCh0aGlzLCJtYXJnaW5Cb3R0b20iKStFLmhlaWdodCxDPWUuZXh0ZW5kKHt9LGcpLGs9aCh4Lm15LGEub3V0ZXJXaWR0aCgpLGEub3V0ZXJIZWlnaHQoKSk7dC5teVswXT09PSJyaWdodCI/Qy5sZWZ0LT1mOnQubXlbMF09PT0iY2VudGVyIiYmKEMubGVmdC09Zi8yKSx0Lm15WzFdPT09ImJvdHRvbSI/Qy50b3AtPWM6dC5teVsxXT09PSJjZW50ZXIiJiYoQy50b3AtPWMvMiksQy5sZWZ0Kz1rWzBdLEMudG9wKz1rWzFdLGUuc3VwcG9ydC5vZmZzZXRGcmFjdGlvbnN8fChDLmxlZnQ9cyhDLmxlZnQpLEMudG9wPXMoQy50b3ApKSxvPXttYXJnaW5MZWZ0OmQsbWFyZ2luVG9wOnl9LGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihyLGkpe2UudWkucG9zaXRpb25bU1tyXV0mJmUudWkucG9zaXRpb25bU1tyXV1baV0oQyx7dGFyZ2V0V2lkdGg6bCx0YXJnZXRIZWlnaHQ6dixlbGVtV2lkdGg6ZixlbGVtSGVpZ2h0OmMsY29sbGlzaW9uUG9zaXRpb246byxjb2xsaXNpb25XaWR0aDpULGNvbGxpc2lvbkhlaWdodDpOLG9mZnNldDpbblswXStrWzBdLG5bMV0ra1sxXV0sbXk6dC5teSxhdDp0LmF0LHdpdGhpbjp3LGVsZW06YX0pfSksdC51c2luZyYmKHU9ZnVuY3Rpb24oZSl7dmFyIG49bS5sZWZ0LUMubGVmdCxzPW4rbC1mLG89bS50b3AtQy50b3AsdT1vK3YtYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6YixsZWZ0Om0ubGVmdCx0b3A6bS50b3Asd2lkdGg6bCxoZWlnaHQ6dn0sZWxlbWVudDp7ZWxlbWVudDphLGxlZnQ6Qy5sZWZ0LHRvcDpDLnRvcCx3aWR0aDpmLGhlaWdodDpjfSxob3Jpem9udGFsOnM8MD8ibGVmdCI6bj4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6dTwwPyJ0b3AiOm8+MD8iYm90dG9tIjoibWlkZGxlIn07bDxmJiZpKG4rcyk8bCYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksdjxjJiZpKG8rdSk8diYmKGgudmVydGljYWw9Im1pZGRsZSIpLHIoaShuKSxpKHMpKT5yKGkobyksaSh1KSk/aC5pbXBvcnRhbnQ9Imhvcml6b250YWwiOmguaW1wb3J0YW50PSJ2ZXJ0aWNhbCIsdC51c2luZy5jYWxsKHRoaXMsZSxoKX0pLGEub2Zmc2V0KGUuZXh0ZW5kKEMse3VzaW5nOnV9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC53aXRoaW4saT1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LHM9bi53aWR0aCxvPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1pLW8sYT1vK3QuY29sbGlzaW9uV2lkdGgtcy1pLGY7dC5jb2xsaXNpb25XaWR0aD5zP3U+MCYmYTw9MD8oZj1lLmxlZnQrdSt0LmNvbGxpc2lvbldpZHRoLXMtaSxlLmxlZnQrPXUtZik6YT4wJiZ1PD0wP2UubGVmdD1pOnU+YT9lLmxlZnQ9aStzLXQuY29sbGlzaW9uV2lkdGg6ZS5sZWZ0PWk6dT4wP2UubGVmdCs9dTphPjA/ZS5sZWZ0LT1hOmUubGVmdD1yKGUubGVmdC1vLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQud2l0aGluLGk9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3Ascz10LndpdGhpbi5oZWlnaHQsbz1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWktbyxhPW8rdC5jb2xsaXNpb25IZWlnaHQtcy1pLGY7dC5jb2xsaXNpb25IZWlnaHQ+cz91PjAmJmE8PTA/KGY9ZS50b3ArdSt0LmNvbGxpc2lvbkhlaWdodC1zLWksZS50b3ArPXUtZik6YT4wJiZ1PD0wP2UudG9wPWk6dT5hP2UudG9wPWkrcy10LmNvbGxpc2lvbkhlaWdodDplLnRvcD1pOnU+MD9lLnRvcCs9dTphPjA/ZS50b3AtPWE6ZS50b3A9cihlLnRvcC1vLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHM9bi53aWR0aCxvPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsdT1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGE9dS1vLGY9dSt0LmNvbGxpc2lvbldpZHRoLXMtbyxsPXQubXlbMF09PT0ibGVmdCI/LXQuZWxlbVdpZHRoOnQubXlbMF09PT0icmlnaHQiP3QuZWxlbVdpZHRoOjAsYz10LmF0WzBdPT09ImxlZnQiP3QudGFyZ2V0V2lkdGg6dC5hdFswXT09PSJyaWdodCI/LXQudGFyZ2V0V2lkdGg6MCxoPS0yKnQub2Zmc2V0WzBdLHAsZDtpZihhPDApe3A9ZS5sZWZ0K2wrYytoK3QuY29sbGlzaW9uV2lkdGgtcy1yO2lmKHA8MHx8cDxpKGEpKWUubGVmdCs9bCtjK2h9ZWxzZSBpZihmPjApe2Q9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtsK2MraC1vO2lmKGQ+MHx8aShkKTxmKWUubGVmdCs9bCtjK2h9fSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxzPW4uaGVpZ2h0LG89bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsdT1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxhPXUtbyxmPXUrdC5jb2xsaXNpb25IZWlnaHQtcy1vLGw9dC5teVsxXT09PSJ0b3AiLGM9bD8tdC5lbGVtSGVpZ2h0OnQubXlbMV09PT0iYm90dG9tIj90LmVsZW1IZWlnaHQ6MCxoPXQuYXRbMV09PT0idG9wIj90LnRhcmdldEhlaWdodDp0LmF0WzFdPT09ImJvdHRvbSI/LXQudGFyZ2V0SGVpZ2h0OjAscD0tMip0Lm9mZnNldFsxXSxkLHY7YTwwPyh2PWUudG9wK2MraCtwK3QuY29sbGlzaW9uSGVpZ2h0LXMtcixlLnRvcCtjK2grcD5hJiYodjwwfHx2PGkoYSkpJiYoZS50b3ArPWMraCtwKSk6Zj4wJiYoZD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCtjK2grcC1vLGUudG9wK2MraCtwPmYmJihkPjB8fGkoZCk8ZikmJihlLnRvcCs9YytoK3ApKX19LGZsaXBmaXQ6e2xlZnQ6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvcDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oKXt2YXIgdCxuLHIsaSxzLG89ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvPyJkaXYiOiJib2R5Iikscj17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxvJiZlLmV4dGVuZChyLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IocyBpbiByKXQuc3R5bGVbc109cltzXTt0LmFwcGVuZENoaWxkKHUpLG49b3x8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4uaW5zZXJ0QmVmb3JlKHQsbi5maXJzdENoaWxkKSx1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNzQzMjIyMnB4OyIsaT1lKHUpLm9mZnNldCgpLmxlZnQsZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucz1pPjEwJiZpPDExLHQuaW5uZXJIVE1MPSIiLG4ucmVtb3ZlQ2hpbGQodCl9KCl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTAuMSIsd2lkZ2V0RXZlbnRQcmVmaXg6ImRyYWciLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZToiZGVmYXVsdCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6ImJvdGgiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExLGRyYWc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5oZWxwZXI9PT0ib3JpZ2luYWwiJiYhL14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSkmJih0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5vcHRpb25zLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlIiksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlIHVpLWRyYWdnYWJsZS1kcmFnZ2luZyB1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyfHxuLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KGUobi5pZnJhbWVGaXg9PT0hMD8iaWZyYW1lIjpuLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbigpe2UoIjxkaXYgY2xhc3M9J3VpLWRyYWdnYWJsZS1pZnJhbWVGaXgnIHN0eWxlPSdiYWNrZ3JvdW5kOiAjZmZmOyc+PC9kaXY+IikuY3NzKHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub2Zmc2V0SGVpZ2h0KyJweCIscG9zaXRpb246ImFic29sdXRlIixvcGFjaXR5OiIwLjAwMSIsekluZGV4OjFlM30pLmNzcyhlKHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpfSksITApOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIodCksdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmKGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGUuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDp0LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOnQucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksbi5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihuLmN1cnNvckF0KSxuLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0KT09PSExPyh0aGlzLl9jbGVhcigpLCExKToodGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuX21vdXNlRHJhZyh0LCEwKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0YXJ0KHRoaXMsdCksITApfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsbil7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIik7aWYoIW4pe3ZhciByPXRoaXMuX3VpSGFzaCgpO2lmKHRoaXMuX3RyaWdnZXIoImRyYWciLHQscik9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1yLnBvc2l0aW9ufWlmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT09IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiO3JldHVybiBlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuLHI9dGhpcyxpPSExLHM9ITE7ZS51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKHM9ZS51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLHQpKSx0aGlzLmRyb3BwZWQmJihzPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLG49dGhpcy5lbGVtZW50WzBdO3doaWxlKG4mJihuPW4ucGFyZW50Tm9kZSkpbj09PWRvY3VtZW50JiYoaT0hMCk7cmV0dXJuIWkmJnRoaXMub3B0aW9ucy5oZWxwZXI9PT0ib3JpZ2luYWwiPyExOih0aGlzLm9wdGlvbnMucmV2ZXJ0PT09ImludmFsaWQiJiYhc3x8dGhpcy5vcHRpb25zLnJldmVydD09PSJ2YWxpZCImJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtyLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZyLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMSl9LF9tb3VzZVVwOmZ1bmN0aW9uKHQpe3JldHVybiBlKCJkaXYudWktZHJhZ2dhYmxlLWlmcmFtZUZpeCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXt2YXIgbj0hdGhpcy5vcHRpb25zLmhhbmRsZXx8IWUodGhpcy5vcHRpb25zLmhhbmRsZSx0aGlzLmVsZW1lbnQpLmxlbmd0aD8hMDohMTtyZXR1cm4gZSh0aGlzLm9wdGlvbnMuaGFuZGxlLHRoaXMuZWxlbWVudCkuZmluZCgiKiIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PXQudGFyZ2V0JiYobj0hMCl9KSxufSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3RdKSk6bi5oZWxwZXI9PT0iY2xvbmUiP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIik6dGhpcy5lbGVtZW50O3JldHVybiByLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fHIuYXBwZW5kVG8obi5hcHBlbmRUbz09PSJwYXJlbnQiP3RoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlOm4uYXBwZW5kVG8pLHJbMF0hPT10aGlzLmVsZW1lbnRbMF0mJiEvKGZpeGVkfGFic29sdXRlKS8udGVzdChyLmNzcygicG9zaXRpb24iKSkmJnIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIikscn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24odCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD10LnNwbGl0KCIgIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksImxlZnQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dC5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10LnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXQuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09PSJhYnNvbHV0ZSImJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKTtpZih0aGlzLm9mZnNldFBhcmVudFswXT09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PSJodG1sIiYmZS51aS5pZSl0PXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT09InJlbGF0aXZlIil7dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7cmV0dXJue3RvcDplLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6ZS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luVG9wIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMub3B0aW9ucztpLmNvbnRhaW5tZW50PT09InBhcmVudCImJihpLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpO2lmKGkuY29udGFpbm1lbnQ9PT0iZG9jdW1lbnQifHxpLmNvbnRhaW5tZW50PT09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1baS5jb250YWlubWVudD09PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsaS5jb250YWlubWVudD09PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsKGkuY29udGFpbm1lbnQ9PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKSkrZShpLmNvbnRhaW5tZW50PT09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoaS5jb250YWlubWVudD09PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCkpKyhlKGkuY29udGFpbm1lbnQ9PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdO2lmKCEvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3QoaS5jb250YWlubWVudCkmJmkuY29udGFpbm1lbnQuY29uc3RydWN0b3IhPT1BcnJheSl7bj1lKGkuY29udGFpbm1lbnQpLHI9blswXTtpZighcilyZXR1cm47dD1lKHIpLmNzcygib3ZlcmZsb3ciKSE9PSJoaWRkZW4iLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChlKHIpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLCh0P01hdGgubWF4KHIuc2Nyb2xsV2lkdGgsci5vZmZzZXRXaWR0aCk6ci5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGUocikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwodD9NYXRoLm1heChyLnNjcm9sbEhlaWdodCxyLm9mZnNldEhlaWdodCk6ci5vZmZzZXRIZWlnaHQpLShwYXJzZUludChlKHIpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj1ufWVsc2UgaS5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09PUFycmF5JiYodGhpcy5jb250YWlubWVudD1pLmNvbnRhaW5tZW50KX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09PSJhYnNvbHV0ZSI/MTotMSxpPXRoaXMuY3NzUG9zaXRpb24hPT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LHM9LyhodG1sfGJvZHkpL2kudGVzdChpWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6cz8wOmkuc2Nyb2xsVG9wKCkpKnIsbGVmdDpuLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpyK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnItKHRoaXMuY3NzUG9zaXRpb249PT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6cz8wOmkuc2Nyb2xsTGVmdCgpKSpyfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG4scixpLHMsbz10aGlzLm9wdGlvbnMsdT10aGlzLmNzc1Bvc2l0aW9uIT09ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxhPS8oaHRtbHxib2R5KS9pLnRlc3QodVswXS50YWdOYW1lKSxmPXQucGFnZVgsbD10LnBhZ2VZO3JldHVybiB0aGlzLm9yaWdpbmFsUG9zaXRpb24mJih0aGlzLmNvbnRhaW5tZW50JiYodGhpcy5yZWxhdGl2ZV9jb250YWluZXI/KHI9dGhpcy5yZWxhdGl2ZV9jb250YWluZXIub2Zmc2V0KCksbj1bdGhpcy5jb250YWlubWVudFswXStyLmxlZnQsdGhpcy5jb250YWlubWVudFsxXStyLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK3IubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK3IudG9wXSk6bj10aGlzLmNvbnRhaW5tZW50LHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDxuWzBdJiYoZj1uWzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPG5bMV0mJihsPW5bMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSx0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+blsyXSYmKGY9blsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5uWzNdJiYobD1uWzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLG8uZ3JpZCYmKGk9by5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChsLXRoaXMub3JpZ2luYWxQYWdlWSkvby5ncmlkWzFdKSpvLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZLGw9bj9pLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49blsxXXx8aS10aGlzLm9mZnNldC5jbGljay50b3A+blszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1uWzFdP2ktby5ncmlkWzFdOmkrby5ncmlkWzFdOmkscz1vLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGYtdGhpcy5vcmlnaW5hbFBhZ2VYKS9vLmdyaWRbMF0pKm8uZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVgsZj1uP3MtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49blswXXx8cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pm5bMl0/czpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PW5bMF0/cy1vLmdyaWRbMF06cytvLmdyaWRbMF06cykpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTphPzA6dS5zY3JvbGxUb3AoKSksbGVmdDpmLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsodGhpcy5jc3NQb3NpdGlvbj09PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTphPzA6dS5zY3JvbGxMZWZ0KCkpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdIT09dGhpcy5lbGVtZW50WzBdJiYhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxuLHIpe3JldHVybiByPXJ8fHRoaXMuX3VpSGFzaCgpLGUudWkucGx1Z2luLmNhbGwodGhpcyx0LFtuLHJdKSx0PT09ImRyYWciJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSksZS5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmNhbGwodGhpcyx0LG4scil9LHBsdWdpbnM6e30sX3VpSGFzaDpmdW5jdGlvbigpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJjb25uZWN0VG9Tb3J0YWJsZSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSxpPXIub3B0aW9ucyxzPWUuZXh0ZW5kKHt9LG4se2l0ZW06ci5lbGVtZW50fSk7ci5zb3J0YWJsZXM9W10sZShpLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZS5kYXRhKHRoaXMsInVpLXNvcnRhYmxlIik7biYmIW4ub3B0aW9ucy5kaXNhYmxlZCYmKHIuc29ydGFibGVzLnB1c2goe2luc3RhbmNlOm4sc2hvdWxkUmV2ZXJ0Om4ub3B0aW9ucy5yZXZlcnR9KSxuLnJlZnJlc2hQb3NpdGlvbnMoKSxuLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCxzKSl9KX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksaT1lLmV4dGVuZCh7fSxuLHtpdGVtOnIuZWxlbWVudH0pO2UuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2UuaXNPdmVyPyh0aGlzLmluc3RhbmNlLmlzT3Zlcj0wLHIuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5zaG91bGRSZXZlcnQmJih0aGlzLmluc3RhbmNlLm9wdGlvbnMucmV2ZXJ0PSEwKSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AodCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcixyLm9wdGlvbnMuaGVscGVyPT09Im9yaWdpbmFsIiYmdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5jc3Moe3RvcDoiYXV0byIsbGVmdDoiYXV0byJ9KSk6KHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LGkpKX0pfSxkcmFnOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSxpPXRoaXM7ZS5lYWNoKHIuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIHM9ITEsbz10aGlzO3RoaXMuaW5zdGFuY2UucG9zaXRpb25BYnM9ci5wb3NpdGlvbkFicyx0aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zPXIuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2s9ci5vZmZzZXQuY2xpY2ssdGhpcy5pbnN0YW5jZS5faW50ZXJzZWN0c1dpdGgodGhpcy5pbnN0YW5jZS5jb250YWluZXJDYWNoZSkmJihzPSEwLGUuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPXIucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1yLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPXIub2Zmc2V0LmNsaWNrLHRoaXMhPT1vJiZ0aGlzLmluc3RhbmNlLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmluc3RhbmNlLmNvbnRhaW5lckNhY2hlKSYmZS5jb250YWlucyhvLmluc3RhbmNlLmVsZW1lbnRbMF0sdGhpcy5pbnN0YW5jZS5lbGVtZW50WzBdKSYmKHM9ITEpLHN9KSkscz8odGhpcy5pbnN0YW5jZS5pc092ZXJ8fCh0aGlzLmluc3RhbmNlLmlzT3Zlcj0xLHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW09ZShpKS5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikuYXBwZW5kVG8odGhpcy5pbnN0YW5jZS5lbGVtZW50KS5kYXRhKCJ1aS1zb3J0YWJsZS1pdGVtIiwhMCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcix0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uaGVscGVyWzBdfSx0LnRhcmdldD10aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtWzBdLHRoaXMuaW5zdGFuY2UuX21vdXNlQ2FwdHVyZSh0LCEwKSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0YXJ0KHQsITAsITApLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrLnRvcD1yLm9mZnNldC5jbGljay50b3AsdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2subGVmdD1yLm9mZnNldC5jbGljay5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LT1yLm9mZnNldC5wYXJlbnQubGVmdC10aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdCx0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQudG9wLT1yLm9mZnNldC5wYXJlbnQudG9wLXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3Asci5fdHJpZ2dlcigidG9Tb3J0YWJsZSIsdCksci5kcm9wcGVkPXRoaXMuaW5zdGFuY2UuZWxlbWVudCxyLmN1cnJlbnRJdGVtPXIuZWxlbWVudCx0aGlzLmluc3RhbmNlLmZyb21PdXRzaWRlPXIpLHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0mJnRoaXMuaW5zdGFuY2UuX21vdXNlRHJhZyh0KSk6dGhpcy5pbnN0YW5jZS5pc092ZXImJih0aGlzLmluc3RhbmNlLmlzT3Zlcj0wLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0aGlzLmluc3RhbmNlLm9wdGlvbnMucmV2ZXJ0PSExLHRoaXMuaW5zdGFuY2UuX3RyaWdnZXIoIm91dCIsdCx0aGlzLmluc3RhbmNlLl91aUhhc2godGhpcy5pbnN0YW5jZSkpLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcCh0LCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0ucmVtb3ZlKCksdGhpcy5pbnN0YW5jZS5wbGFjZWhvbGRlciYmdGhpcy5pbnN0YW5jZS5wbGFjZWhvbGRlci5yZW1vdmUoKSxyLl90cmlnZ2VyKCJmcm9tU29ydGFibGUiLHQpLHIuZHJvcHBlZD0hMSl9KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImN1cnNvciIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSgiYm9keSIpLG49ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO3QuY3NzKCJjdXJzb3IiKSYmKG4uX2N1cnNvcj10LmNzcygiY3Vyc29yIikpLHQuY3NzKCJjdXJzb3IiLG4uY3Vyc29yKX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczt0Ll9jdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsdC5fY3Vyc29yKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsIm9wYWNpdHkiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUobi5oZWxwZXIpLGk9ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO3IuY3NzKCJvcGFjaXR5IikmJihpLl9vcGFjaXR5PXIuY3NzKCJvcGFjaXR5IikpLHIuY3NzKCJvcGFjaXR5IixpLm9wYWNpdHkpfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO3IuX29wYWNpdHkmJmUobi5oZWxwZXIpLmNzcygib3BhY2l0eSIsci5fb3BhY2l0eSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzY3JvbGwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIik7dC5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmdC5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9PSJIVE1MIiYmKHQub3ZlcmZsb3dPZmZzZXQ9dC5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQpe3ZhciBuPWUodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikscj1uLm9wdGlvbnMsaT0hMTtpZihuLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiZuLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT09IkhUTUwiKXtpZighci5heGlzfHxyLmF4aXMhPT0ieCIpbi5vdmVyZmxvd09mZnNldC50b3Arbi5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LXQucGFnZVk8ci5zY3JvbGxTZW5zaXRpdml0eT9uLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9aT1uLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Arci5zY3JvbGxTcGVlZDp0LnBhZ2VZLW4ub3ZlcmZsb3dPZmZzZXQudG9wPHIuc2Nyb2xsU2Vuc2l0aXZpdHkmJihuLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9aT1uLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Atci5zY3JvbGxTcGVlZCk7aWYoIXIuYXhpc3x8ci5heGlzIT09InkiKW4ub3ZlcmZsb3dPZmZzZXQubGVmdCtuLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPHIuc2Nyb2xsU2Vuc2l0aXZpdHk/bi5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1pPW4uc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrci5zY3JvbGxTcGVlZDp0LnBhZ2VYLW4ub3ZlcmZsb3dPZmZzZXQubGVmdDxyLnNjcm9sbFNlbnNpdGl2aXR5JiYobi5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1pPW4uc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtci5zY3JvbGxTcGVlZCl9ZWxzZXtpZighci5heGlzfHxyLmF4aXMhPT0ieCIpdC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxyLnNjcm9sbFNlbnNpdGl2aXR5P2k9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLXIuc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8ci5zY3JvbGxTZW5zaXRpdml0eSYmKGk9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK3Iuc2Nyb2xsU3BlZWQpKTtpZighci5heGlzfHxyLmF4aXMhPT0ieSIpdC5wYWdlWC1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8ci5zY3JvbGxTZW5zaXRpdml0eT9pPWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLXIuc2Nyb2xsU3BlZWQpOmUod2luZG93KS53aWR0aCgpLSh0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSk8ci5zY3JvbGxTZW5zaXRpdml0eSYmKGk9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrci5zY3JvbGxTcGVlZCkpfWkhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFyLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKG4sdCl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzbmFwIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLG49dC5vcHRpb25zO3Quc25hcEVsZW1lbnRzPVtdLGUobi5zbmFwLmNvbnN0cnVjdG9yIT09U3RyaW5nP24uc25hcC5pdGVtc3x8IjpkYXRhKHVpLWRyYWdnYWJsZSkiOm4uc25hcCkuZWFjaChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj1uLm9mZnNldCgpO3RoaXMhPT10LmVsZW1lbnRbMF0mJnQuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6bi5vdXRlckhlaWdodCgpLHRvcDpyLnRvcCxsZWZ0OnIubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcixpLHMsbyx1LGEsZixsLGMsaCxwPWUodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksZD1wLm9wdGlvbnMsdj1kLnNuYXBUb2xlcmFuY2UsbT1uLm9mZnNldC5sZWZ0LGc9bStwLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHk9bi5vZmZzZXQudG9wLGI9eStwLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoYz1wLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtjPj0wO2MtLSl7dT1wLnNuYXBFbGVtZW50c1tjXS5sZWZ0LGE9dStwLnNuYXBFbGVtZW50c1tjXS53aWR0aCxmPXAuc25hcEVsZW1lbnRzW2NdLnRvcCxsPWYrcC5zbmFwRWxlbWVudHNbY10uaGVpZ2h0O2lmKCEodS12PG0mJm08YSt2JiZmLXY8eSYmeTxsK3Z8fHUtdjxtJiZtPGErdiYmZi12PGImJmI8bCt2fHx1LXY8ZyYmZzxhK3YmJmYtdjx5JiZ5PGwrdnx8dS12PGcmJmc8YSt2JiZmLXY8YiYmYjxsK3YpKXtwLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmcC5vcHRpb25zLnNuYXAucmVsZWFzZSYmcC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHAuZWxlbWVudCx0LGUuZXh0ZW5kKHAuX3VpSGFzaCgpLHtzbmFwSXRlbTpwLnNuYXBFbGVtZW50c1tjXS5pdGVtfSkpLHAuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWQuc25hcE1vZGUhPT0iaW5uZXIiJiYocj1NYXRoLmFicyhmLWIpPD12LGk9TWF0aC5hYnMobC15KTw9dixzPU1hdGguYWJzKHUtZyk8PXYsbz1NYXRoLmFicyhhLW0pPD12LHImJihuLnBvc2l0aW9uLnRvcD1wLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6Zi1wLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3AtcC5tYXJnaW5zLnRvcCksaSYmKG4ucG9zaXRpb24udG9wPXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpsLGxlZnQ6MH0pLnRvcC1wLm1hcmdpbnMudG9wKSxzJiYobi5wb3NpdGlvbi5sZWZ0PXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6dS1wLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1wLm1hcmdpbnMubGVmdCksbyYmKG4ucG9zaXRpb24ubGVmdD1wLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmF9KS5sZWZ0LXAubWFyZ2lucy5sZWZ0KSksaD1yfHxpfHxzfHxvLGQuc25hcE1vZGUhPT0ib3V0ZXIiJiYocj1NYXRoLmFicyhmLXkpPD12LGk9TWF0aC5hYnMobC1iKTw9dixzPU1hdGguYWJzKHUtbSk8PXYsbz1NYXRoLmFicyhhLWcpPD12LHImJihuLnBvc2l0aW9uLnRvcD1wLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZixsZWZ0OjB9KS50b3AtcC5tYXJnaW5zLnRvcCksaSYmKG4ucG9zaXRpb24udG9wPXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpsLXAuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1wLm1hcmdpbnMudG9wKSxzJiYobi5wb3NpdGlvbi5sZWZ0PXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6dX0pLmxlZnQtcC5tYXJnaW5zLmxlZnQpLG8mJihuLnBvc2l0aW9uLmxlZnQ9cC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDphLXAuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXAubWFyZ2lucy5sZWZ0KSksIXAuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiYocnx8aXx8c3x8b3x8aCkmJnAub3B0aW9ucy5zbmFwLnNuYXAmJnAub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChwLmVsZW1lbnQsdCxlLmV4dGVuZChwLl91aUhhc2goKSx7c25hcEl0ZW06cC5zbmFwRWxlbWVudHNbY10uaXRlbX0pKSxwLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZz1yfHxpfHxzfHxvfHxofX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXMuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9ucyxyPWUubWFrZUFycmF5KGUobi5zdGFjaykpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4ocGFyc2VJbnQoZSh0KS5jc3MoInpJbmRleCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJ6SW5kZXgiKSwxMCl8fDApfSk7aWYoIXIubGVuZ3RoKXJldHVybjt0PXBhcnNlSW50KGUoclswXSkuY3NzKCJ6SW5kZXgiKSwxMCl8fDAsZShyKS5lYWNoKGZ1bmN0aW9uKG4pe2UodGhpcykuY3NzKCJ6SW5kZXgiLHQrbil9KSx0aGlzLmNzcygiekluZGV4Iix0K3IubGVuZ3RoKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInpJbmRleCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZShuLmhlbHBlciksaT1lKHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoInpJbmRleCIpJiYoaS5fekluZGV4PXIuY3NzKCJ6SW5kZXgiKSksci5jc3MoInpJbmRleCIsaS56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO3IuX3pJbmRleCYmZShuLmhlbHBlcikuY3NzKCJ6SW5kZXgiLHIuX3pJbmRleCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBlPnQmJmU8dCtufWUud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt2ZXJzaW9uOiIxLjEwLjEiLHdpZGdldEV2ZW50UHJlZml4OiJkcm9wIixvcHRpb25zOnthY2NlcHQ6IioiLGFjdGl2ZUNsYXNzOiExLGFkZENsYXNzZXM6ITAsZ3JlZWR5OiExLGhvdmVyQ2xhc3M6ITEsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0IixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLG49dC5hY2NlcHQ7dGhpcy5pc292ZXI9ITEsdGhpcy5pc291dD0hMCx0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24obik/bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhuKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Quc2NvcGVdPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV18fFtdLGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV0ucHVzaCh0aGlzKSx0LmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9MCxuPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTtmb3IoO3Q8bi5sZW5ndGg7dCsrKW5bdF09PT10aGlzJiZuLnNwbGljZSh0LDEpO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJvcHBhYmxlIHVpLWRyb3BwYWJsZS1kaXNhYmxlZCIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dD09PSJhY2NlcHQiJiYodGhpcy5hY2NlcHQ9ZS5pc0Z1bmN0aW9uKG4pP246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXMobil9KSxlLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksbiYmdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy51aShuKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxuJiZ0aGlzLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LHRoaXMudWkobikpfSxfb3ZlcjpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2lmKCFufHwobi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KVswXT09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy51aShuKSkpfSxfb3V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIW58fChuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpWzBdPT09dGhpcy5lbGVtZW50WzBdKXJldHVybjt0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3V0Iix0LHRoaXMudWkobikpKX0sX2Ryb3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1ufHxlLnVpLmRkbWFuYWdlci5jdXJyZW50LGk9ITE7cmV0dXJuIXJ8fChyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpWzBdPT09dGhpcy5lbGVtZW50WzBdPyExOih0aGlzLmVsZW1lbnQuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLm5vdCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmRhdGEodGhpcywidWktZHJvcHBhYmxlIik7aWYodC5vcHRpb25zLmdyZWVkeSYmIXQub3B0aW9ucy5kaXNhYmxlZCYmdC5vcHRpb25zLnNjb3BlPT09ci5vcHRpb25zLnNjb3BlJiZ0LmFjY2VwdC5jYWxsKHQuZWxlbWVudFswXSxyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChyLGUuZXh0ZW5kKHQse29mZnNldDp0LmVsZW1lbnQub2Zmc2V0KCl9KSx0Lm9wdGlvbnMudG9sZXJhbmNlKSlyZXR1cm4gaT0hMCwhMX0pLGk/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sci5jdXJyZW50SXRlbXx8ci5lbGVtZW50KT8odGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJkcm9wIix0LHRoaXMudWkocikpLHRoaXMuZWxlbWVudCk6ITEpfSx1aTpmdW5jdGlvbihlKXtyZXR1cm57ZHJhZ2dhYmxlOmUuY3VycmVudEl0ZW18fGUuZWxlbWVudCxoZWxwZXI6ZS5oZWxwZXIscG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5wb3NpdGlvbkFic319fSksZS51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZSx0LHIpe2lmKCF0Lm9mZnNldClyZXR1cm4hMTt2YXIgaSxzLG89KGUucG9zaXRpb25BYnN8fGUucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQsdT1vK2UuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsYT0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wLGY9YStlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsPXQub2Zmc2V0LmxlZnQsYz1sK3QucHJvcG9ydGlvbnMud2lkdGgsaD10Lm9mZnNldC50b3AscD1oK3QucHJvcG9ydGlvbnMuaGVpZ2h0O3N3aXRjaChyKXtjYXNlImZpdCI6cmV0dXJuIGw8PW8mJnU8PWMmJmg8PWEmJmY8PXA7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBsPG8rZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZ1LWUuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxjJiZoPGErZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmZi1lLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPHA7Y2FzZSJwb2ludGVyIjpyZXR1cm4gaT0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCsoZS5jbGlja09mZnNldHx8ZS5vZmZzZXQuY2xpY2spLmxlZnQscz0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wKyhlLmNsaWNrT2Zmc2V0fHxlLm9mZnNldC5jbGljaykudG9wLG4ocyxoLHQucHJvcG9ydGlvbnMuaGVpZ2h0KSYmbihpLGwsdC5wcm9wb3J0aW9ucy53aWR0aCk7Y2FzZSJ0b3VjaCI6cmV0dXJuKGE+PWgmJmE8PXB8fGY+PWgmJmY8PXB8fGE8aCYmZj5wKSYmKG8+PWwmJm88PWN8fHU+PWwmJnU8PWN8fG88bCYmdT5jKTtkZWZhdWx0OnJldHVybiExfX0sZS51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sbz1uP24udHlwZTpudWxsLHU9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLmFkZEJhY2soKTtlOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspe2lmKHNbcl0ub3B0aW9ucy5kaXNhYmxlZHx8dCYmIXNbcl0uYWNjZXB0LmNhbGwoc1tyXS5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkpY29udGludWU7Zm9yKGk9MDtpPHUubGVuZ3RoO2krKylpZih1W2ldPT09c1tyXS5lbGVtZW50WzBdKXtzW3JdLnByb3BvcnRpb25zLmhlaWdodD0wO2NvbnRpbnVlIGV9c1tyXS52aXNpYmxlPXNbcl0uZWxlbWVudC5jc3MoImRpc3BsYXkiKSE9PSJub25lIjtpZighc1tyXS52aXNpYmxlKWNvbnRpbnVlO289PT0ibW91c2Vkb3duIiYmc1tyXS5fYWN0aXZhdGUuY2FsbChzW3JdLG4pLHNbcl0ub2Zmc2V0PXNbcl0uZWxlbWVudC5vZmZzZXQoKSxzW3JdLnByb3BvcnRpb25zPXt3aWR0aDpzW3JdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnNbcl0uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9fX0sZHJvcDpmdW5jdGlvbih0LG4pe3ZhciByPSExO3JldHVybiBlLmVhY2goZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuOyF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpJiYocj10aGlzLl9kcm9wLmNhbGwodGhpcyxuKXx8ciksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpJiYodGhpcy5pc291dD0hMCx0aGlzLmlzb3Zlcj0hMSx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxuKSl9KSxyfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxuKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxuKX0pfSxkcmFnOmZ1bmN0aW9uKHQsbil7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsbiksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuZ3JlZWR5Q2hpbGR8fCF0aGlzLnZpc2libGUpcmV0dXJuO3ZhciByLGkscyxvPWUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSx1PSFvJiZ0aGlzLmlzb3Zlcj8iaXNvdXQiOm8mJiF0aGlzLmlzb3Zlcj8iaXNvdmVyIjpudWxsO2lmKCF1KXJldHVybjt0aGlzLm9wdGlvbnMuZ3JlZWR5JiYoaT10aGlzLm9wdGlvbnMuc2NvcGUscz10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEodWktZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlLmRhdGEodGhpcywidWktZHJvcHBhYmxlIikub3B0aW9ucy5zY29wZT09PWl9KSxzLmxlbmd0aCYmKHI9ZS5kYXRhKHNbMF0sInVpLWRyb3BwYWJsZSIpLHIuZ3JlZWR5Q2hpbGQ9dT09PSJpc292ZXIiKSksciYmdT09PSJpc292ZXIiJiYoci5pc292ZXI9ITEsci5pc291dD0hMCxyLl9vdXQuY2FsbChyLG4pKSx0aGlzW3VdPSEwLHRoaXNbdT09PSJpc291dCI/Imlzb3ZlciI6Imlzb3V0Il09ITEsdGhpc1t1PT09Imlzb3ZlciI/Il9vdmVyIjoiX291dCJdLmNhbGwodGhpcyxuKSxyJiZ1PT09Imlzb3V0IiYmKHIuaXNvdXQ9ITEsci5pc292ZXI9ITAsci5fb3Zlci5jYWxsKHIsbikpfSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsbil7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LG4pfX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX1lLndpZGdldCgidWkucmVzaXphYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjEwLjEiLHdpZGdldEV2ZW50UHJlZml4OiJyZXNpemUiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246InNsb3ciLGFuaW1hdGVFYXNpbmc6InN3aW5nIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6ImUscyxzZSIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpLHMsbz10aGlzLHU9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcmVzaXphYmxlIiksZS5leHRlbmQodGhpcyx7X2FzcGVjdFJhdGlvOiEhdS5hc3BlY3RSYXRpbyxhc3BlY3RSYXRpbzp1LmFzcGVjdFJhdGlvLG9yaWdpbmFsRWxlbWVudDp0aGlzLmVsZW1lbnQsX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6W10sX2hlbHBlcjp1LmhlbHBlcnx8dS5naG9zdHx8dS5hbmltYXRlP3UuaGVscGVyfHwidWktcmVzaXphYmxlLWhlbHBlciI6bnVsbH0pLHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nL2kpJiYodGhpcy5lbGVtZW50LndyYXAoZSgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoInRvcCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcygibGVmdCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YSgidWktcmVzaXphYmxlIix0aGlzLmVsZW1lbnQuZGF0YSgidWktcmVzaXphYmxlIikpLHRoaXMuZWxlbWVudElzV3JhcHBlcj0hMCx0aGlzLmVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLG1hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpblJpZ2h0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKX0pLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRvcDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsIm5vbmUiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjoic3RhdGljIix6b29tOjEsZGlzcGxheToiYmxvY2sifSkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIil9KSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLmhhbmRsZXM9dS5oYW5kbGVzfHwoZSgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkubGVuZ3RoP3tuOiIudWktcmVzaXphYmxlLW4iLGU6Ii51aS1yZXNpemFibGUtZSIsczoiLnVpLXJlc2l6YWJsZS1zIix3OiIudWktcmVzaXphYmxlLXciLHNlOiIudWktcmVzaXphYmxlLXNlIixzdzoiLnVpLXJlc2l6YWJsZS1zdyIsbmU6Ii51aS1yZXNpemFibGUtbmUiLG53OiIudWktcmVzaXphYmxlLW53In06ImUscyxzZSIpO2lmKHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09PVN0cmluZyl7dGhpcy5oYW5kbGVzPT09ImFsbCImJih0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbnciKSx0PXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpLHRoaXMuaGFuZGxlcz17fTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXI9ZS50cmltKHRbbl0pLHM9InVpLXJlc2l6YWJsZS0iK3IsaT1lKCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIrcysiJz48L2Rpdj4iKSxpLmNzcyh7ekluZGV4OnUuekluZGV4fSksInNlIj09PXImJmkuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbcl09Ii51aS1yZXNpemFibGUtIityLHRoaXMuZWxlbWVudC5hcHBlbmQoaSl9dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt2YXIgbixyLGksczt0PXR8fHRoaXMuZWxlbWVudDtmb3IobiBpbiB0aGlzLmhhbmRsZXMpe3RoaXMuaGFuZGxlc1tuXS5jb25zdHJ1Y3Rvcj09PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tuXT1lKHRoaXMuaGFuZGxlc1tuXSx0aGlzLmVsZW1lbnQpLnNob3coKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSYmKHI9ZSh0aGlzLmhhbmRsZXNbbl0sdGhpcy5lbGVtZW50KSxzPS9zd3xuZXxud3xzZXxufHMvLnRlc3Qobik/ci5vdXRlckhlaWdodCgpOnIub3V0ZXJXaWR0aCgpLGk9WyJwYWRkaW5nIiwvbmV8bnd8bi8udGVzdChuKT8iVG9wIjovc2V8c3d8cy8udGVzdChuKT8iQm90dG9tIjovXmUkLy50ZXN0KG4pPyJSaWdodCI6IkxlZnQiXS5qb2luKCIiKSx0LmNzcyhpLHMpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpO2lmKCFlKHRoaXMuaGFuZGxlc1tuXSkubGVuZ3RoKWNvbnRpbnVlfX0sdGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpLHRoaXMuX2hhbmRsZXM9ZSgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkuZGlzYWJsZVNlbGVjdGlvbigpLHRoaXMuX2hhbmRsZXMubW91c2VvdmVyKGZ1bmN0aW9uKCl7by5yZXNpemluZ3x8KHRoaXMuY2xhc3NOYW1lJiYoaT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKSksby5heGlzPWkmJmlbMV0/aVsxXToic2UiKX0pLHUuYXV0b0hpZGUmJih0aGlzLl9oYW5kbGVzLmhpZGUoKSxlKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSxvLl9oYW5kbGVzLnNob3coKX0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtvLnJlc2l6aW5nfHwoZSh0aGlzKS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksby5faGFuZGxlcy5oaWRlKCkpfSkpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciB0LG49ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtyZXR1cm4gdGhpcy5lbGVtZW50SXNXcmFwcGVyJiYobih0aGlzLmVsZW1lbnQpLHQ9dGhpcy5lbGVtZW50LHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246dC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSx0b3A6dC5jc3MoInRvcCIpLGxlZnQ6dC5jc3MoImxlZnQiKX0pLmluc2VydEFmdGVyKHQpLHQucmVtb3ZlKCkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLG4odGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG4scixpPSExO2ZvcihuIGluIHRoaXMuaGFuZGxlcyl7cj1lKHRoaXMuaGFuZGxlc1tuXSlbMF07aWYocj09PXQudGFyZ2V0fHxlLmNvbnRhaW5zKHIsdC50YXJnZXQpKWk9ITB9cmV0dXJuIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmaX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIHIsaSxzLG89dGhpcy5vcHRpb25zLHU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksYT10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsL2Fic29sdXRlLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKT9hLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6YS5jc3MoInRvcCIpLGxlZnQ6YS5jc3MoImxlZnQiKX0pOmEuaXMoIi51aS1kcmFnZ2FibGUiKSYmYS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOnUudG9wLGxlZnQ6dS5sZWZ0fSksdGhpcy5fcmVuZGVyUHJveHkoKSxyPW4odGhpcy5oZWxwZXIuY3NzKCJsZWZ0IikpLGk9bih0aGlzLmhlbHBlci5jc3MoInRvcCIpKSxvLmNvbnRhaW5tZW50JiYocis9ZShvLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAsaSs9ZShvLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDpyLHRvcDppfSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDphLm91dGVyV2lkdGgoKSxoZWlnaHQ6YS5vdXRlckhlaWdodCgpfTp7d2lkdGg6YS53aWR0aCgpLGhlaWdodDphLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsU2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOmEub3V0ZXJXaWR0aCgpLGhlaWdodDphLm91dGVySGVpZ2h0KCl9Ont3aWR0aDphLndpZHRoKCksaGVpZ2h0OmEuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17bGVmdDpyLHRvcDppfSx0aGlzLnNpemVEaWZmPXt3aWR0aDphLm91dGVyV2lkdGgoKS1hLndpZHRoKCksaGVpZ2h0OmEub3V0ZXJIZWlnaHQoKS1hLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbj17bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZfSx0aGlzLmFzcGVjdFJhdGlvPXR5cGVvZiBvLmFzcGVjdFJhdGlvPT0ibnVtYmVyIj9vLmFzcGVjdFJhdGlvOnRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodHx8MSxzPWUoIi51aS1yZXNpemFibGUtIit0aGlzLmF4aXMpLmNzcygiY3Vyc29yIiksZSgiYm9keSIpLmNzcygiY3Vyc29yIixzPT09ImF1dG8iP3RoaXMuYXhpcysiLXJlc2l6ZSI6cyksYS5hZGRDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdGFydCIsdCksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dmFyIG4scj10aGlzLmhlbHBlcixpPXt9LHM9dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sbz10aGlzLmF4aXMsdT10aGlzLnBvc2l0aW9uLnRvcCxhPXRoaXMucG9zaXRpb24ubGVmdCxmPXRoaXMuc2l6ZS53aWR0aCxsPXRoaXMuc2l6ZS5oZWlnaHQsYz10LnBhZ2VYLXMubGVmdHx8MCxoPXQucGFnZVktcy50b3B8fDAscD10aGlzLl9jaGFuZ2Vbb107aWYoIXApcmV0dXJuITE7bj1wLmFwcGx5KHRoaXMsW3QsYyxoXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXModC5zaGlmdEtleSk7aWYodGhpcy5fYXNwZWN0UmF0aW98fHQuc2hpZnRLZXkpbj10aGlzLl91cGRhdGVSYXRpbyhuLHQpO3JldHVybiBuPXRoaXMuX3Jlc3BlY3RTaXplKG4sdCksdGhpcy5fdXBkYXRlQ2FjaGUobiksdGhpcy5fcHJvcGFnYXRlKCJyZXNpemUiLHQpLHRoaXMucG9zaXRpb24udG9wIT09dSYmKGkudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PWEmJihpLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIpLHRoaXMuc2l6ZS53aWR0aCE9PWYmJihpLndpZHRoPXRoaXMuc2l6ZS53aWR0aCsicHgiKSx0aGlzLnNpemUuaGVpZ2h0IT09bCYmKGkuaGVpZ2h0PXRoaXMuc2l6ZS5oZWlnaHQrInB4Iiksci5jc3MoaSksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksZS5pc0VtcHR5T2JqZWN0KGkpfHx0aGlzLl90cmlnZ2VyKCJyZXNpemUiLHQsdGhpcy51aSgpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBuLHIsaSxzLG8sdSxhLGY9dGhpcy5vcHRpb25zLGw9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYobj10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHI9bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksaT1yJiZlLnVpLmhhc1Njcm9sbChuWzBdLCJsZWZ0Iik/MDpsLnNpemVEaWZmLmhlaWdodCxzPXI/MDpsLnNpemVEaWZmLndpZHRoLG89e3dpZHRoOmwuaGVscGVyLndpZHRoKCktcyxoZWlnaHQ6bC5oZWxwZXIuaGVpZ2h0KCktaX0sdT1wYXJzZUludChsLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyhsLnBvc2l0aW9uLmxlZnQtbC5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGE9cGFyc2VJbnQobC5lbGVtZW50LmNzcygidG9wIiksMTApKyhsLnBvc2l0aW9uLnRvcC1sLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbCxmLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3MoZS5leHRlbmQobyx7dG9wOmEsbGVmdDp1fSkpLGwuaGVscGVyLmhlaWdodChsLnNpemUuaGVpZ2h0KSxsLmhlbHBlci53aWR0aChsLnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIWYuYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksZSgiYm9keSIpLmNzcygiY3Vyc29yIiwiYXV0byIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdG9wIix0KSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixpLHMsbyx1PXRoaXMub3B0aW9ucztvPXttaW5XaWR0aDpyKHUubWluV2lkdGgpP3UubWluV2lkdGg6MCxtYXhXaWR0aDpyKHUubWF4V2lkdGgpP3UubWF4V2lkdGg6SW5maW5pdHksbWluSGVpZ2h0OnIodS5taW5IZWlnaHQpP3UubWluSGVpZ2h0OjAsbWF4SGVpZ2h0OnIodS5tYXhIZWlnaHQpP3UubWF4SGVpZ2h0OkluZmluaXR5fTtpZih0aGlzLl9hc3BlY3RSYXRpb3x8ZSl0PW8ubWluSGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8saT1vLm1pbldpZHRoL3RoaXMuYXNwZWN0UmF0aW8sbj1vLm1heEhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9by5tYXhXaWR0aC90aGlzLmFzcGVjdFJhdGlvLHQ+by5taW5XaWR0aCYmKG8ubWluV2lkdGg9dCksaT5vLm1pbkhlaWdodCYmKG8ubWluSGVpZ2h0PWkpLG48by5tYXhXaWR0aCYmKG8ubWF4V2lkdGg9biksczxvLm1heEhlaWdodCYmKG8ubWF4SGVpZ2h0PXMpO3RoaXMuX3ZCb3VuZGFyaWVzPW99LF91cGRhdGVDYWNoZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSxyKGUubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9ZS5sZWZ0KSxyKGUudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPWUudG9wKSxyKGUuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9ZS5oZWlnaHQpLHIoZS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9ZS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uLG49dGhpcy5zaXplLGk9dGhpcy5heGlzO3JldHVybiByKGUuaGVpZ2h0KT9lLndpZHRoPWUuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86cihlLndpZHRoKSYmKGUuaGVpZ2h0PWUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksaT09PSJzdyImJihlLmxlZnQ9dC5sZWZ0KyhuLndpZHRoLWUud2lkdGgpLGUudG9wPW51bGwpLGk9PT0ibnciJiYoZS50b3A9dC50b3ArKG4uaGVpZ2h0LWUuaGVpZ2h0KSxlLmxlZnQ9dC5sZWZ0KyhuLndpZHRoLWUud2lkdGgpKSxlfSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdkJvdW5kYXJpZXMsbj10aGlzLmF4aXMsaT1yKGUud2lkdGgpJiZ0Lm1heFdpZHRoJiZ0Lm1heFdpZHRoPGUud2lkdGgscz1yKGUuaGVpZ2h0KSYmdC5tYXhIZWlnaHQmJnQubWF4SGVpZ2h0PGUuaGVpZ2h0LG89cihlLndpZHRoKSYmdC5taW5XaWR0aCYmdC5taW5XaWR0aD5lLndpZHRoLHU9cihlLmhlaWdodCkmJnQubWluSGVpZ2h0JiZ0Lm1pbkhlaWdodD5lLmhlaWdodCxhPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGY9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxsPS9zd3xud3x3Ly50ZXN0KG4pLGM9L253fG5lfG4vLnRlc3Qobik7cmV0dXJuIG8mJihlLndpZHRoPXQubWluV2lkdGgpLHUmJihlLmhlaWdodD10Lm1pbkhlaWdodCksaSYmKGUud2lkdGg9dC5tYXhXaWR0aCkscyYmKGUuaGVpZ2h0PXQubWF4SGVpZ2h0KSxvJiZsJiYoZS5sZWZ0PWEtdC5taW5XaWR0aCksaSYmbCYmKGUubGVmdD1hLXQubWF4V2lkdGgpLHUmJmMmJihlLnRvcD1mLXQubWluSGVpZ2h0KSxzJiZjJiYoZS50b3A9Zi10Lm1heEhlaWdodCksIWUud2lkdGgmJiFlLmhlaWdodCYmIWUubGVmdCYmZS50b3A/ZS50b3A9bnVsbDohZS53aWR0aCYmIWUuaGVpZ2h0JiYhZS50b3AmJmUubGVmdCYmKGUubGVmdD1udWxsKSxlfSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpcmV0dXJuO3ZhciBlLHQsbixyLGkscz10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O2ZvcihlPTA7ZTx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aDtlKyspe2k9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1tlXTtpZighdGhpcy5ib3JkZXJEaWYpe3RoaXMuYm9yZGVyRGlmPVtdLG49W2kuY3NzKCJib3JkZXJUb3BXaWR0aCIpLGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksaS5jc3MoImJvcmRlckxlZnRXaWR0aCIpXSxyPVtpLmNzcygicGFkZGluZ1RvcCIpLGkuY3NzKCJwYWRkaW5nUmlnaHQiKSxpLmNzcygicGFkZGluZ0JvdHRvbSIpLGkuY3NzKCJwYWRkaW5nTGVmdCIpXTtmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXRoaXMuYm9yZGVyRGlmW3RdPShwYXJzZUludChuW3RdLDEwKXx8MCkrKHBhcnNlSW50KHJbdF0sMTApfHwwKX1pLmNzcyh7aGVpZ2h0OnMuaGVpZ2h0KCktdGhpcy5ib3JkZXJEaWZbMF0tdGhpcy5ib3JkZXJEaWZbMl18fDAsd2lkdGg6cy53aWR0aCgpLXRoaXMuYm9yZGVyRGlmWzFdLXRoaXMuYm9yZGVyRGlmWzNdfHwwfSl9fSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PXQub2Zmc2V0KCksdGhpcy5faGVscGVyPyh0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8ZSgiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PC9kaXY+IiksdGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCktMSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktMSxwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQrInB4Iix0b3A6dGhpcy5lbGVtZW50T2Zmc2V0LnRvcCsicHgiLHpJbmRleDorK24uekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCkpOnRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbihlLHQpe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCt0fX0sdzpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3JpZ2luYWxTaXplLHI9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OnIubGVmdCt0LHdpZHRoOm4ud2lkdGgtdH19LG46ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMub3JpZ2luYWxTaXplLGk9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6aS50b3ArbixoZWlnaHQ6ci5oZWlnaHQtbn19LHM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K259fSxzZTpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LG4scl0pKX0sc3c6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxuLHJdKSl9LG5lOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsbixyXSkpfSxudzpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LG4scl0pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24odCxuKXtlLnVpLnBsdWdpbi5jYWxsKHRoaXMsdCxbbix0aGlzLnVpKCldKSx0IT09InJlc2l6ZSImJnRoaXMuX3RyaWdnZXIodCxuLHRoaXMudWkoKSl9LHBsdWdpbnM6e30sdWk6ZnVuY3Rpb24oKXtyZXR1cm57b3JpZ2luYWxFbGVtZW50OnRoaXMub3JpZ2luYWxFbGVtZW50LGVsZW1lbnQ6dGhpcy5lbGVtZW50LGhlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLHNpemU6dGhpcy5zaXplLG9yaWdpbmFsU2l6ZTp0aGlzLm9yaWdpbmFsU2l6ZSxvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbn19fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLHI9bi5vcHRpb25zLGk9bi5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxzPWkubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpLG89cyYmZS51aS5oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6bi5zaXplRGlmZi5oZWlnaHQsdT1zPzA6bi5zaXplRGlmZi53aWR0aCxhPXt3aWR0aDpuLnNpemUud2lkdGgtdSxoZWlnaHQ6bi5zaXplLmhlaWdodC1vfSxmPXBhcnNlSW50KG4uZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKG4ucG9zaXRpb24ubGVmdC1uLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsbD1wYXJzZUludChuLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKG4ucG9zaXRpb24udG9wLW4ub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO24uZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGEsbCYmZj97dG9wOmwsbGVmdDpmfTp7fSkse2R1cmF0aW9uOnIuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciByPXt3aWR0aDpwYXJzZUludChuLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQobi5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChuLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChuLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtpJiZpLmxlbmd0aCYmZShpWzBdKS5jc3Moe3dpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fSksbi5fdXBkYXRlQ2FjaGUociksbi5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0LHIsaSxzLG8sdSxhLGY9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSxsPWYub3B0aW9ucyxjPWYuZWxlbWVudCxoPWwuY29udGFpbm1lbnQscD1oIGluc3RhbmNlb2YgZT9oLmdldCgwKTovcGFyZW50Ly50ZXN0KGgpP2MucGFyZW50KCkuZ2V0KDApOmg7aWYoIXApcmV0dXJuO2YuY29udGFpbmVyRWxlbWVudD1lKHApLC9kb2N1bWVudC8udGVzdChoKXx8aD09PWRvY3VtZW50PyhmLmNvbnRhaW5lck9mZnNldD17bGVmdDowLHRvcDowfSxmLmNvbnRhaW5lclBvc2l0aW9uPXtsZWZ0OjAsdG9wOjB9LGYucGFyZW50RGF0YT17ZWxlbWVudDplKGRvY3VtZW50KSxsZWZ0OjAsdG9wOjAsd2lkdGg6ZShkb2N1bWVudCkud2lkdGgoKSxoZWlnaHQ6ZShkb2N1bWVudCkuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHR9KToodD1lKHApLHI9W10sZShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGUsaSl7cltlXT1uKHQuY3NzKCJwYWRkaW5nIitpKSl9KSxmLmNvbnRhaW5lck9mZnNldD10Lm9mZnNldCgpLGYuY29udGFpbmVyUG9zaXRpb249dC5wb3NpdGlvbigpLGYuY29udGFpbmVyU2l6ZT17aGVpZ2h0OnQuaW5uZXJIZWlnaHQoKS1yWzNdLHdpZHRoOnQuaW5uZXJXaWR0aCgpLXJbMV19LGk9Zi5jb250YWluZXJPZmZzZXQscz1mLmNvbnRhaW5lclNpemUuaGVpZ2h0LG89Zi5jb250YWluZXJTaXplLndpZHRoLHU9ZS51aS5oYXNTY3JvbGwocCwibGVmdCIpP3Auc2Nyb2xsV2lkdGg6byxhPWUudWkuaGFzU2Nyb2xsKHApP3Auc2Nyb2xsSGVpZ2h0OnMsZi5wYXJlbnREYXRhPXtlbGVtZW50OnAsbGVmdDppLmxlZnQsdG9wOmkudG9wLHdpZHRoOnUsaGVpZ2h0OmF9KX0scmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG89ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSx1PW8ub3B0aW9ucyxhPW8uY29udGFpbmVyT2Zmc2V0LGY9by5wb3NpdGlvbixsPW8uX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LGM9e3RvcDowLGxlZnQ6MH0saD1vLmNvbnRhaW5lckVsZW1lbnQ7aFswXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGguY3NzKCJwb3NpdGlvbiIpKSYmKGM9YSksZi5sZWZ0PChvLl9oZWxwZXI/YS5sZWZ0OjApJiYoby5zaXplLndpZHRoPW8uc2l6ZS53aWR0aCsoby5faGVscGVyP28ucG9zaXRpb24ubGVmdC1hLmxlZnQ6by5wb3NpdGlvbi5sZWZ0LWMubGVmdCksbCYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8pLG8ucG9zaXRpb24ubGVmdD11LmhlbHBlcj9hLmxlZnQ6MCksZi50b3A8KG8uX2hlbHBlcj9hLnRvcDowKSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLmhlaWdodCsoby5faGVscGVyP28ucG9zaXRpb24udG9wLWEudG9wOm8ucG9zaXRpb24udG9wKSxsJiYoby5zaXplLndpZHRoPW8uc2l6ZS5oZWlnaHQqby5hc3BlY3RSYXRpbyksby5wb3NpdGlvbi50b3A9by5faGVscGVyP2EudG9wOjApLG8ub2Zmc2V0LmxlZnQ9by5wYXJlbnREYXRhLmxlZnQrby5wb3NpdGlvbi5sZWZ0LG8ub2Zmc2V0LnRvcD1vLnBhcmVudERhdGEudG9wK28ucG9zaXRpb24udG9wLG49TWF0aC5hYnMoKG8uX2hlbHBlcj9vLm9mZnNldC5sZWZ0LWMubGVmdDpvLm9mZnNldC5sZWZ0LWMubGVmdCkrby5zaXplRGlmZi53aWR0aCkscj1NYXRoLmFicygoby5faGVscGVyP28ub2Zmc2V0LnRvcC1jLnRvcDpvLm9mZnNldC50b3AtYS50b3ApK28uc2l6ZURpZmYuaGVpZ2h0KSxpPW8uY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1vLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLHM9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KG8uY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpLGkmJnMmJihuLT1vLnBhcmVudERhdGEubGVmdCksbitvLnNpemUud2lkdGg+PW8ucGFyZW50RGF0YS53aWR0aCYmKG8uc2l6ZS53aWR0aD1vLnBhcmVudERhdGEud2lkdGgtbixsJiYoby5zaXplLmhlaWdodD1vLnNpemUud2lkdGgvby5hc3BlY3RSYXRpbykpLHIrby5zaXplLmhlaWdodD49by5wYXJlbnREYXRhLmhlaWdodCYmKG8uc2l6ZS5oZWlnaHQ9by5wYXJlbnREYXRhLmhlaWdodC1yLGwmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvKSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLG49dC5vcHRpb25zLHI9dC5jb250YWluZXJPZmZzZXQsaT10LmNvbnRhaW5lclBvc2l0aW9uLHM9dC5jb250YWluZXJFbGVtZW50LG89ZSh0LmhlbHBlciksdT1vLm9mZnNldCgpLGE9by5vdXRlcldpZHRoKCktdC5zaXplRGlmZi53aWR0aCxmPW8ub3V0ZXJIZWlnaHQoKS10LnNpemVEaWZmLmhlaWdodDt0Ll9oZWxwZXImJiFuLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChzLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OnUubGVmdC1pLmxlZnQtci5sZWZ0LHdpZHRoOmEsaGVpZ2h0OmZ9KSx0Ll9oZWxwZXImJiFuLmFuaW1hdGUmJi9zdGF0aWMvLnRlc3Qocy5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDp1LmxlZnQtaS5sZWZ0LXIubGVmdCx3aWR0aDphLGhlaWdodDpmfSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbHNvUmVzaXplIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLG49dC5vcHRpb25zLHI9ZnVuY3Rpb24odCl7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9O3R5cGVvZiBuLmFsc29SZXNpemU9PSJvYmplY3QiJiYhbi5hbHNvUmVzaXplLnBhcmVudE5vZGU/bi5hbHNvUmVzaXplLmxlbmd0aD8obi5hbHNvUmVzaXplPW4uYWxzb1Jlc2l6ZVswXSxyKG4uYWxzb1Jlc2l6ZSkpOmUuZWFjaChuLmFsc29SZXNpemUsZnVuY3Rpb24oZSl7cihlKX0pOnIobi5hbHNvUmVzaXplKX0scmVzaXplOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIub3JpZ2luYWxTaXplLG89ci5vcmlnaW5hbFBvc2l0aW9uLHU9e2hlaWdodDpyLnNpemUuaGVpZ2h0LXMuaGVpZ2h0fHwwLHdpZHRoOnIuc2l6ZS53aWR0aC1zLndpZHRofHwwLHRvcDpyLnBvc2l0aW9uLnRvcC1vLnRvcHx8MCxsZWZ0OnIucG9zaXRpb24ubGVmdC1vLmxlZnR8fDB9LGE9ZnVuY3Rpb24odCxyKXtlKHQpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIpLHM9e30sbz1yJiZyLmxlbmd0aD9yOnQucGFyZW50cyhuLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1sid2lkdGgiLCJoZWlnaHQiXTpbIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwibGVmdCJdO2UuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49KGlbdF18fDApKyh1W3RdfHwwKTtuJiZuPj0wJiYoc1t0XT1ufHxudWxsKX0pLHQuY3NzKHMpfSl9O3R5cGVvZiBpLmFsc29SZXNpemU9PSJvYmplY3QiJiYhaS5hbHNvUmVzaXplLm5vZGVUeXBlP2UuZWFjaChpLmFsc29SZXNpemUsZnVuY3Rpb24oZSx0KXthKGUsdCl9KTphKGkuYWxzb1Jlc2l6ZSl9LHN0b3A6ZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSxuPXQub3B0aW9ucyxyPXQuc2l6ZTt0Lmdob3N0PXQub3JpZ2luYWxFbGVtZW50LmNsb25lKCksdC5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpyLmhlaWdodCx3aWR0aDpyLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtZ2hvc3QiKS5hZGRDbGFzcyh0eXBlb2Ygbi5naG9zdD09InN0cmluZyI/bi5naG9zdDoiIiksdC5naG9zdC5hcHBlbmRUbyh0LmhlbHBlcil9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykuZGF0YSgidWktcmVzaXphYmxlIik7dC5naG9zdCYmdC5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnQuc2l6ZS5oZWlnaHQsd2lkdGg6dC5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpO3QuZ2hvc3QmJnQuaGVscGVyJiZ0LmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQodC5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksbj10Lm9wdGlvbnMscj10LnNpemUsaT10Lm9yaWdpbmFsU2l6ZSxzPXQub3JpZ2luYWxQb3NpdGlvbixvPXQuYXhpcyx1PXR5cGVvZiBuLmdyaWQ9PSJudW1iZXIiP1tuLmdyaWQsbi5ncmlkXTpuLmdyaWQsYT11WzBdfHwxLGY9dVsxXXx8MSxsPU1hdGgucm91bmQoKHIud2lkdGgtaS53aWR0aCkvYSkqYSxjPU1hdGgucm91bmQoKHIuaGVpZ2h0LWkuaGVpZ2h0KS9mKSpmLGg9aS53aWR0aCtsLHA9aS5oZWlnaHQrYyxkPW4ubWF4V2lkdGgmJm4ubWF4V2lkdGg8aCx2PW4ubWF4SGVpZ2h0JiZuLm1heEhlaWdodDxwLG09bi5taW5XaWR0aCYmbi5taW5XaWR0aD5oLGc9bi5taW5IZWlnaHQmJm4ubWluSGVpZ2h0PnA7bi5ncmlkPXUsbSYmKGgrPWEpLGcmJihwKz1mKSxkJiYoaC09YSksdiYmKHAtPWYpLC9eKHNlfHN8ZSkkLy50ZXN0KG8pPyh0LnNpemUud2lkdGg9aCx0LnNpemUuaGVpZ2h0PXApOi9eKG5lKSQvLnRlc3Qobyk/KHQuc2l6ZS53aWR0aD1oLHQuc2l6ZS5oZWlnaHQ9cCx0LnBvc2l0aW9uLnRvcD1zLnRvcC1jKTovXihzdykkLy50ZXN0KG8pPyh0LnNpemUud2lkdGg9aCx0LnNpemUuaGVpZ2h0PXAsdC5wb3NpdGlvbi5sZWZ0PXMubGVmdC1sKToodC5zaXplLndpZHRoPWgsdC5zaXplLmhlaWdodD1wLHQucG9zaXRpb24udG9wPXMudG9wLWMsdC5wb3NpdGlvbi5sZWZ0PXMubGVmdC1sKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLnNlbGVjdGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTAuMSIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9SZWZyZXNoOiEwLGRpc3RhbmNlOjAsZmlsdGVyOiIqIix0b2xlcmFuY2U6InRvdWNoIixzZWxlY3RlZDpudWxsLHNlbGVjdGluZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLHVuc2VsZWN0ZWQ6bnVsbCx1bnNlbGVjdGluZzpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0YWJsZSIpLHRoaXMuZHJhZ2dlZD0hMSx0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXt0PWUobi5vcHRpb25zLmZpbHRlcixuLmVsZW1lbnRbMF0pLHQuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQub2Zmc2V0KCk7ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDp0LGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcCxyaWdodDpuLmxlZnQrdC5vdXRlcldpZHRoKCksYm90dG9tOm4udG9wK3Qub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLHVuc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcz10LmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPWUoIjxkaXYgY2xhc3M9J3VpLXNlbGVjdGFibGUtaGVscGVyJz48L2Rpdj4iKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWUiKS5yZW1vdmVEYXRhKCJzZWxlY3RhYmxlLWl0ZW0iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9dGhpcy5vcHRpb25zO3RoaXMub3Bvcz1bdC5wYWdlWCx0LnBhZ2VZXTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3RoaXMuc2VsZWN0ZWVzPWUoci5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShyLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxyLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ci5zdGFydHNlbGVjdGVkPSEwLCF0Lm1ldGFLZXkmJiF0LmN0cmxLZXkmJihyLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLHIuc2VsZWN0ZWQ9ITEsci4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxyLnVuc2VsZWN0aW5nPSEwLG4uX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzpyLmVsZW1lbnR9KSl9KSxlKHQudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgcixpPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtpZihpKXJldHVybiByPSF0Lm1ldGFLZXkmJiF0LmN0cmxLZXl8fCFpLiRlbGVtZW50Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3Mocj8idWktdW5zZWxlY3RpbmciOiJ1aS1zZWxlY3RlZCIpLmFkZENsYXNzKHI/InVpLXNlbGVjdGluZyI6InVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hcixpLnNlbGVjdGluZz1yLGkuc2VsZWN0ZWQ9cixyP24uX3RyaWdnZXIoInNlbGVjdGluZyIsdCx7c2VsZWN0aW5nOmkuZWxlbWVudH0pOm4uX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSwhMX0pfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dlZD0hMDtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3ZhciBuLHI9dGhpcyxpPXRoaXMub3B0aW9ucyxzPXRoaXMub3Bvc1swXSxvPXRoaXMub3Bvc1sxXSx1PXQucGFnZVgsYT10LnBhZ2VZO3JldHVybiBzPnUmJihuPXUsdT1zLHM9biksbz5hJiYobj1hLGE9byxvPW4pLHRoaXMuaGVscGVyLmNzcyh7bGVmdDpzLHRvcDpvLHdpZHRoOnUtcyxoZWlnaHQ6YS1vfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKSxmPSExO2lmKCFufHxuLmVsZW1lbnQ9PT1yLmVsZW1lbnRbMF0pcmV0dXJuO2kudG9sZXJhbmNlPT09InRvdWNoIj9mPSEobi5sZWZ0PnV8fG4ucmlnaHQ8c3x8bi50b3A+YXx8bi5ib3R0b208byk6aS50b2xlcmFuY2U9PT0iZml0IiYmKGY9bi5sZWZ0PnMmJm4ucmlnaHQ8dSYmbi50b3A+byYmbi5ib3R0b208YSksZj8obi5zZWxlY3RlZCYmKG4uJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksbi5zZWxlY3RlZD0hMSksbi51bnNlbGVjdGluZyYmKG4uJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksbi51bnNlbGVjdGluZz0hMSksbi5zZWxlY3Rpbmd8fChuLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RpbmciKSxuLnNlbGVjdGluZz0hMCxyLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzpuLmVsZW1lbnR9KSkpOihuLnNlbGVjdGluZyYmKCh0Lm1ldGFLZXl8fHQuY3RybEtleSkmJm4uc3RhcnRzZWxlY3RlZD8obi4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksbi5zZWxlY3Rpbmc9ITEsbi4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxuLnNlbGVjdGVkPSEwKToobi4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksbi5zZWxlY3Rpbmc9ITEsbi5zdGFydHNlbGVjdGVkJiYobi4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxuLnVuc2VsZWN0aW5nPSEwKSxyLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSkpKSxuLnNlbGVjdGVkJiYhdC5tZXRhS2V5JiYhdC5jdHJsS2V5JiYhbi5zdGFydHNlbGVjdGVkJiYobi4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxuLnNlbGVjdGVkPSExLG4uJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksbi51bnNlbGVjdGluZz0hMCxyLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSkpKX0pLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuZHJhZ2dlZD0hMSxlKCIudWktdW5zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLHIudW5zZWxlY3Rpbmc9ITEsci5zdGFydHNlbGVjdGVkPSExLG4uX3RyaWdnZXIoInVuc2VsZWN0ZWQiLHQse3Vuc2VsZWN0ZWQ6ci5lbGVtZW50fSl9KSxlKCIudWktc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ci4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIikuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksci5zZWxlY3Rpbmc9ITEsci5zZWxlY3RlZD0hMCxyLnN0YXJ0c2VsZWN0ZWQ9ITAsbi5fdHJpZ2dlcigic2VsZWN0ZWQiLHQse3NlbGVjdGVkOnIuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcigic3RvcCIsdCksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBlPnQmJmU8dCtufWUud2lkZ2V0KCJ1aS5zb3J0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMC4xIix3aWRnZXRFdmVudFByZWZpeDoic29ydCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGRyb3BPbkVtcHR5OiEwLGZvcmNlUGxhY2Vob2xkZXJTaXplOiExLGZvcmNlSGVscGVyU2l6ZTohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpdGVtczoiPiAqIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0Iix6SW5kZXg6MWUzLGFjdGl2YXRlOm51bGwsYmVmb3JlU3RvcDpudWxsLGNoYW5nZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGwscmVjZWl2ZTpudWxsLHJlbW92ZTpudWxsLHNvcnQ6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1cGRhdGU6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLmNvbnRhaW5lckNhY2hlPXt9LHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc29ydGFibGUiKSx0aGlzLnJlZnJlc2goKSx0aGlzLmZsb2F0aW5nPXRoaXMuaXRlbXMubGVuZ3RoP2UuYXhpcz09PSJ4Inx8L2xlZnR8cmlnaHQvLnRlc3QodGhpcy5pdGVtc1swXS5pdGVtLmNzcygiZmxvYXQiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJkaXNwbGF5IikpOiExLHRoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLnJlYWR5PSEwfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc29ydGFibGUgdWktc29ydGFibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZURlc3Ryb3koKTtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLml0ZW1zW2VdLml0ZW0ucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUrIi1pdGVtIik7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt0PT09ImRpc2FibGVkIj8odGhpcy5vcHRpb25zW3RdPW4sdGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc29ydGFibGUtZGlzYWJsZWQiLCEhbikpOmUuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0LG4pe3ZhciByPW51bGwsaT0hMSxzPXRoaXM7aWYodGhpcy5yZXZlcnRpbmcpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLm9wdGlvbnMudHlwZT09PSJzdGF0aWMiKXJldHVybiExO3RoaXMuX3JlZnJlc2hJdGVtcyh0KSxlKHQudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKGUuZGF0YSh0aGlzLHMud2lkZ2V0TmFtZSsiLWl0ZW0iKT09PXMpcmV0dXJuIHI9ZSh0aGlzKSwhMX0pLGUuZGF0YSh0LnRhcmdldCxzLndpZGdldE5hbWUrIi1pdGVtIik9PT1zJiYocj1lKHQudGFyZ2V0KSk7aWYoIXIpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmhhbmRsZSYmIW4pe2UodGhpcy5vcHRpb25zLmhhbmRsZSxyKS5maW5kKCIqIikuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT09dC50YXJnZXQmJihpPSEwKX0pO2lmKCFpKXJldHVybiExfXJldHVybiB0aGlzLmN1cnJlbnRJdGVtPXIsdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM9dGhpcy5vcHRpb25zO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVkscy5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihzLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuY3VycmVudEl0ZW0uaGlkZSgpLHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCkscy5jb250YWlubWVudCYmdGhpcy5fc2V0Q29udGFpbm1lbnQoKSxzLmN1cnNvciYmKGUoImJvZHkiKS5jc3MoImN1cnNvciIpJiYodGhpcy5fc3RvcmVkQ3Vyc29yPWUoImJvZHkiKS5jc3MoImN1cnNvciIpKSxlKCJib2R5IikuY3NzKCJjdXJzb3IiLHMuY3Vyc29yKSkscy5vcGFjaXR5JiYodGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpKSx0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHMub3BhY2l0eSkpLHMuekluZGV4JiYodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoInpJbmRleCIpKSx0aGlzLmhlbHBlci5jc3MoInpJbmRleCIscy56SW5kZXgpKSx0aGlzLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT09IkhUTUwiJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnN8fHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtpZighcilmb3IoaT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7aT49MDtpLS0pdGhpcy5jb250YWluZXJzW2ldLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpO3JldHVybiBlLnVpLmRkbWFuYWdlciYmKGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksZS51aS5kZG1hbmFnZXImJiFzLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5kcmFnZ2luZz0hMCx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktc29ydGFibGUtaGVscGVyIiksdGhpcy5fbW91c2VEcmFnKHQpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG89dGhpcy5vcHRpb25zLHU9ITE7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5sYXN0UG9zaXRpb25BYnN8fCh0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzKSx0aGlzLm9wdGlvbnMuc2Nyb2xsJiYodGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9PSJIVE1MIj8odGhpcy5vdmVyZmxvd09mZnNldC50b3ArdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LXQucGFnZVk8by5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9dT10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Arby5zY3JvbGxTcGVlZDp0LnBhZ2VZLXRoaXMub3ZlcmZsb3dPZmZzZXQudG9wPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9dT10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Atby5zY3JvbGxTcGVlZCksdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0K3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLXQucGFnZVg8by5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXU9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCtvLnNjcm9sbFNwZWVkOnQucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXU9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1vLnNjcm9sbFNwZWVkKSk6KHQucGFnZVktZShkb2N1bWVudCkuc2Nyb2xsVG9wKCk8by5zY3JvbGxTZW5zaXRpdml0eT91PWUoZG9jdW1lbnQpLnNjcm9sbFRvcChlKGRvY3VtZW50KS5zY3JvbGxUb3AoKS1vLnNjcm9sbFNwZWVkKTplKHdpbmRvdykuaGVpZ2h0KCktKHQucGFnZVktZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJih1PWUoZG9jdW1lbnQpLnNjcm9sbFRvcChlKGRvY3VtZW50KS5zY3JvbGxUb3AoKStvLnNjcm9sbFNwZWVkKSksdC5wYWdlWC1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8by5zY3JvbGxTZW5zaXRpdml0eT91PWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLW8uc2Nyb2xsU3BlZWQpOmUod2luZG93KS53aWR0aCgpLSh0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSk8by5zY3JvbGxTZW5zaXRpdml0eSYmKHU9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrby5zY3JvbGxTcGVlZCkpKSx1IT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT09IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiO2ZvcihuPXRoaXMuaXRlbXMubGVuZ3RoLTE7bj49MDtuLS0pe3I9dGhpcy5pdGVtc1tuXSxpPXIuaXRlbVswXSxzPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihyKTtpZighcyljb250aW51ZTtpZihyLmluc3RhbmNlIT09dGhpcy5jdXJyZW50Q29udGFpbmVyKWNvbnRpbnVlO2lmKGkhPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyW3M9PT0xPyJuZXh0IjoicHJldiJdKClbMF0hPT1pJiYhZS5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLGkpJiYodGhpcy5vcHRpb25zLnR5cGU9PT0ic2VtaS1keW5hbWljIj8hZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0saSk6ITApKXt0aGlzLmRpcmVjdGlvbj1zPT09MT8iZG93biI6InVwIjtpZih0aGlzLm9wdGlvbnMudG9sZXJhbmNlIT09InBvaW50ZXIiJiYhdGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyhyKSlicmVhazt0aGlzLl9yZWFycmFuZ2UodCxyKSx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHQsdGhpcy5fdWlIYXNoKCkpO2JyZWFrfX1yZXR1cm4gdGhpcy5fY29udGFjdENvbnRhaW5lcnModCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSx0aGlzLl90cmlnZ2VyKCJzb3J0Iix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQsbil7aWYoIXQpcmV0dXJuO2UudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KTtpZih0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcj10aGlzLGk9dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKTt0aGlzLnJldmVydGluZz0hMCxlKHRoaXMuaGVscGVyKS5hbmltYXRlKHtsZWZ0OmkubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdC10aGlzLm1hcmdpbnMubGVmdCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmkudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKX0scGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydCwxMCl8fDUwMCxmdW5jdGlvbigpe3IuX2NsZWFyKHQpfSl9ZWxzZSB0aGlzLl9jbGVhcih0LG4pO3JldHVybiExfSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLl9tb3VzZVVwKHt0YXJnZXQ6bnVsbH0pLHRoaXMub3B0aW9ucy5oZWxwZXI9PT0ib3JpZ2luYWwiP3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpOnRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih2YXIgdD10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7dD49MDt0LS0pdGhpcy5jb250YWluZXJzW3RdLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoIm91dCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1t0XS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5vcHRpb25zLmhlbHBlciE9PSJvcmlnaW5hbCImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSxlLmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/ZSh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOmUodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LGUobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPShlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKS5tYXRjaCh0LmV4cHJlc3Npb258fC8oLispW1wtPV9dKC4rKS8pO24mJnIucHVzaCgodC5rZXl8fG5bMV0rIltdIikrIj0iKyh0LmtleSYmdC5leHByZXNzaW9uP25bMV06blsyXSkpfSksIXIubGVuZ3RoJiZ0LmtleSYmci5wdXNoKHQua2V5KyI9Iiksci5qb2luKCImIil9LHRvQXJyYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSh0JiZ0LmNvbm5lY3RlZCkscj1bXTtyZXR1cm4gdD10fHx7fSxuLmVhY2goZnVuY3Rpb24oKXtyLnB1c2goZSh0Lml0ZW18fHRoaXMpLmF0dHIodC5hdHRyaWJ1dGV8fCJpZCIpfHwiIil9KSxyfSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LG49dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHI9dGhpcy5wb3NpdGlvbkFicy50b3AsaT1yK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LHM9ZS5sZWZ0LG89cytlLndpZHRoLHU9ZS50b3AsYT11K2UuaGVpZ2h0LGY9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGw9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxjPXIrZj51JiZyK2Y8YSYmdCtsPnMmJnQrbDxvO3JldHVybiB0aGlzLm9wdGlvbnMudG9sZXJhbmNlPT09InBvaW50ZXIifHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8dGhpcy5vcHRpb25zLnRvbGVyYW5jZSE9PSJwb2ludGVyIiYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdPmVbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT9jOnM8dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJm4tdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPG8mJnU8cit0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YX0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnMuYXhpcz09PSJ4Inx8bih0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsZS50b3AsZS5oZWlnaHQpLHI9dGhpcy5vcHRpb25zLmF4aXM9PT0ieSJ8fG4odGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsZS5sZWZ0LGUud2lkdGgpLGk9dCYmcixzPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLG89dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gaT90aGlzLmZsb2F0aW5nP28mJm89PT0icmlnaHQifHxzPT09ImRvd24iPzI6MTpzJiYocz09PSJkb3duIj8yOjEpOiExfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbihlKXt2YXIgdD1uKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCtlLmhlaWdodC8yLGUuaGVpZ2h0KSxyPW4odGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsZS5sZWZ0K2Uud2lkdGgvMixlLndpZHRoKSxpPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLHM9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmcz9zPT09InJpZ2h0IiYmcnx8cz09PSJsZWZ0IiYmIXI6aSYmKGk9PT0iZG93biImJnR8fGk9PT0idXAiJiYhdCl9LF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7cmV0dXJuIGUhPT0wJiYoZT4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIGUhPT0wJiYoZT4wPyJyaWdodCI6ImxlZnQiKX0scmVmcmVzaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVmcmVzaEl0ZW1zKGUpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXN9LF9jb25uZWN0V2l0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5jb25uZWN0V2l0aC5jb25zdHJ1Y3Rvcj09PVN0cmluZz9bZS5jb25uZWN0V2l0aF06ZS5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24odCl7dmFyIG4scixpLHMsbz1bXSx1PVtdLGE9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihhJiZ0KWZvcihuPWEubGVuZ3RoLTE7bj49MDtuLS0pe2k9ZShhW25dKTtmb3Iocj1pLmxlbmd0aC0xO3I+PTA7ci0tKXM9ZS5kYXRhKGlbcl0sdGhpcy53aWRnZXRGdWxsTmFtZSkscyYmcyE9PXRoaXMmJiFzLm9wdGlvbnMuZGlzYWJsZWQmJnUucHVzaChbZS5pc0Z1bmN0aW9uKHMub3B0aW9ucy5pdGVtcyk/cy5vcHRpb25zLml0ZW1zLmNhbGwocy5lbGVtZW50KTplKHMub3B0aW9ucy5pdGVtcyxzLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksc10pfXUucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKG49dS5sZW5ndGgtMTtuPj0wO24tLSl1W25dWzBdLmVhY2goZnVuY3Rpb24oKXtvLnB1c2godGhpcyl9KTtyZXR1cm4gZShvKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiK3RoaXMud2lkZ2V0TmFtZSsiLWl0ZW0pIik7dGhpcy5pdGVtcz1lLmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBuLHIsaSxzLG8sdSxhLGYsbD10aGlzLml0ZW1zLGM9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0saD10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGgmJnRoaXMucmVhZHkpZm9yKG49aC5sZW5ndGgtMTtuPj0wO24tLSl7aT1lKGhbbl0pO2ZvcihyPWkubGVuZ3RoLTE7cj49MDtyLS0pcz1lLmRhdGEoaVtyXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxzJiZzIT09dGhpcyYmIXMub3B0aW9ucy5kaXNhYmxlZCYmKGMucHVzaChbZS5pc0Z1bmN0aW9uKHMub3B0aW9ucy5pdGVtcyk/cy5vcHRpb25zLml0ZW1zLmNhbGwocy5lbGVtZW50WzBdLHQse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUocy5vcHRpb25zLml0ZW1zLHMuZWxlbWVudCksc10pLHRoaXMuY29udGFpbmVycy5wdXNoKHMpKX1mb3Iobj1jLmxlbmd0aC0xO24+PTA7bi0tKXtvPWNbbl1bMV0sdT1jW25dWzBdO2ZvcihyPTAsZj11Lmxlbmd0aDtyPGY7cisrKWE9ZSh1W3JdKSxhLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsbyksbC5wdXNoKHtpdGVtOmEsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbih0KXt0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBuLHIsaSxzO2ZvcihuPXRoaXMuaXRlbXMubGVuZ3RoLTE7bj49MDtuLS0pe3I9dGhpcy5pdGVtc1tuXTtpZihyLmluc3RhbmNlIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiZ0aGlzLmN1cnJlbnRDb250YWluZXImJnIuaXRlbVswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7aT10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD9lKHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHIuaXRlbSk6ci5pdGVtLHR8fChyLndpZHRoPWkub3V0ZXJXaWR0aCgpLHIuaGVpZ2h0PWkub3V0ZXJIZWlnaHQoKSkscz1pLm9mZnNldCgpLHIubGVmdD1zLmxlZnQsci50b3A9cy50b3B9aWYodGhpcy5vcHRpb25zLmN1c3RvbSYmdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycyl0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwodGhpcyk7ZWxzZSBmb3Iobj10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7bj49MDtuLS0pcz10aGlzLmNvbnRhaW5lcnNbbl0uZWxlbWVudC5vZmZzZXQoKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUubGVmdD1zLmxlZnQsdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLnRvcD1zLnRvcCx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUud2lkdGg9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub3V0ZXJXaWR0aCgpLHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5oZWlnaHQ9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTtyZXR1cm4gdGhpc30sX2NyZWF0ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKHQpe3Q9dHx8dGhpczt2YXIgbixyPXQub3B0aW9ucztpZighci5wbGFjZWhvbGRlcnx8ci5wbGFjZWhvbGRlci5jb25zdHJ1Y3Rvcj09PVN0cmluZyluPXIucGxhY2Vob2xkZXIsci5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciByPWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LmN1cnJlbnRJdGVtWzBdLm5vZGVOYW1lKSkuYWRkQ2xhc3Mobnx8dC5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUrIiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlciIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKVswXTtyZXR1cm4gbnx8KHIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIikscn0sdXBkYXRlOmZ1bmN0aW9uKGUsaSl7aWYobiYmIXIuZm9yY2VQbGFjZWhvbGRlclNpemUpcmV0dXJuO2kuaGVpZ2h0KCl8fGkuaGVpZ2h0KHQuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1RvcCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0JvdHRvbSIpfHwwLDEwKSksaS53aWR0aCgpfHxpLndpZHRoKHQuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nTGVmdCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1JpZ2h0Iil8fDAsMTApKX19O3QucGxhY2Vob2xkZXI9ZShyLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlciksci5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdSxhLGYsbCxjPW51bGwsaD1udWxsO2ZvcihuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl7aWYoZS5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLHRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50WzBdKSljb250aW51ZTtpZih0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUpKXtpZihjJiZlLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50WzBdLGMuZWxlbWVudFswXSkpY29udGludWU7Yz10aGlzLmNvbnRhaW5lcnNbbl0saD1ufWVsc2UgdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoIm91dCIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5vdmVyPTApfWlmKCFjKXJldHVybjtpZih0aGlzLmNvbnRhaW5lcnMubGVuZ3RoPT09MSl0aGlzLmNvbnRhaW5lcnNbaF0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xO2Vsc2V7aT0xZTQscz1udWxsLG89dGhpcy5jb250YWluZXJzW2hdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIix1PXRoaXMuY29udGFpbmVyc1toXS5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiLGE9dGhpcy5wb3NpdGlvbkFic1tvXSt0aGlzLm9mZnNldC5jbGlja1tvXTtmb3Iocj10aGlzLml0ZW1zLmxlbmd0aC0xO3I+PTA7ci0tKXtpZighZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbaF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3JdLml0ZW1bMF0pKWNvbnRpbnVlO2lmKHRoaXMuaXRlbXNbcl0uaXRlbVswXT09PXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7Zj10aGlzLml0ZW1zW3JdLml0ZW0ub2Zmc2V0KClbb10sbD0hMSxNYXRoLmFicyhmLWEpPk1hdGguYWJzKGYrdGhpcy5pdGVtc1tyXVt1XS1hKSYmKGw9ITAsZis9dGhpcy5pdGVtc1tyXVt1XSksTWF0aC5hYnMoZi1hKTxpJiYoaT1NYXRoLmFicyhmLWEpLHM9dGhpcy5pdGVtc1tyXSx0aGlzLmRpcmVjdGlvbj1sPyJ1cCI6ImRvd24iKX1pZighcyYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSlyZXR1cm47dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1toXSxzP3RoaXMuX3JlYXJyYW5nZSh0LHMsbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbaF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbaF0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLHRoaXMucGxhY2Vob2xkZXIpLHRoaXMuY29udGFpbmVyc1toXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1toXS5jb250YWluZXJDYWNoZS5vdmVyPTF9fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3QsdGhpcy5jdXJyZW50SXRlbV0pKTpuLmhlbHBlcj09PSJjbG9uZSI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIHIucGFyZW50cygiYm9keSIpLmxlbmd0aHx8ZShuLmFwcGVuZFRvIT09InBhcmVudCI/bi5hcHBlbmRUbzp0aGlzLmN1cnJlbnRJdGVtWzBdLnBhcmVudE5vZGUpWzBdLmFwcGVuZENoaWxkKHJbMF0pLHJbMF09PT10aGlzLmN1cnJlbnRJdGVtWzBdJiYodGhpcy5fc3RvcmVkQ1NTPXt3aWR0aDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCxwb3NpdGlvbjp0aGlzLmN1cnJlbnRJdGVtLmNzcygicG9zaXRpb24iKSx0b3A6dGhpcy5jdXJyZW50SXRlbS5jc3MoInRvcCIpLGxlZnQ6dGhpcy5jdXJyZW50SXRlbS5jc3MoImxlZnQiKX0pLCghclswXS5zdHlsZS53aWR0aHx8bi5mb3JjZUhlbHBlclNpemUpJiZyLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksKCFyWzBdLnN0eWxlLmhlaWdodHx8bi5mb3JjZUhlbHBlclNpemUpJiZyLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxyfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXt0eXBlb2YgdD09InN0cmluZyImJih0PXQuc3BsaXQoIiAiKSksZS5pc0FycmF5KHQpJiYodD17bGVmdDordFswXSx0b3A6K3RbMV18fDB9KSwibGVmdCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLCJyaWdodCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXQucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLCJ0b3AiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10LnRvcCt0aGlzLm1hcmdpbnMudG9wKSwiYm90dG9tImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTt0aGlzLmNzc1Bvc2l0aW9uPT09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJih0LmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSx0LnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpO2lmKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09ZG9jdW1lbnQuYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09Imh0bWwiJiZlLnVpLmllKXQ9e3RvcDowLGxlZnQ6MH07cmV0dXJue3RvcDp0LnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDp0LmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKHRoaXMuY3NzUG9zaXRpb249PT0icmVsYXRpdmUiKXt2YXIgZT10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDplLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6ZS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMub3B0aW9ucztpLmNvbnRhaW5tZW50PT09InBhcmVudCImJihpLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpO2lmKGkuY29udGFpbm1lbnQ9PT0iZG9jdW1lbnQifHxpLmNvbnRhaW5tZW50PT09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsZShpLmNvbnRhaW5tZW50PT09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoZShpLmNvbnRhaW5tZW50PT09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXTsvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3QoaS5jb250YWlubWVudCl8fCh0PWUoaS5jb250YWlubWVudClbMF0sbj1lKGkuY29udGFpbm1lbnQpLm9mZnNldCgpLHI9ZSh0KS5jc3MoIm92ZXJmbG93IikhPT0iaGlkZGVuIix0aGlzLmNvbnRhaW5tZW50PVtuLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LG4udG9wKyhwYXJzZUludChlKHQpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxuLmxlZnQrKHI/TWF0aC5tYXgodC5zY3JvbGxXaWR0aCx0Lm9mZnNldFdpZHRoKTp0Lm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUodCkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsbi50b3ArKHI/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZSh0KS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09PSJhYnNvbHV0ZSI/MTotMSxpPXRoaXMuY3NzUG9zaXRpb24hPT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LHM9LyhodG1sfGJvZHkpL2kudGVzdChpWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6cz8wOmkuc2Nyb2xsVG9wKCkpKnIsbGVmdDpuLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpyK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnItKHRoaXMuY3NzUG9zaXRpb249PT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6cz8wOmkuc2Nyb2xsTGVmdCgpKSpyfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG4scixpPXRoaXMub3B0aW9ucyxzPXQucGFnZVgsbz10LnBhZ2VZLHU9dGhpcy5jc3NQb3NpdGlvbiE9PSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJiEhZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsYT0vKGh0bWx8Ym9keSkvaS50ZXN0KHVbMF0udGFnTmFtZSk7cmV0dXJuIHRoaXMuY3NzUG9zaXRpb249PT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PT1kb2N1bWVudHx8dGhpcy5zY3JvbGxQYXJlbnRbMF09PT10aGlzLm9mZnNldFBhcmVudFswXSkmJih0aGlzLm9mZnNldC5yZWxhdGl2ZT10aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpKSx0aGlzLm9yaWdpbmFsUG9zaXRpb24mJih0aGlzLmNvbnRhaW5tZW50JiYodC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihzPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKG89dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYocz10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihvPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksaS5ncmlkJiYobj10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL2kuZ3JpZFsxXSkqaS5ncmlkWzFdLG89dGhpcy5jb250YWlubWVudD9uLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXSYmbi10aGlzLm9mZnNldC5jbGljay50b3A8PXRoaXMuY29udGFpbm1lbnRbM10/bjpuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXT9uLWkuZ3JpZFsxXTpuK2kuZ3JpZFsxXTpuLHI9dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKHMtdGhpcy5vcmlnaW5hbFBhZ2VYKS9pLmdyaWRbMF0pKmkuZ3JpZFswXSxzPXRoaXMuY29udGFpbm1lbnQ/ci10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdJiZyLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8PXRoaXMuY29udGFpbm1lbnRbMl0/cjpyLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0/ci1pLmdyaWRbMF06citpLmdyaWRbMF06cikpLHt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTphPzA6dS5zY3JvbGxUb3AoKSksbGVmdDpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsodGhpcy5jc3NQb3NpdGlvbj09PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTphPzA6dS5zY3JvbGxMZWZ0KCkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbihlLHQsbixyKXtuP25bMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6dC5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sdGhpcy5kaXJlY3Rpb249PT0iZG93biI/dC5pdGVtWzBdOnQuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBpPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe2k9PT10aGlzLmNvdW50ZXImJnRoaXMucmVmcmVzaFBvc2l0aW9ucyghcil9KX0sX2NsZWFyOmZ1bmN0aW9uKHQsbil7dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHIsaT1bXTshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHIgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tyXT09PSJhdXRvInx8dGhpcy5fc3RvcmVkQ1NTW3JdPT09InN0YXRpYyIpdGhpcy5fc3RvcmVkQ1NTW3JdPSIiO3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpfWVsc2UgdGhpcy5jdXJyZW50SXRlbS5zaG93KCk7dGhpcy5mcm9tT3V0c2lkZSYmIW4mJmkucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIixlLHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwodGhpcy5mcm9tT3V0c2lkZXx8dGhpcy5kb21Qb3NpdGlvbi5wcmV2IT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXSkmJiFuJiZpLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigidXBkYXRlIixlLHRoaXMuX3VpSGFzaCgpKX0pLHRoaXMhPT10aGlzLmN1cnJlbnRDb250YWluZXImJihufHwoaS5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInJlbW92ZSIsZSx0aGlzLl91aUhhc2goKSl9KSxpLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoInJlY2VpdmUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSxpLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoInVwZGF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpKSk7Zm9yKHI9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3I+PTA7ci0tKW58fGkucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tyXSkpLHRoaXMuY29udGFpbmVyc1tyXS5jb250YWluZXJDYWNoZS5vdmVyJiYoaS5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbcl0pKSx0aGlzLmNvbnRhaW5lcnNbcl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09PSJhdXRvIj8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITE7aWYodGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsKXtpZighbil7dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsdCx0aGlzLl91aUhhc2goKSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1ufHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsO2lmKCFuKXtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uY2FsbCh0aGlzLHQpO3RoaXMuX3RyaWdnZXIoInN0b3AiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2UuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbih0KXt2YXIgbj10fHx0aGlzO3JldHVybntoZWxwZXI6bi5oZWxwZXIscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcnx8ZShbXSkscG9zaXRpb246bi5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOm4ub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6bi5wb3NpdGlvbkFicyxpdGVtOm4uY3VycmVudEl0ZW0sc2VuZGVyOnQ/dC5lbGVtZW50Om51bGx9fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9e30saT17fTtyLmhlaWdodD1yLnBhZGRpbmdUb3A9ci5wYWRkaW5nQm90dG9tPXIuYm9yZGVyVG9wV2lkdGg9ci5ib3JkZXJCb3R0b21XaWR0aD0iaGlkZSIsaS5oZWlnaHQ9aS5wYWRkaW5nVG9wPWkucGFkZGluZ0JvdHRvbT1pLmJvcmRlclRvcFdpZHRoPWkuYm9yZGVyQm90dG9tV2lkdGg9InNob3ciLGUud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLHt2ZXJzaW9uOiIxLjEwLjEiLG9wdGlvbnM6e2FjdGl2ZTowLGFuaW1hdGU6e30sY29sbGFwc2libGU6ITEsZXZlbnQ6ImNsaWNrIixoZWFkZXI6Ij4gbGkgPiA6Zmlyc3QtY2hpbGQsPiA6bm90KGxpKTpldmVuIixoZWlnaHRTdHlsZToiYXV0byIsaWNvbnM6e2FjdGl2ZUhlYWRlcjoidWktaWNvbi10cmlhbmdsZS0xLXMiLGhlYWRlcjoidWktaWNvbi10cmlhbmdsZS0xLWUifSxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsInRhYmxpc3QiKSwhdC5jb2xsYXBzaWJsZSYmKHQuYWN0aXZlPT09ITF8fHQuYWN0aXZlPT1udWxsKSYmKHQuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSx0LmFjdGl2ZTwwJiYodC5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTplKCksY29udGVudDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOmUoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5pY29uczt0JiYoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSx0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5fZGVzdHJveUljb25zKCksZT10aGlzLmhlYWRlcnMubmV4dCgpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuZWFjaChmdW5jdGlvbigpey9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX0pLHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmZS5jc3MoImhlaWdodCIsIiIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJhY3RpdmUiKXt0aGlzLl9hY3RpdmF0ZSh0KTtyZXR1cm59ZT09PSJldmVudCImJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyh0KSksdGhpcy5fc3VwZXIoZSx0KSxlPT09ImNvbGxhcHNpYmxlIiYmIXQmJnRoaXMub3B0aW9ucy5hY3RpdmU9PT0hMSYmdGhpcy5fYWN0aXZhdGUoMCksZT09PSJpY29ucyImJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSxlPT09ImRpc2FibGVkIiYmdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHQuYWx0S2V5fHx0LmN0cmxLZXkpcmV0dXJuO3ZhciBuPWUudWkua2V5Q29kZSxyPXRoaXMuaGVhZGVycy5sZW5ndGgsaT10aGlzLmhlYWRlcnMuaW5kZXgodC50YXJnZXQpLHM9ITE7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBuLlJJR0hUOmNhc2Ugbi5ET1dOOnM9dGhpcy5oZWFkZXJzWyhpKzEpJXJdO2JyZWFrO2Nhc2Ugbi5MRUZUOmNhc2Ugbi5VUDpzPXRoaXMuaGVhZGVyc1soaS0xK3IpJXJdO2JyZWFrO2Nhc2Ugbi5TUEFDRTpjYXNlIG4uRU5URVI6dGhpcy5fZXZlbnRIYW5kbGVyKHQpO2JyZWFrO2Nhc2Ugbi5IT01FOnM9dGhpcy5oZWFkZXJzWzBdO2JyZWFrO2Nhc2Ugbi5FTkQ6cz10aGlzLmhlYWRlcnNbci0xXX1zJiYoZSh0LnRhcmdldCkuYXR0cigidGFiSW5kZXgiLC0xKSxlKHMpLmF0dHIoInRhYkluZGV4IiwwKSxzLmZvY3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpKX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKTtpZih0LmFjdGl2ZT09PSExJiZ0LmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoKXQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKTt0LmFjdGl2ZT09PSExP3RoaXMuX2FjdGl2YXRlKDApOnRoaXMuYWN0aXZlLmxlbmd0aCYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLmhlYWRlcnMubGVuZ3RoPT09dGhpcy5oZWFkZXJzLmZpbmQoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aD8odC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLl9hY3RpdmF0ZShNYXRoLm1heCgwLHQuYWN0aXZlLTEpKTp0LmFjdGl2ZT10aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmUpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLHRoaXMuX3JlZnJlc2goKX0sX3Byb2Nlc3NQYW5lbHM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlcikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLHRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50IHVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZmlsdGVyKCI6bm90KC51aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUpIikuaGlkZSgpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LHI9dGhpcy5vcHRpb25zLGk9ci5oZWlnaHRTdHlsZSxzPXRoaXMuZWxlbWVudC5wYXJlbnQoKSxvPXRoaXMuYWNjb3JkaW9uSWQ9InVpLWFjY29yZGlvbi0iKyh0aGlzLmVsZW1lbnQuYXR0cigiaWQiKXx8KytuKTt0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKHIuYWN0aXZlKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwidGFiIikuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJpZCIpLGk9bi5uZXh0KCkscz1pLmF0dHIoImlkIik7cnx8KHI9bysiLWhlYWRlci0iK3Qsbi5hdHRyKCJpZCIscikpLHN8fChzPW8rIi1wYW5lbC0iK3QsaS5hdHRyKCJpZCIscykpLG4uYXR0cigiYXJpYS1jb250cm9scyIscyksaS5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHIpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoci5ldmVudCksaT09PSJmaWxsIj8odD1zLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uY3NzKCJwb3NpdGlvbiIpO2lmKHI9PT0iYWJzb2x1dGUifHxyPT09ImZpeGVkIilyZXR1cm47dC09bi5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbigpe3QtPWUodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCx0LWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKTppPT09ImF1dG8iJiYodD0wLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3Q9TWF0aC5tYXgodCxlKHRoaXMpLmNzcygiaGVpZ2h0IiwiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KHQpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2ZpbmRBY3RpdmUodClbMF07aWYobj09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtuPW58fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0Om4sY3VycmVudFRhcmdldDpuLHByZXZlbnREZWZhdWx0OmUubm9vcH0pfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgbj17a2V5ZG93bjoiX2tleWRvd24ifTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLG4pLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246Il9wYW5lbEtleURvd24ifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pWzBdPT09clswXSxvPXMmJm4uY29sbGFwc2libGUsdT1vP2UoKTppLm5leHQoKSxhPXIubmV4dCgpLGY9e29sZEhlYWRlcjpyLG9sZFBhbmVsOmEsbmV3SGVhZGVyOm8/ZSgpOmksbmV3UGFuZWw6dX07dC5wcmV2ZW50RGVmYXVsdCgpO2lmKHMmJiFuLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCxmKT09PSExKXJldHVybjtuLmFjdGl2ZT1vPyExOnRoaXMuaGVhZGVycy5pbmRleChpKSx0aGlzLmFjdGl2ZT1zP2UoKTppLHRoaXMuX3RvZ2dsZShmKSxyLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxuLmljb25zJiZyLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3Mobi5pY29ucy5hY3RpdmVIZWFkZXIpLmFkZENsYXNzKG4uaWNvbnMuaGVhZGVyKSxzfHwoaS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLG4uaWNvbnMmJmkuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhuLmljb25zLmhlYWRlcikuYWRkQ2xhc3Mobi5pY29ucy5hY3RpdmVIZWFkZXIpLGkubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSl9LF90b2dnbGU6ZnVuY3Rpb24odCl7dmFyIG49dC5uZXdQYW5lbCxyPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6dC5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PW4sdGhpcy5wcmV2SGlkZT1yLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUobixyLHQpOihyLmhpZGUoKSxuLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSksci5hdHRyKHsiYXJpYS1leHBhbmRlZCI6ImZhbHNlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHIucHJldigpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLG4ubGVuZ3RoJiZyLmxlbmd0aD9yLnByZXYoKS5hdHRyKCJ0YWJJbmRleCIsLTEpOm4ubGVuZ3RoJiZ0aGlzLmhlYWRlcnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGFiSW5kZXgiKT09PTB9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG4uYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KS5wcmV2KCkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hbmltYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxvLHUsYT10aGlzLGY9MCxsPWUubGVuZ3RoJiYoIXQubGVuZ3RofHxlLmluZGV4KCk8dC5pbmRleCgpKSxjPXRoaXMub3B0aW9ucy5hbmltYXRlfHx7fSxoPWwmJmMuZG93bnx8YyxwPWZ1bmN0aW9uKCl7YS5fdG9nZ2xlQ29tcGxldGUobil9O3R5cGVvZiBoPT0ibnVtYmVyIiYmKHU9aCksdHlwZW9mIGg9PSJzdHJpbmciJiYobz1oKSxvPW98fGguZWFzaW5nfHxjLmVhc2luZyx1PXV8fGguZHVyYXRpb258fGMuZHVyYXRpb247aWYoIXQubGVuZ3RoKXJldHVybiBlLmFuaW1hdGUoaSx1LG8scCk7aWYoIWUubGVuZ3RoKXJldHVybiB0LmFuaW1hdGUocix1LG8scCk7cz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZShyLHtkdXJhdGlvbjp1LGVhc2luZzpvLHN0ZXA6ZnVuY3Rpb24oZSx0KXt0Lm5vdz1NYXRoLnJvdW5kKGUpfX0pLGUuaGlkZSgpLmFuaW1hdGUoaSx7ZHVyYXRpb246dSxlYXNpbmc6byxjb21wbGV0ZTpwLHN0ZXA6ZnVuY3Rpb24oZSxuKXtuLm5vdz1NYXRoLnJvdW5kKGUpLG4ucHJvcCE9PSJoZWlnaHQiP2YrPW4ubm93OmEub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmKG4ubm93PU1hdGgucm91bmQocy10Lm91dGVySGVpZ2h0KCktZiksZj0wKX19KX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2xkUGFuZWw7dC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikucHJldigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItdG9wIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0Lmxlbmd0aCYmKHQucGFyZW50KClbMF0uY2xhc3NOYW1lPXQucGFyZW50KClbMF0uY2xhc3NOYW1lKSx0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsbnVsbCxlKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIix7dmVyc2lvbjoiMS4xMC4xIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxhdXRvRm9jdXM6ITEsZGVsYXk6MzAwLG1pbkxlbmd0aDoxLHBvc2l0aW9uOntteToibGVmdCB0b3AiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJub25lIn0sc291cmNlOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNwb25zZTpudWxsLHNlYXJjaDpudWxsLHNlbGVjdDpudWxsfSxwZW5kaW5nOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9aT09PSJ0ZXh0YXJlYSIsbz1pPT09ImlucHV0Ijt0aGlzLmlzTXVsdGlMaW5lPXM/ITA6bz8hMTp0aGlzLmVsZW1lbnQucHJvcCgiaXNDb250ZW50RWRpdGFibGUiKSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFtzfHxvPyJ2YWwiOiJ0ZXh0Il0sdGhpcy5pc05ld01lbnU9ITAsdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKSx0aGlzLl9vbih0aGlzLmVsZW1lbnQse2tleWRvd246ZnVuY3Rpb24oaSl7aWYodGhpcy5lbGVtZW50LnByb3AoInJlYWRPbmx5Iikpe3Q9ITAscj0hMCxuPSEwO3JldHVybn10PSExLHI9ITEsbj0hMTt2YXIgcz1lLnVpLmtleUNvZGU7c3dpdGNoKGkua2V5Q29kZSl7Y2FzZSBzLlBBR0VfVVA6dD0hMCx0aGlzLl9tb3ZlKCJwcmV2aW91c1BhZ2UiLGkpO2JyZWFrO2Nhc2Ugcy5QQUdFX0RPV046dD0hMCx0aGlzLl9tb3ZlKCJuZXh0UGFnZSIsaSk7YnJlYWs7Y2FzZSBzLlVQOnQ9ITAsdGhpcy5fa2V5RXZlbnQoInByZXZpb3VzIixpKTticmVhaztjYXNlIHMuRE9XTjp0PSEwLHRoaXMuX2tleUV2ZW50KCJuZXh0IixpKTticmVhaztjYXNlIHMuRU5URVI6Y2FzZSBzLk5VTVBBRF9FTlRFUjp0aGlzLm1lbnUuYWN0aXZlJiYodD0hMCxpLnByZXZlbnREZWZhdWx0KCksdGhpcy5tZW51LnNlbGVjdChpKSk7YnJlYWs7Y2FzZSBzLlRBQjp0aGlzLm1lbnUuYWN0aXZlJiZ0aGlzLm1lbnUuc2VsZWN0KGkpO2JyZWFrO2Nhc2Ugcy5FU0NBUEU6dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJih0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2UoaSksaS5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Om49ITAsdGhpcy5fc2VhcmNoVGltZW91dChpKX19LGtleXByZXNzOmZ1bmN0aW9uKHIpe2lmKHQpe3Q9ITEsci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihuKXJldHVybjt2YXIgaT1lLnVpLmtleUNvZGU7c3dpdGNoKHIua2V5Q29kZSl7Y2FzZSBpLlBBR0VfVVA6dGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixyKTticmVhaztjYXNlIGkuUEFHRV9ET1dOOnRoaXMuX21vdmUoIm5leHRQYWdlIixyKTticmVhaztjYXNlIGkuVVA6dGhpcy5fa2V5RXZlbnQoInByZXZpb3VzIixyKTticmVhaztjYXNlIGkuRE9XTjp0aGlzLl9rZXlFdmVudCgibmV4dCIscil9fSxpbnB1dDpmdW5jdGlvbihlKXtpZihyKXtyPSExLGUucHJldmVudERlZmF1bHQoKTtyZXR1cm59dGhpcy5fc2VhcmNoVGltZW91dChlKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbEJsdXIpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7cmV0dXJufWNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5jbG9zZShlKSx0aGlzLl9jaGFuZ2UoZSl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT1lKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe2lucHV0OmUoKSxyb2xlOm51bGx9KS5oaWRlKCkuZGF0YSgidWktbWVudSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgbj10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7ci50YXJnZXQhPT10LmVsZW1lbnRbMF0mJnIudGFyZ2V0IT09biYmIWUuY29udGFpbnMobixyLnRhcmdldCkmJnQuY2xvc2UoKX0pfSl9LG1lbnVmb2N1czpmdW5jdGlvbih0LG4pe2lmKHRoaXMuaXNOZXdNZW51KXt0aGlzLmlzTmV3TWVudT0hMTtpZih0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKXt0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSk7cmV0dXJufX12YXIgcj1uLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKTshMSE9PXRoaXMuX3RyaWdnZXIoImZvY3VzIix0LHtpdGVtOnJ9KT90Lm9yaWdpbmFsRXZlbnQmJi9ea2V5Ly50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKSYmdGhpcy5fdmFsdWUoci52YWx1ZSk6dGhpcy5saXZlUmVnaW9uLnRleHQoci52YWx1ZSl9LG1lbnVzZWxlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKSxyPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50JiYodGhpcy5lbGVtZW50LmZvY3VzKCksdGhpcy5wcmV2aW91cz1yLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1yLHRoaXMuc2VsZWN0ZWRJdGVtPW59KSksITEhPT10aGlzLl90cmlnZ2VyKCJzZWxlY3QiLGUse2l0ZW06bn0pJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0aGlzLmNsb3NlKGUpLHRoaXMuc2VsZWN0ZWRJdGVtPW59fSksdGhpcy5saXZlUmVnaW9uPWUoIjxzcGFuPiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLGU9PT0ic291cmNlIiYmdGhpcy5faW5pdFNvdXJjZSgpLGU9PT0iYXBwZW5kVG8iJiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxlPT09ImRpc2FibGVkIiYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQ9dC5qcXVlcnl8fHQubm9kZVR5cGU/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLHR8fCh0PXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxuLHI9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihuLHIpe3IoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsbi50ZXJtKSl9KTp0eXBlb2YgdGhpcy5vcHRpb25zLnNvdXJjZT09InN0cmluZyI/KG49dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbih0LGkpe3IueGhyJiZyLnhoci5hYm9ydCgpLHIueGhyPWUuYWpheCh7dXJsOm4sZGF0YTp0LGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGUpe2koZSl9LGVycm9yOmZ1bmN0aW9uKCl7aShbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy50ZXJtIT09dGhpcy5fdmFsdWUoKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe2U9ZSE9bnVsbD9lOnRoaXMuX3ZhbHVlKCksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCk7aWYoZS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gdGhpcy5jbG9zZSh0KTtpZih0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpPT09ITEpcmV0dXJuO3JldHVybiB0aGlzLl9zZWFyY2goZSl9LF9zZWFyY2g6ZnVuY3Rpb24oZSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOmV9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9KytuO3JldHVybiBmdW5jdGlvbihyKXt0PT09biYmZS5fX3Jlc3BvbnNlKHIpLGUucGVuZGluZy0tLGUucGVuZGluZ3x8ZS5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXtlJiYoZT10aGlzLl9ub3JtYWxpemUoZSkpLHRoaXMuX3RyaWdnZXIoInJlc3BvbnNlIixudWxsLHtjb250ZW50OmV9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZlJiZlLmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KGUpLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UoZSl9LF9jbG9zZTpmdW5jdGlvbihlKXt0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMubWVudS5lbGVtZW50LmhpZGUoKSx0aGlzLm1lbnUuYmx1cigpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCYmdFswXS5sYWJlbCYmdFswXS52YWx1ZT90OmUubWFwKHQsZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bGFiZWw6dCx2YWx1ZTp0fTplLmV4dGVuZCh7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSx0KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpO3RoaXMuX3JlbmRlck1lbnUobix0KSx0aGlzLm1lbnUucmVmcmVzaCgpLG4uc2hvdygpLHRoaXMuX3Jlc2l6ZU1lbnUoKSxuLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjp0aGlzLmVsZW1lbnR9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHRoaXMub3B0aW9ucy5hdXRvRm9jdXMmJnRoaXMubWVudS5uZXh0KCl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tZW51LmVsZW1lbnQ7ZS5vdXRlcldpZHRoKE1hdGgubWF4KGUud2lkdGgoIiIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO2UuZWFjaChuLGZ1bmN0aW9uKGUsbil7ci5fcmVuZGVySXRlbURhdGEodCxuKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIix0KX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSgiPGxpPiIpLmFwcGVuZChlKCI8YT4iKS50ZXh0KG4ubGFiZWwpKS5hcHBlbmRUbyh0KX0sX21vdmU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3RoaXMuc2VhcmNoKG51bGwsdCk7cmV0dXJufWlmKHRoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KGUpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QoZSkpe3RoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5tZW51LmJsdXIoKTtyZXR1cm59dGhpcy5tZW51W2VdKHQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpdGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgUmVnRXhwKGUudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KG4pLCJpIik7cmV0dXJuIGUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czoiTm8gc2VhcmNoIHJlc3VsdHMuIixyZXN1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPjE/IiByZXN1bHRzIGFyZSI6IiByZXN1bHQgaXMiKSsiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNoKXJldHVybjtlJiZlLmxlbmd0aD90PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLnRleHQodCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIix1PSJ1aS1zdGF0ZS1ob3ZlciB1aS1zdGF0ZS1hY3RpdmUgIixhPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixmPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5maW5kKCI6dWktYnV0dG9uIik7c2V0VGltZW91dChmdW5jdGlvbigpe3QuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxsPWZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZSxyPXQuZm9ybSxpPWUoW10pO3JldHVybiBuJiYobj1uLnJlcGxhY2UoLycvZywiXFwnIikscj9pPWUocikuZmluZCgiW25hbWU9JyIrbisiJ10iKTppPWUoIltuYW1lPSciK24rIiddIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksaX07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuMTAuMSIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsZiksdHlwZW9mIHRoaXMub3B0aW9ucy5kaXNhYmxlZCE9ImJvb2xlYW4iP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsdT10aGlzLm9wdGlvbnMsYT10aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iLGM9YT8iIjoidWktc3RhdGUtYWN0aXZlIixoPSJ1aS1zdGF0ZS1mb2N1cyI7dS5sYWJlbD09PW51bGwmJih1LmxhYmVsPXRoaXMudHlwZT09PSJpbnB1dCI/dGhpcy5idXR0b25FbGVtZW50LnZhbCgpOnRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmJ1dHRvbkVsZW1lbnQpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhvKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO3RoaXM9PT1uJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoIm1vdXNlbGVhdmUiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLnJlbW92ZUNsYXNzKGMpfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7dS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuZWxlbWVudC5iaW5kKCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3QuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhoKX0pLmJpbmQoImJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaCl9KSxhJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHMpcmV0dXJuO3QucmVmcmVzaCgpfSksdGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpZih1LmRpc2FibGVkKXJldHVybjtzPSExLHI9ZS5wYWdlWCxpPWUucGFnZVl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO2lmKHIhPT1lLnBhZ2VYfHxpIT09ZS5wYWdlWSlzPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMX0pOnRoaXMudHlwZT09PSJyYWRpbyI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMTtlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpO3ZhciBuPXQuZWxlbWVudFswXTtsKG4pLm5vdChuKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KToodGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksbj10aGlzLHQuZG9jdW1lbnQub25lKCJtb3VzZXVwIixmdW5jdGlvbigpe249bnVsbH0pfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJrZXlkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7KHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJrZXl1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSsiIGJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQua2V5dXAoZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFJiZlKHRoaXMpLmNsaWNrKCl9KSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdS5kaXNhYmxlZCksdGhpcy5fcmVzZXRCdXR0b24oKX0sX2RldGVybWluZUJ1dHRvblR5cGU6ZnVuY3Rpb24oKXt2YXIgZSx0LG47dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT90aGlzLnR5cGU9ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpP3RoaXMudHlwZT0icmFkaW8iOnRoaXMuZWxlbWVudC5pcygiaW5wdXQiKT90aGlzLnR5cGU9ImlucHV0Ijp0aGlzLnR5cGU9ImJ1dHRvbiIsdGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIj8oZT10aGlzLmVsZW1lbnQucGFyZW50cygpLmxhc3QoKSx0PSJsYWJlbFtmb3I9JyIrdGhpcy5lbGVtZW50LmF0dHIoImlkIikrIiddIix0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fChlPWUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLmVsZW1lbnQuc2libGluZ3MoKSx0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maWx0ZXIodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCkpKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLG49dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLG4mJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsbikpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobysiICIrdSsiICIrYSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpO2lmKGU9PT0iZGlzYWJsZWQiKXt0P3RoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKCJpbnB1dCwgYnV0dG9uIik/dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVpLWJ1dHRvbi1kaXNhYmxlZCIpO3QhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHQpLHRoaXMudHlwZT09PSJyYWRpbyI/bCh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmlzKCI6Y2hlY2tlZCIpP2UodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOmUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOnRoaXMudHlwZT09PSJjaGVja2JveCImJih0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIik/dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpKX0sX3Jlc2V0QnV0dG9uOmZ1bmN0aW9uKCl7aWYodGhpcy50eXBlPT09ImlucHV0Iil7dGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCk7cmV0dXJufXZhciB0PXRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhhKSxuPWUoIjxzcGFuPjwvc3Bhbj4iLHRoaXMuZG9jdW1lbnRbMF0pLmFkZENsYXNzKCJ1aS1idXR0b24tdGV4dCIpLmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKS5hcHBlbmRUbyh0LmVtcHR5KCkpLnRleHQoKSxyPXRoaXMub3B0aW9ucy5pY29ucyxpPXIucHJpbWFyeSYmci5zZWNvbmRhcnkscz1bXTtyLnByaW1hcnl8fHIuc2Vjb25kYXJ5Pyh0aGlzLm9wdGlvbnMudGV4dCYmcy5wdXNoKCJ1aS1idXR0b24tdGV4dC1pY29uIisoaT8icyI6ci5wcmltYXJ5PyItcHJpbWFyeSI6Ii1zZWNvbmRhcnkiKSksci5wcmltYXJ5JiZ0LnByZXBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gIityLnByaW1hcnkrIic+PC9zcGFuPiIpLHIuc2Vjb25kYXJ5JiZ0LmFwcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIrci5zZWNvbmRhcnkrIic+PC9zcGFuPiIpLHRoaXMub3B0aW9ucy50ZXh0fHwocy5wdXNoKGk/InVpLWJ1dHRvbi1pY29ucy1vbmx5IjoidWktYnV0dG9uLWljb24tb25seSIpLHRoaXMuaGFzVGl0bGV8fHQuYXR0cigidGl0bGUiLGUudHJpbShuKSkpKTpzLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSx0LmFkZENsYXNzKHMuam9pbigiICIpKX19KSxlLndpZGdldCgidWkuYnV0dG9uc2V0Iix7dmVyc2lvbjoiMS4xMC4xIixvcHRpb25zOntpdGVtczoiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEodWktYnV0dG9uKSJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJkaXNhYmxlZCImJnRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsZSx0KSx0aGlzLl9zdXBlcihlLHQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0icnRsIjt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0IiksdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHMoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMuZHBEaXY9byhlKCI8ZGl2IGlkPSciK3RoaXMuX21haW5EaXZJZCsiJyBjbGFzcz0ndWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKX1mdW5jdGlvbiBvKHQpe3ZhciBuPSJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEiO3JldHVybiB0LmRlbGVnYXRlKG4sIm1vdXNlb3V0IixmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1wcmV2IikhPT0tMSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikhPT0tMSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KS5kZWxlZ2F0ZShuLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpLmlubGluZT90LnBhcmVudCgpWzBdOmkuaW5wdXRbMF0pfHwoZSh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSxlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpIT09LTEmJmUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpIT09LTEmJmUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciIpKX0pfWZ1bmN0aW9uIHUodCxuKXtlLmV4dGVuZCh0LG4pO2Zvcih2YXIgciBpbiBuKW5bcl09PW51bGwmJih0W3JdPW5bcl0pO3JldHVybiB0fWUuZXh0ZW5kKGUudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuMTAuMSJ9fSk7dmFyIG49ImRhdGVwaWNrZXIiLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCksaTtlLmV4dGVuZChzLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOiJoYXNEYXRlcGlja2VyIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcy5fZGVmYXVsdHMsZXx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzO3I9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9cj09PSJkaXYifHxyPT09InNwYW4iLHQuaWR8fCh0aGlzLnV1aWQrPTEsdC5pZD0iZHAiK3RoaXMudXVpZCkscz10aGlzLl9uZXdJbnN0KGUodCksaSkscy5zZXR0aW5ncz1lLmV4dGVuZCh7fSxufHx7fSkscj09PSJpbnB1dCI/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodCxzKTppJiZ0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHQscyl9LF9uZXdJbnN0OmZ1bmN0aW9uKHQsbil7dmFyIHI9dFswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfXC1dKS9nLCJcXFxcJDEiKTtyZXR1cm57aWQ6cixpbnB1dDp0LHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOm4sZHBEaXY6bj9vKGUoIjxkaXYgY2xhc3M9JyIrdGhpcy5faW5saW5lQ2xhc3MrIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24odCxyKXt2YXIgaT1lKHQpO3IuYXBwZW5kPWUoW10pLHIudHJpZ2dlcj1lKFtdKTtpZihpLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47dGhpcy5fYXR0YWNobWVudHMoaSxyKSxpLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcykua2V5dXAodGhpcy5fZG9LZXlVcCksdGhpcy5fYXV0b1NpemUociksZS5kYXRhKHQsbixyKSxyLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzLG89dGhpcy5fZ2V0KG4sImFwcGVuZFRleHQiKSx1PXRoaXMuX2dldChuLCJpc1JUTCIpO24uYXBwZW5kJiZuLmFwcGVuZC5yZW1vdmUoKSxvJiYobi5hcHBlbmQ9ZSgiPHNwYW4gY2xhc3M9JyIrdGhpcy5fYXBwZW5kQ2xhc3MrIic+IitvKyI8L3NwYW4+IiksdFt1PyJiZWZvcmUiOiJhZnRlciJdKG4uYXBwZW5kKSksdC51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlciksbi50cmlnZ2VyJiZuLnRyaWdnZXIucmVtb3ZlKCkscj10aGlzLl9nZXQobiwic2hvd09uIiksKHI9PT0iZm9jdXMifHxyPT09ImJvdGgiKSYmdC5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlcik7aWYocj09PSJidXR0b24ifHxyPT09ImJvdGgiKWk9dGhpcy5fZ2V0KG4sImJ1dHRvblRleHQiKSxzPXRoaXMuX2dldChuLCJidXR0b25JbWFnZSIpLG4udHJpZ2dlcj1lKHRoaXMuX2dldChuLCJidXR0b25JbWFnZU9ubHkiKT9lKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpzLGFsdDppLHRpdGxlOml9KTplKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKHM/ZSgiPGltZy8+IikuYXR0cih7c3JjOnMsYWx0OmksdGl0bGU6aX0pOmkpKSx0W3U/ImJlZm9yZSI6ImFmdGVyIl0obi50cmlnZ2VyKSxuLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT10WzBdP2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTplLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXRbMF0/KGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKTplLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pLCExfSl9LF9hdXRvU2l6ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9nZXQoZSwiYXV0b1NpemUiKSYmIWUuaW5saW5lKXt2YXIgdCxuLHIsaSxzPW5ldyBEYXRlKDIwMDksMTEsMjApLG89dGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKTtvLm1hdGNoKC9bRE1dLykmJih0PWZ1bmN0aW9uKGUpe249MCxyPTA7Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyllW2ldLmxlbmd0aD5uJiYobj1lW2ldLmxlbmd0aCxyPWkpO3JldHVybiByfSxzLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsby5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSkscy5zZXREYXRlKHQodGhpcy5fZ2V0KGUsby5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLXMuZ2V0RGF5KCkpKSxlLmlucHV0LmF0dHIoInNpemUiLHRoaXMuX2Zvcm1hdERhdGUoZSxzKS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxyKXt2YXIgaT1lKHQpO2lmKGkuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjtpLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQoci5kcERpdiksZS5kYXRhKHQsbixyKSx0aGlzLl9zZXREYXRlKHIsdGhpcy5fZ2V0RGVmYXVsdERhdGUociksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIociksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHIpLHIuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpLHIuZHBEaXYuY3NzKCJkaXNwbGF5IiwiYmxvY2siKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24odCxyLGkscyxvKXt2YXIgYSxmLGwsYyxoLHA9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gcHx8KHRoaXMudXVpZCs9MSxhPSJkcCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PWUoIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nIithKyInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPiIpLHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxwPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSkscC5zZXR0aW5ncz17fSxlLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sbixwKSksdShwLnNldHRpbmdzLHN8fHt9KSxyPXImJnIuY29uc3RydWN0b3I9PT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUocCxyKTpyLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChyKSx0aGlzLl9wb3M9bz9vLmxlbmd0aD9vOltvLnBhZ2VYLG8ucGFnZVldOm51bGwsdGhpcy5fcG9zfHwoZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLHRoaXMuX3Bvcz1bZi8yLTEwMCtjLGwvMi0xNTAraF0pLHRoaXMuX2RpYWxvZ0lucHV0LmNzcygibGVmdCIsdGhpcy5fcG9zWzBdKzIwKyJweCIpLmNzcygidG9wIix0aGlzLl9wb3NbMV0rInB4IikscC5zZXR0aW5ncy5vblNlbGVjdD1pLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSxlLmJsb2NrVUkmJmUuYmxvY2tVSSh0aGlzLmRwRGl2KSxlLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sbixwKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIHIsaT1lKHQpLHM9ZS5kYXRhKHQsbik7aWYoIWkuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjtyPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlLnJlbW92ZURhdGEodCxuKSxyPT09ImlucHV0Ij8ocy5hcHBlbmQucmVtb3ZlKCkscy50cmlnZ2VyLnJlbW92ZSgpLGkucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS51bmJpbmQoImtleWRvd24iLHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsdGhpcy5fZG9LZXlQcmVzcykudW5iaW5kKCJrZXl1cCIsdGhpcy5fZG9LZXlVcCkpOihyPT09ImRpdiJ8fHI9PT0ic3BhbiIpJiZpLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgcixpLHM9ZSh0KSxvPWUuZGF0YSh0LG4pO2lmKCFzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47cj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocj09PSJpbnB1dCIpdC5kaXNhYmxlZD0hMSxvLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIxLjAiLGN1cnNvcjoiIn0pO2Vsc2UgaWYocj09PSJkaXYifHxyPT09InNwYW4iKWk9cy5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLGkuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxpLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCExKTt0aGlzLl9kaXNhYmxlZElucHV0cz1lLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/bnVsbDplfSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgcixpLHM9ZSh0KSxvPWUuZGF0YSh0LG4pO2lmKCFzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47cj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocj09PSJpbnB1dCIpdC5kaXNhYmxlZD0hMCxvLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIwLjUiLGN1cnNvcjoiZGVmYXVsdCJ9KTtlbHNlIGlmKHI9PT0iZGl2Inx8cj09PSJzcGFuIilpPXMuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxpLmNoaWxkcmVuKCkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksaS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMCk7dGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09dH0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoO3QrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1t0XT09PWUpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZS5kYXRhKHQsbil9Y2F0Y2gocil7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24obixyLGkpe3ZhciBzLG8sYSxmLGw9dGhpcy5fZ2V0SW5zdChuKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdHlwZW9mIHI9PSJzdHJpbmciKXJldHVybiByPT09ImRlZmF1bHRzIj9lLmV4dGVuZCh7fSxlLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpsP3I9PT0iYWxsIj9lLmV4dGVuZCh7fSxsLnNldHRpbmdzKTp0aGlzLl9nZXQobCxyKTpudWxsO3M9cnx8e30sdHlwZW9mIHI9PSJzdHJpbmciJiYocz17fSxzW3JdPWkpLGwmJih0aGlzLl9jdXJJbnN0PT09bCYmdGhpcy5faGlkZURhdGVwaWNrZXIoKSxvPXRoaXMuX2dldERhdGVEYXRlcGlja2VyKG4sITApLGE9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLCJtaW4iKSxmPXRoaXMuX2dldE1pbk1heERhdGUobCwibWF4IiksdShsLnNldHRpbmdzLHMpLGEhPT1udWxsJiZzLmRhdGVGb3JtYXQhPT10JiZzLm1pbkRhdGU9PT10JiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxhKSksZiE9PW51bGwmJnMuZGF0ZUZvcm1hdCE9PXQmJnMubWF4RGF0ZT09PXQmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGYpKSwiZGlzYWJsZWQiaW4gcyYmKHMuZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIobik6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihuKSksdGhpcy5fYXR0YWNobWVudHMoZShuKSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbyksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpfSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsbil7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcihlLHQsbil9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpO3QmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldEluc3QoZSk7biYmKHRoaXMuX3NldERhdGUobix0KSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShuKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldEluc3QoZSk7cmV0dXJuIG4mJiFuLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChuLHQpLG4/dGhpcy5fZ2V0RGF0ZShuKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCksbz0hMCx1PXMuZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpO3MuX2tleUV2ZW50PSEwO2lmKGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA5OmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxvPSExO2JyZWFrO2Nhc2UgMTM6cmV0dXJuIGk9ZSgidGQuIitlLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcysiOm5vdCguIitlLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcysiKSIscy5kcERpdiksaVswXSYmZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQscy5zZWxlY3RlZE1vbnRoLHMuc2VsZWN0ZWRZZWFyLGlbMF0pLG49ZS5kYXRlcGlja2VyLl9nZXQocywib25TZWxlY3QiKSxuPyhyPWUuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShzKSxuLmFwcGx5KHMuaW5wdXQ/cy5pbnB1dFswXTpudWxsLFtyLHNdKSk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQocywic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChzLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM0OmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KHMsInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQocywic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2NsZWFyRGF0ZSh0LnRhcmdldCksbz10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM2Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHQudGFyZ2V0KSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHU/MTotMSwiRCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXksdC5vcmlnaW5hbEV2ZW50LmFsdEtleSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQocywic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChzLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM4Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwtNywiRCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzOToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdT8tMToxLCJEIiksbz10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5PytlLmRhdGVwaWNrZXIuX2dldChzLCJzdGVwQmlnTW9udGhzIik6K2UuZGF0ZXBpY2tlci5fZ2V0KHMsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgNDA6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LDcsIkQiKSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2RlZmF1bHQ6bz0hMX1lbHNlIHQua2V5Q29kZT09PTM2JiZ0LmN0cmxLZXk/ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpvPSExO28mJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaT1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpO2lmKGUuZGF0ZXBpY2tlci5fZ2V0KGksImNvbnN0cmFpbklucHV0IikpcmV0dXJuIG49ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KGksImRhdGVGb3JtYXQiKSkscj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuY2hhckNvZGU9PW51bGw/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHxyPCIgInx8IW58fG4uaW5kZXhPZihyKT4tMX0sX2RvS2V5VXA6ZnVuY3Rpb24odCl7dmFyIG4scj1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpO2lmKHIuaW5wdXQudmFsKCkhPT1yLmxhc3RWYWwpdHJ5e249ZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldChyLCJkYXRlRm9ybWF0Iiksci5pbnB1dD9yLmlucHV0LnZhbCgpOm51bGwsZS5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcocikpLG4mJihlLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQociksZS5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUociksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHIpKX1jYXRjaChpKXt9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt0PXQudGFyZ2V0fHx0LHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJpbnB1dCImJih0PWUoImlucHV0Iix0LnBhcmVudE5vZGUpWzBdKTtpZihlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpfHxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09PXQpcmV0dXJuO3ZhciBuLHIsaSxzLG8sYSxmO249ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09biYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxuJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLHI9ZS5kYXRlcGlja2VyLl9nZXQobiwiYmVmb3JlU2hvdyIpLGk9cj9yLmFwcGx5KHQsW3Qsbl0pOnt9O2lmKGk9PT0hMSlyZXR1cm47dShuLnNldHRpbmdzLGkpLG4ubGFzdFZhbD1udWxsLGUuZGF0ZXBpY2tlci5fbGFzdElucHV0PXQsZS5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKG4pLGUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJih0LnZhbHVlPSIiKSxlLmRhdGVwaWNrZXIuX3Bvc3x8KGUuZGF0ZXBpY2tlci5fcG9zPWUuZGF0ZXBpY2tlci5fZmluZFBvcyh0KSxlLmRhdGVwaWNrZXIuX3Bvc1sxXSs9dC5vZmZzZXRIZWlnaHQpLHM9ITEsZSh0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiBzfD1lKHRoaXMpLmNzcygicG9zaXRpb24iKT09PSJmaXhlZCIsIXN9KSxvPXtsZWZ0OmUuZGF0ZXBpY2tlci5fcG9zWzBdLHRvcDplLmRhdGVwaWNrZXIuX3Bvc1sxXX0sZS5kYXRlcGlja2VyLl9wb3M9bnVsbCxuLmRwRGl2LmVtcHR5KCksbi5kcERpdi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToiYmxvY2siLHRvcDoiLTEwMDBweCJ9KSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIobiksbz1lLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KG4sbyxzKSxuLmRwRGl2LmNzcyh7cG9zaXRpb246ZS5kYXRlcGlja2VyLl9pbkRpYWxvZyYmZS5ibG9ja1VJPyJzdGF0aWMiOnM/ImZpeGVkIjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLGxlZnQ6by5sZWZ0KyJweCIsdG9wOm8udG9wKyJweCJ9KSxuLmlubGluZXx8KGE9ZS5kYXRlcGlja2VyLl9nZXQobiwic2hvd0FuaW0iKSxmPWUuZGF0ZXBpY2tlci5fZ2V0KG4sImR1cmF0aW9uIiksbi5kcERpdi56SW5kZXgoZSh0KS56SW5kZXgoKSsxKSxlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLGUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFthXT9uLmRwRGl2LnNob3coYSxlLmRhdGVwaWNrZXIuX2dldChuLCJzaG93T3B0aW9ucyIpLGYpOm4uZHBEaXZbYXx8InNob3ciXShhP2Y6bnVsbCksbi5pbnB1dC5pcygiOnZpc2libGUiKSYmIW4uaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiZuLmlucHV0LmZvY3VzKCksZS5kYXRlcGlja2VyLl9jdXJJbnN0PW4pfSxfdXBkYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt0aGlzLm1heFJvd3M9NCxpPXQsdC5kcERpdi5lbXB0eSgpLmFwcGVuZCh0aGlzLl9nZW5lcmF0ZUhUTUwodCkpLHRoaXMuX2F0dGFjaEhhbmRsZXJzKHQpLHQuZHBEaXYuZmluZCgiLiIrdGhpcy5fZGF5T3ZlckNsYXNzKyIgYSIpLm1vdXNlb3ZlcigpO3ZhciBuLHI9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCkscz1yWzFdLG89MTc7dC5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIikscz4xJiZ0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIrcykuY3NzKCJ3aWR0aCIsbypzKyJlbSIpLHQuZHBEaXZbKHJbMF0hPT0xfHxyWzFdIT09MT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSx0LmRwRGl2Wyh0aGlzLl9nZXQodCwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5pbnB1dCYmdC5pbnB1dC5pcygiOnZpc2libGUiKSYmIXQuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiZ0LmlucHV0WzBdIT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmdC5pbnB1dC5mb2N1cygpLHQueWVhcnNodG1sJiYobj10LnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bj09PXQueWVhcnNodG1sJiZ0LnllYXJzaHRtbCYmdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgodC55ZWFyc2h0bWwpLG49dC55ZWFyc2h0bWw9bnVsbH0sMCkpfSxfZ2V0Qm9yZGVyczpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm57dGhpbjoxLG1lZGl1bToyLHRoaWNrOjN9W2VdfHxlfTtyZXR1cm5bcGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItbGVmdC13aWR0aCIpKSkscGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpKV19LF9jaGVja09mZnNldDpmdW5jdGlvbih0LG4scil7dmFyIGk9dC5kcERpdi5vdXRlcldpZHRoKCkscz10LmRwRGl2Lm91dGVySGVpZ2h0KCksbz10LmlucHV0P3QuaW5wdXQub3V0ZXJXaWR0aCgpOjAsdT10LmlucHV0P3QuaW5wdXQub3V0ZXJIZWlnaHQoKTowLGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhyPzA6ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxmPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKHI/MDplKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIG4ubGVmdC09dGhpcy5fZ2V0KHQsImlzUlRMIik/aS1vOjAsbi5sZWZ0LT1yJiZuLmxlZnQ9PT10LmlucHV0Lm9mZnNldCgpLmxlZnQ/ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsbi50b3AtPXImJm4udG9wPT09dC5pbnB1dC5vZmZzZXQoKS50b3ArdT9lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLG4ubGVmdC09TWF0aC5taW4obi5sZWZ0LG4ubGVmdCtpPmEmJmE+aT9NYXRoLmFicyhuLmxlZnQraS1hKTowKSxuLnRvcC09TWF0aC5taW4obi50b3Asbi50b3Arcz5mJiZmPnM/TWF0aC5hYnMocyt1KTowKSxufSxfZmluZFBvczpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2dldEluc3QodCksaT10aGlzLl9nZXQociwiaXNSVEwiKTt3aGlsZSh0JiYodC50eXBlPT09ImhpZGRlbiJ8fHQubm9kZVR5cGUhPT0xfHxlLmV4cHIuZmlsdGVycy5oaWRkZW4odCkpKXQ9dFtpPyJwcmV2aW91c1NpYmxpbmciOiJuZXh0U2libGluZyJdO3JldHVybiBuPWUodCkub2Zmc2V0KCksW24ubGVmdCxuLnRvcF19LF9oaWRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgcixpLHMsbyx1PXRoaXMuX2N1ckluc3Q7aWYoIXV8fHQmJnUhPT1lLmRhdGEodCxuKSlyZXR1cm47dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihyPXRoaXMuX2dldCh1LCJzaG93QW5pbSIpLGk9dGhpcy5fZ2V0KHUsImR1cmF0aW9uIikscz1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyh1KX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtyXXx8ZS5lZmZlY3RzW3JdKT91LmRwRGl2LmhpZGUocixlLmRhdGVwaWNrZXIuX2dldCh1LCJzaG93T3B0aW9ucyIpLGkscyk6dS5kcERpdltyPT09InNsaWRlRG93biI/InNsaWRlVXAiOnI9PT0iZmFkZUluIj8iZmFkZU91dCI6ImhpZGUiXShyP2k6bnVsbCxzKSxyfHxzKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsbz10aGlzLl9nZXQodSwib25DbG9zZSIpLG8mJm8uYXBwbHkodS5pbnB1dD91LmlucHV0WzBdOm51bGwsW3UuaW5wdXQ/dS5pbnB1dC52YWwoKToiIix1XSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksZS5ibG9ja1VJJiYoZS51bmJsb2NrVUkoKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24odCl7aWYoIWUuZGF0ZXBpY2tlci5fY3VySW5zdClyZXR1cm47dmFyIG49ZSh0LnRhcmdldCkscj1lLmRhdGVwaWNrZXIuX2dldEluc3QoblswXSk7KG5bMF0uaWQhPT1lLmRhdGVwaWNrZXIuX21haW5EaXZJZCYmbi5wYXJlbnRzKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoPT09MCYmIW4uaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiFuLmNsb3Nlc3QoIi4iK2UuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGgmJmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJighZS5kYXRlcGlja2VyLl9pbkRpYWxvZ3x8IWUuYmxvY2tVSSl8fG4uaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJmUuZGF0ZXBpY2tlci5fY3VySW5zdCE9PXIpJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT1lKHQpLHM9dGhpcy5fZ2V0SW5zdChpWzBdKTtpZih0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpWzBdKSlyZXR1cm47dGhpcy5fYWRqdXN0SW5zdERhdGUocyxuKyhyPT09Ik0iP3RoaXMuX2dldChzLCJzaG93Q3VycmVudEF0UG9zIik6MCksciksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihzKX0sX2dvdG9Ub2RheTpmdW5jdGlvbih0KXt2YXIgbixyPWUodCksaT10aGlzLl9nZXRJbnN0KHJbMF0pO3RoaXMuX2dldChpLCJnb3RvQ3VycmVudCIpJiZpLmN1cnJlbnREYXk/KGkuc2VsZWN0ZWREYXk9aS5jdXJyZW50RGF5LGkuZHJhd01vbnRoPWkuc2VsZWN0ZWRNb250aD1pLmN1cnJlbnRNb250aCxpLmRyYXdZZWFyPWkuc2VsZWN0ZWRZZWFyPWkuY3VycmVudFllYXIpOihuPW5ldyBEYXRlLGkuc2VsZWN0ZWREYXk9bi5nZXREYXRlKCksaS5kcmF3TW9udGg9aS5zZWxlY3RlZE1vbnRoPW4uZ2V0TW9udGgoKSxpLmRyYXdZZWFyPWkuc2VsZWN0ZWRZZWFyPW4uZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKGkpLHRoaXMuX2FkanVzdERhdGUocil9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUodCkscz10aGlzLl9nZXRJbnN0KGlbMF0pO3NbInNlbGVjdGVkIisocj09PSJNIj8iTW9udGgiOiJZZWFyIildPXNbImRyYXciKyhyPT09Ik0iPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQobi5vcHRpb25zW24uc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShzKSx0aGlzLl9hZGp1c3REYXRlKGkpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLG89ZSh0KTtpZihlKGkpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIob1swXSkpcmV0dXJuO3M9dGhpcy5fZ2V0SW5zdChvWzBdKSxzLnNlbGVjdGVkRGF5PXMuY3VycmVudERheT1lKCJhIixpKS5odG1sKCkscy5zZWxlY3RlZE1vbnRoPXMuY3VycmVudE1vbnRoPW4scy5zZWxlY3RlZFllYXI9cy5jdXJyZW50WWVhcj1yLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKHMscy5jdXJyZW50RGF5LHMuY3VycmVudE1vbnRoLHMuY3VycmVudFllYXIpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3RoaXMuX3NlbGVjdERhdGUobiwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKHQsbil7dmFyIHIsaT1lKHQpLHM9dGhpcy5fZ2V0SW5zdChpWzBdKTtuPW4hPW51bGw/bjp0aGlzLl9mb3JtYXREYXRlKHMpLHMuaW5wdXQmJnMuaW5wdXQudmFsKG4pLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShzKSxyPXRoaXMuX2dldChzLCJvblNlbGVjdCIpLHI/ci5hcHBseShzLmlucHV0P3MuaW5wdXRbMF06bnVsbCxbbixzXSk6cy5pbnB1dCYmcy5pbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKSxzLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKHMpOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1zLmlucHV0WzBdLHR5cGVvZiBzLmlucHV0WzBdIT0ib2JqZWN0IiYmcy5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyLGkscz10aGlzLl9nZXQodCwiYWx0RmllbGQiKTtzJiYobj10aGlzLl9nZXQodCwiYWx0Rm9ybWF0Iil8fHRoaXMuX2dldCh0LCJkYXRlRm9ybWF0Iikscj10aGlzLl9nZXREYXRlKHQpLGk9dGhpcy5mb3JtYXREYXRlKG4scix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpLGUocykuZWFjaChmdW5jdGlvbigpe2UodGhpcykudmFsKGkpfSkpfSxub1dlZWtlbmRzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuW3Q+MCYmdDw2LCIiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgRGF0ZShlLmdldFRpbWUoKSk7cmV0dXJuIG4uc2V0RGF0ZShuLmdldERhdGUoKSs0LShuLmdldERheSgpfHw3KSksdD1uLmdldFRpbWUoKSxuLnNldE1vbnRoKDApLG4uc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKHQtbikvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LG4scil7aWYodD09bnVsbHx8bj09bnVsbCl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cyI7bj10eXBlb2Ygbj09Im9iamVjdCI/bi50b1N0cmluZygpOm4rIiI7aWYobj09PSIiKXJldHVybiBudWxsO3ZhciBpLHMsbyx1PTAsYT0ocj9yLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLGY9dHlwZW9mIGEhPSJzdHJpbmciP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChhLDEwKSxsPShyP3IuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxjPShyP3IuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGg9KHI/ci5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxwPShyP3IubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxkPS0xLHY9LTEsbT0tMSxnPS0xLHk9ITEsYix3PWZ1bmN0aW9uKGUpe3ZhciBuPWkrMTx0Lmxlbmd0aCYmdC5jaGFyQXQoaSsxKT09PWU7cmV0dXJuIG4mJmkrKyxufSxFPWZ1bmN0aW9uKGUpe3ZhciB0PXcoZSkscj1lPT09IkAiPzE0OmU9PT0iISI/MjA6ZT09PSJ5IiYmdD80OmU9PT0ibyI/MzoyLGk9bmV3IFJlZ0V4cCgiXlxcZHsxLCIrcisifSIpLHM9bi5zdWJzdHJpbmcodSkubWF0Y2goaSk7aWYoIXMpdGhyb3ciTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIit1O3JldHVybiB1Kz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sUz1mdW5jdGlvbih0LHIsaSl7dmFyIHM9LTEsbz1lLm1hcCh3KHQpP2k6cixmdW5jdGlvbihlLHQpe3JldHVybltbdCxlXV19KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuLShlWzFdLmxlbmd0aC10WzFdLmxlbmd0aCl9KTtlLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciByPXRbMV07aWYobi5zdWJzdHIodSxyLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gcz10WzBdLHUrPXIubGVuZ3RoLCExfSk7aWYocyE9PS0xKXJldHVybiBzKzE7dGhyb3ciVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICIrdX0seD1mdW5jdGlvbigpe2lmKG4uY2hhckF0KHUpIT09dC5jaGFyQXQoaSkpdGhyb3ciVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uICIrdTt1Kyt9O2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYoeSl0LmNoYXJBdChpKT09PSInIiYmIXcoIiciKT95PSExOngoKTtlbHNlIHN3aXRjaCh0LmNoYXJBdChpKSl7Y2FzZSJkIjptPUUoImQiKTticmVhaztjYXNlIkQiOlMoIkQiLGwsYyk7YnJlYWs7Y2FzZSJvIjpnPUUoIm8iKTticmVhaztjYXNlIm0iOnY9RSgibSIpO2JyZWFrO2Nhc2UiTSI6dj1TKCJNIixoLHApO2JyZWFrO2Nhc2UieSI6ZD1FKCJ5Iik7YnJlYWs7Y2FzZSJAIjpiPW5ldyBEYXRlKEUoIkAiKSksZD1iLmdldEZ1bGxZZWFyKCksdj1iLmdldE1vbnRoKCkrMSxtPWIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6Yj1uZXcgRGF0ZSgoRSgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLGQ9Yi5nZXRGdWxsWWVhcigpLHY9Yi5nZXRNb250aCgpKzEsbT1iLmdldERhdGUoKTticmVhaztjYXNlIiciOncoIiciKT94KCk6eT0hMDticmVhaztkZWZhdWx0OngoKX1pZih1PG4ubGVuZ3RoKXtvPW4uc3Vic3RyKHUpO2lmKCEvXlxzKy8udGVzdChvKSl0aHJvdyJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6ICIrb31kPT09LTE/ZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6ZDwxMDAmJihkKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsoZDw9Zj8wOi0xMDApKTtpZihnPi0xKXt2PTEsbT1nO2Rve3M9dGhpcy5fZ2V0RGF5c0luTW9udGgoZCx2LTEpO2lmKG08PXMpYnJlYWs7disrLG0tPXN9d2hpbGUoITApfWI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCx2LTEsbSkpO2lmKGIuZ2V0RnVsbFllYXIoKSE9PWR8fGIuZ2V0TW9udGgoKSsxIT09dnx8Yi5nZXREYXRlKCkhPT1tKXRocm93IkludmFsaWQgZGF0ZSI7cmV0dXJuIGJ9LEFUT006Inl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXkiLElTT184NjAxOiJ5eS1tbS1kZCIsUkZDXzgyMjoiRCwgZCBNIHkiLFJGQ184NTA6IkRELCBkZC1NLXkiLFJGQ18xMDM2OiJELCBkIE0geSIsUkZDXzExMjM6IkQsIGQgTSB5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eSIsUlNTOiJELCBkIE0geSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eS1tbS1kZCIsX3RpY2tzVG8xOTcwOig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSkqMjQqNjAqNjAqMWU3LGZvcm1hdERhdGU6ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiIiO3ZhciByLGk9KG4/bi5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LHM9KG4/bi5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsbz0obj9uLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LHU9KG4/bi5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGE9ZnVuY3Rpb24odCl7dmFyIG49cisxPGUubGVuZ3RoJiZlLmNoYXJBdChyKzEpPT09dDtyZXR1cm4gbiYmcisrLG59LGY9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIiK3Q7aWYoYShlKSl3aGlsZShyLmxlbmd0aDxuKXI9IjAiK3I7cmV0dXJuIHJ9LGw9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGEoZSk/clt0XTpuW3RdfSxjPSIiLGg9ITE7aWYodClmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWlmKGgpZS5jaGFyQXQocik9PT0iJyImJiFhKCInIik/aD0hMTpjKz1lLmNoYXJBdChyKTtlbHNlIHN3aXRjaChlLmNoYXJBdChyKSl7Y2FzZSJkIjpjKz1mKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmMrPWwoIkQiLHQuZ2V0RGF5KCksaSxzKTticmVhaztjYXNlIm8iOmMrPWYoIm8iLE1hdGgucm91bmQoKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSkuZ2V0VGltZSgpLShuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKSkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjpjKz1mKCJtIix0LmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmMrPWwoIk0iLHQuZ2V0TW9udGgoKSxvLHUpO2JyZWFrO2Nhc2UieSI6Yys9YSgieSIpP3QuZ2V0RnVsbFllYXIoKToodC5nZXRZZWFyKCklMTAwPDEwPyIwIjoiIikrdC5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6Yys9dC5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjpjKz10LmdldFRpbWUoKSoxZTQrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjphKCInIik/Yys9IiciOmg9ITA7YnJlYWs7ZGVmYXVsdDpjKz1lLmNoYXJBdChyKX1yZXR1cm4gY30sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPSExLGk9ZnVuY3Rpb24obil7dmFyIHI9dCsxPGUubGVuZ3RoJiZlLmNoYXJBdCh0KzEpPT09bjtyZXR1cm4gciYmdCsrLHJ9O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspaWYocillLmNoYXJBdCh0KT09PSInIiYmIWkoIiciKT9yPSExOm4rPWUuY2hhckF0KHQpO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KHQpKXtjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlIkAiOm4rPSIwMTIzNDU2Nzg5IjticmVhaztjYXNlIkQiOmNhc2UiTSI6cmV0dXJuIG51bGw7Y2FzZSInIjppKCInIik/bis9IiciOnI9ITA7YnJlYWs7ZGVmYXVsdDpuKz1lLmNoYXJBdCh0KX1yZXR1cm4gbn0sX2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBlLnNldHRpbmdzW25dIT09dD9lLnNldHRpbmdzW25dOnRoaXMuX2RlZmF1bHRzW25dfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCk9PT1lLmxhc3RWYWwpcmV0dXJuO3ZhciBuPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscj1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsaT10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxzPWksbz10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e3M9dGhpcy5wYXJzZURhdGUobixyLG8pfHxpfWNhdGNoKHUpe3I9dD8iIjpyfWUuc2VsZWN0ZWREYXk9cy5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPXMuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPXMuZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cj9zLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXI/cy5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1yP3MuZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLCJkZWZhdWx0RGF0ZSIpLG5ldyBEYXRlKSl9LF9kZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLHR9LHM9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBlLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHQsImRhdGVGb3JtYXQiKSxuLGUuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKHQpKX1jYXRjaChyKXt9dmFyIGk9KG4udG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT9lLmRhdGVwaWNrZXIuX2dldERhdGUodCk6bnVsbCl8fG5ldyBEYXRlLHM9aS5nZXRGdWxsWWVhcigpLG89aS5nZXRNb250aCgpLHU9aS5nZXREYXRlKCksYT0vKFsrXC1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxmPWEuZXhlYyhuKTt3aGlsZShmKXtzd2l0Y2goZlsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6dSs9cGFyc2VJbnQoZlsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOnUrPXBhcnNlSW50KGZbMV0sMTApKjc7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOm8rPXBhcnNlSW50KGZbMV0sMTApLHU9TWF0aC5taW4odSxlLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKHMsbykpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjpzKz1wYXJzZUludChmWzFdLDEwKSx1PU1hdGgubWluKHUsZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChzLG8pKX1mPWEuZXhlYyhuKX1yZXR1cm4gbmV3IERhdGUocyxvLHUpfSxvPW49PW51bGx8fG49PT0iIj9yOnR5cGVvZiBuPT0ic3RyaW5nIj9zKG4pOnR5cGVvZiBuPT0ibnVtYmVyIj9pc05hTihuKT9yOmkobik6bmV3IERhdGUobi5nZXRUaW1lKCkpO3JldHVybiBvPW8mJm8udG9TdHJpbmcoKT09PSJJbnZhbGlkIERhdGUiP3I6byxvJiYoby5zZXRIb3VycygwKSxvLnNldE1pbnV0ZXMoMCksby5zZXRTZWNvbmRzKDApLG8uc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChvKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9IXQsaT1lLnNlbGVjdGVkTW9udGgscz1lLnNlbGVjdGVkWWVhcixvPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1vLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9by5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1vLmdldEZ1bGxZZWFyKCksKGkhPT1lLnNlbGVjdGVkTW9udGh8fHMhPT1lLnNlbGVjdGVkWWVhcikmJiFuJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocj8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJmUuaW5wdXQudmFsKCk9PT0iIj9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXQodCwic3RlcE1vbnRocyIpLGk9IiMiK3QuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO3QuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgdD17cHJldjpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrcl0uZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShpLC1uLCJNIil9LG5leHQ6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK3JdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoaSwrbiwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIityXS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrcl0uZGF0ZXBpY2tlci5fZ290b1RvZGF5KGkpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIityXS5kYXRlcGlja2VyLl9zZWxlY3REYXkoaSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK3JdLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihpLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK3JdLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihpLHRoaXMsIlkiKSwhMX19O2UodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzLG8sdSxhLGYsbCxjLGgscCxkLHYsbSxnLHksYix3LEUsUyx4LFQsTixDLGssTCxBLE8sTSxfLEQsUCxILEIsaixGLEkscT1uZXcgRGF0ZSxSPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHEuZ2V0RnVsbFllYXIoKSxxLmdldE1vbnRoKCkscS5nZXREYXRlKCkpKSxVPXRoaXMuX2dldChlLCJpc1JUTCIpLHo9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLFc9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxYPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiksVj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSwkPXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksSj10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLEs9VlswXSE9PTF8fFZbMV0hPT0xLFE9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLEc9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxZPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksWj1lLmRyYXdNb250aC0kLGV0PWUuZHJhd1llYXI7WjwwJiYoWis9MTIsZXQtLSk7aWYoWSl7dD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShZLmdldEZ1bGxZZWFyKCksWS5nZXRNb250aCgpLVZbMF0qVlsxXSsxLFkuZ2V0RGF0ZSgpKSksdD1HJiZ0PEc/Rzp0O3doaWxlKHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQpWi0tLFo8MCYmKFo9MTEsZXQtLSl9ZS5kcmF3TW9udGg9WixlLmRyYXdZZWFyPWV0LG49dGhpcy5fZ2V0KGUsInByZXZUZXh0Iiksbj1YP3RoaXMuZm9ybWF0RGF0ZShuLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFotSiwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTpuLHI9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwtMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIituKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFU/ImUiOiJ3IikrIic+IituKyI8L3NwYW4+PC9hPiI6Vz8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIituKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFU/ImUiOiJ3IikrIic+IituKyI8L3NwYW4+PC9hPiIsaT10aGlzLl9nZXQoZSwibmV4dFRleHQiKSxpPVg/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWitKLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aChlLDEsZXQsWik/IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIraSsiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhVPyJ3IjoiZSIpKyInPiIraSsiPC9zcGFuPjwvYT4iOlc/IiI6IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIraSsiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhVPyJ3IjoiZSIpKyInPiIraSsiPC9zcGFuPjwvYT4iLG89dGhpcy5fZ2V0KGUsImN1cnJlbnRUZXh0IiksdT10aGlzLl9nZXQoZSwiZ290b0N1cnJlbnQiKSYmZS5jdXJyZW50RGF5P1E6UixvPVg/dGhpcy5mb3JtYXREYXRlKG8sdSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOm8sYT1lLmlubGluZT8iIjoiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3RoaXMuX2dldChlLCJjbG9zZVRleHQiKSsiPC9idXR0b24+IixmPXo/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+IisoVT9hOiIiKSsodGhpcy5faXNJblJhbmdlKGUsdSk/IjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK28rIjwvYnV0dG9uPiI6IiIpKyhVPyIiOmEpKyI8L2Rpdj4iOiIiLGw9cGFyc2VJbnQodGhpcy5fZ2V0KGUsImZpcnN0RGF5IiksMTApLGw9aXNOYU4obCk/MDpsLGM9dGhpcy5fZ2V0KGUsInNob3dXZWVrIiksaD10aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxwPXRoaXMuX2dldChlLCJkYXlOYW1lc01pbiIpLGQ9dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKSx2PXRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxtPXRoaXMuX2dldChlLCJiZWZvcmVTaG93RGF5IiksZz10aGlzLl9nZXQoZSwic2hvd090aGVyTW9udGhzIikseT10aGlzLl9nZXQoZSwic2VsZWN0T3RoZXJNb250aHMiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKGUpLHc9IiIsRTtmb3IoUz0wO1M8VlswXTtTKyspe3g9IiIsdGhpcy5tYXhSb3dzPTQ7Zm9yKFQ9MDtUPFZbMV07VCsrKXtOPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosZS5zZWxlY3RlZERheSkpLEM9IiB1aS1jb3JuZXItYWxsIixrPSIiO2lmKEspe2srPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwIjtpZihWWzFdPjEpc3dpdGNoKFQpe2Nhc2UgMDprKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLEM9IiB1aS1jb3JuZXItIisoVT8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBWWzFdLTE6ays9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLEM9IiB1aS1jb3JuZXItIisoVT8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDprKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixDPSIifWsrPSInPiJ9ays9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IitDKyInPiIrKC9hbGx8bGVmdC8udGVzdChDKSYmUz09PTA/VT9zOnI6IiIpKygvYWxsfHJpZ2h0Ly50ZXN0KEMpJiZTPT09MD9VP3I6czoiIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoZSxaLGV0LEcsWSxTPjB8fFQ+MCxkLHYpKyI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD4iKyI8dHI+IixMPWM/Ijx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwid2Vla0hlYWRlciIpKyI8L3RoPiI6IiI7Zm9yKEU9MDtFPDc7RSsrKUE9KEUrbCklNyxMKz0iPHRoIisoKEUrbCs2KSU3Pj01PyIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIjoiIikrIj4iKyI8c3BhbiB0aXRsZT0nIitoW0FdKyInPiIrcFtBXSsiPC9zcGFuPjwvdGg+IjtrKz1MKyI8L3RyPjwvdGhlYWQ+PHRib2R5PiIsTz10aGlzLl9nZXREYXlzSW5Nb250aChldCxaKSxldD09PWUuc2VsZWN0ZWRZZWFyJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LE8pKSxNPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoZXQsWiktbCs3KSU3LF89TWF0aC5jZWlsKChNK08pLzcpLEQ9Sz90aGlzLm1heFJvd3M+Xz90aGlzLm1heFJvd3M6XzpfLHRoaXMubWF4Um93cz1ELFA9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWiwxLU0pKTtmb3IoSD0wO0g8RDtIKyspe2srPSI8dHI+IixCPWM/Ijx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwiY2FsY3VsYXRlV2VlayIpKFApKyI8L3RkPiI6IiI7Zm9yKEU9MDtFPDc7RSsrKWo9bT9tLmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtQXSk6WyEwLCIiXSxGPVAuZ2V0TW9udGgoKSE9PVosST1GJiYheXx8IWpbMF18fEcmJlA8R3x8WSYmUD5ZLEIrPSI8dGQgY2xhc3M9JyIrKChFK2wrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsoRj8iIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiOiIiKSsoUC5nZXRUaW1lKCk9PT1OLmdldFRpbWUoKSYmWj09PWUuc2VsZWN0ZWRNb250aCYmZS5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09UC5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09Ti5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKEk/IiAiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSsoRiYmIWc/IiI6IiAiK2pbMV0rKFAuZ2V0VGltZSgpPT09US5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKFAuZ2V0VGltZSgpPT09Ui5nZXRUaW1lKCk/IiB1aS1kYXRlcGlja2VyLXRvZGF5IjoiIikpKyInIisoKCFGfHxnKSYmalsyXT8iIHRpdGxlPSciK2pbMl0ucmVwbGFjZSgvJy9nLCImIzM5OyIpKyInIjoiIikrKEk/IiI6IiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9JyIrUC5nZXRNb250aCgpKyInIGRhdGEteWVhcj0nIitQLmdldEZ1bGxZZWFyKCkrIiciKSsiPiIrKEYmJiFnPyImI3hhMDsiOkk/IjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iK1AuZ2V0RGF0ZSgpKyI8L3NwYW4+IjoiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQiKyhQLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKFAuZ2V0VGltZSgpPT09US5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1hY3RpdmUiOiIiKSsoRj8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyInIGhyZWY9JyMnPiIrUC5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLFAuc2V0RGF0ZShQLmdldERhdGUoKSsxKSxQPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KFApO2srPUIrIjwvdHI+In1aKyssWj4xMSYmKFo9MCxldCsrKSxrKz0iPC90Ym9keT48L3RhYmxlPiIrKEs/IjwvZGl2PiIrKFZbMF0+MCYmVD09PVZbMV0tMT8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1yb3ctYnJlYWsnPjwvZGl2PiI6IiIpOiIiKSx4Kz1rfXcrPXh9cmV0dXJuIHcrPWYsZS5fa2V5RXZlbnQ9ITEsd30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSl7dmFyIGEsZixsLGMsaCxwLGQsdixtPXRoaXMuX2dldChlLCJjaGFuZ2VNb250aCIpLGc9dGhpcy5fZ2V0KGUsImNoYW5nZVllYXIiKSx5PXRoaXMuX2dldChlLCJzaG93TW9udGhBZnRlclllYXIiKSxiPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz4iLHc9IiI7aWYoc3x8IW0pdys9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz4iK29bdF0rIjwvc3Bhbj4iO2Vsc2V7YT1yJiZyLmdldEZ1bGxZZWFyKCk9PT1uLGY9aSYmaS5nZXRGdWxsWWVhcigpPT09bix3Kz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz4iO2ZvcihsPTA7bDwxMjtsKyspKCFhfHxsPj1yLmdldE1vbnRoKCkpJiYoIWZ8fGw8PWkuZ2V0TW9udGgoKSkmJih3Kz0iPG9wdGlvbiB2YWx1ZT0nIitsKyInIisobD09PXQ/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK3VbbF0rIjwvb3B0aW9uPiIpO3crPSI8L3NlbGVjdD4ifXl8fChiKz13KyhzfHwhbXx8IWc/IiYjeGEwOyI6IiIpKTtpZighZS55ZWFyc2h0bWwpe2UueWVhcnNodG1sPSIiO2lmKHN8fCFnKWIrPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz4iK24rIjwvc3Bhbj4iO2Vsc2V7Yz10aGlzLl9nZXQoZSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxoPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL2NbK1wtXS4qLyk/bitwYXJzZUludChlLnN1YnN0cmluZygxKSwxMCk6ZS5tYXRjaCgvWytcLV0uKi8pP2grcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2g6dH0sZD1wKGNbMF0pLHY9TWF0aC5tYXgoZCxwKGNbMV18fCIiKSksZD1yP01hdGgubWF4KGQsci5nZXRGdWxsWWVhcigpKTpkLHY9aT9NYXRoLm1pbih2LGkuZ2V0RnVsbFllYXIoKSk6dixlLnllYXJzaHRtbCs9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPiI7Zm9yKDtkPD12O2QrKyllLnllYXJzaHRtbCs9IjxvcHRpb24gdmFsdWU9JyIrZCsiJyIrKGQ9PT1uPyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitkKyI8L29wdGlvbj4iO2UueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixiKz1lLnllYXJzaHRtbCxlLnllYXJzaHRtbD1udWxsfX1yZXR1cm4gYis9dGhpcy5fZ2V0KGUsInllYXJTdWZmaXgiKSx5JiYoYis9KHN8fCFtfHwhZz8iJiN4YTA7IjoiIikrdyksYis9IjwvZGl2PiIsYn0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmRyYXdZZWFyKyhuPT09IlkiP3Q6MCksaT1lLmRyYXdNb250aCsobj09PSJNIj90OjApLHM9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChyLGkpKSsobj09PSJEIj90OjApLG89dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShyLGkscykpKTtlLnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksKG49PT0iTSJ8fG49PT0iWSIpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLGk9biYmdDxuP246dDtyZXR1cm4gciYmaT5yP3I6aX0sX25vdGlmeUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwib25DaGFuZ2VNb250aFllYXIiKTt0JiZ0LmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtlLnNlbGVjdGVkWWVhcixlLnNlbGVjdGVkTW9udGgrMSxlXSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwibnVtYmVyT2ZNb250aHMiKTtyZXR1cm4gdD09bnVsbD9bMSwxXTp0eXBlb2YgdD09Im51bWJlciI/WzEsdF06dH0sX2dldE1pbk1heERhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLHQrIkRhdGUiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUsdCwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbihlLHQpe3JldHVybihuZXcgRGF0ZShlLHQsMSkpLmdldERheSgpfSxfY2FuQWRqdXN0TW9udGg6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSkscz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShuLHIrKHQ8MD90OmlbMF0qaVsxXSksMSkpO3JldHVybiB0PDAmJnMuc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChzLmdldEZ1bGxZZWFyKCkscy5nZXRNb250aCgpKSksdGhpcy5faXNJblJhbmdlKGUscyl9LF9pc0luUmFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4Iiksbz1udWxsLHU9bnVsbCxhPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKTtyZXR1cm4gYSYmKG49YS5zcGxpdCgiOiIpLHI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLG89cGFyc2VJbnQoblswXSwxMCksdT1wYXJzZUludChuWzFdLDEwKSxuWzBdLm1hdGNoKC9bK1wtXS4qLykmJihvKz1yKSxuWzFdLm1hdGNoKC9bK1wtXS4qLykmJih1Kz1yKSksKCFpfHx0LmdldFRpbWUoKT49aS5nZXRUaW1lKCkpJiYoIXN8fHQuZ2V0VGltZSgpPD1zLmdldFRpbWUoKSkmJighb3x8dC5nZXRGdWxsWWVhcigpPj1vKSYmKCF1fHx0LmdldEZ1bGxZZWFyKCk8PXUpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gdD10eXBlb2YgdCE9InN0cmluZyI/dDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KHQsMTApLHtzaG9ydFllYXJDdXRvZmY6dCxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KGUsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldChlLCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbixyKXt0fHwoZS5jdXJyZW50RGF5PWUuc2VsZWN0ZWREYXksZS5jdXJyZW50TW9udGg9ZS5zZWxlY3RlZE1vbnRoLGUuY3VycmVudFllYXI9ZS5zZWxlY3RlZFllYXIpO3ZhciBpPXQ/dHlwZW9mIHQ9PSJvYmplY3QiP3Q6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocixuLHQpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKSxpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSl9fSksZS5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpcztlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fChlKGRvY3VtZW50KS5tb3VzZWRvd24oZS5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksZSgiIyIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aD09PTAmJmUoImJvZHkiKS5hcHBlbmQoZS5kYXRlcGlja2VyLmRwRGl2KTt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHR5cGVvZiB0IT0ic3RyaW5nInx8dCE9PSJpc0Rpc2FibGVkIiYmdCE9PSJnZXREYXRlIiYmdCE9PSJ3aWRnZXQiP3Q9PT0ib3B0aW9uIiYmYXJndW1lbnRzLmxlbmd0aD09PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciP2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KG4pKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgdD09InN0cmluZyI/ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQobikpOmUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLHQpfSk6ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQobikpfSxlLmRhdGVwaWNrZXI9bmV3IHMsZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLGUuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGUuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjEwLjEiLHdpbmRvd1siRFBfalF1ZXJ5XyIrcl09ZX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LHI9e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9O2Uud2lkZ2V0KCJ1aS5kaWFsb2ciLHt2ZXJzaW9uOiIxLjEwLjEiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJjbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OiJjZW50ZXIiLGF0OiJjZW50ZXIiLG9mOndpbmRvdyxjb2xsaXNpb246ImZpdCIsdXNpbmc6ZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKS5jc3ModCkub2Zmc2V0KCkudG9wO248MCYmZSh0aGlzKS5jc3MoInRvcCIsdC50b3Atbil9fSxyZXNpemFibGU6ITAsc2hvdzpudWxsLHRpdGxlOm51bGwsd2lkdGg6MzAwLGJlZm9yZUNsb3NlOm51bGwsY2xvc2U6bnVsbCxkcmFnOm51bGwsZHJhZ1N0YXJ0Om51bGwsZHJhZ1N0b3A6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNpemU6bnVsbCxyZXNpemVTdGFydDpudWxsLHJlc2l6ZVN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxDc3M9e2Rpc3BsYXk6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksd2lkdGg6dGhpcy5lbGVtZW50WzBdLnN0eWxlLndpZHRoLG1pbkhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWluSGVpZ2h0LG1heEhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LGhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0fSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e3BhcmVudDp0aGlzLmVsZW1lbnQucGFyZW50KCksaW5kZXg6dGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgodGhpcy5lbGVtZW50KX0sdGhpcy5vcmlnaW5hbFRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpLHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9wdGlvbnMudGl0bGV8fHRoaXMub3JpZ2luYWxUaXRsZSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJmUuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmZS5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITF9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiB0JiYodC5qcXVlcnl8fHQubm9kZVR5cGUpP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHR8fCJib2R5IikuZXEoMCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLm9yaWdpbmFsUG9zaXRpb247dGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5jc3ModGhpcy5vcmlnaW5hbENzcykuZGV0YWNoKCksdGhpcy51aURpYWxvZy5zdG9wKCEwLCEwKS5yZW1vdmUoKSx0aGlzLm9yaWdpbmFsVGl0bGUmJnRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIsdGhpcy5vcmlnaW5hbFRpdGxlKSxlPXQucGFyZW50LmNoaWxkcmVuKCkuZXEodC5pbmRleCksZS5sZW5ndGgmJmVbMF0hPT10aGlzLmVsZW1lbnRbMF0/ZS5iZWZvcmUodGhpcy5lbGVtZW50KTp0LnBhcmVudC5hcHBlbmQodGhpcy5lbGVtZW50KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlEaWFsb2d9LGRpc2FibGU6ZS5ub29wLGVuYWJsZTplLm5vb3AsY2xvc2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZighdGhpcy5faXNPcGVufHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsdCk9PT0hMSlyZXR1cm47dGhpcy5faXNPcGVuPSExLHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5vcGVuZXIuZmlsdGVyKCI6Zm9jdXNhYmxlIikuZm9jdXMoKS5sZW5ndGh8fGUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5ibHVyKCksdGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7bi5fdHJpZ2dlcigiY2xvc2UiLHQpfSl9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbigpe3RoaXMuX21vdmVUb1RvcCgpfSxfbW92ZVRvVG9wOmZ1bmN0aW9uKGUsdCl7dmFyIG49ISF0aGlzLnVpRGlhbG9nLm5leHRBbGwoIjp2aXNpYmxlIikuaW5zZXJ0QmVmb3JlKHRoaXMudWlEaWFsb2cpLmxlbmd0aDtyZXR1cm4gbiYmIXQmJnRoaXMuX3RyaWdnZXIoImZvY3VzIixlKSxufSxvcGVuOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9pc09wZW4pe3RoaXMuX21vdmVUb1RvcCgpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCk7cmV0dXJufXRoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX21vdmVUb1RvcChudWxsLCEwKSx0aGlzLl9zaG93KHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLnNob3csZnVuY3Rpb24oKXt0Ll9mb2N1c1RhYmJhYmxlKCksdC5fdHJpZ2dlcigiZm9jdXMiKX0pLHRoaXMuX3RyaWdnZXIoIm9wZW4iKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQuZmluZCgiW2F1dG9mb2N1c10iKTtlLmxlbmd0aHx8KGU9dGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5maWx0ZXIoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZyksZS5lcSgwKS5mb2N1cygpfSxfa2VlcEZvY3VzOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXt2YXIgdD10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQsbj10aGlzLnVpRGlhbG9nWzBdPT09dHx8ZS5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLHQpO258fHRoaXMuX2ZvY3VzVGFiYmFibGUoKX10LnByZXZlbnREZWZhdWx0KCksbi5jYWxsKHRoaXMpLHRoaXMuX2RlbGF5KG4pfSxfY3JlYXRlV3JhcHBlcjpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2c9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLWZyb250ICIrdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZToiZGlhbG9nIn0pLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMudWlEaWFsb2cse2tleWRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiF0LmlzRGVmYXVsdFByZXZlbnRlZCgpJiZ0LmtleUNvZGUmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHQpO3JldHVybn1pZih0LmtleUNvZGUhPT1lLnVpLmtleUNvZGUuVEFCKXJldHVybjt2YXIgbj10aGlzLnVpRGlhbG9nLmZpbmQoIjp0YWJiYWJsZSIpLHI9bi5maWx0ZXIoIjpmaXJzdCIpLGk9bi5maWx0ZXIoIjpsYXN0Iik7dC50YXJnZXQhPT1pWzBdJiZ0LnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCEhdC5zaGlmdEtleT8odC50YXJnZXQ9PT1yWzBdfHx0LnRhcmdldD09PXRoaXMudWlEaWFsb2dbMF0pJiZ0LnNoaWZ0S2V5JiYoaS5mb2N1cygxKSx0LnByZXZlbnREZWZhdWx0KCkpOihyLmZvY3VzKDEpLHQucHJldmVudERlZmF1bHQoKSl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlVG9Ub3AoZSkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZCgiW2FyaWEtZGVzY3JpYmVkYnldIikubGVuZ3RofHx0aGlzLnVpRGlhbG9nLmF0dHIoeyJhcmlhLWRlc2NyaWJlZGJ5Ijp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKCJpZCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciB0O3RoaXMudWlEaWFsb2dUaXRsZWJhcj1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbih0KXtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIil8fHRoaXMudWlEaWFsb2cuZm9jdXMoKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT1lKCI8YnV0dG9uPjwvYnV0dG9uPiIpLmJ1dHRvbih7bGFiZWw6dGhpcy5vcHRpb25zLmNsb3NlVGV4dCxpY29uczp7cHJpbWFyeToidWktaWNvbi1jbG9zZXRoaWNrIn0sdGV4dDohMX0pLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLHtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZShlKX19KSx0PWUoIjxzcGFuPiIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX3RpdGxlKHQpLHRoaXMudWlEaWFsb2cuYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dC5hdHRyKCJpZCIpfSl9LF90aXRsZTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMudGl0bGV8fGUuaHRtbCgiJiMxNjA7IiksZS50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSl9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5vcHRpb25zLmJ1dHRvbnM7dGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksdGhpcy51aUJ1dHRvblNldC5lbXB0eSgpO2lmKGUuaXNFbXB0eU9iamVjdChuKXx8ZS5pc0FycmF5KG4pJiYhbi5sZW5ndGgpe3RoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIik7cmV0dXJufWUuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGkscztyPWUuaXNGdW5jdGlvbihyKT97Y2xpY2s6cix0ZXh0Om59OnIscj1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0sciksaT1yLmNsaWNrLHIuY2xpY2s9ZnVuY3Rpb24oKXtpLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxzPXtpY29uczpyLmljb25zLHRleHQ6ci5zaG93VGV4dH0sZGVsZXRlIHIuaWNvbnMsZGVsZXRlIHIuc2hvd1RleHQsZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHIpLmJ1dHRvbihzKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXtyZXR1cm57cG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5vZmZzZXR9fXZhciB0PXRoaXMsbj10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIixoYW5kbGU6Ii51aS1kaWFsb2ctdGl0bGViYXIiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsc3RhcnQ6ZnVuY3Rpb24obixpKXtlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSx0Ll9ibG9ja0ZyYW1lcygpLHQuX3RyaWdnZXIoImRyYWdTdGFydCIsbixyKGkpKX0sZHJhZzpmdW5jdGlvbihlLG4pe3QuX3RyaWdnZXIoImRyYWciLGUscihuKSl9LHN0b3A6ZnVuY3Rpb24oaSxzKXtuLnBvc2l0aW9uPVtzLnBvc2l0aW9uLmxlZnQtdC5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscy5wb3NpdGlvbi50b3AtdC5kb2N1bWVudC5zY3JvbGxUb3AoKV0sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksdC5fdW5ibG9ja0ZyYW1lcygpLHQuX3RyaWdnZXIoImRyYWdTdG9wIixpLHIocykpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIG8oZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgdD10aGlzLG49dGhpcy5vcHRpb25zLHI9bi5yZXNpemFibGUsaT10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxzPXR5cGVvZiByPT0ic3RyaW5nIj9yOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6bi5tYXhXaWR0aCxtYXhIZWlnaHQ6bi5tYXhIZWlnaHQsbWluV2lkdGg6bi5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpzLHN0YXJ0OmZ1bmN0aW9uKG4scil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksdC5fYmxvY2tGcmFtZXMoKSx0Ll90cmlnZ2VyKCJyZXNpemVTdGFydCIsbixvKHIpKX0scmVzaXplOmZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlcigicmVzaXplIixlLG8obikpfSxzdG9wOmZ1bmN0aW9uKHIsaSl7bi5oZWlnaHQ9ZSh0aGlzKS5oZWlnaHQoKSxuLndpZHRoPWUodGhpcykud2lkdGgoKSxlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSx0Ll91bmJsb2NrRnJhbWVzKCksdC5fdHJpZ2dlcigicmVzaXplU3RvcCIscixvKGkpKX19KS5jc3MoInBvc2l0aW9uIixpKX0sX21pbkhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5oZWlnaHQ9PT0iYXV0byI/ZS5taW5IZWlnaHQ6TWF0aC5taW4oZS5taW5IZWlnaHQsZS5oZWlnaHQpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpO2V8fHRoaXMudWlEaWFsb2cuc2hvdygpLHRoaXMudWlEaWFsb2cucG9zaXRpb24odGhpcy5vcHRpb25zLnBvc2l0aW9uKSxlfHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxzPSExLG89e307ZS5lYWNoKHQsZnVuY3Rpb24oZSx0KXtpLl9zZXRPcHRpb24oZSx0KSxlIGluIG4mJihzPSEwKSxlIGluIHImJihvW2VdPXQpfSkscyYmKHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpKSx0aGlzLnVpRGlhbG9nLmlzKCI6ZGF0YSh1aS1yZXNpemFibGUpIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKCJvcHRpb24iLG8pfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXRoaXMudWlEaWFsb2c7ZT09PSJkaWFsb2dDbGFzcyImJmkucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyh0KTtpZihlPT09ImRpc2FibGVkIilyZXR1cm47dGhpcy5fc3VwZXIoZSx0KSxlPT09ImFwcGVuZFRvIiYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxlPT09ImJ1dHRvbnMiJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksZT09PSJjbG9zZVRleHQiJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSxlPT09ImRyYWdnYWJsZSImJihuPWkuaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxuJiYhdCYmaS5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhbiYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSxlPT09InBvc2l0aW9uIiYmdGhpcy5fcG9zaXRpb24oKSxlPT09InJlc2l6YWJsZSImJihyPWkuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxyJiYhdCYmaS5yZXNpemFibGUoImRlc3Ryb3kiKSxyJiZ0eXBlb2YgdD09InN0cmluZyImJmkucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSwhciYmdCE9PSExJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCkpLGU9PT0idGl0bGUiJiZ0aGlzLl90aXRsZSh0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZCgiLnVpLWRpYWxvZy10aXRsZSIpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSksci5taW5XaWR0aD5yLndpZHRoJiYoci53aWR0aD1yLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnIud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxyLm1pbkhlaWdodC1lKSxuPXR5cGVvZiByLm1heEhlaWdodD09Im51bWJlciI/TWF0aC5tYXgoMCxyLm1heEhlaWdodC1lKToibm9uZSIsci5oZWlnaHQ9PT0iYXV0byI/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0Om4saGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxyLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLm1vZGFsKXJldHVybjtlLnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzfHx0aGlzLl9kZWxheShmdW5jdGlvbigpe2UudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMmJnRoaXMuZG9jdW1lbnQuYmluZCgiZm9jdXNpbi5kaWFsb2ciLGZ1bmN0aW9uKHQpeyFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nIikubGVuZ3RoJiYhZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRhdGVwaWNrZXIiKS5sZW5ndGgmJih0LnByZXZlbnREZWZhdWx0KCksZSgiLnVpLWRpYWxvZzp2aXNpYmxlOmxhc3QgLnVpLWRpYWxvZy1jb250ZW50IikuZGF0YSgidWktZGlhbG9nIikuX2ZvY3VzVGFiYmFibGUoKSl9KX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMrK30sX2Rlc3Ryb3lPdmVybGF5OmZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5tb2RhbClyZXR1cm47dGhpcy5vdmVybGF5JiYoZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcy0tLGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXN8fHRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luLmRpYWxvZyIpLHRoaXMub3ZlcmxheS5yZW1vdmUoKSx0aGlzLm92ZXJsYXk9bnVsbCl9fSksZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcz0wLGUudWlCYWNrQ29tcGF0IT09ITEmJmUud2lkZ2V0KCJ1aS5kaWFsb2ciLGUudWkuZGlhbG9nLHtfcG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMucG9zaXRpb24sbj1bXSxyPVswLDBdLGk7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09Im9iamVjdCImJiIwImluIHQpbj10LnNwbGl0P3Quc3BsaXQoIiAiKTpbdFswXSx0WzFdXSxuLmxlbmd0aD09PTEmJihuWzFdPW5bMF0pLGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihlLHQpeytuW2VdPT09bltlXSYmKHJbZV09bltlXSxuW2VdPXQpfSksdD17bXk6blswXSsoclswXTwwP3JbMF06IisiK3JbMF0pKyIgIituWzFdKyhyWzFdPDA/clsxXToiKyIrclsxXSksYXQ6bi5qb2luKCIgIil9O3Q9ZS5leHRlbmQoe30sZS51aS5kaWFsb2cucHJvdG90eXBlLm9wdGlvbnMucG9zaXRpb24sdCl9ZWxzZSB0PWUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uO2k9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKSxpfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHQpLGl8fHRoaXMudWlEaWFsb2cuaGlkZSgpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkubWVudSIse3ZlcnNpb246IjEuMTAuMSIsZGVmYXVsdEVsZW1lbnQ6Ijx1bD4iLGRlbGF5OjMwMCxvcHRpb25zOntpY29uczp7c3VibWVudToidWktaWNvbi1jYXJhdC0xLWUifSxtZW51czoidWwiLHBvc2l0aW9uOntteToibGVmdCB0b3AiLGF0OiJyaWdodCB0b3AifSxyb2xlOiJtZW51IixibHVyOm51bGwsZm9jdXM6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlTWVudT10aGlzLmVsZW1lbnQsdGhpcy5tb3VzZUhhbmRsZWQ9ITEsdGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS50b2dnbGVDbGFzcygidWktbWVudS1pY29ucyIsISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsdGFiSW5kZXg6MH0pLmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLmRpc2FibGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHRoaXMuX29uKHsibW91c2Vkb3duIC51aS1tZW51LWl0ZW0gPiBhIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktc3RhdGUtZGlzYWJsZWQgPiBhIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktbWVudS1pdGVtOmhhcyhhKSI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpOyF0aGlzLm1vdXNlSGFuZGxlZCYmbi5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCYmKHRoaXMubW91c2VIYW5kbGVkPSEwLHRoaXMuc2VsZWN0KHQpLG4uaGFzKCIudWktbWVudSIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTp0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpfHwodGhpcy5lbGVtZW50LnRyaWdnZXIoImZvY3VzIixbITBdKSx0aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGg9PT0xJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcikpKX0sIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LmN1cnJlbnRUYXJnZXQpO24uc2libGluZ3MoKS5jaGlsZHJlbigiLnVpLXN0YXRlLWFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmZvY3VzKHQsbil9LG1vdXNlbGVhdmU6ImNvbGxhcHNlQWxsIiwibW91c2VsZWF2ZSAudWktbWVudSI6ImNvbGxhcHNlQWxsIixmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWN0aXZlfHx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5lcSgwKTt0fHx0aGlzLmZvY3VzKGUsbil9LGJsdXI6ZnVuY3Rpb24odCl7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLmNvbGxhcHNlQWxsKHQpfSl9LGtleWRvd246Il9rZXlkb3duIn0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2NsaWNrOmZ1bmN0aW9uKHQpe2UodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQpLHRoaXMubW91c2VIYW5kbGVkPSExfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKS5maW5kKCIudWktbWVudSIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1tZW51LWljb25zIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pdGVtIikucmVtb3ZlQ2xhc3MoInVpLW1lbnUtaXRlbSIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikuY2hpbGRyZW4oImEiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWhvdmVyIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1oYXNwb3B1cCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS1tZW51LXN1Ym1lbnUtY2FyYXQiKSYmdC5yZW1vdmUoKX0pLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1kaXZpZGVyIikucmVtb3ZlQ2xhc3MoInVpLW1lbnUtZGl2aWRlciB1aS13aWRnZXQtY29udGVudCIpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKX12YXIgbixyLGkscyxvLHU9ITA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLnByZXZpb3VzUGFnZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5uZXh0UGFnZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5IT01FOnRoaXMuX21vdmUoImZpcnN0IiwiZmlyc3QiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDp0aGlzLl9tb3ZlKCJsYXN0IiwibGFzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6dGhpcy5wcmV2aW91cyh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5ET1dOOnRoaXMubmV4dCh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5MRUZUOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuZXhwYW5kKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOmNhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnRoaXMuX2FjdGl2YXRlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVTQ0FQRTp0aGlzLmNvbGxhcHNlKHQpO2JyZWFrO2RlZmF1bHQ6dT0hMSxyPXRoaXMucHJldmlvdXNGaWx0ZXJ8fCIiLGk9U3RyaW5nLmZyb21DaGFyQ29kZSh0LmtleUNvZGUpLHM9ITEsY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLGk9PT1yP3M9ITA6aT1yK2ksbz1uZXcgUmVnRXhwKCJeIithKGkpLCJpIiksbj10aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gby50ZXN0KGUodGhpcykuY2hpbGRyZW4oImEiKS50ZXh0KCkpfSksbj1zJiZuLmluZGV4KHRoaXMuYWN0aXZlLm5leHQoKSkhPT0tMT90aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIik6bixuLmxlbmd0aHx8KGk9U3RyaW5nLmZyb21DaGFyQ29kZSh0LmtleUNvZGUpLG89bmV3IFJlZ0V4cCgiXiIrYShpKSwiaSIpLG49dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG8udGVzdChlKHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pKSxuLmxlbmd0aD8odGhpcy5mb2N1cyh0LG4pLG4ubGVuZ3RoPjE/KHRoaXMucHJldmlvdXNGaWx0ZXI9aSx0aGlzLmZpbHRlclRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9LDFlMykpOmRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn11JiZ0LnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIil8fCh0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYVthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKS5sZW5ndGg/dGhpcy5leHBhbmQoZSk6dGhpcy5zZWxlY3QoZSkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSxyPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5tZW51cyk7ci5maWx0ZXIoIjpub3QoLnVpLW1lbnUpIikuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHI9dC5wcmV2KCJhIiksaT1lKCI8c3Bhbj4iKS5hZGRDbGFzcygidWktbWVudS1pY29uIHVpLWljb24gIituKS5kYXRhKCJ1aS1tZW51LXN1Ym1lbnUtY2FyYXQiLCEwKTtyLmF0dHIoImFyaWEtaGFzcG9wdXAiLCJ0cnVlIikucHJlcGVuZChpKSx0LmF0dHIoImFyaWEtbGFiZWxsZWRieSIsci5hdHRyKCJpZCIpKX0pLHQ9ci5hZGQodGhpcy5lbGVtZW50KSx0LmNoaWxkcmVuKCI6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdC5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpOy9bXlwtXHUyMDE0XHUyMDEzXHNdLy50ZXN0KHQudGV4dCgpKXx8dC5hZGRDbGFzcygidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyIil9KSx0LmNoaWxkcmVuKCIudWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZlJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6Im1lbnVpdGVtIixsaXN0Ym94OiJvcHRpb24ifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09Imljb25zIiYmdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuYWRkQ2xhc3ModC5zdWJtZW51KSx0aGlzLl9zdXBlcihlLHQpfSxmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBuLHI7dGhpcy5ibHVyKGUsZSYmZS50eXBlPT09ImZvY3VzIiksdGhpcy5fc2Nyb2xsSW50b1ZpZXcodCksdGhpcy5hY3RpdmU9dC5maXJzdCgpLHI9dGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsci5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuY2hpbGRyZW4oImE6Zmlyc3QiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksZSYmZS50eXBlPT09ImtleWRvd24iP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLG49dC5jaGlsZHJlbigiLnVpLW1lbnUiKSxuLmxlbmd0aCYmL15tb3VzZS8udGVzdChlLnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcobiksdGhpcy5hY3RpdmVNZW51PXQucGFyZW50KCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLGUse2l0ZW06dH0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24odCl7dmFyIG4scixpLHMsbyx1O3RoaXMuX2hhc1Njcm9sbCgpJiYobj1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAscj1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwicGFkZGluZ1RvcCIpKXx8MCxpPXQub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3Atbi1yLHM9dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLG89dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHU9dC5oZWlnaHQoKSxpPDA/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChzK2kpOmkrdT5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKHMraS1vK3UpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtpZighdGhpcy5hY3RpdmUpcmV0dXJuO3RoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5hY3RpdmU9bnVsbCx0aGlzLl90cmlnZ2VyKCJibHVyIixlLHtpdGVtOnRoaXMuYWN0aXZlfSl9LF9zdGFydE9wZW5pbmc6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO2lmKGUuYXR0cigiYXJpYS1oaWRkZW4iKSE9PSJ0cnVlIilyZXR1cm47dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSl9LF9vcGVuOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51Iikubm90KHQucGFyZW50cygiLnVpLW1lbnUiKSkuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHQuc2hvdygpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKS5wb3NpdGlvbihuKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24odCxuKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciByPW4/dGhpcy5lbGVtZW50OmUodCYmdC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51IikpO3IubGVuZ3RofHwocj10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHIpLHRoaXMuYmx1cih0KSx0aGlzLmFjdGl2ZU1lbnU9cn0sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbihlKXtlfHwoZT10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLGUuZmluZCgiLnVpLW1lbnUiKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIikuZW5kKCkuZmluZCgiYS51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIix0aGlzLmVsZW1lbnQpO3QmJnQubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKGUsdCkpfSxleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktbWVudSAiKS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3RoaXMuYWN0aXZlJiYoZT09PSJmaXJzdCJ8fGU9PT0ibGFzdCI/cj10aGlzLmFjdGl2ZVtlPT09ImZpcnN0Ij8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTpyPXRoaXMuYWN0aXZlW2UrIkFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoMCkpO2lmKCFyfHwhci5sZW5ndGh8fCF0aGlzLmFjdGl2ZSlyPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW3RdKCk7dGhpcy5mb2N1cyhuLHIpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgbixyLGk7aWYoIXRoaXMuYWN0aXZlKXt0aGlzLm5leHQodCk7cmV0dXJufWlmKHRoaXMuaXNMYXN0SXRlbSgpKXJldHVybjt0aGlzLl9oYXNTY3JvbGwoKT8ocj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsaT10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gbj1lKHRoaXMpLG4ub2Zmc2V0KCkudG9wLXItaTwwfSksdGhpcy5mb2N1cyh0LG4pKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIilbdGhpcy5hY3RpdmU/Imxhc3QiOiJmaXJzdCJdKCkpfSxwcmV2aW91c1BhZ2U6ZnVuY3Rpb24odCl7dmFyIG4scixpO2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5uZXh0KHQpO3JldHVybn1pZih0aGlzLmlzRmlyc3RJdGVtKCkpcmV0dXJuO3RoaXMuX2hhc1Njcm9sbCgpPyhyPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxpPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBuPWUodGhpcyksbi5vZmZzZXQoKS50b3AtcitpPjB9KSx0aGlzLmZvY3VzKHQsbikpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcCgic2Nyb2xsSGVpZ2h0Iil9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZT10aGlzLmFjdGl2ZXx8ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpO3ZhciBuPXtpdGVtOnRoaXMuYWN0aXZlfTt0aGlzLmFjdGl2ZS5oYXMoIi51aS1tZW51IikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQsITApLHRoaXMuX3RyaWdnZXIoInNlbGVjdCIsdCxuKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLnByb2dyZXNzYmFyIix7dmVyc2lvbjoiMS4xMC4xIixvcHRpb25zOnttYXg6MTAwLHZhbHVlOjAsY2hhbmdlOm51bGwsY29tcGxldGU6bnVsbH0sbWluOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub2xkVmFsdWU9dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7cm9sZToicHJvZ3Jlc3NiYXIiLCJhcmlhLXZhbHVlbWluIjp0aGlzLm1pbn0pLHRoaXMudmFsdWVEaXY9ZSgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItdmFsdWUgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItbGVmdCc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudmFsdWVEaXYucmVtb3ZlKCl9LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU9PT10KXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWU7dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jb25zdHJhaW5lZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCYmKGU9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9ZT09PSExLHR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sZSkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2RlbGV0ZSBlLnZhbHVlLHRoaXMuX3N1cGVyKGUpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJtYXgiJiYodD1NYXRoLm1heCh0aGlzLm1pbix0KSksdGhpcy5fc3VwZXIoZSx0KX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlLG49dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8dD50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsdD09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKG4udG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PWUoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dH0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT10JiYodGhpcy5vbGRWYWx1ZT10LHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpKSx0PT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49NTtlLndpZGdldCgidWkuc2xpZGVyIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjEwLjEiLHdpZGdldEV2ZW50UHJlZml4OiJzbGlkZSIsb3B0aW9uczp7YW5pbWF0ZTohMSxkaXN0YW5jZTowLG1heDoxMDAsbWluOjAsb3JpZW50YXRpb246Imhvcml6b250YWwiLHJhbmdlOiExLHN0ZXA6MSx2YWx1ZTowLHZhbHVlczpudWxsLGNoYW5nZTpudWxsLHNsaWRlOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIHQsbixyPXRoaXMub3B0aW9ucyxpPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxzPSI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjwvYT4iLG89W107bj1yLnZhbHVlcyYmci52YWx1ZXMubGVuZ3RofHwxLGkubGVuZ3RoPm4mJihpLnNsaWNlKG4pLnJlbW92ZSgpLGk9aS5zbGljZSgwLG4pKTtmb3IodD1pLmxlbmd0aDt0PG47dCsrKW8ucHVzaChzKTt0aGlzLmhhbmRsZXM9aS5hZGQoZShvLmpvaW4oIiIpKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7ZSh0aGlzKS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iix0KX0pfSxfY3JlYXRlUmFuZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsbj0iIjt0LnJhbmdlPyh0LnJhbmdlPT09ITAmJih0LnZhbHVlcz90LnZhbHVlcy5sZW5ndGgmJnQudmFsdWVzLmxlbmd0aCE9PTI/dC52YWx1ZXM9W3QudmFsdWVzWzBdLHQudmFsdWVzWzBdXTplLmlzQXJyYXkodC52YWx1ZXMpJiYodC52YWx1ZXM9dC52YWx1ZXMuc2xpY2UoMCkpOnQudmFsdWVzPVt0aGlzLl92YWx1ZU1pbigpLHRoaXMuX3ZhbHVlTWluKCldKSwhdGhpcy5yYW5nZXx8IXRoaXMucmFuZ2UubGVuZ3RoPyh0aGlzLnJhbmdlPWUoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSxuPSJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIik6dGhpcy5yYW5nZS5yZW1vdmVDbGFzcygidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4IikuY3NzKHtsZWZ0OiIiLGJvdHRvbToiIn0pLHRoaXMucmFuZ2UuYWRkQ2xhc3MobisodC5yYW5nZT09PSJtaW4ifHx0LnJhbmdlPT09Im1heCI/IiB1aS1zbGlkZXItcmFuZ2UtIit0LnJhbmdlOiIiKSkpOnRoaXMucmFuZ2U9ZShbXSl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGFuZGxlcy5hZGQodGhpcy5yYW5nZSkuZmlsdGVyKCJhIik7dGhpcy5fb2ZmKGUpLHRoaXMuX29uKGUsdGhpcy5faGFuZGxlRXZlbnRzKSx0aGlzLl9ob3ZlcmFibGUoZSksdGhpcy5fZm9jdXNhYmxlKGUpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdSxhLGYsbD10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiBjLmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxuPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxyPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShuKSxpPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPU1hdGguYWJzKHItbC52YWx1ZXModCkpO2lmKGk+bnx8aT09PW4mJih0PT09bC5fbGFzdENoYW5nZWRWYWx1ZXx8bC52YWx1ZXModCk9PT1jLm1pbikpaT1uLHM9ZSh0aGlzKSxvPXR9KSx1PXRoaXMuX3N0YXJ0KHQsbyksdT09PSExPyExOih0aGlzLl9tb3VzZVNsaWRpbmc9ITAsdGhpcy5faGFuZGxlSW5kZXg9byxzLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5mb2N1cygpLGE9cy5vZmZzZXQoKSxmPSFlKHQudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmlzKCIudWktc2xpZGVyLWhhbmRsZSIpLHRoaXMuX2NsaWNrT2Zmc2V0PWY/e2xlZnQ6MCx0b3A6MH06e2xlZnQ6dC5wYWdlWC1hLmxlZnQtcy53aWR0aCgpLzIsdG9wOnQucGFnZVktYS50b3Atcy5oZWlnaHQoKS8yLShwYXJzZUludChzLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChzLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChzLmNzcygibWFyZ2luVG9wIiksMTApfHwwKX0sdGhpcy5oYW5kbGVzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfHx0aGlzLl9zbGlkZSh0LG8sciksdGhpcy5fYW5pbWF0ZU9mZj0hMCwhMCkpfSxfbW91c2VTdGFydDpmdW5jdGlvbigpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXt4OmUucGFnZVgseTplLnBhZ2VZfSxuPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSh0KTtyZXR1cm4gdGhpcy5fc2xpZGUoZSx0aGlzLl9oYW5kbGVJbmRleCxuKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9jaGFuZ2UoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9jbGlja09mZnNldD1udWxsLHRoaXMuX2FuaW1hdGVPZmY9ITEsITF9LF9kZXRlY3RPcmllbnRhdGlvbjpmdW5jdGlvbigpe3RoaXMub3JpZW50YXRpb249dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIj8idmVydGljYWwiOiJob3Jpem9udGFsIn0sX25vcm1WYWx1ZUZyb21Nb3VzZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsbj1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LG49ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscj1uL3Qscj4xJiYocj0xKSxyPDAmJihyPTApLHRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiYocj0xLXIpLGk9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLHM9dGhpcy5fdmFsdWVNaW4oKStyKmksdGhpcy5fdHJpbUFsaWduVmFsdWUocyl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxuKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHI9dGhpcy52YWx1ZXModD8wOjEpLHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPT09MiYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJih0PT09MCYmbj5yfHx0PT09MSYmbjxyKSYmKG49ciksbiE9PXRoaXMudmFsdWVzKHQpJiYoaT10aGlzLnZhbHVlcygpLGlbdF09bixzPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOm4sdmFsdWVzOml9KSxyPXRoaXMudmFsdWVzKHQ/MDoxKSxzIT09ITEmJnRoaXMudmFsdWVzKHQsbiwhMCkpKTpuIT09dGhpcy52YWx1ZSgpJiYocz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTpufSkscyE9PSExJiZ0aGlzLnZhbHVlKG4pKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLG4pfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihuLnZhbHVlPXRoaXMudmFsdWVzKHQpLG4udmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUsbil9fSx2YWx1ZTpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXt0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCk7cmV0dXJufXJldHVybiB0aGlzLl92YWx1ZSgpfSx2YWx1ZXM6ZnVuY3Rpb24odCxuKXt2YXIgcixpLHM7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXt0aGlzLm9wdGlvbnMudmFsdWVzW3RdPXRoaXMuX3RyaW1BbGlnblZhbHVlKG4pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLHQpO3JldHVybn1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdmFsdWVzKCk7aWYoIWUuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLl92YWx1ZXModCk6dGhpcy52YWx1ZSgpO3I9dGhpcy5vcHRpb25zLnZhbHVlcyxpPWFyZ3VtZW50c1swXTtmb3Iocz0wO3M8ci5sZW5ndGg7cys9MSlyW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pLHRoaXMuX2NoYW5nZShudWxsLHMpO3RoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dmFyIHIsaT0wO3Q9PT0icmFuZ2UiJiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKG49PT0ibWluIj8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcygwKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpOm49PT0ibWF4IiYmKHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXModGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgtMSksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKSksZS5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYoaT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3N3aXRjaCh0KXtjYXNlIm9yaWVudGF0aW9uIjp0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIikuYWRkQ2xhc3MoInVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpO2JyZWFrO2Nhc2UidmFsdWUiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInZhbHVlcyI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKTtmb3Iocj0wO3I8aTtyKz0xKXRoaXMuX2NoYW5nZShudWxsLHIpO3RoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJtaW4iOmNhc2UibWF4Ijp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJyYW5nZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX19LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSxlfSxfdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0PXRoaXMub3B0aW9ucy52YWx1ZXNbZV0sdD10aGlzLl90cmltQWxpZ25WYWx1ZSh0KSx0O2lmKHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKXtuPXRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKTtmb3Iocj0wO3I8bi5sZW5ndGg7cis9MSluW3JdPXRoaXMuX3RyaW1BbGlnblZhbHVlKG5bcl0pO3JldHVybiBufXJldHVybltdfSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24oZSl7aWYoZTw9dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZihlPj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciB0PXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxuPShlLXRoaXMuX3ZhbHVlTWluKCkpJXQscj1lLW47cmV0dXJuIE1hdGguYWJzKG4pKjI+PXQmJihyKz1uPjA/dDotdCkscGFyc2VGbG9hdChyLnRvRml4ZWQoNSkpfSxfdmFsdWVNaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1pbn0sX3ZhbHVlTWF4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxuLHIsaSxzLG89dGhpcy5vcHRpb25zLnJhbmdlLHU9dGhpcy5vcHRpb25zLGE9dGhpcyxmPXRoaXMuX2FuaW1hdGVPZmY/ITE6dS5hbmltYXRlLGw9e307dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24ocil7bj0oYS52YWx1ZXMociktYS5fdmFsdWVNaW4oKSkvKGEuX3ZhbHVlTWF4KCktYS5fdmFsdWVNaW4oKSkqMTAwLGxbYS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPW4rIiUiLGUodGhpcykuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksYS5vcHRpb25zLnJhbmdlPT09ITAmJihhLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyhyPT09MCYmYS5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtsZWZ0Om4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6bi10KyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pKToocj09PTAmJmEucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7Ym90dG9tOm4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4tdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSkpLHQ9bn0pOihyPXRoaXMudmFsdWUoKSxpPXRoaXMuX3ZhbHVlTWluKCkscz10aGlzLl92YWx1ZU1heCgpLG49cyE9PWk/KHItaSkvKHMtaSkqMTAwOjAsbFt0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyJsZWZ0IjoiYm90dG9tIl09bisiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksbz09PSJtaW4iJiZ0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOm4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1uKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pLG89PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLW4rIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciByLGkscyxvLHU9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0LnByZXZlbnREZWZhdWx0KCk7aWYoIXRoaXMuX2tleVNsaWRpbmcpe3RoaXMuX2tleVNsaWRpbmc9ITAsZSh0LnRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcy5fc3RhcnQodCx1KTtpZihyPT09ITEpcmV0dXJufX1vPXRoaXMub3B0aW9ucy5zdGVwLHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP2k9cz10aGlzLnZhbHVlcyh1KTppPXM9dGhpcy52YWx1ZSgpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpzPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvbik7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaS0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS9uKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihpPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpK28pO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihpPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLW8pfXRoaXMuX3NsaWRlKHQsdSxzKX0sY2xpY2s6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDpmdW5jdGlvbih0KXt2YXIgbj1lKHQudGFyZ2V0KS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iik7dGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fc3RvcCh0LG4pLHRoaXMuX2NoYW5nZSh0LG4pLGUodC50YXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSl9fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQudmFsKCk7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLHQhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIpfX1lLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTAuMSIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSwhMCksdGhpcy5fZHJhdygpLHRoaXMuX29uKHRoaXMuX2V2ZW50cyksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIil9fSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9e30sbj10aGlzLmVsZW1lbnQ7cmV0dXJuIGUuZWFjaChbIm1pbiIsIm1heCIsInN0ZXAiXSxmdW5jdGlvbihlLHIpe3ZhciBpPW4uYXR0cihyKTtpIT09dW5kZWZpbmVkJiZpLmxlbmd0aCYmKHRbcl09aSl9KSx0fSxfZXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXJ0KGUpJiZ0aGlzLl9rZXlkb3duKGUpJiZlLnByZXZlbnREZWZhdWx0KCl9LGtleXVwOiJfc3RvcCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbEJsdXIpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7cmV0dXJufXRoaXMuX3JlZnJlc2goKSx0aGlzLnByZXZpb3VzIT09dGhpcy5lbGVtZW50LnZhbCgpJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUpfSxtb3VzZXdoZWVsOmZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuO2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX0sIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXt2YXIgZT10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ7ZXx8KHRoaXMuZWxlbWVudC5mb2N1cygpLHRoaXMucHJldmlvdXM9bix0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9bn0pKX12YXIgbjtuPXRoaXMuZWxlbWVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudD90aGlzLnByZXZpb3VzOnRoaXMuZWxlbWVudC52YWwoKSx0LnByZXZlbnREZWZhdWx0KCksci5jYWxsKHRoaXMpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsci5jYWxsKHRoaXMpfSk7aWYodGhpcy5fc3RhcnQodCk9PT0hMSlyZXR1cm47dGhpcy5fcmVwZWF0KG51bGwsZSh0LmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSx0KX0sIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AiLCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvbiI6ZnVuY3Rpb24odCl7aWYoIWUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3RhdGUtYWN0aXZlIikpcmV0dXJuO2lmKHRoaXMuX3N0YXJ0KHQpPT09ITEpcmV0dXJuITE7dGhpcy5fcmVwZWF0KG51bGwsZSh0LmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSx0KX0sIm1vdXNlbGVhdmUgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AifSxfZHJhdzpmdW5jdGlvbigpe3ZhciBlPXRoaXMudWlTcGlubmVyPXRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLndyYXAodGhpcy5fdWlTcGlubmVySHRtbCgpKS5wYXJlbnQoKS5hcHBlbmQodGhpcy5fYnV0dG9uSHRtbCgpKTt0aGlzLmVsZW1lbnQuYXR0cigicm9sZSIsInNwaW5idXR0b24iKSx0aGlzLmJ1dHRvbnM9ZS5maW5kKCIudWktc3Bpbm5lci1idXR0b24iKS5hdHRyKCJ0YWJJbmRleCIsLTEpLmJ1dHRvbigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbChlLmhlaWdodCgpKi41KSYmZS5oZWlnaHQoKT4wJiZlLmhlaWdodChlLmhlaWdodCgpKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZGlzYWJsZSgpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj1lLnVpLmtleUNvZGU7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSByLlVQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwxLHQpLCEwO2Nhc2Ugci5ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtMSx0KSwhMDtjYXNlIHIuUEFHRV9VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsbi5wYWdlLHQpLCEwO2Nhc2Ugci5QQUdFX0RPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC1uLnBhZ2UsdCksITB9cmV0dXJuITF9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxzcGFuIGNsYXNzPSd1aS1zcGlubmVyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsJz48L3NwYW4+In0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4iPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXAgdWktY29ybmVyLXRyJz48c3BhbiBjbGFzcz0ndWktaWNvbiAiK3RoaXMub3B0aW9ucy5pY29ucy51cCsiJz4mIzk2NTA7PC9zcGFuPiIrIjwvYT4iKyI8YSBjbGFzcz0ndWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duIHVpLWNvcm5lci1icic+IisiPHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMuZG93bisiJz4mIzk2NjA7PC9zcGFuPiIrIjwvYT4ifSxfc3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuc3Bpbm5pbmcmJnRoaXMuX3RyaWdnZXIoInN0YXJ0IixlKT09PSExPyExOih0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwhMCl9LF9yZXBlYXQ6ZnVuY3Rpb24oZSx0LG4pe2U9ZXx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLHQsbil9LGUpLHRoaXMuX3NwaW4odCp0aGlzLm9wdGlvbnMuc3RlcCxuKX0sX3NwaW46ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLG49dGhpcy5fYWRqdXN0VmFsdWUobitlKnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKTtpZighdGhpcy5zcGlubmluZ3x8dGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6bn0pIT09ITEpdGhpcy5fdmFsdWUobiksdGhpcy5jb3VudGVyKyt9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBuP2UuaXNGdW5jdGlvbihuKT9uKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gdGhpcy5vcHRpb25zLm1pbiE9PW51bGwmJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG49PT0tMT8wOnQubGVuZ3RoLW4tMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9ci5taW4hPT1udWxsP3IubWluOjAsbj1lLXQsbj1NYXRoLnJvdW5kKG4vci5zdGVwKSpyLnN0ZXAsZT10K24sZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLHIubWF4IT09bnVsbCYmZT5yLm1heD9yLm1heDpyLm1pbiE9PW51bGwmJmU8ci5taW4/ci5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuc3Bpbm5pbmcpcmV0dXJuO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtpZihlPT09ImN1bHR1cmUifHxlPT09Im51bWJlckZvcm1hdCIpe3ZhciBuPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7dGhpcy5vcHRpb25zW2VdPXQsdGhpcy5lbGVtZW50LnZhbCh0aGlzLl9mb3JtYXQobikpO3JldHVybn0oZT09PSJtYXgifHxlPT09Im1pbiJ8fGU9PT0ic3RlcCIpJiZ0eXBlb2YgdD09InN0cmluZyImJih0PXRoaXMuX3BhcnNlKHQpKSxlPT09Imljb25zIiYmKHRoaXMuYnV0dG9ucy5maXJzdCgpLmZpbmQoIi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnVwKS5hZGRDbGFzcyh0LnVwKSx0aGlzLmJ1dHRvbnMubGFzdCgpLmZpbmQoIi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLmRvd24pLmFkZENsYXNzKHQuZG93bikpLHRoaXMuX3N1cGVyKGUsdCksZT09PSJkaXNhYmxlZCImJih0Pyh0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLCEwKSx0aGlzLmJ1dHRvbnMuYnV0dG9uKCJkaXNhYmxlIikpOih0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLCExKSx0aGlzLmJ1dHRvbnMuYnV0dG9uKCJlbmFibGUiKSkpfSxfc2V0T3B0aW9uczp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N1cGVyKGUpLHRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSl9KSxfcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmZSE9PSIiJiYoZT13aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5wYXJzZUZsb2F0KGUsMTAsdGhpcy5vcHRpb25zLmN1bHR1cmUpOitlKSxlPT09IiJ8fGlzTmFOKGUpP251bGw6ZX0sX2Zvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSIiPyIiOndpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLmZvcm1hdChlLHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQsdGhpcy5vcHRpb25zLmN1bHR1cmUpOmV9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmF0dHIoeyJhcmlhLXZhbHVlbWluIjp0aGlzLm9wdGlvbnMubWluLCJhcmlhLXZhbHVlbWF4Ijp0aGlzLm9wdGlvbnMubWF4LCJhcmlhLXZhbHVlbm93Ijp0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpfSl9LF92YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuO2UhPT0iIiYmKG49dGhpcy5fcGFyc2UoZSksbiE9PW51bGwmJih0fHwobj10aGlzLl9hZGp1c3RWYWx1ZShuKSksZT10aGlzLl9mb3JtYXQobikpKSx0aGlzLmVsZW1lbnQudmFsKGUpLHRoaXMuX3JlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5wcm9wKCJkaXNhYmxlZCIsITEpLnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnVpU3Bpbm5lci5yZXBsYWNlV2l0aCh0aGlzLmVsZW1lbnQpfSxzdGVwVXA6dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwVXAoZSl9KSxfc3RlcFVwOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKChlfHwxKSp0aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0sc3RlcERvd246dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwRG93bihlKX0pLF9zdGVwRG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqLXRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxwYWdlVXA6dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwVXAoKGV8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHBhZ2VEb3duOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oKGV8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3QodGhpcy5fdmFsdWUpLmNhbGwodGhpcyxlKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKytufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUuaGFzaC5sZW5ndGg+MSYmZGVjb2RlVVJJQ29tcG9uZW50KGUuaHJlZi5yZXBsYWNlKHIsIiIpKT09PWRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnJlcGxhY2UociwiIikpfXZhciBuPTAscj0vIy4qJC87ZS53aWRnZXQoInVpLnRhYnMiLHt2ZXJzaW9uOiIxLjEwLjEiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlaWdodFN0eWxlOiJjb250ZW50IixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLnJ1bm5pbmc9ITEsdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLG4uY29sbGFwc2libGUpLmRlbGVnYXRlKCIudWktdGFicy1uYXYgPiBsaSIsIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtlKHRoaXMpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSkuZGVsZWdhdGUoIi51aS10YWJzLWFuY2hvciIsImZvY3VzIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ZSh0aGlzKS5jbG9zZXN0KCJsaSIpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5ibHVyKCl9KSx0aGlzLl9wcm9jZXNzVGFicygpLG4uYWN0aXZlPXRoaXMuX2luaXRpYWxBY3RpdmUoKSxlLmlzQXJyYXkobi5kaXNhYmxlZCkmJihuLmRpc2FibGVkPWUudW5pcXVlKG4uZGlzYWJsZWQuY29uY2F0KGUubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRhYnMuaW5kZXgoZSl9KSkpLnNvcnQoKSksdGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlPXRoaXMuX2ZpbmRBY3RpdmUobi5hY3RpdmUpOnRoaXMuYWN0aXZlPWUoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5hY3RpdmUubGVuZ3RoJiZ0aGlzLmxvYWQobi5hY3RpdmUpfSxfaW5pdGlhbEFjdGl2ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hY3RpdmUsbj10aGlzLm9wdGlvbnMuY29sbGFwc2libGUscj1sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTtpZih0PT09bnVsbCl7ciYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24obixpKXtpZihlKGkpLmF0dHIoImFyaWEtY29udHJvbHMiKT09PXIpcmV0dXJuIHQ9biwhMX0pLHQ9PT1udWxsJiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikpKTtpZih0PT09bnVsbHx8dD09PS0xKXQ9dGhpcy50YWJzLmxlbmd0aD8wOiExfXJldHVybiB0IT09ITEmJih0PXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEodCkpLHQ9PT0tMSYmKHQ9bj8hMTowKSksIW4mJnQ9PT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKHQ9MCksdH0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTplKCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgibGkiKSxyPXRoaXMudGFicy5pbmRleChuKSxpPSEwO2lmKHRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpcmV0dXJuO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cisrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aT0hMSxyLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnI9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cj0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShyKTtyZXR1cm47Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHI9PT10aGlzLm9wdGlvbnMuYWN0aXZlPyExOnIpO3JldHVybjtkZWZhdWx0OnJldHVybn10LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZykscj10aGlzLl9mb2N1c05leHRUYWIocixpKSx0LmN0cmxLZXl8fChuLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHRoaXMudGFicy5lcShyKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKCJhY3RpdmUiLHIpfSx0aGlzLmRlbGF5KSl9LF9wYW5lbEtleWRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5faGFuZGxlUGFnZU5hdih0KSlyZXR1cm47dC5jdHJsS2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmUuZm9jdXMoKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKHQpe2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUClyZXR1cm4gdGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwO2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9ET1dOKXJldHVybiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4gdD5yJiYodD0wKSx0PDAmJih0PXIpLHR9dmFyIHI9dGhpcy50YWJzLmxlbmd0aC0xO3doaWxlKGUuaW5BcnJheShpKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKSE9PS0xKXQ9bj90KzE6dC0xO3JldHVybiB0fSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9dGhpcy5fZmluZE5leHRUYWIoZSx0KSx0aGlzLnRhYnMuZXEoZSkuZm9jdXMoKSxlfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJhY3RpdmUiKXt0aGlzLl9hY3RpdmF0ZSh0KTtyZXR1cm59aWYoZT09PSJkaXNhYmxlZCIpe3RoaXMuX3NldHVwRGlzYWJsZWQodCk7cmV0dXJufXRoaXMuX3N1cGVyKGUsdCksZT09PSJjb2xsYXBzaWJsZSImJih0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLHQpLCF0JiZ0aGlzLm9wdGlvbnMuYWN0aXZlPT09ITEmJnRoaXMuX2FjdGl2YXRlKDApKSxlPT09ImV2ZW50IiYmdGhpcy5fc2V0dXBFdmVudHModCksZT09PSJoZWlnaHRTdHlsZSImJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodCl9LF90YWJJZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyKCJhcmlhLWNvbnRyb2xzIil8fCJ1aS10YWJzLSIraSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLnJlcGxhY2UoL1shIiQlJicoKSorLC5cLzo7PD0+P0BcW1xdXF5ge3x9fl0vZywiXFwkJiIpOiIifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLG49dGhpcy50YWJsaXN0LmNoaWxkcmVuKCI6aGFzKGFbaHJlZl0pIik7dC5kaXNhYmxlZD1lLm1hcChuLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVuY3Rpb24oZSl7cmV0dXJuIG4uaW5kZXgoZSl9KSx0aGlzLl9wcm9jZXNzVGFicygpLHQuYWN0aXZlPT09ITF8fCF0aGlzLmFuY2hvcnMubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuYWN0aXZlLmxlbmd0aCYmIWUuY29udGFpbnModGhpcy50YWJsaXN0WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLnRhYnMubGVuZ3RoPT09dC5kaXNhYmxlZC5sZW5ndGg/KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5fYWN0aXZhdGUodGhpcy5fZmluZE5leHRUYWIoTWF0aC5tYXgoMCx0LmFjdGl2ZS0xKSwhMSkpOnQuYWN0aXZlPXRoaXMudGFicy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fcmVmcmVzaCgpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3NldHVwRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9zZXR1cEV2ZW50cyh0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodGhpcy5vcHRpb25zLmhlaWdodFN0eWxlKSx0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6ImZhbHNlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHRoaXMuYWN0aXZlLmxlbmd0aD8odGhpcy5hY3RpdmUuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KSk6dGhpcy50YWJzLmVxKDApLmF0dHIoInRhYkluZGV4IiwwKX0sX3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnRhYmxpc3Q9dGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCJ0YWJsaXN0IiksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKCI+IGxpOmhhcyhhW2hyZWZdKSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKS5hdHRyKHtyb2xlOiJ0YWIiLHRhYkluZGV4Oi0xfSksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSgiYSIsdGhpcylbMF19KS5hZGRDbGFzcygidWktdGFicy1hbmNob3IiKS5hdHRyKHtyb2xlOiJwcmVzZW50YXRpb24iLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHM9ZSgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKG4scil7dmFyIGksbyx1LGE9ZShyKS51bmlxdWVJZCgpLmF0dHIoImlkIiksZj1lKHIpLmNsb3Nlc3QoImxpIiksbD1mLmF0dHIoImFyaWEtY29udHJvbHMiKTtzKHIpPyhpPXIuaGFzaCxvPXQuZWxlbWVudC5maW5kKHQuX3Nhbml0aXplU2VsZWN0b3IoaSkpKToodT10Ll90YWJJZChmKSxpPSIjIit1LG89dC5lbGVtZW50LmZpbmQoaSksby5sZW5ndGh8fChvPXQuX2NyZWF0ZVBhbmVsKHUpLG8uaW5zZXJ0QWZ0ZXIodC5wYW5lbHNbbi0xXXx8dC50YWJsaXN0KSksby5hdHRyKCJhcmlhLWxpdmUiLCJwb2xpdGUiKSksby5sZW5ndGgmJih0LnBhbmVscz10LnBhbmVscy5hZGQobykpLGwmJmYuZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIixsKSxmLmF0dHIoeyJhcmlhLWNvbnRyb2xzIjppLnN1YnN0cmluZygxKSwiYXJpYS1sYWJlbGxlZGJ5IjphfSksby5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGEpfSksdGhpcy5wYW5lbHMuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpfSxfZ2V0TGlzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCgib2wsdWwiKS5lcSgwKX0sX2NyZWF0ZVBhbmVsOmZ1bmN0aW9uKHQpe3JldHVybiBlKCI8ZGl2PiIpLmF0dHIoImlkIix0KS5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZGF0YSgidWktdGFicy1kZXN0cm95IiwhMCl9LF9zZXR1cERpc2FibGVkOmZ1bmN0aW9uKHQpe2UuaXNBcnJheSh0KSYmKHQubGVuZ3RoP3QubGVuZ3RoPT09dGhpcy5hbmNob3JzLmxlbmd0aCYmKHQ9ITApOnQ9ITEpO2Zvcih2YXIgbj0wLHI7cj10aGlzLnRhYnNbbl07bisrKXQ9PT0hMHx8ZS5pbkFycmF5KG4sdCkhPT0tMT9lKHIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIik6ZShyKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIik7dGhpcy5vcHRpb25zLmRpc2FibGVkPXR9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgbj17Y2xpY2s6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfX07dCYmZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsbiksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOiJfdGFiS2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjoiX3BhbmVsS2V5ZG93biJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIG4scj10aGlzLmVsZW1lbnQucGFyZW50KCk7dD09PSJmaWxsIj8obj1yLmhlaWdodCgpLG4tPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscj10LmNzcygicG9zaXRpb24iKTtpZihyPT09ImFic29sdXRlInx8cj09PSJmaXhlZCIpcmV0dXJuO24tPXQub3V0ZXJIZWlnaHQoITApfSksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7bi09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxuLWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKTp0PT09ImF1dG8iJiYobj0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtuPU1hdGgubWF4KG4sZSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChuKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pLmNsb3Nlc3QoImxpIiksbz1zWzBdPT09clswXSx1PW8mJm4uY29sbGFwc2libGUsYT11P2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihzKSxmPXIubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHIpOmUoKSxsPXtvbGRUYWI6cixvbGRQYW5lbDpmLG5ld1RhYjp1P2UoKTpzLG5ld1BhbmVsOmF9O3QucHJldmVudERlZmF1bHQoKTtpZihzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxzLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKXx8dGhpcy5ydW5uaW5nfHxvJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMSlyZXR1cm47bi5hY3RpdmU9dT8hMTp0aGlzLnRhYnMuaW5kZXgocyksdGhpcy5hY3RpdmU9bz9lKCk6cyx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSwhZi5sZW5ndGgmJiFhLmxlbmd0aCYmZS5lcnJvcigialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIiksYS5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgocyksdCksdGhpcy5fdG9nZ2xlKHQsbCl9LF90b2dnbGU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7ci5ydW5uaW5nPSExLHIuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pfWZ1bmN0aW9uIHUoKXtuLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmxlbmd0aCYmci5vcHRpb25zLnNob3c/ci5fc2hvdyhpLHIub3B0aW9ucy5zaG93LG8pOihpLnNob3coKSxvKCkpfXZhciByPXRoaXMsaT1uLm5ld1BhbmVsLHM9bi5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAscy5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24ub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHUoKX0pOihuLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxzLmhpZGUoKSx1KCkpLHMuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxuLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/bi5vbGRUYWIuYXR0cigidGFiSW5kZXgiLC0xKTppLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSksbi5uZXdUYWIuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2ZpbmRBY3RpdmUodCk7aWYoclswXT09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtyLmxlbmd0aHx8KHI9dGhpcy5hY3RpdmUpLG49ci5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDpuLGN1cnJlbnRUYXJnZXQ6bixwcmV2ZW50RGVmYXVsdDplLm5vb3B9KX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIitlKyInXSIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLHRoaXMudGFibGlzdC5yZW1vdmVDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIiksdGhpcy5hbmNob3JzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFuY2hvciIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtuP3QuYXR0cigiYXJpYS1jb250cm9scyIsbikucmVtb3ZlRGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLnBhbmVscy5zaG93KCksdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlIT09ImNvbnRlbnQiJiZ0aGlzLnBhbmVscy5jc3MoImhlaWdodCIsIiIpfSxlbmFibGU6ZnVuY3Rpb24obil7dmFyIHI9dGhpcy5vcHRpb25zLmRpc2FibGVkO2lmKHI9PT0hMSlyZXR1cm47bj09PXQ/cj0hMToobj10aGlzLl9nZXRJbmRleChuKSxlLmlzQXJyYXkocik/cj1lLm1hcChyLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09bj9lOm51bGx9KTpyPWUubWFwKHRoaXMudGFicyxmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bj90Om51bGx9KSksdGhpcy5fc2V0dXBEaXNhYmxlZChyKX0sZGlzYWJsZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYocj09PSEwKXJldHVybjtpZihuPT09dClyPSEwO2Vsc2V7bj10aGlzLl9nZXRJbmRleChuKTtpZihlLmluQXJyYXkobixyKSE9PS0xKXJldHVybjtlLmlzQXJyYXkocik/cj1lLm1lcmdlKFtuXSxyKS5zb3J0KCk6cj1bbl19dGhpcy5fc2V0dXBEaXNhYmxlZChyKX0sbG9hZDpmdW5jdGlvbih0LG4pe3Q9dGhpcy5fZ2V0SW5kZXgodCk7dmFyIHI9dGhpcyxpPXRoaXMudGFicy5lcSh0KSxvPWkuZmluZCgiLnVpLXRhYnMtYW5jaG9yIiksdT10aGlzLl9nZXRQYW5lbEZvclRhYihpKSxhPXt0YWI6aSxwYW5lbDp1fTtpZihzKG9bMF0pKXJldHVybjt0aGlzLnhocj1lLmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8sbixhKSksdGhpcy54aHImJnRoaXMueGhyLnN0YXR1c1RleHQhPT0iY2FuY2VsZWQiJiYoaS5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksdS5hdHRyKCJhcmlhLWJ1c3kiLCJ0cnVlIiksdGhpcy54aHIuc3VjY2VzcyhmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dS5odG1sKGUpLHIuX3RyaWdnZXIoImxvYWQiLG4sYSl9LDEpfSkuY29tcGxldGUoZnVuY3Rpb24oZSx0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dD09PSJhYm9ydCImJnIucGFuZWxzLnN0b3AoITEsITApLGkucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLHUucmVtb3ZlQXR0cigiYXJpYS1idXN5IiksZT09PXIueGhyJiZkZWxldGUgci54aHJ9LDEpfSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LHMpe3JldHVybiBpLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixuLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczpzfSxyKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBuPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIituKSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHI9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pO3IucHVzaChuKSx0LmRhdGEoInVpLXRvb2x0aXAtaWQiLG4pLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGUudHJpbShyLmpvaW4oIiAiKSkpfWZ1bmN0aW9uIHIodCl7dmFyIG49dC5kYXRhKCJ1aS10b29sdGlwLWlkIikscj0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyksaT1lLmluQXJyYXkobixyKTtpIT09LTEmJnIuc3BsaWNlKGksMSksdC5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLWlkIikscj1lLnRyaW0oci5qb2luKCIgIikpLHI/dC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixyKTp0LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKX12YXIgdD0wO2Uud2lkZ2V0KCJ1aS50b29sdGlwIix7dmVyc2lvbjoiMS4xMC4xIixvcHRpb25zOntjb250ZW50OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5hdHRyKCJ0aXRsZSIpfHwiIjtyZXR1cm4gZSgiPGE+IikudGV4dCh0KS5odG1sKCl9LGhpZGU6ITAsaXRlbXM6Ilt0aXRsZV06bm90KFtkaXNhYmxlZF0pIixwb3NpdGlvbjp7bXk6ImxlZnQgdG9wKzE1IixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoiZmxpcGZpdCBmbGlwIn0sc2hvdzohMCx0b29sdGlwQ2xhc3M6bnVsbCx0cmFjazohMSxjbG9zZTpudWxsLG9wZW46bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX29uKHttb3VzZW92ZXI6Im9wZW4iLGZvY3VzaW46Im9wZW4ifSksdGhpcy50b29sdGlwcz17fSx0aGlzLnBhcmVudHM9e30sdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO2lmKHQ9PT0iZGlzYWJsZWQiKXt0aGlzW24/Il9kaXNhYmxlIjoiX2VuYWJsZSJdKCksdGhpcy5vcHRpb25zW3RdPW47cmV0dXJufXRoaXMuX3N1cGVyKHQsbiksdD09PSJjb250ZW50IiYmZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oZSx0KXtyLl91cGRhdGVDb250ZW50KHQpfSl9LF9kaXNhYmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihuLHIpe3ZhciBpPWUuRXZlbnQoImJsdXIiKTtpLnRhcmdldD1pLmN1cnJlbnRUYXJnZXQ9clswXSx0LmNsb3NlKGksITApfSksdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5pcygiW3RpdGxlXSIpJiZ0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHQuYXR0cigidGl0bGUiKSkuYXR0cigidGl0bGUiLCIiKX0pfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJnQuYXR0cigidGl0bGUiLHQuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pfSxvcGVuOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7aWYoIXIubGVuZ3RofHxyLmRhdGEoInVpLXRvb2x0aXAtaWQiKSlyZXR1cm47ci5hdHRyKCJ0aXRsZSIpJiZyLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHIuYXR0cigidGl0bGUiKSksci5kYXRhKCJ1aS10b29sdGlwLW9wZW4iLCEwKSx0JiZ0LnR5cGU9PT0ibW91c2VvdmVyIiYmci5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscjt0LmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiYocj1lLkV2ZW50KCJibHVyIiksci50YXJnZXQ9ci5jdXJyZW50VGFyZ2V0PXRoaXMsbi5jbG9zZShyLCEwKSksdC5hdHRyKCJ0aXRsZSIpJiYodC51bmlxdWVJZCgpLG4ucGFyZW50c1t0aGlzLmlkXT17ZWxlbWVudDp0aGlzLHRpdGxlOnQuYXR0cigidGl0bGUiKX0sdC5hdHRyKCJ0aXRsZSIsIiIpKX0pLHRoaXMuX3VwZGF0ZUNvbnRlbnQocix0KX0sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMub3B0aW9ucy5jb250ZW50LGk9dGhpcyxzPXQ/dC50eXBlOm51bGw7aWYodHlwZW9mIHI9PSJzdHJpbmciKXJldHVybiB0aGlzLl9vcGVuKHQsZSxyKTtuPXIuY2FsbChlWzBdLGZ1bmN0aW9uKG4pe2lmKCFlLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpKXJldHVybjtpLl9kZWxheShmdW5jdGlvbigpe3QmJih0LnR5cGU9cyksdGhpcy5fb3Blbih0LGUsbil9KX0pLG4mJnRoaXMuX29wZW4odCxlLG4pfSxfb3BlbjpmdW5jdGlvbih0LHIsaSl7ZnVuY3Rpb24gZihlKXthLm9mPWU7aWYocy5pcygiOmhpZGRlbiIpKXJldHVybjtzLnBvc2l0aW9uKGEpfXZhciBzLG8sdSxhPWUuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7aWYoIWkpcmV0dXJuO3M9dGhpcy5fZmluZChyKTtpZihzLmxlbmd0aCl7cy5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChpKTtyZXR1cm59ci5pcygiW3RpdGxlXSIpJiYodCYmdC50eXBlPT09Im1vdXNlb3ZlciI/ci5hdHRyKCJ0aXRsZSIsIiIpOnIucmVtb3ZlQXR0cigidGl0bGUiKSkscz10aGlzLl90b29sdGlwKHIpLG4ocixzLmF0dHIoImlkIikpLHMuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwoaSksdGhpcy5vcHRpb25zLnRyYWNrJiZ0JiYvXm1vdXNlLy50ZXN0KHQudHlwZSk/KHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlbW92ZTpmfSksZih0KSk6cy5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6cn0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSkscy5oaWRlKCksdGhpcy5fc2hvdyhzLHRoaXMub3B0aW9ucy5zaG93KSx0aGlzLm9wdGlvbnMuc2hvdyYmdGhpcy5vcHRpb25zLnNob3cuZGVsYXkmJih1PXRoaXMuZGVsYXllZFNob3c9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtzLmlzKCI6dmlzaWJsZSIpJiYoZihhLm9mKSxjbGVhckludGVydmFsKHUpKX0sZS5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoIm9wZW4iLHQse3Rvb2x0aXA6c30pLG89e2tleXVwOmZ1bmN0aW9uKHQpe2lmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBuPWUuRXZlbnQodCk7bi5jdXJyZW50VGFyZ2V0PXJbMF0sdGhpcy5jbG9zZShuLCEwKX19LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZVRvb2x0aXAocyl9fTtpZighdHx8dC50eXBlPT09Im1vdXNlb3ZlciIpby5tb3VzZWxlYXZlPSJjbG9zZSI7aWYoIXR8fHQudHlwZT09PSJmb2N1c2luIilvLmZvY3Vzb3V0PSJjbG9zZSI7dGhpcy5fb24oITAscixvKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxpPWUodD90LmN1cnJlbnRUYXJnZXQ6dGhpcy5lbGVtZW50KSxzPXRoaXMuX2ZpbmQoaSk7aWYodGhpcy5jbG9zaW5nKXJldHVybjtjbGVhckludGVydmFsKHRoaXMuZGVsYXllZFNob3cpLGkuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZpLmF0dHIoInRpdGxlIixpLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSkscihpKSxzLnN0b3AoITApLHRoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24uX3JlbW92ZVRvb2x0aXAoZSh0aGlzKSl9KSxpLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHRoaXMuX29mZihpLCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwIiksaVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fb2ZmKGksInJlbW92ZSIpLHRoaXMuX29mZih0aGlzLmRvY3VtZW50LCJtb3VzZW1vdmUiKSx0JiZ0LnR5cGU9PT0ibW91c2VsZWF2ZSImJmUuZWFjaCh0aGlzLnBhcmVudHMsZnVuY3Rpb24odCxyKXtlKHIuZWxlbWVudCkuYXR0cigidGl0bGUiLHIudGl0bGUpLGRlbGV0ZSBuLnBhcmVudHNbdF19KSx0aGlzLmNsb3Npbmc9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLHQse3Rvb2x0aXA6c30pLHRoaXMuY2xvc2luZz0hMX0sX3Rvb2x0aXA6ZnVuY3Rpb24obil7dmFyIHI9InVpLXRvb2x0aXAtIit0KyssaT1lKCI8ZGl2PiIpLmF0dHIoe2lkOnIscm9sZToidG9vbHRpcCJ9KS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpO3JldHVybiBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS10b29sdGlwLWNvbnRlbnQiKS5hcHBlbmRUbyhpKSxpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy50b29sdGlwc1tyXT1uLGl9LF9maW5kOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpO3JldHVybiBuP2UoIiMiK24pOmUoKX0sX3JlbW92ZVRvb2x0aXA6ZnVuY3Rpb24oZSl7ZS5yZW1vdmUoKSxkZWxldGUgdGhpcy50b29sdGlwc1tlLmF0dHIoImlkIildfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24obixyKXt2YXIgaT1lLkV2ZW50KCJibHVyIik7aS50YXJnZXQ9aS5jdXJyZW50VGFyZ2V0PXJbMF0sdC5jbG9zZShpLCEwKSxlKCIjIituKS5yZW1vdmUoKSxyLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmKHIuYXR0cigidGl0bGUiLHIuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSxyLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX19KX0pKGpRdWVyeSk7alF1ZXJ5LmVmZmVjdHN8fGZ1bmN0aW9uKGUsdCl7dmFyIG49InVpLWVmZmVjdHMtIjtlLmVmZmVjdHM9e2VmZmVjdDp7fX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBoKGUsdCxuKXt2YXIgcj11W3QudHlwZV18fHt9O3JldHVybiBlPT1udWxsP258fCF0LmRlZj9udWxsOnQuZGVmOihlPXIuZmxvb3I/fn5lOnBhcnNlRmxvYXQoZSksaXNOYU4oZSk/dC5kZWY6ci5tb2Q/KGUrci5tb2QpJXIubW9kOjA+ZT8wOnIubWF4PGU/ci5tYXg6ZSl9ZnVuY3Rpb24gcCh0KXt2YXIgbj1zKCkscj1uLl9yZ2JhPVtdO3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxjKGksZnVuY3Rpb24oZSxpKXt2YXIgcyx1PWkucmUuZXhlYyh0KSxhPXUmJmkucGFyc2UodSksZj1pLnNwYWNlfHwicmdiYSI7aWYoYSlyZXR1cm4gcz1uW2ZdKGEpLG5bb1tmXS5jYWNoZV09c1tvW2ZdLmNhY2hlXSxyPW4uX3JnYmE9cy5fcmdiYSwhMX0pLHIubGVuZ3RoPyhyLmpvaW4oKT09PSIwLDAsMCwwIiYmZS5leHRlbmQocixsLnRyYW5zcGFyZW50KSxuKTpsW3RdfWZ1bmN0aW9uIGQoZSx0LG4pe3JldHVybiBuPShuKzEpJTEsbio2PDE/ZSsodC1lKSpuKjY6bioyPDE/dDpuKjM8Mj9lKyh0LWUpKigyLzMtbikqNjplfXZhciBuPSJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyTGVmdENvbG9yIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyVG9wQ29sb3IgY29sb3IgY29sdW1uUnVsZUNvbG9yIG91dGxpbmVDb2xvciB0ZXh0RGVjb3JhdGlvbkNvbG9yIHRleHRFbXBoYXNpc0NvbG9yIixyPS9eKFtcLStdKT1ccyooXGQrXC4/XGQqKS8saT1be3JlOi9yZ2JhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0sZVsyXSxlWzNdLGVbNF1dfX0se3JlOi9yZ2JhP1woXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0qMi41NSxlWzJdKjIuNTUsZVszXSoyLjU1LGVbNF1dfX0se3JlOi8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfX0se3JlOi8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXStlWzFdLDE2KSxwYXJzZUludChlWzJdK2VbMl0sMTYpLHBhcnNlSW50KGVbM10rZVszXSwxNildfX0se3JlOi9oc2xhP1woXHMqKFxkKyg/OlwuXGQrKT8pXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZD8oPzpcLlxkKyk/KVxzKik/XCkvLHNwYWNlOiJoc2xhIixwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdXX19XSxzPWUuQ29sb3I9ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIG5ldyBlLkNvbG9yLmZuLnBhcnNlKHQsbixyLGkpfSxvPXtyZ2JhOntwcm9wczp7cmVkOntpZHg6MCx0eXBlOiJieXRlIn0sZ3JlZW46e2lkeDoxLHR5cGU6ImJ5dGUifSxibHVlOntpZHg6Mix0eXBlOiJieXRlIn19fSxoc2xhOntwcm9wczp7aHVlOntpZHg6MCx0eXBlOiJkZWdyZWVzIn0sc2F0dXJhdGlvbjp7aWR4OjEsdHlwZToicGVyY2VudCJ9LGxpZ2h0bmVzczp7aWR4OjIsdHlwZToicGVyY2VudCJ9fX19LHU9eyJieXRlIjp7Zmxvb3I6ITAsbWF4OjI1NX0scGVyY2VudDp7bWF4OjF9LGRlZ3JlZXM6e21vZDozNjAsZmxvb3I6ITB9fSxhPXMuc3VwcG9ydD17fSxmPWUoIjxwPiIpWzBdLGwsYz1lLmVhY2g7Zi5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixhLnJnYmE9Zi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGMobyxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSkscy5mbj1lLmV4dGVuZChzLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixyLGksdSl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7aWYobi5qcXVlcnl8fG4ubm9kZVR5cGUpbj1lKG4pLmNzcyhyKSxyPXQ7dmFyIGE9dGhpcyxmPWUudHlwZShuKSxkPXRoaXMuX3JnYmE9W107ciE9PXQmJihuPVtuLHIsaSx1XSxmPSJhcnJheSIpO2lmKGY9PT0ic3RyaW5nIilyZXR1cm4gdGhpcy5wYXJzZShwKG4pfHxsLl9kZWZhdWx0KTtpZihmPT09ImFycmF5IilyZXR1cm4gYyhvLnJnYmEucHJvcHMsZnVuY3Rpb24oZSx0KXtkW3QuaWR4XT1oKG5bdC5pZHhdLHQpfSksdGhpcztpZihmPT09Im9iamVjdCIpcmV0dXJuIG4gaW5zdGFuY2VvZiBzP2MobyxmdW5jdGlvbihlLHQpe25bdC5jYWNoZV0mJihhW3QuY2FjaGVdPW5bdC5jYWNoZV0uc2xpY2UoKSl9KTpjKG8sZnVuY3Rpb24odCxyKXt2YXIgaT1yLmNhY2hlO2Moci5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFhW2ldJiZyLnRvKXtpZihlPT09ImFscGhhInx8bltlXT09bnVsbClyZXR1cm47YVtpXT1yLnRvKGEuX3JnYmEpfWFbaV1bdC5pZHhdPWgobltlXSx0LCEwKX0pLGFbaV0mJmUuaW5BcnJheShudWxsLGFbaV0uc2xpY2UoMCwzKSk8MCYmKGFbaV1bM109MSxyLmZyb20mJihhLl9yZ2JhPXIuZnJvbShhW2ldKSkpfSksdGhpc30saXM6ZnVuY3Rpb24oZSl7dmFyIHQ9cyhlKSxuPSEwLHI9dGhpcztyZXR1cm4gYyhvLGZ1bmN0aW9uKGUsaSl7dmFyIHMsbz10W2kuY2FjaGVdO3JldHVybiBvJiYocz1yW2kuY2FjaGVdfHxpLnRvJiZpLnRvKHIuX3JnYmEpfHxbXSxjKGkucHJvcHMsZnVuY3Rpb24oZSx0KXtpZihvW3QuaWR4XSE9bnVsbClyZXR1cm4gbj1vW3QuaWR4XT09PXNbdC5pZHhdLG59KSksbn0pLG59LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gYyhvLGZ1bmN0aW9uKG4scil7dFtyLmNhY2hlXSYmZS5wdXNoKG4pfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXMoZSkscj1uLl9zcGFjZSgpLGk9b1tyXSxhPXRoaXMuYWxwaGEoKT09PTA/cygidHJhbnNwYXJlbnQiKTp0aGlzLGY9YVtpLmNhY2hlXXx8aS50byhhLl9yZ2JhKSxsPWYuc2xpY2UoKTtyZXR1cm4gbj1uW2kuY2FjaGVdLGMoaS5wcm9wcyxmdW5jdGlvbihlLHIpe3ZhciBpPXIuaWR4LHM9ZltpXSxvPW5baV0sYT11W3IudHlwZV18fHt9O2lmKG89PT1udWxsKXJldHVybjtzPT09bnVsbD9sW2ldPW86KGEubW9kJiYoby1zPmEubW9kLzI/cys9YS5tb2Q6cy1vPmEubW9kLzImJihzLT1hLm1vZCkpLGxbaV09aCgoby1zKSp0K3MscikpfSksdGhpc1tyXShsKX0sYmxlbmQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fcmdiYVszXT09PTEpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKSxpPXModCkuX3JnYmE7cmV0dXJuIHMoZS5tYXAobixmdW5jdGlvbihlLHQpe3JldHVybigxLXIpKmlbdF0rciplfSkpfSx0b1JnYmFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD0icmdiYSgiLG49ZS5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3Q+Mj8xOjA6ZX0pO3JldHVybiBuWzNdPT09MSYmKG4ucG9wKCksdD0icmdiKCIpLHQrbi5qb2luKCkrIikifSx0b0hzbGFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD0iaHNsYSgiLG49ZS5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbCYmKGU9dD4yPzE6MCksdCYmdDwzJiYoZT1NYXRoLnJvdW5kKGUqMTAwKSsiJSIpLGV9KTtyZXR1cm4gblszXT09PTEmJihuLnBvcCgpLHQ9ImhzbCgiKSx0K24uam9pbigpKyIpIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKTtyZXR1cm4gdCYmbi5wdXNoKH5+KHIqMjU1KSksIiMiK2UubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJuIGU9KGV8fDApLnRvU3RyaW5nKDE2KSxlLmxlbmd0aD09PTE/IjAiK2U6ZX0pLmpvaW4oIiIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZ2JhWzNdPT09MD8idHJhbnNwYXJlbnQiOnRoaXMudG9SZ2JhU3RyaW5nKCl9fSkscy5mbi5wYXJzZS5wcm90b3R5cGU9cy5mbixvLmhzbGEudG89ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8yNTUsbj1lWzFdLzI1NSxyPWVbMl0vMjU1LGk9ZVszXSxzPU1hdGgubWF4KHQsbixyKSxvPU1hdGgubWluKHQsbixyKSx1PXMtbyxhPXMrbyxmPWEqLjUsbCxjO3JldHVybiBvPT09cz9sPTA6dD09PXM/bD02MCoobi1yKS91KzM2MDpuPT09cz9sPTYwKihyLXQpL3UrMTIwOmw9NjAqKHQtbikvdSsyNDAsdT09PTA/Yz0wOmY8PS41P2M9dS9hOmM9dS8oMi1hKSxbTWF0aC5yb3VuZChsKSUzNjAsYyxmLGk9PW51bGw/MTppXX0sby5oc2xhLmZyb209ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8zNjAsbj1lWzFdLHI9ZVsyXSxpPWVbM10scz1yPD0uNT9yKigxK24pOnIrbi1yKm4sbz0yKnItcztyZXR1cm5bTWF0aC5yb3VuZChkKG8scyx0KzEvMykqMjU1KSxNYXRoLnJvdW5kKGQobyxzLHQpKjI1NSksTWF0aC5yb3VuZChkKG8scyx0LTEvMykqMjU1KSxpXX0sYyhvLGZ1bmN0aW9uKG4saSl7dmFyIG89aS5wcm9wcyx1PWkuY2FjaGUsYT1pLnRvLGY9aS5mcm9tO3MuZm5bbl09ZnVuY3Rpb24obil7YSYmIXRoaXNbdV0mJih0aGlzW3VdPWEodGhpcy5fcmdiYSkpO2lmKG49PT10KXJldHVybiB0aGlzW3VdLnNsaWNlKCk7dmFyIHIsaT1lLnR5cGUobiksbD1pPT09ImFycmF5Inx8aT09PSJvYmplY3QiP246YXJndW1lbnRzLHA9dGhpc1t1XS5zbGljZSgpO3JldHVybiBjKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj1sW2k9PT0ib2JqZWN0Ij9lOnQuaWR4XTtuPT1udWxsJiYobj1wW3QuaWR4XSkscFt0LmlkeF09aChuLHQpfSksZj8ocj1zKGYocCkpLHJbdV09cCxyKTpzKHApfSxjKG8sZnVuY3Rpb24odCxpKXtpZihzLmZuW3RdKXJldHVybjtzLmZuW3RdPWZ1bmN0aW9uKHMpe3ZhciBvPWUudHlwZShzKSx1PXQ9PT0iYWxwaGEiP3RoaXMuX2hzbGE/ImhzbGEiOiJyZ2JhIjpuLGE9dGhpc1t1XSgpLGY9YVtpLmlkeF0sbDtyZXR1cm4gbz09PSJ1bmRlZmluZWQiP2Y6KG89PT0iZnVuY3Rpb24iJiYocz1zLmNhbGwodGhpcyxmKSxvPWUudHlwZShzKSkscz09bnVsbCYmaS5lbXB0eT90aGlzOihvPT09InN0cmluZyImJihsPXIuZXhlYyhzKSxsJiYocz1mK3BhcnNlRmxvYXQobFsyXSkqKGxbMV09PT0iKyI/MTotMSkpKSxhW2kuaWR4XT1zLHRoaXNbdV0oYSkpKX19KX0pLHMuaG9vaz1mdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KCIgIik7YyhuLGZ1bmN0aW9uKHQsbil7ZS5jc3NIb29rc1tuXT17c2V0OmZ1bmN0aW9uKHQscil7dmFyIGksbyx1PSIiO2lmKHIhPT0idHJhbnNwYXJlbnQiJiYoZS50eXBlKHIpIT09InN0cmluZyJ8fChpPXAocikpKSl7cj1zKGl8fHIpO2lmKCFhLnJnYmEmJnIuX3JnYmFbM10hPT0xKXtvPW49PT0iYmFja2dyb3VuZENvbG9yIj90LnBhcmVudE5vZGU6dDt3aGlsZSgodT09PSIifHx1PT09InRyYW5zcGFyZW50IikmJm8mJm8uc3R5bGUpdHJ5e3U9ZS5jc3MobywiYmFja2dyb3VuZENvbG9yIiksbz1vLnBhcmVudE5vZGV9Y2F0Y2goZil7fXI9ci5ibGVuZCh1JiZ1IT09InRyYW5zcGFyZW50Ij91OiJfZGVmYXVsdCIpfXI9ci50b1JnYmFTdHJpbmcoKX10cnl7dC5zdHlsZVtuXT1yfWNhdGNoKGYpe319fSxlLmZ4LnN0ZXBbbl09ZnVuY3Rpb24odCl7dC5jb2xvckluaXR8fCh0LnN0YXJ0PXModC5lbGVtLG4pLHQuZW5kPXModC5lbmQpLHQuY29sb3JJbml0PSEwKSxlLmNzc0hvb2tzW25dLnNldCh0LmVsZW0sdC5zdGFydC50cmFuc2l0aW9uKHQuZW5kLHQucG9zKSl9fSl9LHMuaG9vayhuKSxlLmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGMoWyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxmdW5jdGlvbihuLHIpe3RbImJvcmRlciIrcisiQ29sb3IiXT1lfSksdH19LGw9ZS5Db2xvci5uYW1lcz17YXF1YToiIzAwZmZmZiIsYmxhY2s6IiMwMDAwMDAiLGJsdWU6IiMwMDAwZmYiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixsaW1lOiIjMDBmZjAwIixtYXJvb246IiM4MDAwMDAiLG5hdnk6IiMwMDAwODAiLG9saXZlOiIjODA4MDAwIixwdXJwbGU6IiM4MDAwODAiLHJlZDoiI2ZmMDAwMCIsc2lsdmVyOiIjYzBjMGMwIix0ZWFsOiIjMDA4MDgwIix3aGl0ZToiI2ZmZmZmZiIseWVsbG93OiIjZmZmZjAwIix0cmFuc3BhcmVudDpbbnVsbCxudWxsLG51bGwsMF0sX2RlZmF1bHQ6IiNmZmZmZmYifX0oalF1ZXJ5KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGkodCl7dmFyIG4scixpPXQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz90Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpOnQuY3VycmVudFN0eWxlLHM9e307aWYoaSYmaS5sZW5ndGgmJmlbMF0mJmlbaVswXV0pe3I9aS5sZW5ndGg7d2hpbGUoci0tKW49aVtyXSx0eXBlb2YgaVtuXT09InN0cmluZyImJihzW2UuY2FtZWxDYXNlKG4pXT1pW25dKX1lbHNlIGZvcihuIGluIGkpdHlwZW9mIGlbbl09PSJzdHJpbmciJiYoc1tuXT1pW25dKTtyZXR1cm4gc31mdW5jdGlvbiBzKHQsbil7dmFyIGk9e30scyxvO2ZvcihzIGluIG4pbz1uW3NdLHRbc10hPT1vJiYhcltzXSYmKGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQobykpKSYmKGlbc109byk7cmV0dXJuIGl9dmFyIG49WyJhZGQiLCJyZW1vdmUiLCJ0b2dnbGUiXSxyPXtib3JkZXI6MSxib3JkZXJCb3R0b206MSxib3JkZXJDb2xvcjoxLGJvcmRlckxlZnQ6MSxib3JkZXJSaWdodDoxLGJvcmRlclRvcDoxLGJvcmRlcldpZHRoOjEsbWFyZ2luOjEscGFkZGluZzoxfTtlLmVhY2goWyJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJUb3BTdHlsZSJdLGZ1bmN0aW9uKHQsbil7ZS5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2lmKGUuZW5kIT09Im5vbmUiJiYhZS5zZXRBdHRyfHxlLnBvcz09PTEmJiFlLnNldEF0dHIpalF1ZXJ5LnN0eWxlKGUuZWxlbSxuLGUuZW5kKSxlLnNldEF0dHI9ITB9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChlPT1udWxsP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUuZWZmZWN0cy5hbmltYXRlQ2xhc3M9ZnVuY3Rpb24odCxyLG8sdSl7dmFyIGE9ZS5zcGVlZChyLG8sdSk7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLG89ci5hdHRyKCJjbGFzcyIpfHwiIix1LGY9YS5jaGlsZHJlbj9yLmZpbmQoIioiKS5hZGRCYWNrKCk6cjtmPWYubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm57ZWw6dCxzdGFydDppKHRoaXMpfX0pLHU9ZnVuY3Rpb24oKXtlLmVhY2gobixmdW5jdGlvbihlLG4pe3Rbbl0mJnJbbisiQ2xhc3MiXSh0W25dKX0pfSx1KCksZj1mLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZD1pKHRoaXMuZWxbMF0pLHRoaXMuZGlmZj1zKHRoaXMuc3RhcnQsdGhpcy5lbmQpLHRoaXN9KSxyLmF0dHIoImNsYXNzIixvKSxmPWYubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuRGVmZXJyZWQoKSxyPWUuZXh0ZW5kKHt9LGEse3F1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7bi5yZXNvbHZlKHQpfX0pO3JldHVybiB0aGlzLmVsLmFuaW1hdGUodGhpcy5kaWZmLHIpLG4ucHJvbWlzZSgpfSksZS53aGVuLmFwcGx5KGUsZi5nZXQoKSkuZG9uZShmdW5jdGlvbigpe3UoKSxlLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbDtlLmVhY2godGhpcy5kaWZmLGZ1bmN0aW9uKGUpe3QuY3NzKGUsIiIpfSl9KSxhLmNvbXBsZXRlLmNhbGwoclswXSl9KX0pfSxlLmZuLmV4dGVuZCh7X2FkZENsYXNzOmUuZm4uYWRkQ2xhc3MsYWRkQ2xhc3M6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIG4/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse2FkZDp0fSxuLHIsaSk6dGhpcy5fYWRkQ2xhc3ModCl9LF9yZW1vdmVDbGFzczplLmZuLnJlbW92ZUNsYXNzLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTp0fSxuLHIsaSk6dGhpcy5fcmVtb3ZlQ2xhc3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfdG9nZ2xlQ2xhc3M6ZS5mbi50b2dnbGVDbGFzcyx0b2dnbGVDbGFzczpmdW5jdGlvbihuLHIsaSxzLG8pe3JldHVybiB0eXBlb2Ygcj09ImJvb2xlYW4ifHxyPT09dD9pP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHI/e2FkZDpufTp7cmVtb3ZlOm59LGkscyxvKTp0aGlzLl90b2dnbGVDbGFzcyhuLHIpOmUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHt0b2dnbGU6bn0scixpLHMpfSxzd2l0Y2hDbGFzczpmdW5jdGlvbih0LG4scixpLHMpe3JldHVybiBlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOm4scmVtb3ZlOnR9LHIsaSxzKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuLHIsaSl7ZS5pc1BsYWluT2JqZWN0KHQpJiYobj10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxuPT1udWxsJiYobj17fSksZS5pc0Z1bmN0aW9uKG4pJiYoaT1uLHI9bnVsbCxuPXt9KTtpZih0eXBlb2Ygbj09Im51bWJlciJ8fGUuZnguc3BlZWRzW25dKWk9cixyPW4sbj17fTtyZXR1cm4gZS5pc0Z1bmN0aW9uKHIpJiYoaT1yLHI9bnVsbCksbiYmZS5leHRlbmQodCxuKSxyPXJ8fG4uZHVyYXRpb24sdC5kdXJhdGlvbj1lLmZ4Lm9mZj8wOnR5cGVvZiByPT0ibnVtYmVyIj9yOnIgaW4gZS5meC5zcGVlZHM/ZS5meC5zcGVlZHNbcl06ZS5meC5zcGVlZHMuX2RlZmF1bHQsdC5jb21wbGV0ZT1pfHxuLmNvbXBsZXRlLHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hdHx8dHlwZW9mIHQ9PSJudW1iZXIifHxlLmZ4LnNwZWVkc1t0XT8hMDp0eXBlb2YgdD09InN0cmluZyImJiFlLmVmZmVjdHMuZWZmZWN0W3RdfWUuZXh0ZW5kKGUuZWZmZWN0cyx7dmVyc2lvbjoiMS4xMC4xIixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXSE9PW51bGwmJmUuZGF0YShuK3Rbcl0sZVswXS5zdHlsZVt0W3JdXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSxyKXt2YXIgaSxzO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspcltzXSE9PW51bGwmJihpPWUuZGF0YShuK3Jbc10pLGk9PT10JiYoaT0iIiksZS5jc3MocltzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PSJ0b2dnbGUiJiYodD1lLmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIiksdH0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3N3aXRjaChlWzBdKXtjYXNlInRvcCI6bj0wO2JyZWFrO2Nhc2UibWlkZGxlIjpuPS41O2JyZWFrO2Nhc2UiYm90dG9tIjpuPTE7YnJlYWs7ZGVmYXVsdDpuPWVbMF0vdC5oZWlnaHR9c3dpdGNoKGVbMV0pe2Nhc2UibGVmdCI6cj0wO2JyZWFrO2Nhc2UiY2VudGVyIjpyPS41O2JyZWFrO2Nhc2UicmlnaHQiOnI9MTticmVhaztkZWZhdWx0OnI9ZVsxXS90LndpZHRofXJldHVybnt4OnIseTpufX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbih0KXtpZih0LnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpcmV0dXJuIHQucGFyZW50KCk7dmFyIG49e3dpZHRoOnQub3V0ZXJXaWR0aCghMCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoITApLCJmbG9hdCI6dC5jc3MoImZsb2F0Iil9LHI9ZSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHtmb250U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksaT17d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpfSxzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e3MuaWR9Y2F0Y2gobyl7cz1kb2N1bWVudC5ib2R5fXJldHVybiB0LndyYXAociksKHRbMF09PT1zfHxlLmNvbnRhaW5zKHRbMF0scykpJiZlKHMpLmZvY3VzKCkscj10LnBhcmVudCgpLHQuY3NzKCJwb3NpdGlvbiIpPT09InN0YXRpYyI/KHIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSksdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KSk6KGUuZXh0ZW5kKG4se3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHpJbmRleDp0LmNzcygiei1pbmRleCIpfSksZS5lYWNoKFsidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0Il0sZnVuY3Rpb24oZSxyKXtuW3JdPXQuY3NzKHIpLGlzTmFOKHBhcnNlSW50KG5bcl0sMTApKSYmKG5bcl09ImF1dG8iKX0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pKSx0LmNzcyhpKSxyLmNzcyhuKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gdC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpJiYodC5wYXJlbnQoKS5yZXBsYWNlV2l0aCh0KSwodFswXT09PW58fGUuY29udGFpbnModFswXSxuKSkmJmUobikuZm9jdXMoKSksdH0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gaT1pfHx7fSxlLmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBzPXQuY3NzVW5pdChuKTtzWzBdPjAmJihpW25dPXNbMF0qcitzWzFdKX0pLGl9fSksZS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbigpe2Z1bmN0aW9uIG8obil7ZnVuY3Rpb24gdSgpe2UuaXNGdW5jdGlvbihpKSYmaS5jYWxsKHJbMF0pLGUuaXNGdW5jdGlvbihuKSYmbigpfXZhciByPWUodGhpcyksaT10LmNvbXBsZXRlLG89dC5tb2RlOyhyLmlzKCI6aGlkZGVuIik/bz09PSJoaWRlIjpvPT09InNob3ciKT91KCk6cy5jYWxsKHJbMF0sdCx1KX12YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXQubW9kZSxpPXQucXVldWUscz1lLmVmZmVjdHMuZWZmZWN0W3QuZWZmZWN0XTtyZXR1cm4gZS5meC5vZmZ8fCFzP24/dGhpc1tuXSh0LmR1cmF0aW9uLHQuY29tcGxldGUpOnRoaXMuZWFjaChmdW5jdGlvbigpe3QuY29tcGxldGUmJnQuY29tcGxldGUuY2FsbCh0aGlzKX0pOmk9PT0hMT90aGlzLmVhY2gobyk6dGhpcy5xdWV1ZShpfHwiZngiLG8pfSxfc2hvdzplLmZuLnNob3csc2hvdzpmdW5jdGlvbihlKXtpZihpKGUpKXJldHVybiB0aGlzLl9zaG93LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdC5tb2RlPSJzaG93Iix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsdCl9LF9oaWRlOmUuZm4uaGlkZSxoaWRlOmZ1bmN0aW9uKGUpe2lmKGkoZSkpcmV0dXJuIHRoaXMuX2hpZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0Lm1vZGU9ImhpZGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyx0KX0sX190b2dnbGU6ZS5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKHQpe2lmKGkodCl8fHR5cGVvZiB0PT0iYm9vbGVhbiJ8fGUuaXNGdW5jdGlvbih0KSlyZXR1cm4gdGhpcy5fX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0idG9nZ2xlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9LGNzc1VuaXQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5jc3ModCkscj1bXTtyZXR1cm4gZS5lYWNoKFsiZW0iLCJweCIsIiUiLCJwdCJdLGZ1bmN0aW9uKGUsdCl7bi5pbmRleE9mKHQpPjAmJihyPVtwYXJzZUZsb2F0KG4pLHRdKX0pLHJ9fSl9KCksZnVuY3Rpb24oKXt2YXIgdD17fTtlLmVhY2goWyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50IiwiRXhwbyJdLGZ1bmN0aW9uKGUsbil7dFtuXT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKzIpfX0pLGUuZXh0ZW5kKHQse1NpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSpNYXRoLlBJLzIpfSxDaXJjOmZ1bmN0aW9uKGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9LEVsYXN0aWM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0wfHxlPT09MT9lOi1NYXRoLnBvdygyLDgqKGUtMSkpKk1hdGguc2luKCgoZS0xKSo4MC03LjUpKk1hdGguUEkvMTUpfSxCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlKmUqKDMqZS0yKX0sQm91bmNlOmZ1bmN0aW9uKGUpe3ZhciB0LG49NDt3aGlsZShlPCgodD1NYXRoLnBvdygyLC0tbikpLTEpLzExKTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtbiktNy41NjI1Kk1hdGgucG93KCh0KjMtMikvMjItZSwyKX19KSxlLmVhY2godCxmdW5jdGlvbih0LG4pe2UuZWFzaW5nWyJlYXNlSW4iK3RdPW4sZS5lYXNpbmdbImVhc2VPdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybiAxLW4oMS1lKX0sZS5lYXNpbmdbImVhc2VJbk91dCIrdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/bihlKjIpLzI6MS1uKGUqLTIrMikvMn19KX0oKX0oalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0vdXB8ZG93bnx2ZXJ0aWNhbC8scj0vdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLztlLmVmZmVjdHMuZWZmZWN0LmJsaW5kPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJoaWRlIiksYT10LmRpcmVjdGlvbnx8InVwIixmPW4udGVzdChhKSxsPWY/ImhlaWdodCI6IndpZHRoIixjPWY/InRvcCI6ImxlZnQiLGg9ci50ZXN0KGEpLHA9e30sZD11PT09InNob3ciLHYsbSxnO3MucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKT9lLmVmZmVjdHMuc2F2ZShzLnBhcmVudCgpLG8pOmUuZWZmZWN0cy5zYXZlKHMsbykscy5zaG93KCksdj1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihzKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbT12W2xdKCksZz1wYXJzZUZsb2F0KHYuY3NzKGMpKXx8MCxwW2xdPWQ/bTowLGh8fChzLmNzcyhmPyJib3R0b20iOiJyaWdodCIsMCkuY3NzKGY/InRvcCI6ImxlZnQiLCJhdXRvIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSkscFtjXT1kP2c6bStnKSxkJiYodi5jc3MobCwwKSxofHx2LmNzcyhjLGcrbSkpLHYuYW5pbWF0ZShwLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe3U9PT0iaGlkZSImJnMuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHMsbyksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIocyksaSgpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5ib3VuY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImVmZmVjdCIpLG89cz09PSJoaWRlIix1PXM9PT0ic2hvdyIsYT10LmRpcmVjdGlvbnx8InVwIixmPXQuZGlzdGFuY2UsbD10LnRpbWVzfHw1LGM9bCoyKyh1fHxvPzE6MCksaD10LmR1cmF0aW9uL2MscD10LmVhc2luZyxkPWE9PT0idXAifHxhPT09ImRvd24iPyJ0b3AiOiJsZWZ0Iix2PWE9PT0idXAifHxhPT09ImxlZnQiLG0sZyx5LGI9ci5xdWV1ZSgpLHc9Yi5sZW5ndGg7KHV8fG8pJiZpLnB1c2goIm9wYWNpdHkiKSxlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLGZ8fChmPXJbZD09PSJ0b3AiPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSgpLzMpLHUmJih5PXtvcGFjaXR5OjF9LHlbZF09MCxyLmNzcygib3BhY2l0eSIsMCkuY3NzKGQsdj8tZioyOmYqMikuYW5pbWF0ZSh5LGgscCkpLG8mJihmLz1NYXRoLnBvdygyLGwtMSkpLHk9e30seVtkXT0wO2ZvcihtPTA7bTxsO20rKylnPXt9LGdbZF09KHY/Ii09IjoiKz0iKStmLHIuYW5pbWF0ZShnLGgscCkuYW5pbWF0ZSh5LGgscCksZj1vP2YqMjpmLzI7byYmKGc9e29wYWNpdHk6MH0sZ1tkXT0odj8iLT0iOiIrPSIpK2Ysci5hbmltYXRlKGcsaCxwKSksci5xdWV1ZShmdW5jdGlvbigpe28mJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfSksdz4xJiZiLnNwbGljZS5hcHBseShiLFsxLDBdLmNvbmNhdChiLnNwbGljZSh3LGMrMSkpKSxyLmRlcXVldWUoKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuY2xpcD1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLG89cz09PSJzaG93Iix1PXQuZGlyZWN0aW9ufHwidmVydGljYWwiLGE9dT09PSJ2ZXJ0aWNhbCIsZj1hPyJoZWlnaHQiOiJ3aWR0aCIsbD1hPyJ0b3AiOiJsZWZ0IixjPXt9LGgscCxkO2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksaD1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSkscD1yWzBdLnRhZ05hbWU9PT0iSU1HIj9oOnIsZD1wW2ZdKCksbyYmKHAuY3NzKGYsMCkscC5jc3MobCxkLzIpKSxjW2ZdPW8/ZDowLGNbbF09bz8wOmQvMixwLmFuaW1hdGUoYyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtvfHxyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZHJvcD1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxvPXM9PT0ic2hvdyIsdT10LmRpcmVjdGlvbnx8ImxlZnQiLGE9dT09PSJ1cCJ8fHU9PT0iZG93biI/InRvcCI6ImxlZnQiLGY9dT09PSJ1cCJ8fHU9PT0ibGVmdCI/InBvcyI6Im5lZyIsbD17b3BhY2l0eTpvPzE6MH0sYztlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLGM9dC5kaXN0YW5jZXx8clthPT09InRvcCI/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKS8yLG8mJnIuY3NzKCJvcGFjaXR5IiwwKS5jc3MoYSxmPT09InBvcyI/LWM6YyksbFthXT0obz9mPT09InBvcyI/Iis9IjoiLT0iOmY9PT0icG9zIj8iLT0iOiIrPSIpK2Msci5hbmltYXRlKGwse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmV4cGxvZGU9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiB5KCl7Yy5wdXNoKHRoaXMpLGMubGVuZ3RoPT09cippJiZiKCl9ZnVuY3Rpb24gYigpe3MuY3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pLGUoYykucmVtb3ZlKCksdXx8cy5oaWRlKCksbigpfXZhciByPXQucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KHQucGllY2VzKSk6MyxpPXIscz1lKHRoaXMpLG89ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJoaWRlIiksdT1vPT09InNob3ciLGE9cy5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikub2Zmc2V0KCksZj1NYXRoLmNlaWwocy5vdXRlcldpZHRoKCkvaSksbD1NYXRoLmNlaWwocy5vdXRlckhlaWdodCgpL3IpLGM9W10saCxwLGQsdixtLGc7Zm9yKGg9MDtoPHI7aCsrKXt2PWEudG9wK2gqbCxnPWgtKHItMSkvMjtmb3IocD0wO3A8aTtwKyspZD1hLmxlZnQrcCpmLG09cC0oaS0xKS8yLHMuY2xvbmUoKS5hcHBlbmRUbygiYm9keSIpLndyYXAoIjxkaXY+PC9kaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6InZpc2libGUiLGxlZnQ6LXAqZix0b3A6LWgqbH0pLnBhcmVudCgpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLWV4cGxvZGUiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6ZixoZWlnaHQ6bCxsZWZ0OmQrKHU/bSpmOjApLHRvcDp2Kyh1P2cqbDowKSxvcGFjaXR5OnU/MDoxfSkuYW5pbWF0ZSh7bGVmdDpkKyh1PzA6bSpmKSx0b3A6disodT8wOmcqbCksb3BhY2l0eTp1PzE6MH0sdC5kdXJhdGlvbnx8NTAwLHQuZWFzaW5nLHkpfX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZmFkZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InRvZ2dsZSIpO3IuYW5pbWF0ZSh7b3BhY2l0eTppfSx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6bn0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5mb2xkPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIiksbz1zPT09InNob3ciLHU9cz09PSJoaWRlIixhPXQuc2l6ZXx8MTUsZj0vKFswLTldKyklLy5leGVjKGEpLGw9ISF0Lmhvcml6Rmlyc3QsYz1vIT09bCxoPWM/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxwPXQuZHVyYXRpb24vMixkLHYsbT17fSxnPXt9O2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZD1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksdj1jP1tkLndpZHRoKCksZC5oZWlnaHQoKV06W2QuaGVpZ2h0KCksZC53aWR0aCgpXSxmJiYoYT1wYXJzZUludChmWzFdLDEwKS8xMDAqdlt1PzA6MV0pLG8mJmQuY3NzKGw/e2hlaWdodDowLHdpZHRoOmF9OntoZWlnaHQ6YSx3aWR0aDowfSksbVtoWzBdXT1vP3ZbMF06YSxnW2hbMV1dPW8/dlsxXTowLGQuYW5pbWF0ZShtLHAsdC5lYXNpbmcpLmFuaW1hdGUoZyxwLHQuZWFzaW5nLGZ1bmN0aW9uKCl7dSYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZENvbG9yIiwib3BhY2l0eSJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJzaG93Iiksbz17YmFja2dyb3VuZENvbG9yOnIuY3NzKCJiYWNrZ3JvdW5kQ29sb3IiKX07cz09PSJoaWRlIiYmKG8ub3BhY2l0eT0wKSxlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLmNzcyh7YmFja2dyb3VuZEltYWdlOiJub25lIixiYWNrZ3JvdW5kQ29sb3I6dC5jb2xvcnx8IiNmZmZmOTkifSkuYW5pbWF0ZShvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5wdWxzYXRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwic2hvdyIpLHM9aT09PSJzaG93IixvPWk9PT0iaGlkZSIsdT1zfHxpPT09ImhpZGUiLGE9KHQudGltZXN8fDUpKjIrKHU/MTowKSxmPXQuZHVyYXRpb24vYSxsPTAsYz1yLnF1ZXVlKCksaD1jLmxlbmd0aCxwO2lmKHN8fCFyLmlzKCI6dmlzaWJsZSIpKXIuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksbD0xO2ZvcihwPTE7cDxhO3ArKylyLmFuaW1hdGUoe29wYWNpdHk6bH0sZix0LmVhc2luZyksbD0xLWw7ci5hbmltYXRlKHtvcGFjaXR5Omx9LGYsdC5lYXNpbmcpLHIucXVldWUoZnVuY3Rpb24oKXtvJiZyLmhpZGUoKSxuKCl9KSxoPjEmJmMuc3BsaWNlLmFwcGx5KGMsWzEsMF0uY29uY2F0KGMuc3BsaWNlKGgsYSsxKSkpLHIuZGVxdWV1ZSgpfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5wdWZmPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLHM9aT09PSJoaWRlIixvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fDE1MCx1PW8vMTAwLGE9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX07ZS5leHRlbmQodCx7ZWZmZWN0OiJzY2FsZSIscXVldWU6ITEsZmFkZTohMCxtb2RlOmksY29tcGxldGU6bixwZXJjZW50OnM/bzoxMDAsZnJvbTpzP2E6e2hlaWdodDphLmhlaWdodCp1LHdpZHRoOmEud2lkdGgqdSxvdXRlckhlaWdodDphLm91dGVySGVpZ2h0KnUsb3V0ZXJXaWR0aDphLm91dGVyV2lkdGgqdX19KSxyLmVmZmVjdCh0KX0sZS5lZmZlY3RzLmVmZmVjdC5zY2FsZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1lLmV4dGVuZCghMCx7fSx0KSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwocGFyc2VJbnQodC5wZXJjZW50LDEwKT09PTA/MDpzPT09ImhpZGUiPzA6MTAwKSx1PXQuZGlyZWN0aW9ufHwiYm90aCIsYT10Lm9yaWdpbixmPXtoZWlnaHQ6ci5oZWlnaHQoKSx3aWR0aDpyLndpZHRoKCksb3V0ZXJIZWlnaHQ6ci5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6ci5vdXRlcldpZHRoKCl9LGw9e3k6dSE9PSJob3Jpem9udGFsIj9vLzEwMDoxLHg6dSE9PSJ2ZXJ0aWNhbCI/by8xMDA6MX07aS5lZmZlY3Q9InNpemUiLGkucXVldWU9ITEsaS5jb21wbGV0ZT1uLHMhPT0iZWZmZWN0IiYmKGkub3JpZ2luPWF8fFsibWlkZGxlIiwiY2VudGVyIl0saS5yZXN0b3JlPSEwKSxpLmZyb209dC5mcm9tfHwocz09PSJzaG93Ij97aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH06ZiksaS50bz17aGVpZ2h0OmYuaGVpZ2h0KmwueSx3aWR0aDpmLndpZHRoKmwueCxvdXRlckhlaWdodDpmLm91dGVySGVpZ2h0KmwueSxvdXRlcldpZHRoOmYub3V0ZXJXaWR0aCpsLnh9LGkuZmFkZSYmKHM9PT0ic2hvdyImJihpLmZyb20ub3BhY2l0eT0wLGkudG8ub3BhY2l0eT0xKSxzPT09ImhpZGUiJiYoaS5mcm9tLm9wYWNpdHk9MSxpLnRvLm9wYWNpdHk9MCkpLHIuZWZmZWN0KGkpfSxlLmVmZmVjdHMuZWZmZWN0LnNpemU9ZnVuY3Rpb24odCxuKXt2YXIgcixpLHMsbz1lKHRoaXMpLHU9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3ciLCJvcGFjaXR5Il0sYT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3ZlcmZsb3ciLCJvcGFjaXR5Il0sZj1bIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3ciXSxsPVsiZm9udFNpemUiXSxjPVsiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0saD1bImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLHA9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJlZmZlY3QiKSxkPXQucmVzdG9yZXx8cCE9PSJlZmZlY3QiLHY9dC5zY2FsZXx8ImJvdGgiLG09dC5vcmlnaW58fFsibWlkZGxlIiwiY2VudGVyIl0sZz1vLmNzcygicG9zaXRpb24iKSx5PWQ/dTphLGI9e2hlaWdodDowLHdpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxvdXRlcldpZHRoOjB9O3A9PT0ic2hvdyImJm8uc2hvdygpLHI9e2hlaWdodDpvLmhlaWdodCgpLHdpZHRoOm8ud2lkdGgoKSxvdXRlckhlaWdodDpvLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpvLm91dGVyV2lkdGgoKX0sdC5tb2RlPT09InRvZ2dsZSImJnA9PT0ic2hvdyI/KG8uZnJvbT10LnRvfHxiLG8udG89dC5mcm9tfHxyKTooby5mcm9tPXQuZnJvbXx8KHA9PT0ic2hvdyI/YjpyKSxvLnRvPXQudG98fChwPT09ImhpZGUiP2I6cikpLHM9e2Zyb206e3k6by5mcm9tLmhlaWdodC9yLmhlaWdodCx4Om8uZnJvbS53aWR0aC9yLndpZHRofSx0bzp7eTpvLnRvLmhlaWdodC9yLmhlaWdodCx4Om8udG8ud2lkdGgvci53aWR0aH19O2lmKHY9PT0iYm94Inx8dj09PSJib3RoIilzLmZyb20ueSE9PXMudG8ueSYmKHk9eS5jb25jYXQoYyksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sYyxzLmZyb20ueSxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLHMudG8ueSxvLnRvKSkscy5mcm9tLnghPT1zLnRvLngmJih5PXkuY29uY2F0KGgpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGgscy5mcm9tLngsby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8saCxzLnRvLngsby50bykpOyh2PT09ImNvbnRlbnQifHx2PT09ImJvdGgiKSYmcy5mcm9tLnkhPT1zLnRvLnkmJih5PXkuY29uY2F0KGwpLmNvbmNhdChmKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxsLHMuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGwscy50by55LG8udG8pKSxlLmVmZmVjdHMuc2F2ZShvLHkpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLG8uY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmNzcyhvLmZyb20pLG0mJihpPWUuZWZmZWN0cy5nZXRCYXNlbGluZShtLHIpLG8uZnJvbS50b3A9KHIub3V0ZXJIZWlnaHQtby5vdXRlckhlaWdodCgpKSppLnksby5mcm9tLmxlZnQ9KHIub3V0ZXJXaWR0aC1vLm91dGVyV2lkdGgoKSkqaS54LG8udG8udG9wPShyLm91dGVySGVpZ2h0LW8udG8ub3V0ZXJIZWlnaHQpKmkueSxvLnRvLmxlZnQ9KHIub3V0ZXJXaWR0aC1vLnRvLm91dGVyV2lkdGgpKmkueCksby5jc3Moby5mcm9tKTtpZih2PT09ImNvbnRlbnQifHx2PT09ImJvdGgiKWM9Yy5jb25jYXQoWyJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iXSkuY29uY2F0KGwpLGg9aC5jb25jYXQoWyJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiXSksZj11LmNvbmNhdChjKS5jb25jYXQoaCksby5maW5kKCIqW3dpZHRoXSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1lKHRoaXMpLHI9e2hlaWdodDpuLmhlaWdodCgpLHdpZHRoOm4ud2lkdGgoKSxvdXRlckhlaWdodDpuLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpuLm91dGVyV2lkdGgoKX07ZCYmZS5lZmZlY3RzLnNhdmUobixmKSxuLmZyb209e2hlaWdodDpyLmhlaWdodCpzLmZyb20ueSx3aWR0aDpyLndpZHRoKnMuZnJvbS54LG91dGVySGVpZ2h0OnIub3V0ZXJIZWlnaHQqcy5mcm9tLnksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgqcy5mcm9tLnh9LG4udG89e2hlaWdodDpyLmhlaWdodCpzLnRvLnksd2lkdGg6ci53aWR0aCpzLnRvLngsb3V0ZXJIZWlnaHQ6ci5oZWlnaHQqcy50by55LG91dGVyV2lkdGg6ci53aWR0aCpzLnRvLnh9LHMuZnJvbS55IT09cy50by55JiYobi5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4sYyxzLmZyb20ueSxuLmZyb20pLG4udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixjLHMudG8ueSxuLnRvKSkscy5mcm9tLnghPT1zLnRvLngmJihuLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixoLHMuZnJvbS54LG4uZnJvbSksbi50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGgscy50by54LG4udG8pKSxuLmNzcyhuLmZyb20pLG4uYW5pbWF0ZShuLnRvLHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtkJiZlLmVmZmVjdHMucmVzdG9yZShuLGYpfSl9KTtvLmFuaW1hdGUoby50byx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtvLnRvLm9wYWNpdHk9PT0wJiZvLmNzcygib3BhY2l0eSIsby5mcm9tLm9wYWNpdHkpLHA9PT0iaGlkZSImJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8seSksZHx8KGc9PT0ic3RhdGljIj9vLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6by50by50b3AsbGVmdDpvLnRvLmxlZnR9KTplLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXtvLmNzcyh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9cGFyc2VJbnQobiwxMCksaT1lP28udG8ubGVmdDpvLnRvLnRvcDtyZXR1cm4gbj09PSJhdXRvIj9pKyJweCI6citpKyJweCJ9KX0pKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnNoYWtlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJlZmZlY3QiKSxvPXQuZGlyZWN0aW9ufHwibGVmdCIsdT10LmRpc3RhbmNlfHwyMCxhPXQudGltZXN8fDMsZj1hKjIrMSxsPU1hdGgucm91bmQodC5kdXJhdGlvbi9mKSxjPW89PT0idXAifHxvPT09ImRvd24iPyJ0b3AiOiJsZWZ0IixoPW89PT0idXAifHxvPT09ImxlZnQiLHA9e30sZD17fSx2PXt9LG0sZz1yLnF1ZXVlKCkseT1nLmxlbmd0aDtlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLHBbY109KGg/Ii09IjoiKz0iKSt1LGRbY109KGg/Iis9IjoiLT0iKSt1KjIsdltjXT0oaD8iLT0iOiIrPSIpK3UqMixyLmFuaW1hdGUocCxsLHQuZWFzaW5nKTtmb3IobT0xO208YTttKyspci5hbmltYXRlKGQsbCx0LmVhc2luZykuYW5pbWF0ZSh2LGwsdC5lYXNpbmcpO3IuYW5pbWF0ZShkLGwsdC5lYXNpbmcpLmFuaW1hdGUocCxsLzIsdC5lYXNpbmcpLnF1ZXVlKGZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9KSx5PjEmJmcuc3BsaWNlLmFwcGx5KGcsWzEsMF0uY29uY2F0KGcuc3BsaWNlKHksZisxKSkpLHIuZGVxdWV1ZSgpfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5zbGlkZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwic2hvdyIpLG89cz09PSJzaG93Iix1PXQuZGlyZWN0aW9ufHwibGVmdCIsYT11PT09InVwInx8dT09PSJkb3duIj8idG9wIjoibGVmdCIsZj11PT09InVwInx8dT09PSJsZWZ0IixsLGM9e307ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxsPXQuZGlzdGFuY2V8fHJbYT09PSJ0b3AiPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIocikuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLG8mJnIuY3NzKGEsZj9pc05hTihsKT8iLSIrbDotbDpsKSxjW2FdPShvP2Y/Iis9IjoiLT0iOmY/Ii09IjoiKz0iKStsLHIuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC50cmFuc2Zlcj1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1lKHQudG8pLHM9aS5jc3MoInBvc2l0aW9uIik9PT0iZml4ZWQiLG89ZSgiYm9keSIpLHU9cz9vLnNjcm9sbFRvcCgpOjAsYT1zP28uc2Nyb2xsTGVmdCgpOjAsZj1pLm9mZnNldCgpLGw9e3RvcDpmLnRvcC11LGxlZnQ6Zi5sZWZ0LWEsaGVpZ2h0OmkuaW5uZXJIZWlnaHQoKSx3aWR0aDppLmlubmVyV2lkdGgoKX0sYz1yLm9mZnNldCgpLGg9ZSgiPGRpdiBjbGFzcz0ndWktZWZmZWN0cy10cmFuc2Zlcic+PC9kaXY+IikuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3ModC5jbGFzc05hbWUpLmNzcyh7dG9wOmMudG9wLXUsbGVmdDpjLmxlZnQtYSxoZWlnaHQ6ci5pbm5lckhlaWdodCgpLHdpZHRoOnIuaW5uZXJXaWR0aCgpLHBvc2l0aW9uOnM/ImZpeGVkIjoiYWJzb2x1dGUifSkuYW5pbWF0ZShsLHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtoLnJlbW92ZSgpLG4oKX0pfX0pKGpRdWVyeSk7",
	"jquery.js":                           "LyohIGpRdWVyeSB2MS45LjEgfCAoYykgMjAwNSwgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZQovL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnkubWluLm1hcAoqLyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10eXBlb2YgdCxvPWUuZG9jdW1lbnQsYT1lLmxvY2F0aW9uLHM9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjEuOS4xIixmPWMuY29uY2F0LGQ9Yy5wdXNoLGg9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGIuZm4uaW5pdChlLHQscil9LHg9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csTj0vXig/Oig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eW1xdLDp7fVxzXSokLyxFPS8oPzpefDp8LCkoPzpccypcWykrL2csUz0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csQT0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZyxqPS9eLW1zLS8sRD0vLShbXGRhLXpdKS9naSxMPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sSD1mdW5jdGlvbihlKXsoby5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1lLnR5cGV8fCJjb21wbGV0ZSI9PT1vLnJlYWR5U3RhdGUpJiYocSgpLGIucmVhZHkoKSl9LHE9ZnVuY3Rpb24oKXtvLmFkZEV2ZW50TGlzdGVuZXI/KG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixILCExKSk6KG8uZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSCksZS5kZXRhY2hFdmVudCgib25sb2FkIixIKSl9O2IuZm49Yi5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOmIsaW5pdDpmdW5jdGlvbihlLG4scil7dmFyIGksYTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGk9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOk4uZXhlYyhlKSwhaXx8IWlbMV0mJm4pcmV0dXJuIW58fG4uanF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKTtpZihpWzFdKXtpZihuPW4gaW5zdGFuY2VvZiBiP25bMF06bixiLm1lcmdlKHRoaXMsYi5wYXJzZUhUTUwoaVsxXSxuJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjpvLCEwKSksQy50ZXN0KGlbMV0pJiZiLmlzUGxhaW5PYmplY3QobikpZm9yKGkgaW4gbiliLmlzRnVuY3Rpb24odGhpc1tpXSk/dGhpc1tpXShuW2ldKTp0aGlzLmF0dHIoaSxuW2ldKTtyZXR1cm4gdGhpc31pZihhPW8uZ2V0RWxlbWVudEJ5SWQoaVsyXSksYSYmYS5wYXJlbnROb2RlKXtpZihhLmlkIT09aVsyXSlyZXR1cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1hfXJldHVybiB0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOmIuaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSxiLm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBoLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Yi5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiBiLmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gYi5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhoLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhiLm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6ZCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sYi5mbi5pbml0LnByb3RvdHlwZT1iLmZuLGIuZXh0ZW5kPWIuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixyLGksbyxhLHM9YXJndW1lbnRzWzBdfHx7fSx1PTEsbD1hcmd1bWVudHMubGVuZ3RoLGM9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihjPXMscz1hcmd1bWVudHNbMV18fHt9LHU9MiksIm9iamVjdCI9PXR5cGVvZiBzfHxiLmlzRnVuY3Rpb24ocyl8fChzPXt9KSxsPT09dSYmKHM9dGhpcywtLXUpO2w+dTt1KyspaWYobnVsbCE9KG89YXJndW1lbnRzW3VdKSlmb3IoaSBpbiBvKWU9c1tpXSxyPW9baV0scyE9PXImJihjJiZyJiYoYi5pc1BsYWluT2JqZWN0KHIpfHwobj1iLmlzQXJyYXkocikpKT8obj8obj0hMSxhPWUmJmIuaXNBcnJheShlKT9lOltdKTphPWUmJmIuaXNQbGFpbk9iamVjdChlKT9lOnt9LHNbaV09Yi5leHRlbmQoYyxhLHIpKTpyIT09dCYmKHNbaV09cikpO3JldHVybiBzfSxiLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09YiYmKGUuJD11KSx0JiZlLmpRdWVyeT09PWImJihlLmpRdWVyeT1zKSxifSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP2IucmVhZHlXYWl0Kys6Yi5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpe2lmKGU9PT0hMD8hLS1iLnJlYWR5V2FpdDohYi5pc1JlYWR5KXtpZighby5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGIucmVhZHkpO2IuaXNSZWFkeT0hMCxlIT09ITAmJi0tYi5yZWFkeVdhaXQ+MHx8KG4ucmVzb2x2ZVdpdGgobyxbYl0pLGIuZm4udHJpZ2dlciYmYihvKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKSl9fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT1iLnR5cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuImFycmF5Ij09PWIudHlwZShlKX0saXNXaW5kb3c6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bFttLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXtpZighZXx8Im9iamVjdCIhPT1iLnR5cGUoZSl8fGUubm9kZVR5cGV8fGIuaXNXaW5kb3coZSkpcmV0dXJuITE7dHJ5e2lmKGUuY29uc3RydWN0b3ImJiF5LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmIXkuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKG4pe3JldHVybiExfXZhciByO2ZvcihyIGluIGUpO3JldHVybiByPT09dHx8eS5jYWxsKGUscil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9Yi5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJmIoaSkucmVtb3ZlKCksYi5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOmZ1bmN0aW9uKG4pe3JldHVybiBlLkpTT04mJmUuSlNPTi5wYXJzZT9lLkpTT04ucGFyc2Uobik6bnVsbD09PW4/bjoic3RyaW5nIj09dHlwZW9mIG4mJihuPWIudHJpbShuKSxuJiZrLnRlc3Qobi5yZXBsYWNlKFMsIkAiKS5yZXBsYWNlKEEsIl0iKS5yZXBsYWNlKEUsIiIpKSk/RnVuY3Rpb24oInJldHVybiAiK24pKCk6KGIuZXJyb3IoIkludmFsaWQgSlNPTjogIituKSx0KX0scGFyc2VYTUw6ZnVuY3Rpb24obil7dmFyIHIsaTtpZighbnx8InN0cmluZyIhPXR5cGVvZiBuKXJldHVybiBudWxsO3RyeXtlLkRPTVBhcnNlcj8oaT1uZXcgRE9NUGFyc2VyLHI9aS5wYXJzZUZyb21TdHJpbmcobiwidGV4dC94bWwiKSk6KHI9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxyLmFzeW5jPSJmYWxzZSIsci5sb2FkWE1MKG4pKX1jYXRjaChvKXtyPXR9cmV0dXJuIHImJnIuZG9jdW1lbnRFbGVtZW50JiYhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fGIuZXJyb3IoIkludmFsaWQgWE1MOiAiK24pLHJ9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24odCl7dCYmYi50cmltKHQpJiYoZS5leGVjU2NyaXB0fHxmdW5jdGlvbih0KXtlLmV2YWwuY2FsbChlLHQpfSkodCl9LGNhbWVsQ2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGosIm1zLSIpLnJlcGxhY2UoRCxMKX0sbm9kZU5hbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxhPU0oZSk7aWYobil7aWYoYSl7Zm9yKDtvPmk7aSsrKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgaWYoYSl7Zm9yKDtvPmk7aSsrKWlmKHI9dC5jYWxsKGVbaV0saSxlW2ldKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5jYWxsKGVbaV0saSxlW2ldKSxyPT09ITEpYnJlYWs7cmV0dXJuIGV9LHRyaW06diYmIXYuY2FsbCgiXHVmZWZmXHUwMGEwIik/ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6di5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjooZSsiIikucmVwbGFjZShULCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihNKE9iamVjdChlKSk/Yi5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6ZC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHQpe2lmKGcpcmV0dXJuIGcuY2FsbCh0LGUsbik7Zm9yKHI9dC5sZW5ndGgsbj1uPzA+bj9NYXRoLm1heCgwLHIrbik6bjowO3I+bjtuKyspaWYobiBpbiB0JiZ0W25dPT09ZSlyZXR1cm4gbn1yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89MDtpZigibnVtYmVyIj09dHlwZW9mIHIpZm9yKDtyPm87bysrKWVbaSsrXT1uW29dO2Vsc2Ugd2hpbGUobltvXSE9PXQpZVtpKytdPW5bbysrXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxhPWUubGVuZ3RoO2ZvcihuPSEhbjthPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxhPU0oZSkscz1bXTtpZihhKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihzW3MubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoc1tzLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10scyl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLG4pe3ZhciByLGksbztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4mJihvPWVbbl0sbj1lLGU9byksYi5pc0Z1bmN0aW9uKGUpPyhyPWguY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG58fHRoaXMsci5jb25jYXQoaC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGIuZ3VpZCsrLGkpOnR9LGFjY2VzczpmdW5jdGlvbihlLG4scixpLG8sYSxzKXt2YXIgdT0wLGw9ZS5sZW5ndGgsYz1udWxsPT1yO2lmKCJvYmplY3QiPT09Yi50eXBlKHIpKXtvPSEwO2Zvcih1IGluIHIpYi5hY2Nlc3MoZSxuLHUsclt1XSwhMCxhLHMpfWVsc2UgaWYoaSE9PXQmJihvPSEwLGIuaXNGdW5jdGlvbihpKXx8KHM9ITApLGMmJihzPyhuLmNhbGwoZSxpKSxuPW51bGwpOihjPW4sbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGMuY2FsbChiKGUpLG4pfSkpLG4pKWZvcig7bD51O3UrKyluKGVbdV0scixzP2k6aS5jYWxsKGVbdV0sdSxuKGVbdV0scikpKTtyZXR1cm4gbz9lOmM/bi5jYWxsKGUpOmw/bihlWzBdLHIpOmF9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pLGIucmVhZHkucHJvbWlzZT1mdW5jdGlvbih0KXtpZighbilpZihuPWIuRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlKXNldFRpbWVvdXQoYi5yZWFkeSk7ZWxzZSBpZihvLmFkZEV2ZW50TGlzdGVuZXIpby5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixILCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEgsITEpO2Vsc2V7by5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixIKSxlLmF0dGFjaEV2ZW50KCJvbmxvYWQiLEgpO3ZhciByPSExO3RyeXtyPW51bGw9PWUuZnJhbWVFbGVtZW50JiZvLmRvY3VtZW50RWxlbWVudH1jYXRjaChpKXt9ciYmci5kb1Njcm9sbCYmZnVuY3Rpb24gYSgpe2lmKCFiLmlzUmVhZHkpe3RyeXtyLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goZSl7cmV0dXJuIHNldFRpbWVvdXQoYSw1MCl9cSgpLGIucmVhZHkoKX19KCl9cmV0dXJuIG4ucHJvbWlzZSh0KX0sYi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBNKGUpe3ZhciB0PWUubGVuZ3RoLG49Yi50eXBlKGUpO3JldHVybiBiLmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXI9YihvKTt2YXIgXz17fTtmdW5jdGlvbiBGKGUpe3ZhciB0PV9bZV09e307cmV0dXJuIGIuZWFjaChlLm1hdGNoKHcpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fWIuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP19bZV18fEYoZSk6Yi5leHRlbmQoe30sZSk7dmFyIG4scixpLG8sYSxzLHU9W10sbD0hZS5vbmNlJiZbXSxjPWZ1bmN0aW9uKHQpe2ZvcihyPWUubWVtb3J5JiZ0LGk9ITAsYT1zfHwwLHM9MCxvPXUubGVuZ3RoLG49ITA7dSYmbz5hO2ErKylpZih1W2FdLmFwcGx5KHRbMF0sdFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7cj0hMTticmVha31uPSExLHUmJihsP2wubGVuZ3RoJiZjKGwuc2hpZnQoKSk6cj91PVtdOnAuZGlzYWJsZSgpKX0scD17YWRkOmZ1bmN0aW9uKCl7aWYodSl7dmFyIHQ9dS5sZW5ndGg7KGZ1bmN0aW9uIGkodCl7Yi5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1iLnR5cGUobik7ImZ1bmN0aW9uIj09PXI/ZS51bmlxdWUmJnAuaGFzKG4pfHx1LnB1c2gobik6biYmbi5sZW5ndGgmJiJzdHJpbmciIT09ciYmaShuKX0pfSkoYXJndW1lbnRzKSxuP289dS5sZW5ndGg6ciYmKHM9dCxjKHIpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHUmJmIuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgcjt3aGlsZSgocj1iLmluQXJyYXkodCx1LHIpKT4tMSl1LnNwbGljZShyLDEpLG4mJihvPj1yJiZvLS0sYT49ciYmYS0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT9iLmluQXJyYXkoZSx1KT4tMTohKCF1fHwhdS5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB1PVtdLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdT1sPXI9dCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiF1fSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGw9dCxyfHxwLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hbH0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLCF1fHxpJiYhbHx8KG4/bC5wdXNoKHQpOmModCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gcC5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWl9fTtyZXR1cm4gcH0sYi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIixiLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLGIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLGIuQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gYi5EZWZlcnJlZChmdW5jdGlvbihuKXtiLmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBhPW9bMF0scz1iLmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPXMmJnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJmIuaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6blthKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxzP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Yi5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbixiLmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBhPW9bMl0scz1vWzNdO3Jbb1sxXV09YS5hZGQscyYmYS5hZGQoZnVuY3Rpb24oKXtuPXN9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1hLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWguY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmYi5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTpiLkRlZmVycmVkKCksYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9oLmNhbGwoYXJndW1lbnRzKTpyLG49PT1zP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0scyx1LGw7aWYocj4xKWZvcihzPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJmIuaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUoYSh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKGEodCx1LHMpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSxiLnN1cHBvcnQ9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxzLHUsbCxjLHAsZixkPW8uY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoZC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxkLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixuPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxyPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSwhbnx8IXJ8fCFuLmxlbmd0aClyZXR1cm57fTtzPW8uY3JlYXRlRWxlbWVudCgic2VsZWN0IiksbD1zLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxyLnN0eWxlLmNzc1RleHQ9InRvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41Iix0PXtnZXRTZXRBdHRyaWJ1dGU6InQiIT09ZC5jbGFzc05hbWUsbGVhZGluZ1doaXRlc3BhY2U6Mz09PWQuZmlyc3RDaGlsZC5ub2RlVHlwZSx0Ym9keTohZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChyLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6Ii9hIj09PXIuZ2V0QXR0cmlidXRlKCJocmVmIiksb3BhY2l0eTovXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhci5zdHlsZS5jc3NGbG9hdCxjaGVja09uOiEhYS52YWx1ZSxvcHRTZWxlY3RlZDpsLnNlbGVjdGVkLGVuY3R5cGU6ISFvLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6Ijw6bmF2PjwvOm5hdj4iIT09by5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxib3hNb2RlbDoiQ1NTMUNvbXBhdCI9PT1vLmNvbXBhdE1vZGUsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQb3NpdGlvbjohMX0sYS5jaGVja2VkPSEwLHQubm9DbG9uZUNoZWNrZWQ9YS5jbG9uZU5vZGUoITApLmNoZWNrZWQscy5kaXNhYmxlZD0hMCx0Lm9wdERpc2FibGVkPSFsLmRpc2FibGVkO3RyeXtkZWxldGUgZC50ZXN0fWNhdGNoKGgpe3QuZGVsZXRlRXhwYW5kbz0hMX1hPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSx0LmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlLGEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwidCIpLGEuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLHU9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdS5hcHBlbmRDaGlsZChhKSx0LmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLHQuY2hlY2tDbG9uZT11LmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxkLmF0dGFjaEV2ZW50JiYoZC5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXt0Lm5vQ2xvbmVFdmVudD0hMX0pLGQuY2xvbmVOb2RlKCEwKS5jbGljaygpKTtmb3IoZiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWQuc2V0QXR0cmlidXRlKGM9Im9uIitmLCJ0IiksdFtmKyJCdWJibGVzIl09YyBpbiBlfHxkLmF0dHJpYnV0ZXNbY10uZXhwYW5kbz09PSExO3JldHVybiBkLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1kLnN0eWxlLmJhY2tncm91bmRDbGlwLGIoZnVuY3Rpb24oKXt2YXIgbixyLGEscz0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsdT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07dSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4Iix1LmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixhPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksYVswXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixwPTA9PT1hWzBdLm9mZnNldEhlaWdodCxhWzBdLnN0eWxlLmRpc3BsYXk9IiIsYVsxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiYwPT09YVswXS5vZmZzZXRIZWlnaHQsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHQuYm94U2l6aW5nPTQ9PT1kLm9mZnNldFdpZHRoLHQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9MSE9PXUub2Zmc2V0VG9wLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0iMSUiIT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpfHx7fSkudG9wLHQuYm94U2l6aW5nUmVsaWFibGU9IjRweCI9PT0oZS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLHI9ZC5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxyLnN0eWxlLmNzc1RleHQ9ZC5zdHlsZS5jc3NUZXh0PXMsci5zdHlsZS5tYXJnaW5SaWdodD1yLnN0eWxlLndpZHRoPSIwIixkLnN0eWxlLndpZHRoPSIxcHgiLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLHR5cGVvZiBkLnN0eWxlLnpvb20hPT1pJiYoZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PXMrIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiLHQuaW5saW5lQmxvY2tOZWVkc0xheW91dD0zPT09ZC5vZmZzZXRXaWR0aCxkLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iLGQuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iNXB4Iix0LnNocmlua1dyYXBCbG9ja3M9MyE9PWQub2Zmc2V0V2lkdGgsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0JiYodS5zdHlsZS56b29tPTEpKSx1LnJlbW92ZUNoaWxkKG4pLG49ZD1hPXI9bnVsbCl9KSxuPXM9dT1sPXI9YT1udWxsLHR9KCk7dmFyIE89Lyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLEI9LyhbQS1aXSkvZztmdW5jdGlvbiBQKGUsbixyLGkpe2lmKGIuYWNjZXB0RGF0YShlKSl7dmFyIG8sYSxzPWIuZXhwYW5kbyx1PSJzdHJpbmciPT10eXBlb2YgbixsPWUubm9kZVR5cGUscD1sP2IuY2FjaGU6ZSxmPWw/ZVtzXTplW3NdJiZzO2lmKGYmJnBbZl0mJihpfHxwW2ZdLmRhdGEpfHwhdXx8ciE9PXQpcmV0dXJuIGZ8fChsP2Vbc109Zj1jLnBvcCgpfHxiLmd1aWQrKzpmPXMpLHBbZl18fChwW2ZdPXt9LGx8fChwW2ZdLnRvSlNPTj1iLm5vb3ApKSwoIm9iamVjdCI9PXR5cGVvZiBufHwiZnVuY3Rpb24iPT10eXBlb2YgbikmJihpP3BbZl09Yi5leHRlbmQocFtmXSxuKTpwW2ZdLmRhdGE9Yi5leHRlbmQocFtmXS5kYXRhLG4pKSxvPXBbZl0saXx8KG8uZGF0YXx8KG8uZGF0YT17fSksbz1vLmRhdGEpLHIhPT10JiYob1tiLmNhbWVsQ2FzZShuKV09ciksdT8oYT1vW25dLG51bGw9PWEmJihhPW9bYi5jYW1lbENhc2UobildKSk6YT1vLGF9fWZ1bmN0aW9uIFIoZSx0LG4pe2lmKGIuYWNjZXB0RGF0YShlKSl7dmFyIHIsaSxvLGE9ZS5ub2RlVHlwZSxzPWE/Yi5jYWNoZTplLHU9YT9lW2IuZXhwYW5kb106Yi5leHBhbmRvO2lmKHNbdV0pe2lmKHQmJihvPW4/c1t1XTpzW3VdLmRhdGEpKXtiLmlzQXJyYXkodCk/dD10LmNvbmNhdChiLm1hcCh0LGIuY2FtZWxDYXNlKSk6dCBpbiBvP3Q9W3RdOih0PWIuY2FtZWxDYXNlKHQpLHQ9dCBpbiBvP1t0XTp0LnNwbGl0KCIgIikpO2ZvcihyPTAsaT10Lmxlbmd0aDtpPnI7cisrKWRlbGV0ZSBvW3Rbcl1dO2lmKCEobj8kOmIuaXNFbXB0eU9iamVjdCkobykpcmV0dXJufShufHwoZGVsZXRlIHNbdV0uZGF0YSwkKHNbdV0pKSkmJihhP2IuY2xlYW5EYXRhKFtlXSwhMCk6Yi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fHMhPXMud2luZG93P2RlbGV0ZSBzW3VdOnNbdV09bnVsbCl9fX1iLmV4dGVuZCh7Y2FjaGU6e30sZXhwYW5kbzoialF1ZXJ5IisocCtNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5ub2RlVHlwZT9iLmNhY2hlW2VbYi5leHBhbmRvXV06ZVtiLmV4cGFuZG9dLCEhZSYmISQoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBSKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUChlLHQsbiwhMCl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoZSx0LCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihlKXtpZihlLm5vZGVUeXBlJiYxIT09ZS5ub2RlVHlwZSYmOSE9PWUubm9kZVR5cGUpcmV0dXJuITE7dmFyIHQ9ZS5ub2RlTmFtZSYmYi5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4hdHx8dCE9PSEwJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09dH19KSxiLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihlLG4pe3ZhciByLGksbz10aGlzWzBdLGE9MCxzPW51bGw7aWYoZT09PXQpe2lmKHRoaXMubGVuZ3RoJiYocz1iLmRhdGEobyksMT09PW8ubm9kZVR5cGUmJiFiLl9kYXRhKG8sInBhcnNlZEF0dHJzIikpKXtmb3Iocj1vLmF0dHJpYnV0ZXM7ci5sZW5ndGg+YTthKyspaT1yW2FdLm5hbWUsaS5pbmRleE9mKCJkYXRhLSIpfHwoaT1iLmNhbWVsQ2FzZShpLnNsaWNlKDUpKSxXKG8saSxzW2ldKSk7Yi5fZGF0YShvLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBzfXJldHVybiJvYmplY3QiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXtiLmRhdGEodGhpcyxlKX0pOmIuYWNjZXNzKHRoaXMsZnVuY3Rpb24obil7cmV0dXJuIG49PT10P28/VyhvLGUsYi5kYXRhKG8sZSkpOm51bGw6KHRoaXMuZWFjaChmdW5jdGlvbigpe2IuZGF0YSh0aGlzLGUsbil9KSx0KX0sbnVsbCxuLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yi5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KTtmdW5jdGlvbiBXKGUsbixyKXtpZihyPT09dCYmMT09PWUubm9kZVR5cGUpe3ZhciBpPSJkYXRhLSIrbi5yZXBsYWNlKEIsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYocj1lLmdldEF0dHJpYnV0ZShpKSwic3RyaW5nIj09dHlwZW9mIHIpe3RyeXtyPSJ0cnVlIj09PXI/ITA6ImZhbHNlIj09PXI/ITE6Im51bGwiPT09cj9udWxsOityKyIiPT09cj8rcjpPLnRlc3Qocik/Yi5wYXJzZUpTT04ocik6cn1jYXRjaChvKXt9Yi5kYXRhKGUsbixyKX1lbHNlIHI9dH1yZXR1cm4gcn1mdW5jdGlvbiAkKGUpe3ZhciB0O2Zvcih0IGluIGUpaWYoKCJkYXRhIiE9PXR8fCFiLmlzRW1wdHlPYmplY3QoZVt0XSkpJiYidG9KU09OIiE9PXQpcmV0dXJuITE7cmV0dXJuITB9Yi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsbixyKXt2YXIgaTtyZXR1cm4gZT8obj0obnx8ImZ4IikrInF1ZXVlIixpPWIuX2RhdGEoZSxuKSxyJiYoIWl8fGIuaXNBcnJheShyKT9pPWIuX2RhdGEoZSxuLGIubWFrZUFycmF5KHIpKTppLnB1c2gocikpLGl8fFtdKTp0fSxkZXF1ZXVlOmZ1bmN0aW9uKGUsdCl7dD10fHwiZngiO3ZhciBuPWIucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89Yi5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXtiLmRlcXVldWUoZSx0KX07ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksby5jdXI9aSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsYSxvKSksIXImJm8mJm8uZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiBiLl9kYXRhKGUsbil8fGIuX2RhdGEoZSxuLHtlbXB0eTpiLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtiLl9yZW1vdmVEYXRhKGUsdCsicXVldWUiKSxiLl9yZW1vdmVEYXRhKGUsbil9KX0pfX0pLGIuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj1lLGU9ImZ4IixyLS0pLHI+YXJndW1lbnRzLmxlbmd0aD9iLnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1iLnF1ZXVlKHRoaXMsZSxuKTtiLl9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PXRbMF0mJmIuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2IuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Yi5meD9iLmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsbil7dmFyIHIsaT0xLG89Yi5EZWZlcnJlZCgpLGE9dGhpcyxzPXRoaXMubGVuZ3RoLHU9ZnVuY3Rpb24oKXstLWl8fG8ucmVzb2x2ZVdpdGgoYSxbYV0pfTsic3RyaW5nIiE9dHlwZW9mIGUmJihuPWUsZT10KSxlPWV8fCJmeCI7d2hpbGUocy0tKXI9Yi5fZGF0YShhW3NdLGUrInF1ZXVlSG9va3MiKSxyJiZyLmVtcHR5JiYoaSsrLHIuZW1wdHkuYWRkKHUpKTtyZXR1cm4gdSgpLG8ucHJvbWlzZShuKX19KTt2YXIgSSx6LFg9L1tcdFxyXG5dL2csVT0vXHIvZyxWPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pLFk9L14oPzphfGFyZWEpJC9pLEo9L14oPzpjaGVja2VkfHNlbGVjdGVkfGF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCkkL2ksRz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLFE9Yi5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSxLPWIuc3VwcG9ydC5pbnB1dDtiLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiBiLmFjY2Vzcyh0aGlzLGIuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yi5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiBiLmFjY2Vzcyh0aGlzLGIucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gZT1iLnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHM9dGhpcy5sZW5ndGgsdT0ic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoYi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7Yih0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO3M+YTthKyspaWYobj10aGlzW2FdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShYLCIgIik6IiAiKSl7bz0wO3doaWxlKGk9dFtvKytdKTA+ci5pbmRleE9mKCIgIitpKyIgIikmJihyKz1pKyIgIik7bi5jbGFzc05hbWU9Yi50cmltKHIpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9MCxzPXRoaXMubGVuZ3RoLHU9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgZSYmZTtpZihiLmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtiKHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKHUpZm9yKHQ9KGV8fCIiKS5tYXRjaCh3KXx8W107cz5hO2ErKylpZihuPXRoaXNbYV0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFgsIiAiKToiIikpe289MDt3aGlsZShpPXRbbysrXSl3aGlsZShyLmluZGV4T2YoIiAiK2krIiAiKT49MClyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtuLmNsYXNzTmFtZT1lP2IudHJpbShyKToiIn1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPSJib29sZWFuIj09dHlwZW9mIHQ7cmV0dXJuIGIuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7Yih0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgbyxhPTAscz1iKHRoaXMpLHU9dCxsPWUubWF0Y2godyl8fFtdO3doaWxlKG89bFthKytdKXU9cj91OiFzLmhhc0NsYXNzKG8pLHNbdT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKG8pfWVsc2Uobj09PWl8fCJib29sZWFuIj09PW4pJiYodGhpcy5jbGFzc05hbWUmJmIuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6Yi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdD0iICIrZSsiICIsbj0wLHI9dGhpcy5sZW5ndGg7Zm9yKDtyPm47bisrKWlmKDE9PT10aGlzW25dLm5vZGVUeXBlJiYoIiAiK3RoaXNbbl0uY2xhc3NOYW1lKyIgIikucmVwbGFjZShYLCIgIikuaW5kZXhPZih0KT49MClyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxvPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGk9Yi5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgbyxhPWIodGhpcyk7MT09PXRoaXMubm9kZVR5cGUmJihvPWk/ZS5jYWxsKHRoaXMsbixhLnZhbCgpKTplLG51bGw9PW8/bz0iIjoibnVtYmVyIj09dHlwZW9mIG8/bys9IiI6Yi5pc0FycmF5KG8pJiYobz1iLm1hcChvLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSkscj1iLnZhbEhvb2tzW3RoaXMudHlwZV18fGIudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxyJiYic2V0ImluIHImJnIuc2V0KHRoaXMsbywidmFsdWUiKSE9PXR8fCh0aGlzLnZhbHVlPW8pKX0pO2lmKG8pcmV0dXJuIHI9Yi52YWxIb29rc1tvLnR5cGVdfHxiLnZhbEhvb2tzW28ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sciYmImdldCJpbiByJiYobj1yLmdldChvLCJ2YWx1ZSIpKSE9PXQ/bjoobj1vLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJlcGxhY2UoVSwiIik6bnVsbD09bj8iIjpuKX19fSksYi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIXR8fHQuc3BlY2lmaWVkP2UudmFsdWU6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxvPSJzZWxlY3Qtb25lIj09PWUudHlwZXx8MD5pLGE9bz9udWxsOltdLHM9bz9pKzE6ci5sZW5ndGgsdT0wPmk/czpvP2k6MDtmb3IoO3M+dTt1KyspaWYobj1yW3VdLCEoIW4uc2VsZWN0ZWQmJnUhPT1pfHwoYi5zdXBwb3J0Lm9wdERpc2FibGVkP24uZGlzYWJsZWQ6bnVsbCE9PW4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8bi5wYXJlbnROb2RlLmRpc2FibGVkJiZiLm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9YihuKS52YWwoKSxvKXJldHVybiB0O2EucHVzaCh0KX1yZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49Yi5tYWtlQXJyYXkodCk7cmV0dXJuIGIoZSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Yi5pbkFycmF5KGIodGhpcykudmFsKCksbik+PTB9KSxuLmxlbmd0aHx8KGUuc2VsZWN0ZWRJbmRleD0tMSksbn19fSxhdHRyOmZ1bmN0aW9uKGUsbixyKXt2YXIgbyxhLHMsdT1lLm5vZGVUeXBlO2lmKGUmJjMhPT11JiY4IT09dSYmMiE9PXUpcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09PWk/Yi5wcm9wKGUsbixyKTooYT0xIT09dXx8IWIuaXNYTUxEb2MoZSksYSYmKG49bi50b0xvd2VyQ2FzZSgpLG89Yi5hdHRySG9va3Nbbl18fChKLnRlc3Qobik/ejpJKSkscj09PXQ/byYmYSYmImdldCJpbiBvJiZudWxsIT09KHM9by5nZXQoZSxuKSk/czoodHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aSYmKHM9ZS5nZXRBdHRyaWJ1dGUobikpLG51bGw9PXM/dDpzKTpudWxsIT09cj9vJiZhJiYic2V0ImluIG8mJihzPW8uc2V0KGUscixuKSkhPT10P3M6KGUuc2V0QXR0cmlidXRlKG4scisiIikscik6KGIucmVtb3ZlQXR0cihlLG4pLHQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPWIucHJvcEZpeFtuXXx8bixKLnRlc3Qobik/IVEmJkcudGVzdChuKT9lW2IuY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbcl09ITE6ZVtyXT0hMTpiLmF0dHIoZSxuLCIiKSxlLnJlbW92ZUF0dHJpYnV0ZShRP246cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIWIuc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmYi5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIGE9MSE9PXN8fCFiLmlzWE1MRG9jKGUpLGEmJihuPWIucHJvcEZpeFtuXXx8bixvPWIucHJvcEhvb2tzW25dKSxyIT09dD9vJiYic2V0ImluIG8mJihpPW8uc2V0KGUscixuKSkhPT10P2k6ZVtuXT1yOm8mJiJnZXQiaW4gbyYmbnVsbCE9PShpPW8uZ2V0KGUsbikpP2k6ZVtuXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gbiYmbi5zcGVjaWZpZWQ/cGFyc2VJbnQobi52YWx1ZSwxMCk6Vi50ZXN0KGUubm9kZU5hbWUpfHxZLnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOnR9fX19KSx6PXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1iLnByb3AoZSxuKSxpPSJib29sZWFuIj09dHlwZW9mIHImJmUuZ2V0QXR0cmlidXRlKG4pLG89ImJvb2xlYW4iPT10eXBlb2Ygcj9LJiZRP251bGwhPWk6Ry50ZXN0KG4pP2VbYi5jYW1lbENhc2UoImRlZmF1bHQtIituKV06ISFpOmUuZ2V0QXR0cmlidXRlTm9kZShuKTtyZXR1cm4gbyYmby52YWx1ZSE9PSExP24udG9Mb3dlckNhc2UoKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT09ITE/Yi5yZW1vdmVBdHRyKGUsbik6SyYmUXx8IUcudGVzdChuKT9lLnNldEF0dHJpYnV0ZSghUSYmYi5wcm9wRml4W25dfHxuLG4pOmVbYi5jYW1lbENhc2UoImRlZmF1bHQtIituKV09ZVtuXT0hMCxufX0sSyYmUXx8KGIuYXR0ckhvb2tzLnZhbHVlPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmdldEF0dHJpYnV0ZU5vZGUobik7cmV0dXJuIGIubm9kZU5hbWUoZSwiaW5wdXQiKT9lLmRlZmF1bHRWYWx1ZTpyJiZyLnNwZWNpZmllZD9yLnZhbHVlOnR9LHNldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIGIubm9kZU5hbWUoZSwiaW5wdXQiKT8oZS5kZWZhdWx0VmFsdWU9bix0KTpJJiZJLnNldChlLG4scil9fSksUXx8KEk9Yi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihlLG4pe3ZhciByPWUuZ2V0QXR0cmlidXRlTm9kZShuKTtyZXR1cm4gciYmKCJpZCI9PT1ufHwibmFtZSI9PT1ufHwiY29vcmRzIj09PW4/IiIhPT1yLnZhbHVlOnIuc3BlY2lmaWVkKT9yLnZhbHVlOnR9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKHIpO3JldHVybiBpfHxlLnNldEF0dHJpYnV0ZU5vZGUoaT1lLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKHIpKSxpLnZhbHVlPW4rPSIiLCJ2YWx1ZSI9PT1yfHxuPT09ZS5nZXRBdHRyaWJ1dGUocik/bjp0fX0sYi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6SS5nZXQsc2V0OmZ1bmN0aW9uKGUsdCxuKXtJLnNldChlLCIiPT09dD8hMTp0LG4pfX0sYi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihlLG4pe2IuYXR0ckhvb2tzW25dPWIuZXh0ZW5kKGIuYXR0ckhvb2tzW25dLHtzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iIj09PXI/KGUuc2V0QXR0cmlidXRlKG4sImF1dG8iKSxyKTp0fX0pfSkpLGIuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8KGIuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUsbil7Yi5hdHRySG9va3Nbbl09Yi5leHRlbmQoYi5hdHRySG9va3Nbbl0se2dldDpmdW5jdGlvbihlKXt2YXIgcj1lLmdldEF0dHJpYnV0ZShuLDIpO3JldHVybiBudWxsPT1yP3Q6cn19KX0pLGIuZWFjaChbImhyZWYiLCJzcmMiXSxmdW5jdGlvbihlLHQpe2IucHJvcEhvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsNCl9fX0pKSxiLnN1cHBvcnQuc3R5bGV8fChiLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlLmNzc1RleHR8fHR9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN0eWxlLmNzc1RleHQ9dCsiIn19KSxiLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChiLnByb3BIb29rcy5zZWxlY3RlZD1iLmV4dGVuZChiLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pKSxiLnN1cHBvcnQuZW5jdHlwZXx8KGIucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLGIuc3VwcG9ydC5jaGVja09ufHxiLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtiLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmUudmFsdWV9fX0pLGIuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2IudmFsSG9va3NbdGhpc109Yi5leHRlbmQoYi52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuaXNBcnJheShuKT9lLmNoZWNrZWQ9Yi5pbkFycmF5KGIoZSkudmFsKCksbik+PTA6dH19KX0pO3ZhciBaPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSxldD0vXmtleS8sdHQ9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLG50PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxydD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIGl0KCl7cmV0dXJuITB9ZnVuY3Rpb24gb3QoKXtyZXR1cm4hMX1iLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsbixyLG8sYSl7dmFyIHMsdSxsLGMscCxmLGQsaCxnLG0seSx2PWIuX2RhdGEoZSk7aWYodil7ci5oYW5kbGVyJiYoYz1yLHI9Yy5oYW5kbGVyLGE9Yy5zZWxlY3Rvciksci5ndWlkfHwoci5ndWlkPWIuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPXt9KSwoZj12LmhhbmRsZSl8fChmPXYuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgYj09PWl8fGUmJmIuZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3Q6Yi5ldmVudC5kaXNwYXRjaC5hcHBseShmLmVsZW0sYXJndW1lbnRzKX0sZi5lbGVtPWUpLG49KG58fCIiKS5tYXRjaCh3KXx8WyIiXSxsPW4ubGVuZ3RoO3doaWxlKGwtLSlzPXJ0LmV4ZWMobltsXSl8fFtdLGc9eT1zWzFdLG09KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxwPWIuZXZlbnQuc3BlY2lhbFtnXXx8e30sZz0oYT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZyxwPWIuZXZlbnQuc3BlY2lhbFtnXXx8e30sZD1iLmV4dGVuZCh7dHlwZTpnLG9yaWdUeXBlOnksZGF0YTpvLGhhbmRsZXI6cixndWlkOnIuZ3VpZCxzZWxlY3RvcjphLG5lZWRzQ29udGV4dDphJiZiLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoYSksbmFtZXNwYWNlOm0uam9pbigiLiIpfSxjKSwoaD11W2ddKXx8KGg9dVtnXT1bXSxoLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiZwLnNldHVwLmNhbGwoZSxvLG0sZikhPT0hMXx8KGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoZyxmLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrZyxmKSkpLHAuYWRkJiYocC5hZGQuY2FsbChlLGQpLGQuaGFuZGxlci5ndWlkfHwoZC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSksYT9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLGQpOmgucHVzaChkKSxiLmV2ZW50Lmdsb2JhbFtnXT0hMDtlPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMscCxmLGQsaCxnLG09Yi5oYXNEYXRhKGUpJiZiLl9kYXRhKGUpO2lmKG0mJihjPW0uZXZlbnRzKSl7dD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGw9dC5sZW5ndGg7d2hpbGUobC0tKWlmKHM9cnQuZXhlYyh0W2xdKXx8W10sZD1nPXNbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe3A9Yi5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxkLGY9Y1tkXXx8W10scz1zWzJdJiZSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksdT1vPWYubGVuZ3RoO3doaWxlKG8tLSlhPWZbb10sIWkmJmchPT1hLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1hLmd1aWR8fHMmJiFzLnRlc3QoYS5uYW1lc3BhY2UpfHxyJiZyIT09YS5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYS5zZWxlY3Rvcil8fChmLnNwbGljZShvLDEpLGEuc2VsZWN0b3ImJmYuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsYSkpO3UmJiFmLmxlbmd0aCYmKHAudGVhcmRvd24mJnAudGVhcmRvd24uY2FsbChlLGgsbS5oYW5kbGUpIT09ITF8fGIucmVtb3ZlRXZlbnQoZSxkLG0uaGFuZGxlKSxkZWxldGUgY1tkXSl9ZWxzZSBmb3IoZCBpbiBjKWIuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7Yi5pc0VtcHR5T2JqZWN0KGMpJiYoZGVsZXRlIG0uaGFuZGxlLGIuX3JlbW92ZURhdGEoZSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihuLHIsaSxhKXt2YXIgcyx1LGwsYyxwLGYsZCxoPVtpfHxvXSxnPXkuY2FsbChuLCJ0eXBlIik/bi50eXBlOm4sbT15LmNhbGwobiwibmFtZXNwYWNlIik/bi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihsPWY9aT1pfHxvLDMhPT1pLm5vZGVUeXBlJiY4IT09aS5ub2RlVHlwZSYmIW50LnRlc3QoZytiLmV2ZW50LnRyaWdnZXJlZCkmJihnLmluZGV4T2YoIi4iKT49MCYmKG09Zy5zcGxpdCgiLiIpLGc9bS5zaGlmdCgpLG0uc29ydCgpKSx1PTA+Zy5pbmRleE9mKCI6IikmJiJvbiIrZyxuPW5bYi5leHBhbmRvXT9uOm5ldyBiLkV2ZW50KGcsIm9iamVjdCI9PXR5cGVvZiBuJiZuKSxuLmlzVHJpZ2dlcj0hMCxuLm5hbWVzcGFjZT1tLmpvaW4oIi4iKSxuLm5hbWVzcGFjZV9yZT1uLm5hbWVzcGFjZT9SZWdFeHAoIihefFxcLikiK20uam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxuLnJlc3VsdD10LG4udGFyZ2V0fHwobi50YXJnZXQ9aSkscj1udWxsPT1yP1tuXTpiLm1ha2VBcnJheShyLFtuXSkscD1iLmV2ZW50LnNwZWNpYWxbZ118fHt9LGF8fCFwLnRyaWdnZXJ8fHAudHJpZ2dlci5hcHBseShpLHIpIT09ITEpKXtpZighYSYmIXAubm9CdWJibGUmJiFiLmlzV2luZG93KGkpKXtmb3IoYz1wLmRlbGVnYXRlVHlwZXx8ZyxudC50ZXN0KGMrZyl8fChsPWwucGFyZW50Tm9kZSk7bDtsPWwucGFyZW50Tm9kZSloLnB1c2gobCksZj1sO2Y9PT0oaS5vd25lckRvY3VtZW50fHxvKSYmaC5wdXNoKGYuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93fHxlKX1kPTA7d2hpbGUoKGw9aFtkKytdKSYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSluLnR5cGU9ZD4xP2M6cC5iaW5kVHlwZXx8ZyxzPShiLl9kYXRhKGwsImV2ZW50cyIpfHx7fSlbbi50eXBlXSYmYi5fZGF0YShsLCJoYW5kbGUiKSxzJiZzLmFwcGx5KGwscikscz11JiZsW3VdLHMmJmIuYWNjZXB0RGF0YShsKSYmcy5hcHBseSYmcy5hcHBseShsLHIpPT09ITEmJm4ucHJldmVudERlZmF1bHQoKTtpZihuLnR5cGU9ZywhKGF8fG4uaXNEZWZhdWx0UHJldmVudGVkKCl8fHAuX2RlZmF1bHQmJnAuX2RlZmF1bHQuYXBwbHkoaS5vd25lckRvY3VtZW50LHIpIT09ITF8fCJjbGljayI9PT1nJiZiLm5vZGVOYW1lKGksImEiKXx8IWIuYWNjZXB0RGF0YShpKXx8IXV8fCFpW2ddfHxiLmlzV2luZG93KGkpKSl7Zj1pW3VdLGYmJihpW3VdPW51bGwpLGIuZXZlbnQudHJpZ2dlcmVkPWc7dHJ5e2lbZ10oKX1jYXRjaCh2KXt9Yi5ldmVudC50cmlnZ2VyZWQ9dCxmJiYoaVt1XT1mKX1yZXR1cm4gbi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPWIuZXZlbnQuZml4KGUpO3ZhciBuLHIsaSxvLGEscz1bXSx1PWguY2FsbChhcmd1bWVudHMpLGw9KGIuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVdfHxbXSxjPWIuZXZlbnQuc3BlY2lhbFtlLnR5cGVdfHx7fTtpZih1WzBdPWUsZS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHxjLnByZURpc3BhdGNoLmNhbGwodGhpcyxlKSE9PSExKXtzPWIuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsbCksbj0wO3doaWxlKChvPXNbbisrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2UuY3VycmVudFRhcmdldD1vLmVsZW0sYT0wO3doaWxlKChpPW8uaGFuZGxlcnNbYSsrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFlLm5hbWVzcGFjZV9yZXx8ZS5uYW1lc3BhY2VfcmUudGVzdChpLm5hbWVzcGFjZSkpJiYoZS5oYW5kbGVPYmo9aSxlLmRhdGE9aS5kYXRhLHI9KChiLmV2ZW50LnNwZWNpYWxbaS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGkuaGFuZGxlcikuYXBwbHkoby5lbGVtLHUpLHIhPT10JiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLG4pe3ZhciByLGksbyxhLHM9W10sdT1uLmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO2whPXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJihsLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpKXtmb3Iobz1bXSxhPTA7dT5hO2ErKylpPW5bYV0scj1pLnNlbGVjdG9yKyIgIixvW3JdPT09dCYmKG9bcl09aS5uZWVkc0NvbnRleHQ/YihyLHRoaXMpLmluZGV4KGwpPj0wOmIuZmluZChyLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksb1tyXSYmby5wdXNoKGkpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIG4ubGVuZ3RoPnUmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOm4uc2xpY2UodSl9KSxzfSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVtiLmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxhPWUscz10aGlzLmZpeEhvb2tzW2ldO3N8fCh0aGlzLmZpeEhvb2tzW2ldPXM9dHQudGVzdChpKT90aGlzLm1vdXNlSG9va3M6ZXQudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyBiLkV2ZW50KGEpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPWFbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9YS5zcmNFbGVtZW50fHxvKSwzPT09ZS50YXJnZXQubm9kZVR5cGUmJihlLnRhcmdldD1lLnRhcmdldC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5maWx0ZXIoZSxhKTplfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxhLHM9bi5idXR0b24sdT1uLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT1uLmNsaWVudFgmJihpPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fG8sYT1pLmRvY3VtZW50RWxlbWVudCxyPWkuYm9keSxlLnBhZ2VYPW4uY2xpZW50WCsoYSYmYS5zY3JvbGxMZWZ0fHxyJiZyLnNjcm9sbExlZnR8fDApLShhJiZhLmNsaWVudExlZnR8fHImJnIuY2xpZW50TGVmdHx8MCksZS5wYWdlWT1uLmNsaWVudFkrKGEmJmEuc2Nyb2xsVG9wfHxyJiZyLnNjcm9sbFRvcHx8MCktKGEmJmEuY2xpZW50VG9wfHxyJiZyLmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJnUmJihlLnJlbGF0ZWRUYXJnZXQ9dT09PWUudGFyZ2V0P24udG9FbGVtZW50OnUpLGUud2hpY2h8fHM9PT10fHwoZS53aGljaD0xJnM/MToyJnM/Mzo0JnM/MjowKSxlfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIGIubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp0fX0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09by5hY3RpdmVFbGVtZW50JiZ0aGlzLmZvY3VzKXRyeXtyZXR1cm4gdGhpcy5mb2N1cygpLCExfWNhdGNoKGUpe319LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PW8uYWN0aXZlRWxlbWVudCYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2UucmVzdWx0IT09dCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Yi5leHRlbmQobmV3IGIuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtyP2IuZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6Yi5ldmVudC5kaXNwYXRjaC5jYWxsKHQsaSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5wcmV2ZW50RGVmYXVsdCgpfX0sYi5yZW1vdmVFdmVudD1vLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib24iK3Q7ZS5kZXRhY2hFdmVudCYmKHR5cGVvZiBlW3JdPT09aSYmKGVbcl09bnVsbCksZS5kZXRhY2hFdmVudChyLG4pKX0sYi5FdmVudD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYi5FdmVudD8oZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8ZS5yZXR1cm5WYWx1ZT09PSExfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZlbnREZWZhdWx0KCk/aXQ6b3QpOnRoaXMudHlwZT1lLG4mJmIuZXh0ZW5kKHRoaXMsbiksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fGIubm93KCksdGhpc1tiLmV4cGFuZG9dPSEwLHQpOm5ldyBiLkV2ZW50KGUsbil9LGIuRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6b3QsaXNQcm9wYWdhdGlvblN0b3BwZWQ6b3QsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6b3QscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9aXQsZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1pdCxlJiYoZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWl0LHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxiLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe2IuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7CnJldHVybighaXx8aSE9PXImJiFiLmNvbnRhaW5zKHIsaSkpJiYoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSxiLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGIuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIGIubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOihiLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0LHI9Yi5ub2RlTmFtZShuLCJpbnB1dCIpfHxiLm5vZGVOYW1lKG4sImJ1dHRvbiIpP24uZm9ybTp0O3ImJiFiLl9kYXRhKHIsInN1Ym1pdEJ1YmJsZXMiKSYmKGIuZXZlbnQuYWRkKHIsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlPSEwfSksYi5fZGF0YShyLCJzdWJtaXRCdWJibGVzIiwhMCkpfSksdCl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdnZXImJmIuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGUsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gYi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6KGIuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0IiksdCl9fSksYi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChiLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBaLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKGIuZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpeyJjaGVja2VkIj09PWUub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksYi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhZS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLGIuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxlLCEwKX0pKSwhMSk6KGIuZXZlbnQuYWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O1oudGVzdCh0Lm5vZGVOYW1lKSYmIWIuX2RhdGEodCwiY2hhbmdlQnViYmxlcyIpJiYoYi5ldmVudC5hZGQodCwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpeyF0aGlzLnBhcmVudE5vZGV8fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHxiLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxlLCEwKX0pLGIuX2RhdGEodCwiY2hhbmdlQnViYmxlcyIsITApKX0pLHQpfSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQ7cmV0dXJuIHRoaXMhPT1ufHxlLmlzU2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8InJhZGlvIiE9PW4udHlwZSYmImNoZWNrYm94IiE9PW4udHlwZT9lLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0fSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBiLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFaLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksYi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxiLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPWZ1bmN0aW9uKGUpe2IuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCxiLmV2ZW50LmZpeChlKSwhMCl9O2IuZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXswPT09bisrJiZvLmFkZEV2ZW50TGlzdGVuZXIoZSxyLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXswPT09LS1uJiZvLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCEwKX19fSksYi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsbixyLGksbyl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIGUpeyJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXQpO2ZvcihhIGluIGUpdGhpcy5vbihhLG4scixlW2FdLG8pO3JldHVybiB0aGlzfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Ygbj8oaT1yLHI9dCk6KGk9cixyPW4sbj10KSksaT09PSExKWk9b3Q7ZWxzZSBpZighaSlyZXR1cm4gdGhpcztyZXR1cm4gMT09PW8mJihzPWksaT1mdW5jdGlvbihlKXtyZXR1cm4gYigpLm9mZihlKSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5ndWlkPXMuZ3VpZHx8KHMuZ3VpZD1iLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe2IuZXZlbnQuYWRkKHRoaXMsZSxpLHIsbil9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLG4scil7dmFyIGksbztpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gaT1lLmhhbmRsZU9iaixiKGUuZGVsZWdhdGVUYXJnZXQpLm9mZihpLm5hbWVzcGFjZT9pLm9yaWdUeXBlKyIuIitpLm5hbWVzcGFjZTppLm9yaWdUeXBlLGkuc2VsZWN0b3IsaS5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKG8gaW4gZSl0aGlzLm9mZihvLG4sZVtvXSk7cmV0dXJuIHRoaXN9cmV0dXJuKG49PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYocj1uLG49dCkscj09PSExJiYocj1vdCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yi5ldmVudC5yZW1vdmUodGhpcyxlLHIsbil9KX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yi5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXNbMF07cmV0dXJuIHI/Yi5ldmVudC50cmlnZ2VyKGUsbixyLCEwKTp0fX0pLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbCxjLHAsZixkLGgsZyxtLHksdix4PSJzaXp6bGUiKy1uZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD17fSxOPTAsQz0wLGs9aXQoKSxFPWl0KCksUz1pdCgpLEE9dHlwZW9mIHQsaj0xPDwzMSxEPVtdLEw9RC5wb3AsSD1ELnB1c2gscT1ELnNsaWNlLE09RC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxfPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixGPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTz1GLnJlcGxhY2UoInciLCJ3IyIpLEI9IihbKl4kfCF+XT89KSIsUD0iXFxbIitfKyIqKCIrRisiKSIrXysiKig/OiIrQitfKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIitPKyIpfCl8KSIrXysiKlxcXSIsUj0iOigiK0YrIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1AucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLFc9UmVnRXhwKCJeIitfKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK18rIiskIiwiZyIpLCQ9UmVnRXhwKCJeIitfKyIqLCIrXysiKiIpLEk9UmVnRXhwKCJeIitfKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitfKyIqIiksej1SZWdFeHAoUiksWD1SZWdFeHAoIl4iK08rIiQiKSxVPXtJRDpSZWdFeHAoIl4jKCIrRisiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK0YrIikiKSxOQU1FOlJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrRisiKVsnXCJdP1xcXSIpLFRBRzpSZWdFeHAoIl4oIitGLnJlcGxhY2UoInciLCJ3KiIpKyIpIiksQVRUUjpSZWdFeHAoIl4iK1ApLFBTRVVETzpSZWdFeHAoIl4iK1IpLENISUxEOlJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitfKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitfKyIqKD86KFsrLV18KSIrXysiKihcXGQrKXwpKSIrXysiKlxcKXwpIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK18rIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrXysiKigoPzotXFxkKT9cXGQqKSIrXysiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sVj0vW1x4MjBcdFxyXG5cZl0qWyt+XS8sWT0vXltee10rXHtccypcW25hdGl2ZSBjb2RlLyxKPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sRz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFE9L15oXGQkL2ksSz0vJ3xcXC9nLFo9L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csZXQ9L1xcKFtcZGEtZkEtRl17MSw2fVtceDIwXHRcclxuXGZdP3wuKS9nLHR0PWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4Iit0LTY1NTM2O3JldHVybiBuIT09bj90OjA+bj9TdHJpbmcuZnJvbUNoYXJDb2RlKG4rNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8bj4+MTAsNTYzMjB8MTAyMyZuKX07dHJ5e3EuY2FsbCh3LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKG50KXtxPWZ1bmN0aW9uKGUpe3ZhciB0LG49W107d2hpbGUodD10aGlzW2UrK10pbi5wdXNoKHQpO3JldHVybiBufX1mdW5jdGlvbiBydChlKXtyZXR1cm4gWS50ZXN0KGUrIiIpfWZ1bmN0aW9uIGl0KCl7dmFyIGUsdD1bXTtyZXR1cm4gZT1mdW5jdGlvbihuLHIpe3JldHVybiB0LnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbbl09cn19ZnVuY3Rpb24gb3QoZSl7cmV0dXJuIGVbeF09ITAsZX1mdW5jdGlvbiBhdChlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4gZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3Q9bnVsbH19ZnVuY3Rpb24gc3QoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGYsZyxtLHY7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OncpIT09cCYmYyh0KSx0PXR8fHAsbj1ufHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBuO2lmKDEhPT0ocz10Lm5vZGVUeXBlKSYmOSE9PXMpcmV0dXJuW107aWYoIWQmJiFyKXtpZihpPUouZXhlYyhlKSlpZihhPWlbMV0pe2lmKDk9PT1zKXtpZihvPXQuZ2V0RWxlbWVudEJ5SWQoYSksIW98fCFvLnBhcmVudE5vZGUpcmV0dXJuIG47aWYoby5pZD09PWEpcmV0dXJuIG4ucHVzaChvKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYobz10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpJiZ5KHQsbykmJm8uaWQ9PT1hKXJldHVybiBuLnB1c2gobyksbn1lbHNle2lmKGlbMl0pcmV0dXJuIEguYXBwbHkobixxLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSwwKSksbjtpZigoYT1pWzNdKSYmVC5nZXRCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4scS5jYWxsKHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKSwwKSksbn1pZihULnFzYSYmIWgudGVzdChlKSl7aWYoZj0hMCxnPXgsbT10LHY9OT09PXMmJmUsMT09PXMmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtsPWZ0KGUpLChmPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9nPWYucmVwbGFjZShLLCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixnKSxnPSJbaWQ9JyIrZysiJ10gIix1PWwubGVuZ3RoO3doaWxlKHUtLSlsW3VdPWcrZHQobFt1XSk7bT1WLnRlc3QoZSkmJnQucGFyZW50Tm9kZXx8dCx2PWwuam9pbigiLCIpfWlmKHYpdHJ5e3JldHVybiBILmFwcGx5KG4scS5jYWxsKG0ucXVlcnlTZWxlY3RvckFsbCh2KSwwKSksbn1jYXRjaChiKXt9ZmluYWxseXtmfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiB3dChlLnJlcGxhY2UoVywiJDEiKSx0LG4scil9YT1zdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2RlTmFtZTohMX0sYz1zdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgbj1lP2Uub3duZXJEb2N1bWVudHx8ZTp3O3JldHVybiBuIT09cCYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50PyhwPW4sZj1uLmRvY3VtZW50RWxlbWVudCxkPWEobiksVC50YWdOYW1lTm9Db21tZW50cz1hdChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChuLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLFQuYXR0cmlidXRlcz1hdChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciB0PXR5cGVvZiBlLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuImJvb2xlYW4iIT09dCYmInN0cmluZyIhPT10fSksVC5nZXRCeUNsYXNzTmFtZT1hdChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg/KGUubGFzdENoaWxkLmNsYXNzTmFtZT0iZSIsMj09PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCk6ITF9KSxULmdldEJ5TmFtZT1hdChmdW5jdGlvbihlKXtlLmlkPXgrMCxlLmlubmVySFRNTD0iPGEgbmFtZT0nIit4KyInPjwvYT48ZGl2IG5hbWU9JyIreCsiJz48L2Rpdj4iLGYuaW5zZXJ0QmVmb3JlKGUsZi5maXJzdENoaWxkKTt2YXIgdD1uLmdldEVsZW1lbnRzQnlOYW1lJiZuLmdldEVsZW1lbnRzQnlOYW1lKHgpLmxlbmd0aD09PTIrbi5nZXRFbGVtZW50c0J5TmFtZSh4KzApLmxlbmd0aDtyZXR1cm4gVC5nZXRJZE5vdE5hbWU9IW4uZ2V0RWxlbWVudEJ5SWQoeCksZi5yZW1vdmVDaGlsZChlKSx0fSksaS5hdHRySGFuZGxlPWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsZS5maXJzdENoaWxkJiZ0eXBlb2YgZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PUEmJiIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pP3t9OntocmVmOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxULmdldElkTm90TmFtZT8oaS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQhPT1BJiYhZCl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShldCx0dCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGkuZmluZC5JRD1mdW5jdGlvbihlLG4pe2lmKHR5cGVvZiBuLmdldEVsZW1lbnRCeUlkIT09QSYmIWQpe3ZhciByPW4uZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIHI/ci5pZD09PWV8fHR5cGVvZiByLmdldEF0dHJpYnV0ZU5vZGUhPT1BJiZyLmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWU9PT1lP1tyXTp0OltdfX0saS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGV0LHR0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PUEmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksaS5maW5kLlRBRz1ULnRhZ05hbWVOb0NvbW1lbnRzP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09QT9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5OQU1FPVQuZ2V0QnlOYW1lJiZmdW5jdGlvbihlLG4pe3JldHVybiB0eXBlb2Ygbi5nZXRFbGVtZW50c0J5TmFtZSE9PUE/bi5nZXRFbGVtZW50c0J5TmFtZShuYW1lKTp0fSxpLmZpbmQuQ0xBU1M9VC5nZXRCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSxuKXtyZXR1cm4gdHlwZW9mIG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT09PUF8fGQ/dDpuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LGc9W10saD1bIjpmb2N1cyJdLChULnFzYT1ydChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGF0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGgucHVzaCgiXFxbIitfKyIqKD86Y2hlY2tlZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxyZWFkb25seXxzZWxlY3RlZHx2YWx1ZSkiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxoLnB1c2goIjpjaGVja2VkIil9KSxhdChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbicgaT0nJy8+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpXj0nJ10iKS5sZW5ndGgmJmgucHVzaCgiWypeJF09IitfKyIqKD86XCJcInwnJykiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxoLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksaC5wdXNoKCIsLio6Iil9KSksKFQubWF0Y2hlc1NlbGVjdG9yPXJ0KG09Zi5tYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8Zi5vTWF0Y2hlc1NlbGVjdG9yfHxmLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmF0KGZ1bmN0aW9uKGUpe1QuZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsImRpdiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSxnLnB1c2goIiE9IixSKX0pLGg9UmVnRXhwKGguam9pbigifCIpKSxnPVJlZ0V4cChnLmpvaW4oInwiKSkseT1ydChmLmNvbnRhaW5zKXx8Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LHY9Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBlPT09dD8odT0hMCwwKToocj10LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKT8xJnJ8fGUucGFyZW50Tm9kZSYmMTE9PT1lLnBhcmVudE5vZGUubm9kZVR5cGU/ZT09PW58fHkodyxlKT8tMTp0PT09bnx8eSh3LHQpPzE6MDo0JnI/LTE6MTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjF9OmZ1bmN0aW9uKGUsdCl7dmFyIHIsaT0wLG89ZS5wYXJlbnROb2RlLGE9dC5wYXJlbnROb2RlLHM9W2VdLGw9W3RdO2lmKGU9PT10KXJldHVybiB1PSEwLDA7aWYoIW98fCFhKXJldHVybiBlPT09bj8tMTp0PT09bj8xOm8/LTE6YT8xOjA7aWYobz09PWEpcmV0dXJuIHV0KGUsdCk7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKXMudW5zaGlmdChyKTtyPXQ7d2hpbGUocj1yLnBhcmVudE5vZGUpbC51bnNoaWZ0KHIpO3doaWxlKHNbaV09PT1sW2ldKWkrKztyZXR1cm4gaT91dChzW2ldLGxbaV0pOnNbaV09PT13Py0xOmxbaV09PT13PzE6MH0sdT0hMSxbMCwwXS5zb3J0KHYpLFQuZGV0ZWN0RHVwbGljYXRlcz11LHApOnB9LHN0Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc3QoZSxudWxsLG51bGwsdCl9LHN0Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx0PXQucmVwbGFjZShaLCI9JyQxJ10iKSwhKCFULm1hdGNoZXNTZWxlY3Rvcnx8ZHx8ZyYmZy50ZXN0KHQpfHxoLnRlc3QodCkpKXRyeXt2YXIgbj1tLmNhbGwoZSx0KTtpZihufHxULmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2gocil7fXJldHVybiBzdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxzdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LHN0LmF0dHI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSksZHx8KHQ9dC50b0xvd2VyQ2FzZSgpKSwobj1pLmF0dHJIYW5kbGVbdF0pP24oZSk6ZHx8VC5hdHRyaWJ1dGVzP2UuZ2V0QXR0cmlidXRlKHQpOigobj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpfHxlLmdldEF0dHJpYnV0ZSh0KSkmJmVbdF09PT0hMD90Om4mJm4uc3BlY2lmaWVkP24udmFsdWU6bnVsbH0sc3QuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHN0LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTEsaT0wO2lmKHU9IVQuZGV0ZWN0RHVwbGljYXRlcyxlLnNvcnQodiksdSl7Zm9yKDt0PWVbcl07cisrKXQ9PT1lW3ItMV0mJihpPW4ucHVzaChyKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9O2Z1bmN0aW9uIHV0KGUsdCl7dmFyIG49dCYmZSxyPW4mJih+dC5zb3VyY2VJbmRleHx8aiktKH5lLnNvdXJjZUluZGV4fHxqKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gY3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHB0KGUpe3JldHVybiBvdChmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxvdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfW89c3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1zdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpvdCxtYXRjaDpVLGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKGV0LHR0KSxlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShldCx0dCksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHN0LmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJnN0LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzVdJiZlWzJdO3JldHVybiBVLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVs0XT9lWzJdPWVbNF06biYmei50ZXN0KG4pJiYodD1mdChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OihlPWUucmVwbGFjZShldCx0dCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX0pfSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1rW2UrIiAiXTtyZXR1cm4gdHx8KHQ9UmVnRXhwKCIoXnwiK18rIikiK2UrIigiK18rInwkKSIpKSYmayhlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoZS5jbGFzc05hbWV8fHR5cGVvZiBlLmdldEF0dHJpYnV0ZSE9PUEmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPXN0LmF0dHIocixlKTtyZXR1cm4gbnVsbD09aT8iIT0iPT09dDp0PyhpKz0iIiwiPSI9PT10P2k9PT1uOiIhPSI9PT10P2khPT1uOiJePSI9PT10P24mJjA9PT1pLmluZGV4T2Yobik6Iio9Ij09PXQ/biYmaS5pbmRleE9mKG4pPi0xOiIkPSI9PT10P24mJmkuc2xpY2UoLW4ubGVuZ3RoKT09PW46In49Ij09PXQ/KCIgIitpKyIgIikuaW5kZXhPZihuKT4tMToifD0iPT09dD9pPT09bnx8aS5zbGljZSgwLG4ubGVuZ3RoKzEpPT09bisiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz0ibnRoIiE9PWUuc2xpY2UoMCwzKSxhPSJsYXN0IiE9PWUuc2xpY2UoLTQpLHM9Im9mLXR5cGUiPT09dDtyZXR1cm4gMT09PXImJjA9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxwLGYsZCxoLGc9byE9PWE/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixtPXQucGFyZW50Tm9kZSx5PXMmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx2PSF1JiYhcztpZihtKXtpZihvKXt3aGlsZShnKXtwPXQ7d2hpbGUocD1wW2ddKWlmKHM/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSlyZXR1cm4hMTtoPWc9Im9ubHkiPT09ZSYmIWgmJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYoaD1bYT9tLmZpcnN0Q2hpbGQ6bS5sYXN0Q2hpbGRdLGEmJnYpe2M9bVt4XXx8KG1beF09e30pLGw9Y1tlXXx8W10sZD1sWzBdPT09TiYmbFsxXSxmPWxbMF09PT1OJiZsWzJdLHA9ZCYmbS5jaGlsZE5vZGVzW2RdO3doaWxlKHA9KytkJiZwJiZwW2ddfHwoZj1kPTApfHxoLnBvcCgpKWlmKDE9PT1wLm5vZGVUeXBlJiYrK2YmJnA9PT10KXtjW2VdPVtOLGQsZl07YnJlYWt9fWVsc2UgaWYodiYmKGw9KHRbeF18fCh0W3hdPXt9KSlbZV0pJiZsWzBdPT09TilmPWxbMV07ZWxzZSB3aGlsZShwPSsrZCYmcCYmcFtnXXx8KGY9ZD0wKXx8aC5wb3AoKSlpZigocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKSYmKytmJiYodiYmKChwW3hdfHwocFt4XT17fSkpW2VdPVtOLGZdKSxwPT09dCkpYnJlYWs7cmV0dXJuIGYtPWksZj09PXJ8fDA9PT1mJXImJmYvcj49MH19fSxQU0VVRE86ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkucHNldWRvc1tlXXx8aS5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHN0LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIHJbeF0/cih0KTpyLmxlbmd0aD4xPyhuPVtlLGUsIiIsdF0saS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/b3QoZnVuY3Rpb24oZSxuKXt2YXIgaSxvPXIoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSlpPU0uY2FsbChlLG9bYV0pLGVbaV09IShuW2ldPW9bYV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwwLG4pfSk6cn19LHBzZXVkb3M6e25vdDpvdChmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9cyhlLnJlcGxhY2UoVywiJDEiKSk7cmV0dXJuIHJbeF0/b3QoZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYT1yKGUsbnVsbCxpLFtdKSxzPWUubGVuZ3RoO3doaWxlKHMtLSkobz1hW3NdKSYmKGVbc109ISh0W3NdPW8pKX0pOmZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gdFswXT1lLHIodCxudWxsLG8sbiksIW4ucG9wKCl9fSksaGFzOm90KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSx0KS5sZW5ndGg+MH19KSxjb250YWluczpvdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxvKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6b3QoZnVuY3Rpb24oZSl7cmV0dXJuIFgudGVzdChlfHwiIil8fHN0LmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2UpLGU9ZS5yZXBsYWNlKGV0LHR0KS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3ZhciBuO2RvIGlmKG49ZD90LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKTp0LmxhbmcpcmV0dXJuIG49bi50b0xvd2VyQ2FzZSgpLG49PT1lfHwwPT09bi5pbmRleE9mKGUrIi0iKTt3aGlsZSgodD10LnBhcmVudE5vZGUpJiYxPT09dC5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUubG9jYXRpb24mJmUubG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmbi5zbGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1mfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXAuYWN0aXZlRWxlbWVudCYmKCFwLmhhc0ZvY3VzfHxwLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYhIWUuY2hlY2tlZHx8Im9wdGlvbiI9PT10JiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGUuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZU5hbWU+IkAifHwzPT09ZS5ub2RlVHlwZXx8ND09PWUubm9kZVR5cGUpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4haS5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEcudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xvd2VyQ2FzZSgpPT09ZS50eXBlKX0sZmlyc3Q6cHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnB0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpwdChmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6bl19KSxldmVuOnB0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpwdChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpwdChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpwdChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4gZX0pfX07Zm9yKG4gaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0paS5wc2V1ZG9zW25dPWx0KG4pO2ZvcihuIGlue3N1Ym1pdDohMCxyZXNldDohMH0paS5wc2V1ZG9zW25dPWN0KG4pO2Z1bmN0aW9uIGZ0KGUsdCl7dmFyIG4scixvLGEscyx1LGwsYz1FW2UrIiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsdT1bXSxsPWkucHJlRmlsdGVyO3doaWxlKHMpeyghbnx8KHI9JC5leGVjKHMpKSkmJihyJiYocz1zLnNsaWNlKHJbMF0ubGVuZ3RoKXx8cyksdS5wdXNoKG89W10pKSxuPSExLChyPUkuZXhlYyhzKSkmJihuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoVywiICIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gaS5maWx0ZXIpIShyPVVbYV0uZXhlYyhzKSl8fGxbYV0mJiEocj1sW2FdKHIpKXx8KG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpyfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9zdC5lcnJvcihlKTpFKGUsdSkuc2xpY2UoMCl9ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7Zm9yKDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gaHQoZSx0LG4pe3ZhciBpPXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09aSxhPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4scil7d2hpbGUodD10W2ldKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJldHVybiBlKHQsbixyKX06ZnVuY3Rpb24odCxuLHMpe3ZhciB1LGwsYyxwPU4rIiAiK2E7aWYocyl7d2hpbGUodD10W2ldKWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLHMpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W2ldKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFt4XXx8KHRbeF09e30pLChsPWNbaV0pJiZsWzBdPT09cCl7aWYoKHU9bFsxXSk9PT0hMHx8dT09PXIpcmV0dXJuIHU9PT0hMH1lbHNlIGlmKGw9Y1tpXT1bcF0sbFsxXT1lKHQsbixzKXx8cixsWzFdPT09ITApcmV0dXJuITB9fWZ1bmN0aW9uIGd0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIG10KGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7Zm9yKDt1PnM7cysrKShvPWVbc10pJiYoIW58fG4obyxyLGkpKSYmKGEucHVzaChvKSxsJiZ0LnB1c2gocykpO3JldHVybiBhfWZ1bmN0aW9uIHl0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbeF0mJihyPXl0KHIpKSxpJiYhaVt4XSYmKGk9eXQoaSxvKSksb3QoZnVuY3Rpb24obyxhLHMsdSl7dmFyIGwsYyxwLGY9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8eHQodHx8IioiLHMubm9kZVR5cGU/W3NdOnMsW10pLG09IWV8fCFvJiZ0P2c6bXQoZyxmLGUscyx1KSx5PW4/aXx8KG8/ZTpofHxyKT9bXTphOm07aWYobiYmbihtLHkscyx1KSxyKXtsPW10KHksZCkscihsLFtdLHMsdSksYz1sLmxlbmd0aDt3aGlsZShjLS0pKHA9bFtjXSkmJih5W2RbY11dPSEobVtkW2NdXT1wKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7bD1bXSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmbC5wdXNoKG1bY109cCk7aShudWxsLHk9W10sbCx1KX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKGw9aT9NLmNhbGwobyxwKTpmW2NdKT4tMSYmKG9bbF09IShhW2xdPXApKX19ZWxzZSB5PW10KHk9PT1hP3kuc3BsaWNlKGgseS5sZW5ndGgpOnkpLGk/aShudWxsLGEseSx1KTpILmFwcGx5KGEseSl9KX1mdW5jdGlvbiB2dChlKXt2YXIgdCxuLHIsbz1lLmxlbmd0aCxhPWkucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fGkucmVsYXRpdmVbIiAiXSx1PWE/MTowLGM9aHQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxwPWh0KGZ1bmN0aW9uKGUpe3JldHVybiBNLmNhbGwodCxlKT4tMX0scywhMCksZj1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFhJiYocnx8biE9PWwpfHwoKHQ9bikubm9kZVR5cGU/YyhlLG4scik6cChlLG4scikpfV07Zm9yKDtvPnU7dSsrKWlmKG49aS5yZWxhdGl2ZVtlW3VdLnR5cGVdKWY9W2h0KGd0KGYpLG4pXTtlbHNle2lmKG49aS5maWx0ZXJbZVt1XS50eXBlXS5hcHBseShudWxsLGVbdV0ubWF0Y2hlcyksblt4XSl7Zm9yKHI9Kyt1O28+cjtyKyspaWYoaS5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFrO3JldHVybiB5dCh1PjEmJmd0KGYpLHU+MSYmZHQoZS5zbGljZSgwLHUtMSkpLnJlcGxhY2UoVywiJDEiKSxuLHI+dSYmdnQoZS5zbGljZSh1LHIpKSxvPnImJnZ0KGU9ZS5zbGljZShyKSksbz5yJiZkdChlKSl9Zi5wdXNoKG4pfXJldHVybiBndChmKX1mdW5jdGlvbiBidChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLGE9ZS5sZW5ndGg+MCxzPWZ1bmN0aW9uKHMsdSxjLGYsZCl7dmFyIGgsZyxtLHk9W10sdj0wLGI9IjAiLHg9cyYmW10sdz1udWxsIT1kLFQ9bCxDPXN8fGEmJmkuZmluZC5UQUcoIioiLGQmJnUucGFyZW50Tm9kZXx8dSksaz1OKz1udWxsPT1UPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKHcmJihsPXUhPT1wJiZ1LHI9bik7bnVsbCE9KGg9Q1tiXSk7YisrKXtpZihhJiZoKXtnPTA7d2hpbGUobT1lW2crK10paWYobShoLHUsYykpe2YucHVzaChoKTticmVha313JiYoTj1rLHI9KytuKX1vJiYoKGg9IW0mJmgpJiZ2LS0scyYmeC5wdXNoKGgpKX1pZih2Kz1iLG8mJmIhPT12KXtnPTA7d2hpbGUobT10W2crK10pbSh4LHksdSxjKTtpZihzKXtpZih2PjApd2hpbGUoYi0tKXhbYl18fHlbYl18fCh5W2JdPUwuY2FsbChmKSk7eT1tdCh5KX1ILmFwcGx5KGYseSksdyYmIXMmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmc3QudW5pcXVlU29ydChmKX1yZXR1cm4gdyYmKE49ayxsPVQpLHh9O3JldHVybiBvP290KHMpOnN9cz1zdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89U1tlKyIgIl07aWYoIW8pe3R8fCh0PWZ0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXZ0KHRbbl0pLG9beF0/ci5wdXNoKG8pOmkucHVzaChvKTtvPVMoZSxidChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24geHQoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspc3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIHd0KGUsdCxuLHIpe3ZhciBvLGEsdSxsLGMscD1mdChlKTtpZighciYmMT09PXAubGVuZ3RoKXtpZihhPXBbMF09cFswXS5zbGljZSgwKSxhLmxlbmd0aD4yJiYiSUQiPT09KHU9YVswXSkudHlwZSYmOT09PXQubm9kZVR5cGUmJiFkJiZpLnJlbGF0aXZlW2FbMV0udHlwZV0pe2lmKHQ9aS5maW5kLklEKHUubWF0Y2hlc1swXS5yZXBsYWNlKGV0LHR0KSx0KVswXSwhdClyZXR1cm4gbjtlPWUuc2xpY2UoYS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9bz1VLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6YS5sZW5ndGg7d2hpbGUoby0tKXtpZih1PWFbb10saS5yZWxhdGl2ZVtsPXUudHlwZV0pYnJlYWs7aWYoKGM9aS5maW5kW2xdKSYmKHI9Yyh1Lm1hdGNoZXNbMF0ucmVwbGFjZShldCx0dCksVi50ZXN0KGFbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCkpKXtpZihhLnNwbGljZShvLDEpLGU9ci5sZW5ndGgmJmR0KGEpLCFlKXJldHVybiBILmFwcGx5KG4scS5jYWxsKHIsMCkpLG47YnJlYWt9fX1yZXR1cm4gcyhlLHApKHIsdCxkLG4sVi50ZXN0KGUpKSxufWkucHNldWRvcy5udGg9aS5wc2V1ZG9zLmVxO2Z1bmN0aW9uIFR0KCl7fWkuZmlsdGVycz1UdC5wcm90b3R5cGU9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgVHQsYygpLHN0LmF0dHI9Yi5hdHRyLGIuZmluZD1zdCxiLmV4cHI9c3Quc2VsZWN0b3JzLGIuZXhwclsiOiJdPWIuZXhwci5wc2V1ZG9zLGIudW5pcXVlPXN0LnVuaXF1ZVNvcnQsYi50ZXh0PXN0LmdldFRleHQsYi5pc1hNTERvYz1zdC5pc1hNTCxiLmNvbnRhaW5zPXN0LmNvbnRhaW5zfShlKTt2YXIgYXQ9L1VudGlsJC8sc3Q9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sdXQ9L14uW146I1xbXC4sXSokLyxsdD1iLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGN0PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2IuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXRoaXMubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gcj10aGlzLHRoaXMucHVzaFN0YWNrKGIoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKGIuY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3Iobj1bXSx0PTA7aT50O3QrKyliLmZpbmQoZSx0aGlzW3RdLG4pO3JldHVybiBuPXRoaXMucHVzaFN0YWNrKGk+MT9iLnVuaXF1ZShuKTpuKSxuLnNlbGVjdG9yPSh0aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiOiIiKStlLG59LGhhczpmdW5jdGlvbihlKXt2YXIgdCxuPWIoZSx0aGlzKSxyPW4ubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7cj50O3QrKylpZihiLmNvbnRhaW5zKHRoaXMsblt0XSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITEpKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYoInN0cmluZyI9PXR5cGVvZiBlP2x0LnRlc3QoZSk/YihlLHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6Yi5maWx0ZXIoZSx0aGlzKS5sZW5ndGg+MDp0aGlzLmZpbHRlcihlKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9bHQudGVzdChlKXx8InN0cmluZyIhPXR5cGVvZiBlP2IoZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPnI7cisrKXtuPXRoaXNbcl07d2hpbGUobiYmbi5vd25lckRvY3VtZW50JiZuIT09dCYmMTEhPT1uLm5vZGVUeXBlKXtpZihhP2EuaW5kZXgobik+LTE6Yi5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKXtvLnB1c2gobik7YnJlYWt9bj1uLnBhcmVudE5vZGV9fXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP2IudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Yi5pbkFycmF5KHRoaXNbMF0sYihlKSk6Yi5pbkFycmF5KGUuanF1ZXJ5P2VbMF06ZSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT9iKGUsdCk6Yi5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj1iLm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksYi5mbi5hbmRTZWxmPWIuZm4uYWRkQmFjaztmdW5jdGlvbiBwdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9Yi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBiLmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGIuZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gYi5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gYi5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGIuZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYi5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGIuc2libGluZyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gYi5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OmIubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7Yi5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPWIubWFwKHRoaXMsdCxuKTtyZXR1cm4gYXQudGVzdChlKXx8KHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT1iLmZpbHRlcihyLGkpKSxpPXRoaXMubGVuZ3RoPjEmJiFjdFtlXT9iLnVuaXF1ZShpKTppLHRoaXMubGVuZ3RoPjEmJnN0LnRlc3QoZSkmJihpPWkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSxiLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoP2IuZmluZC5tYXRjaGVzU2VsZWN0b3IodFswXSxlKT9bdFswXV06W106Yi5maW5kLm1hdGNoZXMoZSx0KX0sZGlyOmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1bXSxvPWVbbl07d2hpbGUobyYmOSE9PW8ubm9kZVR5cGUmJihyPT09dHx8MSE9PW8ubm9kZVR5cGV8fCFiKG8pLmlzKHIpKSkxPT09by5ub2RlVHlwZSYmaS5wdXNoKG8pLG89b1tuXTtyZXR1cm4gaX0sc2libGluZzpmdW5jdGlvbihlLHQpe3ZhciBuPVtdO2Zvcig7ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59fSk7ZnVuY3Rpb24gZnQoZSx0LG4pe2lmKHQ9dHx8MCxiLmlzRnVuY3Rpb24odCkpcmV0dXJuIGIuZ3JlcChlLGZ1bmN0aW9uKGUscil7dmFyIGk9ISF0LmNhbGwoZSxyLGUpO3JldHVybiBpPT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIGIuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD09PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPWIuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pO2lmKHV0LnRlc3QodCkpcmV0dXJuIGIuZmlsdGVyKHQsciwhbik7dD1iLmZpbHRlcih0LHIpfXJldHVybiBiLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gYi5pbkFycmF5KGUsdCk+PTA9PT1ufSl9ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9aHQuc3BsaXQoInwiKSxuPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKG4uY3JlYXRlRWxlbWVudCl3aGlsZSh0Lmxlbmd0aCluLmNyZWF0ZUVsZW1lbnQodC5wb3AoKSk7cmV0dXJuIG59dmFyIGh0PSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixndD0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLG10PVJlZ0V4cCgiPCg/OiIraHQrIilbXFxzLz5dIiwiaSIpLHl0PS9eXHMrLyx2dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGJ0PS88KFtcdzpdKykvLHh0PS88dGJvZHkvaSx3dD0vPHwmIz9cdys7LyxUdD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLE50PS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLEN0PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGt0PS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxFdD0vXnRydWVcLyguKikvLFN0PS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxBdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6Yi5zdXBwb3J0Lmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sanQ9ZHQobyksRHQ9anQuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJkaXYiKSk7QXQub3B0Z3JvdXA9QXQub3B0aW9uLEF0LnRib2R5PUF0LnRmb290PUF0LmNvbGdyb3VwPUF0LmNhcHRpb249QXQudGhlYWQsQXQudGg9QXQudGQsYi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P2IudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fG8pLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSx3cmFwQWxsOmZ1bmN0aW9uKGUpe2lmKGIuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2IodGhpcykud3JhcEFsbChlLmNhbGwodGhpcyx0KSl9KTtpZih0aGlzWzBdKXt2YXIgdD1iKGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdENoaWxkJiYxPT09ZS5maXJzdENoaWxkLm5vZGVUeXBlKWU9ZS5maXJzdENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7Yih0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1iLmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXtiKHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Yi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGIodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmdGhpcy5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGUpeygxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSkmJnRoaXMuaW5zZXJ0QmVmb3JlKGUsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2Zvcig7bnVsbCE9KG49dGhpc1tyXSk7cisrKSghZXx8Yi5maWx0ZXIoZSxbbl0pLmxlbmd0aD4wKSYmKHR8fDEhPT1uLm5vZGVUeXBlfHxiLmNsZWFuRGF0YShPdChuKSksbi5wYXJlbnROb2RlJiYodCYmYi5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJk10KE90KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDtudWxsIT0oZT10aGlzW3RdKTt0KyspezE9PT1lLm5vZGVUeXBlJiZiLmNsZWFuRGF0YShPdChlLCExKSk7d2hpbGUoZS5maXJzdENoaWxkKWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtlLm9wdGlvbnMmJmIubm9kZU5hbWUoZSwic2VsZWN0IikmJihlLm9wdGlvbnMubGVuZ3RoPTApfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGw9PWU/ITE6ZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGIuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7dmFyIG49dGhpc1swXXx8e30scj0wLGk9dGhpcy5sZW5ndGg7aWYoZT09PXQpcmV0dXJuIDE9PT1uLm5vZGVUeXBlP24uaW5uZXJIVE1MLnJlcGxhY2UoZ3QsIiIpOnQ7aWYoISgic3RyaW5nIiE9dHlwZW9mIGV8fFR0LnRlc3QoZSl8fCFiLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSYmbXQudGVzdChlKXx8IWIuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmeXQudGVzdChlKXx8QXRbKGJ0LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKSl7ZT1lLnJlcGxhY2UodnQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2k+cjtyKyspbj10aGlzW3JdfHx7fSwxPT09bi5ub2RlVHlwZSYmKGIuY2xlYW5EYXRhKE90KG4sITEpKSxuLmlubmVySFRNTD1lKTtuPTB9Y2F0Y2gobyl7fX1uJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWIuaXNGdW5jdGlvbihlKTtyZXR1cm4gdHx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT1iKGUpLm5vdCh0aGlzKS5kZXRhY2goKSksdGhpcy5kb21NYW5pcChbZV0sITAsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0U2libGluZyxuPXRoaXMucGFyZW50Tm9kZTtuJiYoYih0aGlzKS5yZW1vdmUoKSxuLmluc2VydEJlZm9yZShlLHQpKX0pfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLG4scil7ZT1mLmFwcGx5KFtdLGUpO3ZhciBpLG8sYSxzLHUsbCxjPTAscD10aGlzLmxlbmd0aCxkPXRoaXMsaD1wLTEsZz1lWzBdLG09Yi5pc0Z1bmN0aW9uKGcpO2lmKG18fCEoMT49cHx8InN0cmluZyIhPXR5cGVvZiBnfHxiLnN1cHBvcnQuY2hlY2tDbG9uZSkmJkN0LnRlc3QoZykpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKXt2YXIgbz1kLmVxKGkpO20mJihlWzBdPWcuY2FsbCh0aGlzLGksbj9vLmh0bWwoKTp0KSksby5kb21NYW5pcChlLG4scil9KTtpZihwJiYobD1iLmJ1aWxkRnJhZ21lbnQoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksaT1sLmZpcnN0Q2hpbGQsMT09PWwuY2hpbGROb2Rlcy5sZW5ndGgmJihsPWkpLGkpKXtmb3Iobj1uJiZiLm5vZGVOYW1lKGksInRyIikscz1iLm1hcChPdChsLCJzY3JpcHQiKSxIdCksYT1zLmxlbmd0aDtwPmM7YysrKW89bCxjIT09aCYmKG89Yi5jbG9uZShvLCEwLCEwKSxhJiZiLm1lcmdlKHMsT3Qobywic2NyaXB0IikpKSxyLmNhbGwobiYmYi5ub2RlTmFtZSh0aGlzW2NdLCJ0YWJsZSIpP0x0KHRoaXNbY10sInRib2R5Iik6dGhpc1tjXSxvLGMpO2lmKGEpZm9yKHU9c1tzLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LGIubWFwKHMscXQpLGM9MDthPmM7YysrKW89c1tjXSxrdC50ZXN0KG8udHlwZXx8IiIpJiYhYi5fZGF0YShvLCJnbG9iYWxFdmFsIikmJmIuY29udGFpbnModSxvKSYmKG8uc3JjP2IuYWpheCh7dXJsOm8uc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSk6Yi5nbG9iYWxFdmFsKChvLnRleHR8fG8udGV4dENvbnRlbnR8fG8uaW5uZXJIVE1MfHwiIikucmVwbGFjZShTdCwiIikpKTtsPWk9bnVsbH1yZXR1cm4gdGhpc319KTtmdW5jdGlvbiBMdChlLHQpe3JldHVybiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpKX1mdW5jdGlvbiBIdChlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZU5vZGUoInR5cGUiKTtyZXR1cm4gZS50eXBlPSh0JiZ0LnNwZWNpZmllZCkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIHF0KGUpe3ZhciB0PUV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbixyPTA7Zm9yKDtudWxsIT0obj1lW3JdKTtyKyspYi5fZGF0YShuLCJnbG9iYWxFdmFsIiwhdHx8Yi5fZGF0YSh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIF90KGUsdCl7aWYoMT09PXQubm9kZVR5cGUmJmIuaGFzRGF0YShlKSl7dmFyIG4scixpLG89Yi5fZGF0YShlKSxhPWIuX2RhdGEodCxvKSxzPW8uZXZlbnRzO2lmKHMpe2RlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fTtmb3IobiBpbiBzKWZvcihyPTAsaT1zW25dLmxlbmd0aDtpPnI7cisrKWIuZXZlbnQuYWRkKHQsbixzW25dW3JdKX1hLmRhdGEmJihhLmRhdGE9Yi5leHRlbmQoe30sYS5kYXRhKSl9fWZ1bmN0aW9uIEZ0KGUsdCl7dmFyIG4scixpO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwhYi5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmdFtiLmV4cGFuZG9dKXtpPWIuX2RhdGEodCk7Zm9yKHIgaW4gaS5ldmVudHMpYi5yZW1vdmVFdmVudCh0LHIsaS5oYW5kbGUpO3QucmVtb3ZlQXR0cmlidXRlKGIuZXhwYW5kbyl9InNjcmlwdCI9PT1uJiZ0LnRleHQhPT1lLnRleHQ/KEh0KHQpLnRleHQ9ZS50ZXh0LHF0KHQpKToib2JqZWN0Ij09PW4/KHQucGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSxiLnN1cHBvcnQuaHRtbDVDbG9uZSYmZS5pbm5lckhUTUwmJiFiLnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhUTUw9ZS5pbm5lckhUTUwpKToiaW5wdXQiPT09biYmTnQudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRDaGVja2VkPXQuY2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUudmFsdWUpKToib3B0aW9uIj09PW4/dC5kZWZhdWx0U2VsZWN0ZWQ9dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX19Yi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXtiLmZuW2VdPWZ1bmN0aW9uKGUpe3ZhciBuLHI9MCxpPVtdLG89YihlKSxhPW8ubGVuZ3RoLTE7Zm9yKDthPj1yO3IrKyluPXI9PT1hP3RoaXM6dGhpcy5jbG9uZSghMCksYihvW3JdKVt0XShuKSxkLmFwcGx5KGksbi5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkpfX0pO2Z1bmN0aW9uIE90KGUsbil7dmFyIHIsbyxhPTAscz10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWk/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShufHwiKiIpOnR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwhPT1pP2UucXVlcnlTZWxlY3RvckFsbChufHwiKiIpOnQ7aWYoIXMpZm9yKHM9W10scj1lLmNoaWxkTm9kZXN8fGU7bnVsbCE9KG89clthXSk7YSsrKSFufHxiLm5vZGVOYW1lKG8sbik/cy5wdXNoKG8pOmIubWVyZ2UocyxPdChvLG4pKTtyZXR1cm4gbj09PXR8fG4mJmIubm9kZU5hbWUoZSxuKT9iLm1lcmdlKFtlXSxzKTpzfWZ1bmN0aW9uIEJ0KGUpe050LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkKX1iLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdT1iLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZihiLnN1cHBvcnQuaHRtbDVDbG9uZXx8Yi5pc1hNTERvYyhlKXx8IW10LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooRHQuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLER0LnJlbW92ZUNoaWxkKG89RHQuZmlyc3RDaGlsZCkpLCEoYi5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmYi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxiLmlzWE1MRG9jKGUpKSlmb3Iocj1PdChvKSxzPU90KGUpLGE9MDtudWxsIT0oaT1zW2FdKTsrK2EpclthXSYmRnQoaSxyW2FdKTtpZih0KWlmKG4pZm9yKHM9c3x8T3QoZSkscj1yfHxPdChvKSxhPTA7bnVsbCE9KGk9c1thXSk7YSsrKV90KGksclthXSk7ZWxzZSBfdChlLG8pO3JldHVybiByPU90KG8sInNjcmlwdCIpLHIubGVuZ3RoPjAmJk10KHIsIXUmJk90KGUsInNjcmlwdCIpKSxyPXM9aT1udWxsLG99LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMscD1lLmxlbmd0aCxmPWR0KHQpLGQ9W10saD0wO2Zvcig7cD5oO2grKylpZihvPWVbaF0sb3x8MD09PW8paWYoIm9iamVjdCI9PT1iLnR5cGUobykpYi5tZXJnZShkLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYod3QudGVzdChvKSl7cz1zfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHU9KGJ0LmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksYz1BdFt1XXx8QXQuX2RlZmF1bHQscy5pbm5lckhUTUw9Y1sxXStvLnJlcGxhY2UodnQsIjwkMT48LyQyPiIpK2NbMl0saT1jWzBdO3doaWxlKGktLSlzPXMubGFzdENoaWxkO2lmKCFiLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnl0LnRlc3QobykmJmQucHVzaCh0LmNyZWF0ZVRleHROb2RlKHl0LmV4ZWMobylbMF0pKSwhYi5zdXBwb3J0LnRib2R5KXtvPSJ0YWJsZSIhPT11fHx4dC50ZXN0KG8pPyI8dGFibGU+IiE9PWNbMV18fHh0LnRlc3Qobyk/MDpzOnMuZmlyc3RDaGlsZCxpPW8mJm8uY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoaS0tKWIubm9kZU5hbWUobD1vLmNoaWxkTm9kZXNbaV0sInRib2R5IikmJiFsLmNoaWxkTm9kZXMubGVuZ3RoJiZvLnJlbW92ZUNoaWxkKGwpCn1iLm1lcmdlKGQscy5jaGlsZE5vZGVzKSxzLnRleHRDb250ZW50PSIiO3doaWxlKHMuZmlyc3RDaGlsZClzLnJlbW92ZUNoaWxkKHMuZmlyc3RDaGlsZCk7cz1mLmxhc3RDaGlsZH1lbHNlIGQucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtzJiZmLnJlbW92ZUNoaWxkKHMpLGIuc3VwcG9ydC5hcHBlbmRDaGVja2VkfHxiLmdyZXAoT3QoZCwiaW5wdXQiKSxCdCksaD0wO3doaWxlKG89ZFtoKytdKWlmKCghcnx8LTE9PT1iLmluQXJyYXkobyxyKSkmJihhPWIuY29udGFpbnMoby5vd25lckRvY3VtZW50LG8pLHM9T3QoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksYSYmTXQocyksbikpe2k9MDt3aGlsZShvPXNbaSsrXSlrdC50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIHM9bnVsbCxmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sYSxzPTAsdT1iLmV4cGFuZG8sbD1iLmNhY2hlLHA9Yi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sZj1iLmV2ZW50LnNwZWNpYWw7Zm9yKDtudWxsIT0obj1lW3NdKTtzKyspaWYoKHR8fGIuYWNjZXB0RGF0YShuKSkmJihvPW5bdV0sYT1vJiZsW29dKSl7aWYoYS5ldmVudHMpZm9yKHIgaW4gYS5ldmVudHMpZltyXT9iLmV2ZW50LnJlbW92ZShuLHIpOmIucmVtb3ZlRXZlbnQobixyLGEuaGFuZGxlKTtsW29dJiYoZGVsZXRlIGxbb10scD9kZWxldGUgblt1XTp0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUhPT1pP24ucmVtb3ZlQXR0cmlidXRlKHUpOm5bdV09bnVsbCxjLnB1c2gobykpfX19KTt2YXIgUHQsUnQsV3QsJHQ9L2FscGhhXChbXildKlwpL2ksSXQ9L29wYWNpdHlccyo9XHMqKFteKV0qKS8senQ9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLFh0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxVdD0vXm1hcmdpbi8sVnQ9UmVnRXhwKCJeKCIreCsiKSguKikkIiwiaSIpLFl0PVJlZ0V4cCgiXigiK3grIikoPyFweClbYS16JV0rJCIsImkiKSxKdD1SZWdFeHAoIl4oWystXSk9KCIreCsiKSIsImkiKSxHdD17Qk9EWToiYmxvY2sifSxRdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sWnQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxlbj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIHRuKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1lbi5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9ZW5baV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbm4oZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PWIuY3NzKGUsImRpc3BsYXkiKXx8IWIuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHJuKGUsdCl7dmFyIG4scixpLG89W10sYT0wLHM9ZS5sZW5ndGg7Zm9yKDtzPmE7YSsrKXI9ZVthXSxyLnN0eWxlJiYob1thXT1iLl9kYXRhKHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW2FdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmbm4ocikmJihvW2FdPWIuX2RhdGEociwib2xkZGlzcGxheSIsdW4oci5ub2RlTmFtZSkpKSk6b1thXXx8KGk9bm4ociksKG4mJiJub25lIiE9PW58fCFpKSYmYi5fZGF0YShyLCJvbGRkaXNwbGF5IixpP246Yi5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihhPTA7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKHQmJiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1yLnN0eWxlLmRpc3BsYXl8fChyLnN0eWxlLmRpc3BsYXk9dD9vW2FdfHwiIjoibm9uZSIpKTtyZXR1cm4gZX1iLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYT17fSxzPTA7aWYoYi5pc0FycmF5KG4pKXtmb3Iobz1SdChlKSxpPW4ubGVuZ3RoO2k+cztzKyspYVtuW3NdXT1iLmNzcyhlLG5bc10sITEsbyk7cmV0dXJuIGF9cmV0dXJuIHIhPT10P2Iuc3R5bGUoZSxuLHIpOmIuY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ImJvb2xlYW4iPT10eXBlb2YgZTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KHQ/ZTpubih0aGlzKSk/Yih0aGlzKS5zaG93KCk6Yih0aGlzKS5oaWRlKCl9KX19KSxiLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVd0KGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmIuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSxuLHIsaSl7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgbyxhLHMsdT1iLmNhbWVsQ2FzZShuKSxsPWUuc3R5bGU7aWYobj1iLmNzc1Byb3BzW3VdfHwoYi5jc3NQcm9wc1t1XT10bihsLHUpKSxzPWIuY3NzSG9va3Nbbl18fGIuY3NzSG9va3NbdV0scj09PXQpcmV0dXJuIHMmJiJnZXQiaW4gcyYmKG89cy5nZXQoZSwhMSxpKSkhPT10P286bFtuXTtpZihhPXR5cGVvZiByLCJzdHJpbmciPT09YSYmKG89SnQuZXhlYyhyKSkmJihyPShvWzFdKzEpKm9bMl0rcGFyc2VGbG9hdChiLmNzcyhlLG4pKSxhPSJudW1iZXIiKSwhKG51bGw9PXJ8fCJudW1iZXIiPT09YSYmaXNOYU4ocil8fCgibnVtYmVyIiE9PWF8fGIuY3NzTnVtYmVyW3VdfHwocis9InB4IiksYi5zdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1yfHwwIT09bi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW25dPSJpbmhlcml0IikscyYmInNldCJpbiBzJiYocj1zLnNldChlLHIsaSkpPT09dCkpKXRyeXtsW25dPXJ9Y2F0Y2goYyl7fX19LGNzczpmdW5jdGlvbihlLG4scixpKXt2YXIgbyxhLHMsdT1iLmNhbWVsQ2FzZShuKTtyZXR1cm4gbj1iLmNzc1Byb3BzW3VdfHwoYi5jc3NQcm9wc1t1XT10bihlLnN0eWxlLHUpKSxzPWIuY3NzSG9va3Nbbl18fGIuY3NzSG9va3NbdV0scyYmImdldCJpbiBzJiYoYT1zLmdldChlLCEwLHIpKSxhPT09dCYmKGE9V3QoZSxuLGkpKSwibm9ybWFsIj09PWEmJm4gaW4gS3QmJihhPUt0W25dKSwiIj09PXJ8fHI/KG89cGFyc2VGbG9hdChhKSxyPT09ITB8fGIuaXNOdW1lcmljKG8pP298fDA6YSk6YX0sc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX19KSxlLmdldENvbXB1dGVkU3R5bGU/KFJ0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX0sV3Q9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYSxzPXJ8fFJ0KGUpLHU9cz9zLmdldFByb3BlcnR5VmFsdWUobil8fHNbbl06dCxsPWUuc3R5bGU7cmV0dXJuIHMmJigiIiE9PXV8fGIuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHwodT1iLnN0eWxlKGUsbikpLFl0LnRlc3QodSkmJlV0LnRlc3QobikmJihpPWwud2lkdGgsbz1sLm1pbldpZHRoLGE9bC5tYXhXaWR0aCxsLm1pbldpZHRoPWwubWF4V2lkdGg9bC53aWR0aD11LHU9cy53aWR0aCxsLndpZHRoPWksbC5taW5XaWR0aD1vLGwubWF4V2lkdGg9YSkpLHV9KTpvLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihSdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5jdXJyZW50U3R5bGV9LFd0PWZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1yfHxSdChlKSx1PXM/c1tuXTp0LGw9ZS5zdHlsZTtyZXR1cm4gbnVsbD09dSYmbCYmbFtuXSYmKHU9bFtuXSksWXQudGVzdCh1KSYmIXp0LnRlc3QobikmJihpPWwubGVmdCxvPWUucnVudGltZVN0eWxlLGE9byYmby5sZWZ0LGEmJihvLmxlZnQ9ZS5jdXJyZW50U3R5bGUubGVmdCksbC5sZWZ0PSJmb250U2l6ZSI9PT1uPyIxZW0iOnUsdT1sLnBpeGVsTGVmdCsicHgiLGwubGVmdD1pLGEmJihvLmxlZnQ9YSkpLCIiPT09dT8iYXV0byI6dX0pO2Z1bmN0aW9uIG9uKGUsdCxuKXt2YXIgcj1WdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIGFuKGUsdCxuLHIsaSl7dmFyIG89bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09dD8xOjAsYT0wO2Zvcig7ND5vO28rPTIpIm1hcmdpbiI9PT1uJiYoYSs9Yi5jc3MoZSxuK1p0W29dLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYoYS09Yi5jc3MoZSwicGFkZGluZyIrWnRbb10sITAsaSkpLCJtYXJnaW4iIT09biYmKGEtPWIuY3NzKGUsImJvcmRlciIrWnRbb10rIldpZHRoIiwhMCxpKSkpOihhKz1iLmNzcyhlLCJwYWRkaW5nIitadFtvXSwhMCxpKSwicGFkZGluZyIhPT1uJiYoYSs9Yi5jc3MoZSwiYm9yZGVyIitadFtvXSsiV2lkdGgiLCEwLGkpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gc24oZSx0LG4pe3ZhciByPSEwLGk9IndpZHRoIj09PXQ/ZS5vZmZzZXRXaWR0aDplLm9mZnNldEhlaWdodCxvPVJ0KGUpLGE9Yi5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09Yi5jc3MoZSwiYm94U2l6aW5nIiwhMSxvKTtpZigwPj1pfHxudWxsPT1pKXtpZihpPVd0KGUsdCxvKSwoMD5pfHxudWxsPT1pKSYmKGk9ZS5zdHlsZVt0XSksWXQudGVzdChpKSlyZXR1cm4gaTtyPWEmJihiLnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fGk9PT1lLnN0eWxlW3RdKSxpPXBhcnNlRmxvYXQoaSl8fDB9cmV0dXJuIGkrYW4oZSx0LG58fChhPyJib3JkZXIiOiJjb250ZW50IikscixvKSsicHgifWZ1bmN0aW9uIHVuKGUpe3ZhciB0PW8sbj1HdFtlXTtyZXR1cm4gbnx8KG49bG4oZSx0KSwibm9uZSIhPT1uJiZufHwoUHQ9KFB0fHxiKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikuY3NzKCJjc3NUZXh0IiwiZGlzcGxheTpibG9jayAhaW1wb3J0YW50IikpLmFwcGVuZFRvKHQuZG9jdW1lbnRFbGVtZW50KSx0PShQdFswXS5jb250ZW50V2luZG93fHxQdFswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LHQud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLHQuY2xvc2UoKSxuPWxuKGUsdCksUHQuZGV0YWNoKCkpLEd0W2VdPW4pLG59ZnVuY3Rpb24gbG4oZSx0KXt2YXIgbj1iKHQuY3JlYXRlRWxlbWVudChlKSkuYXBwZW5kVG8odC5ib2R5KSxyPWIuY3NzKG5bMF0sImRpc3BsYXkiKTtyZXR1cm4gbi5yZW1vdmUoKSxyfWIuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSxuKXtiLmNzc0hvb2tzW25dPXtnZXQ6ZnVuY3Rpb24oZSxyLGkpe3JldHVybiByPzA9PT1lLm9mZnNldFdpZHRoJiZYdC50ZXN0KGIuY3NzKGUsImRpc3BsYXkiKSk/Yi5zd2FwKGUsUXQsZnVuY3Rpb24oKXtyZXR1cm4gc24oZSxuLGkpfSk6c24oZSxuLGkpOnR9LHNldDpmdW5jdGlvbihlLHQscil7dmFyIGk9ciYmUnQoZSk7cmV0dXJuIG9uKGUsdCxyP2FuKGUsbixyLGIuc3VwcG9ydC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PWIuY3NzKGUsImJveFNpemluZyIsITEsaSksaSk6MCl9fX0pLGIuc3VwcG9ydC5vcGFjaXR5fHwoYi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSXQudGVzdCgodCYmZS5jdXJyZW50U3R5bGU/ZS5jdXJyZW50U3R5bGUuZmlsdGVyOmUuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6dD8iMSI6IiJ9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuc3R5bGUscj1lLmN1cnJlbnRTdHlsZSxpPWIuaXNOdW1lcmljKHQpPyJhbHBoYShvcGFjaXR5PSIrMTAwKnQrIikiOiIiLG89ciYmci5maWx0ZXJ8fG4uZmlsdGVyfHwiIjtuLnpvb209MSwodD49MXx8IiI9PT10KSYmIiI9PT1iLnRyaW0oby5yZXBsYWNlKCR0LCIiKSkmJm4ucmVtb3ZlQXR0cmlidXRlJiYobi5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09dHx8ciYmIXIuZmlsdGVyKXx8KG4uZmlsdGVyPSR0LnRlc3Qobyk/by5yZXBsYWNlKCR0LGkpOm8rIiAiK2kpfX0pLGIoZnVuY3Rpb24oKXtiLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGIuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuP2Iuc3dhcChlLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxXdCxbZSwibWFyZ2luUmlnaHQiXSk6dH19KSwhYi5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJmIuZm4ucG9zaXRpb24mJmIuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe2IuY3NzSG9va3Nbbl09e2dldDpmdW5jdGlvbihlLHIpe3JldHVybiByPyhyPVd0KGUsbiksWXQudGVzdChyKT9iKGUpLnBvc2l0aW9uKClbbl0rInB4IjpyKTp0fX19KX0pLGIuZXhwciYmYi5leHByLmZpbHRlcnMmJihiLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA+PWUub2Zmc2V0V2lkdGgmJjA+PWUub2Zmc2V0SGVpZ2h0fHwhYi5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmIm5vbmUiPT09KGUuc3R5bGUmJmUuc3R5bGUuZGlzcGxheXx8Yi5jc3MoZSwiZGlzcGxheSIpKX0sYi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hYi5leHByLmZpbHRlcnMuaGlkZGVuKGUpfSksYi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oZSx0KXtiLmNzc0hvb2tzW2UrdF09e2V4cGFuZDpmdW5jdGlvbihuKXt2YXIgcj0wLGk9e30sbz0ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgiICIpOltuXTtmb3IoOzQ+cjtyKyspaVtlK1p0W3JdK3RdPW9bcl18fG9bci0yXXx8b1swXTtyZXR1cm4gaX19LFV0LnRlc3QoZSl8fChiLmNzc0hvb2tzW2UrdF0uc2V0PW9uKX0pO3ZhciBjbj0vJTIwL2cscG49L1xbXF0kLyxmbj0vXHI/XG4vZyxkbj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksaG49L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2IuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPWIucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBlP2IubWFrZUFycmF5KGUpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIWIodGhpcykuaXMoIjpkaXNhYmxlZCIpJiZobi50ZXN0KHRoaXMubm9kZU5hbWUpJiYhZG4udGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8IU50LnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49Yih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09bj9udWxsOmIuaXNBcnJheShuKT9iLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoZm4sIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKGZuLCJcclxuIil9fSkuZ2V0KCl9fSksYi5wYXJhbT1mdW5jdGlvbihlLG4pe3ZhciByLGk9W10sbz1mdW5jdGlvbihlLHQpe3Q9Yi5pc0Z1bmN0aW9uKHQpP3QoKTpudWxsPT10PyIiOnQsaVtpLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQodCl9O2lmKG49PT10JiYobj1iLmFqYXhTZXR0aW5ncyYmYi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLGIuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiFiLmlzUGxhaW5PYmplY3QoZSkpYi5lYWNoKGUsZnVuY3Rpb24oKXtvKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHIgaW4gZSlnbihyLGVbcl0sbixvKTtyZXR1cm4gaS5qb2luKCImIikucmVwbGFjZShjbiwiKyIpfTtmdW5jdGlvbiBnbihlLHQsbixyKXt2YXIgaTtpZihiLmlzQXJyYXkodCkpYi5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHxwbi50ZXN0KGUpP3IoZSxpKTpnbihlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09Yi50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpZ24oZSsiWyIraSsiXSIsdFtpXSxuLHIpfWIuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2IuZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLGIuZm4uaG92ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9O3ZhciBtbix5bix2bj1iLm5vdygpLGJuPS9cPy8seG49LyMuKiQvLHduPS8oWz8mXSlfPVteJl0qLyxUbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLE5uPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLENuPS9eKD86R0VUfEhFQUQpJC8sa249L15cL1wvLyxFbj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sU249Yi5mbi5sb2FkLEFuPXt9LGpuPXt9LERuPSIqLyIuY29uY2F0KCIqIik7dHJ5e3luPWEuaHJlZn1jYXRjaChMbil7eW49by5jcmVhdGVFbGVtZW50KCJhIikseW4uaHJlZj0iIix5bj15bi5ocmVmfW1uPUVuLmV4ZWMoeW4udG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbXTtpZihiLmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBxbihlLG4scixpKXt2YXIgbz17fSxhPWU9PT1qbjtmdW5jdGlvbiBzKHUpe3ZhciBsO3JldHVybiBvW3VdPSEwLGIuZWFjaChlW3VdfHxbXSxmdW5jdGlvbihlLHUpe3ZhciBjPXUobixyLGkpO3JldHVybiJzdHJpbmciIT10eXBlb2YgY3x8YXx8b1tjXT9hPyEobD1jKTp0OihuLmRhdGFUeXBlcy51bnNoaWZ0KGMpLHMoYyksITEpfSksbH1yZXR1cm4gcyhuLmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBNbihlLG4pe3ZhciByLGksbz1iLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gbiluW2ldIT09dCYmKChvW2ldP2U6cnx8KHI9e30pKVtpXT1uW2ldKTtyZXR1cm4gciYmYi5leHRlbmQoITAsZSxyKSxlfWIuZm4ubG9hZD1mdW5jdGlvbihlLG4scil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZTbilyZXR1cm4gU24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpLG8sYSxzPXRoaXMsdT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gdT49MCYmKGk9ZS5zbGljZSh1LGUubGVuZ3RoKSxlPWUuc2xpY2UoMCx1KSksYi5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiYib2JqZWN0Ij09dHlwZW9mIG4mJihhPSJQT1NUIikscy5sZW5ndGg+MCYmYi5hamF4KHt1cmw6ZSx0eXBlOmEsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bn0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKGk/YigiPGRpdj4iKS5hcHBlbmQoYi5wYXJzZUhUTUwoZSkpLmZpbmQoaSk6ZSl9KS5jb21wbGV0ZShyJiZmdW5jdGlvbihlLHQpe3MuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LGIuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Yi5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLGIuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe2Jbbl09ZnVuY3Rpb24oZSxyLGksbyl7cmV0dXJuIGIuaXNGdW5jdGlvbihyKSYmKG89b3x8aSxpPXIscj10KSxiLmFqYXgoe3VybDplLHR5cGU6bixkYXRhVHlwZTpvLGRhdGE6cixzdWNjZXNzOml9KX19KSxiLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6eW4sdHlwZToiR0VUIixpc0xvY2FsOk5uLnRlc3QobW5bMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6RG4sdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjplLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpiLnBhcnNlSlNPTiwidGV4dCB4bWwiOmIucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P01uKE1uKGUsYi5hamF4U2V0dGluZ3MpLHQpOk1uKGIuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkhuKEFuKSxhamF4VHJhbnNwb3J0OkhuKGpuKSxhamF4OmZ1bmN0aW9uKGUsbil7Im9iamVjdCI9PXR5cGVvZiBlJiYobj1lLGU9dCksbj1ufHx7fTt2YXIgcixpLG8sYSxzLHUsbCxjLHA9Yi5hamF4U2V0dXAoe30sbiksZj1wLmNvbnRleHR8fHAsZD1wLmNvbnRleHQmJihmLm5vZGVUeXBlfHxmLmpxdWVyeSk/YihmKTpiLmV2ZW50LGg9Yi5EZWZlcnJlZCgpLGc9Yi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksbT1wLnN0YXR1c0NvZGV8fHt9LHk9e30sdj17fSx4PTAsVD0iY2FuY2VsZWQiLE49e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZigyPT09eCl7aWYoIWMpe2M9e307d2hpbGUodD1Ubi5leGVjKGEpKWNbdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJdfXQ9Y1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT14P2E6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4geHx8KGU9dltuXT12W25dfHxlLHlbZV09dCksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4geHx8KHAubWltZVR5cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlKWlmKDI+eClmb3IodCBpbiBlKW1bdF09W21bdF0sZVt0XV07ZWxzZSBOLmFsd2F5cyhlW04uc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fFQ7cmV0dXJuIGwmJmwuYWJvcnQodCksaygwLHQpLHRoaXN9fTtpZihoLnByb21pc2UoTikuY29tcGxldGU9Zy5hZGQsTi5zdWNjZXNzPU4uZG9uZSxOLmVycm9yPU4uZmFpbCxwLnVybD0oKGV8fHAudXJsfHx5bikrIiIpLnJlcGxhY2UoeG4sIiIpLnJlcGxhY2Uoa24sbW5bMV0rIi8vIikscC50eXBlPW4ubWV0aG9kfHxuLnR5cGV8fHAubWV0aG9kfHxwLnR5cGUscC5kYXRhVHlwZXM9Yi50cmltKHAuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8WyIiXSxudWxsPT1wLmNyb3NzRG9tYWluJiYocj1Fbi5leGVjKHAudXJsLnRvTG93ZXJDYXNlKCkpLHAuY3Jvc3NEb21haW49ISghcnx8clsxXT09PW1uWzFdJiZyWzJdPT09bW5bMl0mJihyWzNdfHwoImh0dHA6Ij09PXJbMV0/ODA6NDQzKSk9PShtblszXXx8KCJodHRwOiI9PT1tblsxXT84MDo0NDMpKSkpLHAuZGF0YSYmcC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBwLmRhdGEmJihwLmRhdGE9Yi5wYXJhbShwLmRhdGEscC50cmFkaXRpb25hbCkpLHFuKEFuLHAsbixOKSwyPT09eClyZXR1cm4gTjt1PXAuZ2xvYmFsLHUmJjA9PT1iLmFjdGl2ZSsrJiZiLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHAudHlwZT1wLnR5cGUudG9VcHBlckNhc2UoKSxwLmhhc0NvbnRlbnQ9IUNuLnRlc3QocC50eXBlKSxvPXAudXJsLHAuaGFzQ29udGVudHx8KHAuZGF0YSYmKG89cC51cmwrPShibi50ZXN0KG8pPyImIjoiPyIpK3AuZGF0YSxkZWxldGUgcC5kYXRhKSxwLmNhY2hlPT09ITEmJihwLnVybD13bi50ZXN0KG8pP28ucmVwbGFjZSh3biwiJDFfPSIrdm4rKyk6bysoYm4udGVzdChvKT8iJiI6Ij8iKSsiXz0iK3ZuKyspKSxwLmlmTW9kaWZpZWQmJihiLmxhc3RNb2RpZmllZFtvXSYmTi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsYi5sYXN0TW9kaWZpZWRbb10pLGIuZXRhZ1tvXSYmTi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixiLmV0YWdbb10pKSwocC5kYXRhJiZwLmhhc0NvbnRlbnQmJnAuY29udGVudFR5cGUhPT0hMXx8bi5jb250ZW50VHlwZSkmJk4uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixwLmNvbnRlbnRUeXBlKSxOLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIscC5kYXRhVHlwZXNbMF0mJnAuYWNjZXB0c1twLmRhdGFUeXBlc1swXV0/cC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXSsoIioiIT09cC5kYXRhVHlwZXNbMF0/IiwgIitEbisiOyBxPTAuMDEiOiIiKTpwLmFjY2VwdHNbIioiXSk7Zm9yKGkgaW4gcC5oZWFkZXJzKU4uc2V0UmVxdWVzdEhlYWRlcihpLHAuaGVhZGVyc1tpXSk7aWYocC5iZWZvcmVTZW5kJiYocC5iZWZvcmVTZW5kLmNhbGwoZixOLHApPT09ITF8fDI9PT14KSlyZXR1cm4gTi5hYm9ydCgpO1Q9ImFib3J0Ijtmb3IoaSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSlOW2ldKHBbaV0pO2lmKGw9cW4oam4scCxuLE4pKXtOLnJlYWR5U3RhdGU9MSx1JiZkLnRyaWdnZXIoImFqYXhTZW5kIixbTixwXSkscC5hc3luYyYmcC50aW1lb3V0PjAmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtOLmFib3J0KCJ0aW1lb3V0Iil9LHAudGltZW91dCkpO3RyeXt4PTEsbC5zZW5kKHksayl9Y2F0Y2goQyl7aWYoISgyPngpKXRocm93IEM7aygtMSxDKX19ZWxzZSBrKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBrKGUsbixyLGkpe3ZhciBjLHksdix3LFQsQz1uOzIhPT14JiYoeD0yLHMmJmNsZWFyVGltZW91dChzKSxsPXQsYT1pfHwiIixOLnJlYWR5U3RhdGU9ZT4wPzQ6MCxyJiYodz1fbihwLE4scikpLGU+PTIwMCYmMzAwPmV8fDMwND09PWU/KHAuaWZNb2RpZmllZCYmKFQ9Ti5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLFQmJihiLmxhc3RNb2RpZmllZFtvXT1UKSxUPU4uZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSxUJiYoYi5ldGFnW29dPVQpKSwyMDQ9PT1lPyhjPSEwLEM9Im5vY29udGVudCIpOjMwND09PWU/KGM9ITAsQz0ibm90bW9kaWZpZWQiKTooYz1GbihwLHcpLEM9Yy5zdGF0ZSx5PWMuZGF0YSx2PWMuZXJyb3IsYz0hdikpOih2PUMsKGV8fCFDKSYmKEM9ImVycm9yIiwwPmUmJihlPTApKSksTi5zdGF0dXM9ZSxOLnN0YXR1c1RleHQ9KG58fEMpKyIiLGM/aC5yZXNvbHZlV2l0aChmLFt5LEMsTl0pOmgucmVqZWN0V2l0aChmLFtOLEMsdl0pLE4uc3RhdHVzQ29kZShtKSxtPXQsdSYmZC50cmlnZ2VyKGM/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbTixwLGM/eTp2XSksZy5maXJlV2l0aChmLFtOLENdKSx1JiYoZC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtOLHBdKSwtLWIuYWN0aXZlfHxiLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gTn0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuZ2V0KGUsdCxuLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGIuZ2V0KGUsdCxuLCJqc29uIil9fSk7ZnVuY3Rpb24gX24oZSxuLHIpe3ZhciBpLG8sYSxzLHU9ZS5jb250ZW50cyxsPWUuZGF0YVR5cGVzLGM9ZS5yZXNwb25zZUZpZWxkcztmb3IocyBpbiBjKXMgaW4gciYmKG5bY1tzXV09cltzXSk7d2hpbGUoIioiPT09bFswXSlsLnNoaWZ0KCksbz09PXQmJihvPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihvKWZvcihzIGluIHUpaWYodVtzXSYmdVtzXS50ZXN0KG8pKXtsLnVuc2hpZnQocyk7YnJlYWt9aWYobFswXWluIHIpYT1sWzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIWxbMF18fGUuY29udmVydGVyc1tzKyIgIitsWzBdXSl7YT1zO2JyZWFrfWl8fChpPXMpfWE9YXx8aX1yZXR1cm4gYT8oYSE9PWxbMF0mJmwudW5zaGlmdChhKSxyW2FdKTp0fWZ1bmN0aW9uIEZuKGUsdCl7dmFyIG4scixpLG8sYT17fSxzPTAsdT1lLmRhdGFUeXBlcy5zbGljZSgpLGw9dVswXTtpZihlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1WzFdKWZvcihpIGluIGUuY29udmVydGVycylhW2kudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW2ldO2Zvcig7cj11Wysrc107KWlmKCIqIiE9PXIpe2lmKCIqIiE9PWwmJmwhPT1yKXtpZihpPWFbbCsiICIrcl18fGFbIiogIityXSwhaSlmb3IobiBpbiBhKWlmKG89bi5zcGxpdCgiICIpLG9bMV09PT1yJiYoaT1hW2wrIiAiK29bMF1dfHxhWyIqICIrb1swXV0pKXtpPT09ITA/aT1hW25dOmFbbl0hPT0hMCYmKHI9b1swXSx1LnNwbGljZShzLS0sMCxyKSk7YnJlYWt9aWYoaSE9PSEwKWlmKGkmJmVbInRocm93cyJdKXQ9aSh0KTtlbHNlIHRyeXt0PWkodCl9Y2F0Y2goYyl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6aT9jOiJObyBjb252ZXJzaW9uIGZyb20gIitsKyIgdG8gIityfX19bD1yfXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX1iLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiBiLmdsb2JhbEV2YWwoZSksZX19fSksYi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT10JiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIixlLmdsb2JhbD0hMSl9KSxiLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIG4scj1vLmhlYWR8fGIoImhlYWQiKVswXXx8by5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24odCxpKXtuPW8uY3JlYXRlRWxlbWVudCgic2NyaXB0Iiksbi5hc3luYz0hMCxlLnNjcmlwdENoYXJzZXQmJihuLmNoYXJzZXQ9ZS5zY3JpcHRDaGFyc2V0KSxuLnNyYz1lLnVybCxuLm9ubG9hZD1uLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihlLHQpeyh0fHwhbi5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KG4ucmVhZHlTdGF0ZSkpJiYobi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSxuPW51bGwsdHx8aSgyMDAsInN1Y2Nlc3MiKSl9LHIuaW5zZXJ0QmVmb3JlKG4sci5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuLm9ubG9hZCh0LCEwKX19fX0pO3ZhciBPbj1bXSxCbj0vKD0pXD8oPz0mfCQpfFw/XD8vO2IuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1Pbi5wb3AoKXx8Yi5leHBhbmRvKyJfIit2bisrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksYi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihuLHIsaSl7dmFyIG8sYSxzLHU9bi5qc29ucCE9PSExJiYoQm4udGVzdChuLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBuLmRhdGEmJiEobi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZCbi50ZXN0KG4uZGF0YSkmJiJkYXRhIik7cmV0dXJuIHV8fCJqc29ucCI9PT1uLmRhdGFUeXBlc1swXT8obz1uLmpzb25wQ2FsbGJhY2s9Yi5pc0Z1bmN0aW9uKG4uanNvbnBDYWxsYmFjayk/bi5qc29ucENhbGxiYWNrKCk6bi5qc29ucENhbGxiYWNrLHU/blt1XT1uW3VdLnJlcGxhY2UoQm4sIiQxIitvKTpuLmpzb25wIT09ITEmJihuLnVybCs9KGJuLnRlc3Qobi51cmwpPyImIjoiPyIpK24uanNvbnArIj0iK28pLG4uY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBzfHxiLmVycm9yKG8rIiB3YXMgbm90IGNhbGxlZCIpLHNbMF19LG4uZGF0YVR5cGVzWzBdPSJqc29uIixhPWVbb10sZVtvXT1mdW5jdGlvbigpe3M9YXJndW1lbnRzfSxpLmFsd2F5cyhmdW5jdGlvbigpe2Vbb109YSxuW29dJiYobi5qc29ucENhbGxiYWNrPXIuanNvbnBDYWxsYmFjayxPbi5wdXNoKG8pKSxzJiZiLmlzRnVuY3Rpb24oYSkmJmEoc1swXSkscz1hPXR9KSwic2NyaXB0Iik6dH0pO3ZhciBQbixSbixXbj0wLCRuPWUuQWN0aXZlWE9iamVjdCYmZnVuY3Rpb24oKXt2YXIgZTtmb3IoZSBpbiBQbilQbltlXSh0LCEwKX07ZnVuY3Rpb24gSW4oKXt0cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKHQpe319ZnVuY3Rpb24gem4oKXt0cnl7cmV0dXJuIG5ldyBlLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2godCl7fX1iLmFqYXhTZXR0aW5ncy54aHI9ZS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmSW4oKXx8em4oKX06SW4sUm49Yi5hamF4U2V0dGluZ3MueGhyKCksYi5zdXBwb3J0LmNvcnM9ISFSbiYmIndpdGhDcmVkZW50aWFscyJpbiBSbixSbj1iLnN1cHBvcnQuYWpheD0hIVJuLFJuJiZiLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24obil7aWYoIW4uY3Jvc3NEb21haW58fGIuc3VwcG9ydC5jb3JzKXt2YXIgcjtyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHMsdT1uLnhocigpO2lmKG4udXNlcm5hbWU/dS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jLG4udXNlcm5hbWUsbi5wYXNzd29yZCk6dS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jKSxuLnhockZpZWxkcylmb3IocyBpbiBuLnhockZpZWxkcyl1W3NdPW4ueGhyRmllbGRzW3NdO24ubWltZVR5cGUmJnUub3ZlcnJpZGVNaW1lVHlwZSYmdS5vdmVycmlkZU1pbWVUeXBlKG4ubWltZVR5cGUpLG4uY3Jvc3NEb21haW58fGlbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGlbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKHMgaW4gaSl1LnNldFJlcXVlc3RIZWFkZXIocyxpW3NdKX1jYXRjaChsKXt9dS5zZW5kKG4uaGFzQ29udGVudCYmbi5kYXRhfHxudWxsKSxyPWZ1bmN0aW9uKGUsaSl7dmFyIHMsbCxjLHA7dHJ5e2lmKHImJihpfHw0PT09dS5yZWFkeVN0YXRlKSlpZihyPXQsYSYmKHUub25yZWFkeXN0YXRlY2hhbmdlPWIubm9vcCwkbiYmZGVsZXRlIFBuW2FdKSxpKTQhPT11LnJlYWR5U3RhdGUmJnUuYWJvcnQoKTtlbHNle3A9e30scz11LnN0YXR1cyxsPXUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksInN0cmluZyI9PXR5cGVvZiB1LnJlc3BvbnNlVGV4dCYmKHAudGV4dD11LnJlc3BvbnNlVGV4dCk7dHJ5e2M9dS5zdGF0dXNUZXh0fWNhdGNoKGYpe2M9IiJ9c3x8IW4uaXNMb2NhbHx8bi5jcm9zc0RvbWFpbj8xMjIzPT09cyYmKHM9MjA0KTpzPXAudGV4dD8yMDA6NDA0fX1jYXRjaChkKXtpfHxvKC0xLGQpfXAmJm8ocyxjLHAsbCl9LG4uYXN5bmM/ND09PXUucmVhZHlTdGF0ZT9zZXRUaW1lb3V0KHIpOihhPSsrV24sJG4mJihQbnx8KFBuPXt9LGIoZSkudW5sb2FkKCRuKSksUG5bYV09ciksdS5vbnJlYWR5c3RhdGVjaGFuZ2U9cik6cigpfSxhYm9ydDpmdW5jdGlvbigpe3ImJnIodCwhMCl9fX19KTt2YXIgWG4sVW4sVm49L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFluPVJlZ0V4cCgiXig/OihbKy1dKT18KSgiK3grIikoW2EteiVdKikkIiwiaSIpLEpuPS9xdWV1ZUhvb2tzJC8sR249W25yXSxRbj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLmNyZWF0ZVR3ZWVuKGUsdCksbz1Zbi5leGVjKHQpLGE9aS5jdXIoKSxzPSthfHwwLHU9MSxsPTIwO2lmKG8pe2lmKG49K29bMl0scj1vWzNdfHwoYi5jc3NOdW1iZXJbZV0/IiI6InB4IiksInB4IiE9PXImJnMpe3M9Yi5jc3MoaS5lbGVtLGUsITApfHxufHwxO2RvIHU9dXx8Ii41IixzLz11LGIuc3R5bGUoaS5lbGVtLGUscytyKTt3aGlsZSh1IT09KHU9aS5jdXIoKS9hKSYmMSE9PXUmJi0tbCl9aS51bml0PXIsaS5zdGFydD1zLGkuZW5kPW9bMV0/cysob1sxXSsxKSpuOm59cmV0dXJuIGl9XX07ZnVuY3Rpb24gS24oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1huPXR9KSxYbj1iLm5vdygpfWZ1bmN0aW9uIFpuKGUsdCl7Yi5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj0oUW5bdF18fFtdKS5jb25jYXQoUW5bIioiXSksaT0wLG89ci5sZW5ndGg7Zm9yKDtvPmk7aSsrKWlmKHJbaV0uY2FsbChlLHQsbikpcmV0dXJufSl9ZnVuY3Rpb24gZXIoZSx0LG4pe3ZhciByLGksbz0wLGE9R24ubGVuZ3RoLHM9Yi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTt2YXIgdD1Ybnx8S24oKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixhPTAsdT1sLnR3ZWVucy5sZW5ndGg7Zm9yKDt1PmE7YSsrKWwudHdlZW5zW2FdLnJ1bihvKTtyZXR1cm4gcy5ub3RpZnlXaXRoKGUsW2wsbyxuXSksMT5vJiZ1P246KHMucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06ZSxwcm9wczpiLmV4dGVuZCh7fSx0KSxvcHRzOmIuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6WG58fEtuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj1iLlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P3MucmVzb2x2ZVdpdGgoZSxbbCx0XSk6cy5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1sLnByb3BzO2Zvcih0cihjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTthPm87bysrKWlmKHI9R25bb10uY2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiByO3JldHVybiBabihsLGMpLGIuaXNGdW5jdGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLGIuZngudGltZXIoYi5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gdHIoZSx0KXt2YXIgbixyLGksbyxhO2ZvcihpIGluIGUpaWYocj1iLmNhbWVsQ2FzZShpKSxvPXRbcl0sbj1lW2ldLGIuaXNBcnJheShuKSYmKG89blsxXSxuPWVbaV09blswXSksaSE9PXImJihlW3JdPW4sZGVsZXRlIGVbaV0pLGE9Yi5jc3NIb29rc1tyXSxhJiYiZXhwYW5kImluIGEpe249YS5leHBhbmQobiksZGVsZXRlIGVbcl07Zm9yKGkgaW4gbilpIGluIGV8fChlW2ldPW5baV0sdFtpXT1vKX1lbHNlIHRbcl09b31iLkFuaW1hdGlvbj1iLmV4dGVuZChlcix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe2IuaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7aT5yO3IrKyluPWVbcl0sUW5bbl09UW5bbl18fFtdLFFuW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/R24udW5zaGlmdChlKTpHbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIG5yKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLHAsZj10aGlzLGQ9ZS5zdHlsZSxoPXt9LGc9W10sbT1lLm5vZGVUeXBlJiZubihlKTtuLnF1ZXVlfHwoYz1iLl9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09Yy51bnF1ZXVlZCYmKGMudW5xdWV1ZWQ9MCxwPWMuZW1wdHkuZmlyZSxjLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtjLnVucXVldWVkfHxwKCl9KSxjLnVucXVldWVkKyssZi5hbHdheXMoZnVuY3Rpb24oKXtmLmFsd2F5cyhmdW5jdGlvbigpe2MudW5xdWV1ZWQtLSxiLnF1ZXVlKGUsImZ4IikubGVuZ3RofHxjLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1lLm5vZGVUeXBlJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtkLm92ZXJmbG93LGQub3ZlcmZsb3dYLGQub3ZlcmZsb3dZXSwiaW5saW5lIj09PWIuY3NzKGUsImRpc3BsYXkiKSYmIm5vbmUiPT09Yi5jc3MoZSwiZmxvYXQiKSYmKGIuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0JiYiaW5saW5lIiE9PXVuKGUubm9kZU5hbWUpP2Quem9vbT0xOmQuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihkLm92ZXJmbG93PSJoaWRkZW4iLGIuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzfHxmLmFsd2F5cyhmdW5jdGlvbigpe2Qub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxkLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGQub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSk7Zm9yKGkgaW4gdClpZihhPXRbaV0sVm4uZXhlYyhhKSl7aWYoZGVsZXRlIHRbaV0sdT11fHwidG9nZ2xlIj09PWEsYT09PShtPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO2cucHVzaChpKX1pZihvPWcubGVuZ3RoKXtzPWIuX2RhdGEoZSwiZnhzaG93Iil8fGIuX2RhdGEoZSwiZnhzaG93Iix7fSksImhpZGRlbiJpbiBzJiYobT1zLmhpZGRlbiksdSYmKHMuaGlkZGVuPSFtKSxtP2IoZSkuc2hvdygpOmYuZG9uZShmdW5jdGlvbigpe2IoZSkuaGlkZSgpfSksZi5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7Yi5fcmVtb3ZlRGF0YShlLCJmeHNob3ciKTtmb3IodCBpbiBoKWIuc3R5bGUoZSx0LGhbdF0pfSk7Zm9yKGk9MDtvPmk7aSsrKXI9Z1tpXSxsPWYuY3JlYXRlVHdlZW4ocixtP3Nbcl06MCksaFtyXT1zW3JdfHxiLnN0eWxlKGUsciksciBpbiBzfHwoc1tyXT1sLnN0YXJ0LG0mJihsLmVuZD1sLnN0YXJ0LGwuc3RhcnQ9IndpZHRoIj09PXJ8fCJoZWlnaHQiPT09cj8xOjApKX19ZnVuY3Rpb24gcnIoZSx0LG4scixpKXtyZXR1cm4gbmV3IHJyLnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9Yi5Ud2Vlbj1ycixyci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJyLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fCJzd2luZyIsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChiLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9cnIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOnJyLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPXJyLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz10PXRoaXMub3B0aW9ucy5kdXJhdGlvbj9iLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTplLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOnJyLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LHJyLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1yci5wcm90b3R5cGUscnIucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsPT1lLmVsZW1bZS5wcm9wXXx8ZS5lbGVtLnN0eWxlJiZudWxsIT1lLmVsZW0uc3R5bGVbZS5wcm9wXT8odD1iLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSx0JiYiYXV0byIhPT10P3Q6MCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihlKXtiLmZ4LnN0ZXBbZS5wcm9wXT9iLmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihudWxsIT1lLmVsZW0uc3R5bGVbYi5jc3NQcm9wc1tlLnByb3BdXXx8Yi5jc3NIb29rc1tlLnByb3BdKT9iLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5vd319fSxyci5wcm9wSG9va3Muc2Nyb2xsVG9wPXJyLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LGIuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj1iLmZuW3RdO2IuZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShpcih0LCEwKSxlLHIsaSl9fSksYi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIobm4pLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWIuaXNFbXB0eU9iamVjdChlKSxvPWIuc3BlZWQodCxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgdD1lcih0aGlzLGIuZXh0ZW5kKHt9LGUpLG8pO2EuZmluaXNoPWZ1bmN0aW9uKCl7dC5zdG9wKCEwKX0sKGl8fGIuX2RhdGEodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYocj1uLG49ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxuPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89Yi50aW1lcnMsYT1iLl9kYXRhKHRoaXMpO2lmKG4pYVtuXSYmYVtuXS5zdG9wJiZpKGFbbl0pO2Vsc2UgZm9yKG4gaW4gYSlhW25dJiZhW25dLnN0b3AmJkpuLnRlc3QobikmJmkoYVtuXSk7Zm9yKG49by5sZW5ndGg7bi0tOylvW25dLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW25dLnF1ZXVlIT09ZXx8KG9bbl0uYW5pbS5zdG9wKHIpLHQ9ITEsby5zcGxpY2UobiwxKSk7KHR8fCFyKSYmYi5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49Yi5fZGF0YSh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89Yi50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLGIucXVldWUodGhpcyxlLFtdKSxpJiZpLmN1ciYmaS5jdXIuZmluaXNoJiZpLmN1ci5maW5pc2guY2FsbCh0aGlzKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDthPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49WnRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn1iLmVhY2goe3NsaWRlRG93bjppcigic2hvdyIpLHNsaWRlVXA6aXIoImhpZGUiKSxzbGlkZVRvZ2dsZTppcigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe2IuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksYi5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2IuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8Yi5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiFiLmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPWIuZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiBiLmZ4LnNwZWVkcz9iLmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTpiLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Yi5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZiLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sYi5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0sYi50aW1lcnM9W10sYi5meD1yci5wcm90b3R5cGUuaW5pdCxiLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSxuPWIudGltZXJzLHI9MDtmb3IoWG49Yi5ub3coKTtuLmxlbmd0aD5yO3IrKyllPW5bcl0sZSgpfHxuW3JdIT09ZXx8bi5zcGxpY2Uoci0tLDEpO24ubGVuZ3RofHxiLmZ4LnN0b3AoKSxYbj10fSxiLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmYi50aW1lcnMucHVzaChlKSYmYi5meC5zdGFydCgpfSxiLmZ4LmludGVydmFsPTEzLGIuZnguc3RhcnQ9ZnVuY3Rpb24oKXtVbnx8KFVuPXNldEludGVydmFsKGIuZngudGljayxiLmZ4LmludGVydmFsKSl9LGIuZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoVW4pLFVuPW51bGx9LGIuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LGIuZnguc3RlcD17fSxiLmV4cHImJmIuZXhwci5maWx0ZXJzJiYoYi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGIuZ3JlcChiLnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pLGIuZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2Iub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgbixyLG89e3RvcDowLGxlZnQ6MH0sYT10aGlzWzBdLHM9YSYmYS5vd25lckRvY3VtZW50O2lmKHMpcmV0dXJuIG49cy5kb2N1bWVudEVsZW1lbnQsYi5jb250YWlucyhuLGEpPyh0eXBlb2YgYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1pJiYobz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxyPW9yKHMpLHt0b3A6by50b3ArKHIucGFnZVlPZmZzZXR8fG4uc2Nyb2xsVG9wKS0obi5jbGllbnRUb3B8fDApLGxlZnQ6by5sZWZ0KyhyLnBhZ2VYT2Zmc2V0fHxuLnNjcm9sbExlZnQpLShuLmNsaWVudExlZnR8fDApfSk6b30sYi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9Yi5jc3MoZSwicG9zaXRpb24iKTsic3RhdGljIj09PXImJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBpPWIoZSksbz1pLm9mZnNldCgpLGE9Yi5jc3MoZSwidG9wIikscz1iLmNzcyhlLCJsZWZ0IiksdT0oImFic29sdXRlIj09PXJ8fCJmaXhlZCI9PT1yKSYmYi5pbkFycmF5KCJhdXRvIixbYSxzXSk+LTEsbD17fSxjPXt9LHAsZjt1PyhjPWkucG9zaXRpb24oKSxwPWMudG9wLGY9Yy5sZWZ0KToocD1wYXJzZUZsb2F0KGEpfHwwLGY9cGFyc2VGbG9hdChzKXx8MCksYi5pc0Z1bmN0aW9uKHQpJiYodD10LmNhbGwoZSxuLG8pKSxudWxsIT10LnRvcCYmKGwudG9wPXQudG9wLW8udG9wK3ApLG51bGwhPXQubGVmdCYmKGwubGVmdD10LmxlZnQtby5sZWZ0K2YpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGwpOmkuY3NzKGwpfX0sYi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuPXt0b3A6MCxsZWZ0OjB9LHI9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09Yi5jc3MociwicG9zaXRpb24iKT90PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCksYi5ub2RlTmFtZShlWzBdLCJodG1sIil8fChuPWUub2Zmc2V0KCkpLG4udG9wKz1iLmNzcyhlWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLG4ubGVmdCs9Yi5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6dC50b3Atbi50b3AtYi5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtbi5sZWZ0LWIuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8by5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmIWIubm9kZU5hbWUoZSwiaHRtbCIpJiYic3RhdGljIj09PWIuY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8by5kb2N1bWVudEVsZW1lbnR9KX19KSxiLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTtiLmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiBiLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1vcihlKTtyZXR1cm4gbz09PXQ/YT9uIGluIGE/YVtuXTphLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldOihhP2Euc2Nyb2xsVG8ocj9iKGEpLnNjcm9sbExlZnQoKTpvLHI/bzpiKGEpLnNjcm9sbFRvcCgpKTplW2ldPW8sdCl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIG9yKGUpe3JldHVybiBiLmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGU/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9Yi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXtiLmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7Yi5mbltpXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBpKSxzPXJ8fChpPT09ITB8fG89PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIGIuYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBvO3JldHVybiBiLmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT1uLm5vZGVUeXBlPyhvPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxvWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxvWyJvZmZzZXQiK2VdLG9bImNsaWVudCIrZV0pKTppPT09dD9iLmNzcyhuLHIscyk6Yi5zdHlsZShuLHIsaSxzKX0sbixhP2k6dCxhLG51bGwpfX0pfSksZS5qUXVlcnk9ZS4kPWIsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBifSl9KSh3aW5kb3cpOw==",
	"jquery.min.map":                      "eyJ2ZXJzaW9uIjozLCJmaWxlIjoianF1ZXJ5LTEuOS4xLm1pbi5qcyIsInNvdXJjZXMiOlsianF1ZXJ5LTEuOS4xLmpzIl0sIm5hbWVzIjpbIndpbmRvdyIsInVuZGVmaW5lZCIsInJlYWR5TGlzdCIsInJvb3RqUXVlcnkiLCJjb3JlX3N0cnVuZGVmaW5lZCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJfalF1ZXJ5IiwialF1ZXJ5IiwiXyQiLCIkIiwiY2xhc3MydHlwZSIsImNvcmVfZGVsZXRlZElkcyIsImNvcmVfdmVyc2lvbiIsImNvcmVfY29uY2F0IiwiY29uY2F0IiwiY29yZV9wdXNoIiwicHVzaCIsImNvcmVfc2xpY2UiLCJzbGljZSIsImNvcmVfaW5kZXhPZiIsImluZGV4T2YiLCJjb3JlX3RvU3RyaW5nIiwidG9TdHJpbmciLCJjb3JlX2hhc093biIsImhhc093blByb3BlcnR5IiwiY29yZV90cmltIiwidHJpbSIsInNlbGVjdG9yIiwiY29udGV4dCIsImZuIiwiaW5pdCIsImNvcmVfcG51bSIsInNvdXJjZSIsImNvcmVfcm5vdHdoaXRlIiwicnRyaW0iLCJycXVpY2tFeHByIiwicnNpbmdsZVRhZyIsInJ2YWxpZGNoYXJzIiwicnZhbGlkYnJhY2VzIiwicnZhbGlkZXNjYXBlIiwicnZhbGlkdG9rZW5zIiwicm1zUHJlZml4IiwicmRhc2hBbHBoYSIsImZjYW1lbENhc2UiLCJhbGwiLCJsZXR0ZXIiLCJ0b1VwcGVyQ2FzZSIsImNvbXBsZXRlZCIsImV2ZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInR5cGUiLCJyZWFkeVN0YXRlIiwiZGV0YWNoIiwicmVhZHkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGV0YWNoRXZlbnQiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZWxlbSIsInRoaXMiLCJjaGFyQXQiLCJsZW5ndGgiLCJleGVjIiwiZmluZCIsIm1lcmdlIiwicGFyc2VIVE1MIiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwidGVzdCIsImlzUGxhaW5PYmplY3QiLCJpc0Z1bmN0aW9uIiwiYXR0ciIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsImlkIiwibWFrZUFycmF5Iiwic2l6ZSIsInRvQXJyYXkiLCJjYWxsIiwiZ2V0IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJncyIsInByb21pc2UiLCJkb25lIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImkiLCJsZW4iLCJqIiwibWFwIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsInNyYyIsImNvcHlJc0FycmF5IiwiY29weSIsIm5hbWUiLCJvcHRpb25zIiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNBcnJheSIsIm5vQ29uZmxpY3QiLCJpc1JlYWR5IiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwiaG9sZCIsIndhaXQiLCJib2R5Iiwic2V0VGltZW91dCIsInJlc29sdmVXaXRoIiwidHJpZ2dlciIsIm9mZiIsIm9iaiIsIkFycmF5IiwiaXNXaW5kb3ciLCJpc051bWVyaWMiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJpc0Zpbml0ZSIsIlN0cmluZyIsImUiLCJrZXkiLCJpc0VtcHR5T2JqZWN0IiwiZXJyb3IiLCJtc2ciLCJFcnJvciIsImRhdGEiLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInNjcmlwdHMiLCJjcmVhdGVFbGVtZW50IiwiYnVpbGRGcmFnbWVudCIsInJlbW92ZSIsImNoaWxkTm9kZXMiLCJwYXJzZUpTT04iLCJKU09OIiwicGFyc2UiLCJyZXBsYWNlIiwiRnVuY3Rpb24iLCJwYXJzZVhNTCIsInhtbCIsInRtcCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIkFjdGl2ZVhPYmplY3QiLCJhc3luYyIsImxvYWRYTUwiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm5vb3AiLCJnbG9iYWxFdmFsIiwiZXhlY1NjcmlwdCIsImNhbWVsQ2FzZSIsInN0cmluZyIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsImlzQXJyYXlsaWtlIiwidGV4dCIsImFyciIsInJlc3VsdHMiLCJPYmplY3QiLCJpbkFycmF5IiwiTWF0aCIsIm1heCIsInNlY29uZCIsImwiLCJncmVwIiwiaW52IiwicmV0VmFsIiwiYXJnIiwiZ3VpZCIsInByb3h5IiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJEZWZlcnJlZCIsImF0dGFjaEV2ZW50IiwidG9wIiwiZnJhbWVFbGVtZW50IiwiZG9TY3JvbGwiLCJkb1Njcm9sbENoZWNrIiwic3BsaXQiLCJvcHRpb25zQ2FjaGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiXyIsImZsYWciLCJDYWxsYmFja3MiLCJmaXJpbmciLCJtZW1vcnkiLCJmaXJlZCIsImZpcmluZ0xlbmd0aCIsImZpcmluZ0luZGV4IiwiZmlyaW5nU3RhcnQiLCJsaXN0Iiwic3RhY2siLCJvbmNlIiwiZmlyZSIsInN0b3BPbkZhbHNlIiwic2hpZnQiLCJzZWxmIiwiZGlzYWJsZSIsImFkZCIsInN0YXJ0IiwidW5pcXVlIiwiaGFzIiwiaW5kZXgiLCJlbXB0eSIsImRpc2FibGVkIiwibG9jayIsImxvY2tlZCIsImZpcmVXaXRoIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJmYWlsIiwidGhlbiIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJhY3Rpb24iLCJyZXR1cm5lZCIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9ncmVzcyIsIm5vdGlmeSIsInBpcGUiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzdWJvcmRpbmF0ZSIsInJlc29sdmVWYWx1ZXMiLCJyZW1haW5pbmciLCJ1cGRhdGVGdW5jIiwiY29udGV4dHMiLCJ2YWx1ZXMiLCJwcm9ncmVzc1ZhbHVlcyIsIm5vdGlmeVdpdGgiLCJwcm9ncmVzc0NvbnRleHRzIiwicmVzb2x2ZUNvbnRleHRzIiwic3VwcG9ydCIsImEiLCJpbnB1dCIsInNlbGVjdCIsImZyYWdtZW50Iiwib3B0IiwiZXZlbnROYW1lIiwiaXNTdXBwb3J0ZWQiLCJkaXYiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsInN0eWxlIiwiY3NzVGV4dCIsImdldFNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsImxlYWRpbmdXaGl0ZXNwYWNlIiwiZmlyc3RDaGlsZCIsInRib2R5IiwiaHRtbFNlcmlhbGl6ZSIsImdldEF0dHJpYnV0ZSIsImhyZWZOb3JtYWxpemVkIiwib3BhY2l0eSIsImNzc0Zsb2F0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwic2VsZWN0ZWQiLCJlbmN0eXBlIiwiaHRtbDVDbG9uZSIsImNsb25lTm9kZSIsIm91dGVySFRNTCIsImJveE1vZGVsIiwiY29tcGF0TW9kZSIsImRlbGV0ZUV4cGFuZG8iLCJub0Nsb25lRXZlbnQiLCJpbmxpbmVCbG9ja05lZWRzTGF5b3V0Iiwic2hyaW5rV3JhcEJsb2NrcyIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJjaGVja2VkIiwibm9DbG9uZUNoZWNrZWQiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiYXBwZW5kQ2hlY2tlZCIsImNoZWNrQ2xvbmUiLCJsYXN0Q2hpbGQiLCJjbGljayIsInN1Ym1pdCIsImNoYW5nZSIsImZvY3VzaW4iLCJhdHRyaWJ1dGVzIiwiZXhwYW5kbyIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiY29udGFpbmVyIiwibWFyZ2luRGl2IiwidGRzIiwiZGl2UmVzZXQiLCJvZmZzZXRIZWlnaHQiLCJkaXNwbGF5IiwicmVsaWFibGVIaWRkZW5PZmZzZXRzIiwiYm94U2l6aW5nIiwib2Zmc2V0V2lkdGgiLCJkb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCIsIm9mZnNldFRvcCIsImdldENvbXB1dGVkU3R5bGUiLCJ3aWR0aCIsIm1hcmdpblJpZ2h0Iiwiem9vbSIsInJlbW92ZUNoaWxkIiwicmJyYWNlIiwicm11bHRpRGFzaCIsImludGVybmFsRGF0YSIsInB2dCIsImFjY2VwdERhdGEiLCJ0aGlzQ2FjaGUiLCJpbnRlcm5hbEtleSIsImdldEJ5TmFtZSIsImlzTm9kZSIsImNhY2hlIiwicG9wIiwidG9KU09OIiwiaW50ZXJuYWxSZW1vdmVEYXRhIiwiaXNFbXB0eURhdGFPYmplY3QiLCJjbGVhbkRhdGEiLCJyYW5kb20iLCJub0RhdGEiLCJlbWJlZCIsImFwcGxldCIsImhhc0RhdGEiLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsImF0dHJzIiwiZGF0YUF0dHIiLCJxdWV1ZSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJuZXh0IiwiY3VyIiwidW5zaGlmdCIsInN0b3AiLCJzZXR0ZXIiLCJkZWxheSIsInRpbWUiLCJmeCIsInNwZWVkcyIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsImVsZW1lbnRzIiwibm9kZUhvb2siLCJib29sSG9vayIsInJjbGFzcyIsInJyZXR1cm4iLCJyZm9jdXNhYmxlIiwicmNsaWNrYWJsZSIsInJib29sZWFuIiwicnVzZURlZmF1bHQiLCJnZXRTZXRJbnB1dCIsInJlbW92ZUF0dHIiLCJwcm9wIiwicmVtb3ZlUHJvcCIsInByb3BGaXgiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjbGF6eiIsInByb2NlZWQiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwic3RhdGVWYWwiLCJpc0Jvb2wiLCJjbGFzc05hbWVzIiwiaGFzQ2xhc3MiLCJ2YWwiLCJ2YWxIb29rcyIsInNldCIsIm9wdGlvbiIsInNwZWNpZmllZCIsInNlbGVjdGVkSW5kZXgiLCJvbmUiLCJub3R4bWwiLCJuVHlwZSIsImlzWE1MRG9jIiwiYXR0ckhvb2tzIiwicHJvcE5hbWUiLCJhdHRyTmFtZXMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ0YWJpbmRleCIsInJlYWRvbmx5IiwiZm9yIiwiY2xhc3MiLCJtYXhsZW5ndGgiLCJjZWxsc3BhY2luZyIsImNlbGxwYWRkaW5nIiwicm93c3BhbiIsImNvbHNwYW4iLCJ1c2VtYXAiLCJmcmFtZWJvcmRlciIsImNvbnRlbnRlZGl0YWJsZSIsInByb3BIb29rcyIsInRhYkluZGV4IiwiYXR0cmlidXRlTm9kZSIsImdldEF0dHJpYnV0ZU5vZGUiLCJwYXJzZUludCIsImhyZWYiLCJkZXRhaWwiLCJkZWZhdWx0VmFsdWUiLCJidXR0b24iLCJzZXRBdHRyaWJ1dGVOb2RlIiwiY3JlYXRlQXR0cmlidXRlIiwicGFyZW50IiwicmZvcm1FbGVtcyIsInJrZXlFdmVudCIsInJtb3VzZUV2ZW50IiwicmZvY3VzTW9ycGgiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsImdsb2JhbCIsInR5cGVzIiwiaGFuZGxlciIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmpJbiIsInNwZWNpYWwiLCJldmVudEhhbmRsZSIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJoYW5kbGUiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwibmVlZHNDb250ZXh0IiwiZXhwciIsIm5hbWVzcGFjZSIsImpvaW4iLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsIlJlZ0V4cCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJvbmx5SGFuZGxlcnMiLCJvbnR5cGUiLCJidWJibGVUeXBlIiwiZXZlbnRQYXRoIiwiRXZlbnQiLCJpc1RyaWdnZXIiLCJuYW1lc3BhY2VfcmUiLCJyZXN1bHQiLCJub0J1YmJsZSIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJwcmV2ZW50RGVmYXVsdCIsImlzRGVmYXVsdFByZXZlbnRlZCIsIl9kZWZhdWx0IiwiZml4IiwibWF0Y2hlZCIsImhhbmRsZXJRdWV1ZSIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJtYXRjaGVzIiwib3JpZ2luYWxFdmVudCIsImZpeEhvb2siLCJmaXhIb29rcyIsIm1vdXNlSG9va3MiLCJrZXlIb29rcyIsInByb3BzIiwic3JjRWxlbWVudCIsIm1ldGFLZXkiLCJmaWx0ZXIiLCJvcmlnaW5hbCIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwiZXZlbnREb2MiLCJkb2MiLCJmcm9tRWxlbWVudCIsInBhZ2VYIiwiY2xpZW50WCIsInNjcm9sbExlZnQiLCJjbGllbnRMZWZ0IiwicGFnZVkiLCJjbGllbnRZIiwic2Nyb2xsVG9wIiwiY2xpZW50VG9wIiwicmVsYXRlZFRhcmdldCIsInRvRWxlbWVudCIsImxvYWQiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJibHVyIiwiYmVmb3JldW5sb2FkIiwicmV0dXJuVmFsdWUiLCJzaW11bGF0ZSIsImJ1YmJsZSIsImlzU2ltdWxhdGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsImdldFByZXZlbnREZWZhdWx0IiwidGltZVN0YW1wIiwiY2FuY2VsQnViYmxlIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJvcmlnIiwicmVsYXRlZCIsImNvbnRhaW5zIiwic3VibWl0QnViYmxlcyIsImZvcm0iLCJfc3VibWl0X2J1YmJsZSIsImNoYW5nZUJ1YmJsZXMiLCJwcm9wZXJ0eU5hbWUiLCJfanVzdF9jaGFuZ2VkIiwiZm9jdXNpbkJ1YmJsZXMiLCJhdHRhY2hlcyIsIm9uIiwib3JpZ0ZuIiwiYmluZCIsInVuYmluZCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZSIsInRyaWdnZXJIYW5kbGVyIiwiY2FjaGVkcnVucyIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJjb21waWxlIiwiaGFzRHVwbGljYXRlIiwib3V0ZXJtb3N0Q29udGV4dCIsInNldERvY3VtZW50IiwiZG9jRWxlbSIsImRvY3VtZW50SXNYTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwic29ydE9yZGVyIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwic3RydW5kZWZpbmVkIiwiTUFYX05FR0FUSVZFIiwid2hpdGVzcGFjZSIsImNoYXJhY3RlckVuY29kaW5nIiwiaWRlbnRpZmllciIsIm9wZXJhdG9ycyIsInBzZXVkb3MiLCJyY29tbWEiLCJyY29tYmluYXRvcnMiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJJRCIsIkNMQVNTIiwiTkFNRSIsIlRBRyIsIkFUVFIiLCJQU0VVRE8iLCJDSElMRCIsInJzaWJsaW5nIiwicm5hdGl2ZSIsInJpbnB1dHMiLCJyaGVhZGVyIiwicmVzY2FwZSIsInJhdHRyaWJ1dGVRdW90ZXMiLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGVkIiwiaGlnaCIsImZyb21DaGFyQ29kZSIsImlzTmF0aXZlIiwia2V5cyIsImNhY2hlTGVuZ3RoIiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiU2l6emxlIiwic2VlZCIsIm0iLCJncm91cHMiLCJvbGQiLCJuaWQiLCJuZXdDb250ZXh0IiwibmV3U2VsZWN0b3IiLCJnZXRCeUNsYXNzTmFtZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0b2tlbml6ZSIsInRvU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJub2RlIiwidGFnTmFtZU5vQ29tbWVudHMiLCJjcmVhdGVDb21tZW50IiwiaW5zZXJ0QmVmb3JlIiwicGFzcyIsImdldEVsZW1lbnRzQnlOYW1lIiwiZ2V0SWROb3ROYW1lIiwiYXR0ckhhbmRsZSIsImF0dHJJZCIsInRhZyIsIm1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJiIiwiYWRvd24iLCJidXAiLCJjb21wYXJlIiwiYXVwIiwiYXAiLCJicCIsInNpYmxpbmdDaGVjayIsImRldGVjdER1cGxpY2F0ZXMiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRpZmYiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiPiIsImRpciIsIiAiLCIrIiwifiIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJ3aGF0Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsIm91dGVyQ2FjaGUiLCJub2RlSW5kZXgiLCJ1c2VDYWNoZSIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJub3QiLCJtYXRjaGVyIiwidW5tYXRjaGVkIiwiaW5uZXJUZXh0IiwibGFuZyIsImVsZW1MYW5nIiwiaGFzaCIsInJvb3QiLCJoYXNGb2N1cyIsImVuYWJsZWQiLCJoZWFkZXIiLCJldmVuIiwib2RkIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInJlc2V0IiwicGFyc2VPbmx5IiwidG9rZW5zIiwic29GYXIiLCJwcmVGaWx0ZXJzIiwiY2FjaGVkIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJiYXNlIiwiY2hlY2tOb25FbGVtZW50cyIsImRvbmVOYW1lIiwiZGlya2V5IiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsIm11bHRpcGxlQ29udGV4dHMiLCJtYXRjaGVySW4iLCJtYXRjaGVyT3V0IiwibWF0Y2hlckZyb21Ub2tlbnMiLCJjaGVja0NvbnRleHQiLCJsZWFkaW5nUmVsYXRpdmUiLCJpbXBsaWNpdFJlbGF0aXZlIiwibWF0Y2hDb250ZXh0IiwibWF0Y2hBbnlDb250ZXh0IiwibWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzIiwiZWxlbWVudE1hdGNoZXJzIiwic2V0TWF0Y2hlcnMiLCJtYXRjaGVyQ2FjaGVkUnVucyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwiZXhwYW5kQ29udGV4dCIsInNldE1hdGNoZWQiLCJtYXRjaGVkQ291bnQiLCJvdXRlcm1vc3QiLCJjb250ZXh0QmFja3VwIiwiZGlycnVuc1VuaXF1ZSIsImdyb3VwIiwidG9rZW4iLCJmaWx0ZXJzIiwicnVudGlsIiwicnBhcmVudHNwcmV2IiwiaXNTaW1wbGUiLCJybmVlZHNDb250ZXh0IiwiZ3VhcmFudGVlZFVuaXF1ZSIsImNoaWxkcmVuIiwiY29udGVudHMiLCJwcmV2IiwidGFyZ2V0cyIsIndpbm5vdyIsImlzIiwiY2xvc2VzdCIsInBvcyIsInByZXZBbGwiLCJhZGRCYWNrIiwiYW5kU2VsZiIsInNpYmxpbmciLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwidW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJjb250ZW50RG9jdW1lbnQiLCJjb250ZW50V2luZG93IiwicmV2ZXJzZSIsIm4iLCJyIiwicXVhbGlmaWVyIiwia2VlcCIsImZpbHRlcmVkIiwiY3JlYXRlU2FmZUZyYWdtZW50Iiwibm9kZU5hbWVzIiwic2FmZUZyYWciLCJyaW5saW5lalF1ZXJ5Iiwicm5vc2hpbWNhY2hlIiwicmxlYWRpbmdXaGl0ZXNwYWNlIiwicnhodG1sVGFnIiwicnRhZ05hbWUiLCJydGJvZHkiLCJyaHRtbCIsInJub0lubmVyaHRtbCIsIm1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZSIsInJjaGVja2VkIiwicnNjcmlwdFR5cGUiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIndyYXBNYXAiLCJsZWdlbmQiLCJhcmVhIiwicGFyYW0iLCJ0aGVhZCIsInRyIiwiY29sIiwidGQiLCJzYWZlRnJhZ21lbnQiLCJmcmFnbWVudERpdiIsIm9wdGdyb3VwIiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImFwcGVuZCIsImNyZWF0ZVRleHROb2RlIiwid3JhcEFsbCIsImh0bWwiLCJ3cmFwIiwid3JhcElubmVyIiwidW53cmFwIiwicmVwbGFjZVdpdGgiLCJkb21NYW5pcCIsInByZXBlbmQiLCJiZWZvcmUiLCJhZnRlciIsImtlZXBEYXRhIiwiZ2V0QWxsIiwic2V0R2xvYmFsRXZhbCIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsImlzRnVuYyIsInRhYmxlIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwiZGlzYWJsZVNjcmlwdCIsImZpbmRPckFwcGVuZCIsInJlc3RvcmVTY3JpcHQiLCJhamF4IiwidXJsIiwiZGF0YVR5cGUiLCJ0aHJvd3MiLCJyZWZFbGVtZW50cyIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsIm9sZERhdGEiLCJjdXJEYXRhIiwiZml4Q2xvbmVOb2RlSXNzdWVzIiwiZGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0U2VsZWN0ZWQiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsImluc2VydCIsImZvdW5kIiwiZml4RGVmYXVsdENoZWNrZWQiLCJkZXN0RWxlbWVudHMiLCJzcmNFbGVtZW50cyIsImluUGFnZSIsInNlbGVjdGlvbiIsInNhZmUiLCJub2RlcyIsImlmcmFtZSIsImdldFN0eWxlcyIsImN1ckNTUyIsInJhbHBoYSIsInJvcGFjaXR5IiwicnBvc2l0aW9uIiwicmRpc3BsYXlzd2FwIiwicm1hcmdpbiIsInJudW1zcGxpdCIsInJudW1ub25weCIsInJyZWxOdW0iLCJlbGVtZGlzcGxheSIsIkJPRFkiLCJjc3NTaG93IiwicG9zaXRpb24iLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJjc3NFeHBhbmQiLCJjc3NQcmVmaXhlcyIsInZlbmRvclByb3BOYW1lIiwiY2FwTmFtZSIsIm9yaWdOYW1lIiwiaXNIaWRkZW4iLCJlbCIsImNzcyIsInNob3dIaWRlIiwic2hvdyIsImhpZGRlbiIsImNzc19kZWZhdWx0RGlzcGxheSIsInN0eWxlcyIsImhpZGUiLCJ0b2dnbGUiLCJib29sIiwiY3NzSG9va3MiLCJjb21wdXRlZCIsImNzc051bWJlciIsImNvbHVtbkNvdW50IiwiZmlsbE9wYWNpdHkiLCJsaW5lSGVpZ2h0Iiwib3JwaGFucyIsIndpZG93cyIsInpJbmRleCIsImNzc1Byb3BzIiwiZmxvYXQiLCJleHRyYSIsInN3YXAiLCJfY29tcHV0ZWQiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImN1cnJlbnRTdHlsZSIsImxlZnQiLCJycyIsInJzTGVmdCIsInJ1bnRpbWVTdHlsZSIsInBpeGVsTGVmdCIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJhdWdtZW50V2lkdGhPckhlaWdodCIsImlzQm9yZGVyQm94IiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJhY3R1YWxEaXNwbGF5Iiwid3JpdGUiLCJjbG9zZSIsIiQxIiwidmlzaWJsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJleHBhbmQiLCJleHBhbmRlZCIsInBhcnRzIiwicjIwIiwicmJyYWNrZXQiLCJyQ1JMRiIsInJzdWJtaXR0ZXJUeXBlcyIsInJzdWJtaXR0YWJsZSIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUFycmF5IiwidHJhZGl0aW9uYWwiLCJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYWpheFNldHRpbmdzIiwiYnVpbGRQYXJhbXMiLCJ2IiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImFqYXhMb2NQYXJ0cyIsImFqYXhMb2NhdGlvbiIsImFqYXhfbm9uY2UiLCJhamF4X3JxdWVyeSIsInJoYXNoIiwicnRzIiwicmhlYWRlcnMiLCJybG9jYWxQcm90b2NvbCIsInJub0NvbnRlbnQiLCJycHJvdG9jb2wiLCJydXJsIiwiX2xvYWQiLCJwcmVmaWx0ZXJzIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJvcmlnaW5hbE9wdGlvbnMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0IiwicHJlZmlsdGVyT3JGYWN0b3J5IiwiZGF0YVR5cGVPclRyYW5zcG9ydCIsImFqYXhFeHRlbmQiLCJmbGF0T3B0aW9ucyIsInBhcmFtcyIsInJlc3BvbnNlIiwicmVzcG9uc2VUZXh0IiwiY29tcGxldGUiLCJzdGF0dXMiLCJtZXRob2QiLCJzdWNjZXNzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsImlzTG9jYWwiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiYWNjZXB0cyIsIioiLCJqc29uIiwicmVzcG9uc2VGaWVsZHMiLCJjb252ZXJ0ZXJzIiwiKiB0ZXh0IiwidGV4dCBodG1sIiwidGV4dCBqc29uIiwidGV4dCB4bWwiLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJ0aW1lb3V0VGltZXIiLCJmaXJlR2xvYmFscyIsInRyYW5zcG9ydCIsInJlc3BvbnNlSGVhZGVycyIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJsbmFtZSIsIm92ZXJyaWRlTWltZVR5cGUiLCJtaW1lVHlwZSIsImNvZGUiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJzZW5kIiwibmF0aXZlU3RhdHVzVGV4dCIsInJlc3BvbnNlcyIsImlzU3VjY2VzcyIsIm1vZGlmaWVkIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsImFqYXhDb252ZXJ0IiwicmVqZWN0V2l0aCIsImdldFNjcmlwdCIsImdldEpTT04iLCJmaXJzdERhdGFUeXBlIiwiY3QiLCJmaW5hbERhdGFUeXBlIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsImRhdGFGaWx0ZXIiLCJzY3JpcHQiLCJ0ZXh0IHNjcmlwdCIsImhlYWQiLCJzY3JpcHRDaGFyc2V0IiwiY2hhcnNldCIsIm9ubG9hZCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsImlzQWJvcnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwieGhyQ2FsbGJhY2tzIiwieGhyU3VwcG9ydGVkIiwieGhySWQiLCJ4aHJPblVubG9hZEFib3J0IiwiY3JlYXRlU3RhbmRhcmRYSFIiLCJYTUxIdHRwUmVxdWVzdCIsImNyZWF0ZUFjdGl2ZVhIUiIsInhociIsImNvcnMiLCJ1c2VybmFtZSIsIm9wZW4iLCJ4aHJGaWVsZHMiLCJlcnIiLCJmaXJlZm94QWNjZXNzRXhjZXB0aW9uIiwidW5sb2FkIiwiZnhOb3ciLCJ0aW1lcklkIiwicmZ4dHlwZXMiLCJyZnhudW0iLCJycnVuIiwiYW5pbWF0aW9uUHJlZmlsdGVycyIsImRlZmF1bHRQcmVmaWx0ZXIiLCJ0d2VlbmVycyIsInVuaXQiLCJ0d2VlbiIsImNyZWF0ZVR3ZWVuIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3JlYXRlRnhOb3ciLCJjcmVhdGVUd2VlbnMiLCJhbmltYXRpb24iLCJjb2xsZWN0aW9uIiwiQW5pbWF0aW9uIiwicHJvcGVydGllcyIsInN0b3BwZWQiLCJ0aWNrIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJkdXJhdGlvbiIsInBlcmNlbnQiLCJ0d2VlbnMiLCJydW4iLCJvcHRzIiwic3BlY2lhbEVhc2luZyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIlR3ZWVuIiwiZWFzaW5nIiwiZ290b0VuZCIsInByb3BGaWx0ZXIiLCJ0aW1lciIsImFuaW0iLCJ0d2VlbmVyIiwicHJlZmlsdGVyIiwiZGF0YVNob3ciLCJvbGRmaXJlIiwiaGFuZGxlZCIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJlYXNlZCIsInN0ZXAiLCJjc3NGbiIsInNwZWVkIiwiYW5pbWF0ZSIsImdlbkZ4IiwiZmFkZVRvIiwidG8iLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJ3aW4iLCJib3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRXaW5kb3ciLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0IiwiY3VyRWxlbSIsImN1ck9mZnNldCIsImN1ckNTU1RvcCIsImN1ckNTU0xlZnQiLCJjYWxjdWxhdGVQb3NpdGlvbiIsImN1clBvc2l0aW9uIiwiY3VyVG9wIiwiY3VyTGVmdCIsInVzaW5nIiwib2Zmc2V0UGFyZW50IiwicGFyZW50T2Zmc2V0Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImNvbnRlbnQiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsImRlZmluZSIsImFtZCJdLCJtYXBwaW5ncyI6IkNBYUEsU0FBV0EsRUFBUUMsR0FPbkIsR0FFQ0MsR0FHQUMsRUFJQUMsUUFBMkJILEdBRzNCSSxFQUFXTCxFQUFPSyxTQUNsQkMsRUFBV04sRUFBT00sU0FHbEJDLEVBQVVQLEVBQU9RLE9BR2pCQyxFQUFLVCxFQUFPVSxFQUdaQyxLQUdBQyxLQUVBQyxFQUFlLFFBR2ZDLEVBQWNGLEVBQWdCRyxPQUM5QkMsRUFBWUosRUFBZ0JLLEtBQzVCQyxFQUFhTixFQUFnQk8sTUFDN0JDLEVBQWVSLEVBQWdCUyxRQUMvQkMsRUFBZ0JYLEVBQVdZLFNBQzNCQyxFQUFjYixFQUFXYyxlQUN6QkMsRUFBWWIsRUFBYWMsS0FHekJuQixFQUFTLFNBQVVvQixFQUFVQyxHQUU1QixNQUFPLElBQUlyQixHQUFPc0IsR0FBR0MsS0FBTUgsRUFBVUMsRUFBUzFCLElBSS9DNkIsRUFBWSxzQ0FBc0NDLE9BR2xEQyxFQUFpQixPQUdqQkMsRUFBUSxxQ0FLUkMs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",
	"jstree.js":                           "LyoKICoganNUcmVlIDEuMC1yYzMKICogaHR0cDovL2pzdHJlZS5jb20vCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMCBJdmFuIEJvemhhbm92ICh2YWthdGEuY29tKQogKgogKiBMaWNlbnNlZCBzYW1lIGFzIGpxdWVyeSAtIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIE1JVCBMaWNlbnNlIG9yIHRoZSBHUEwgVmVyc2lvbiAyIExpY2Vuc2UKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKgogKiAkRGF0ZTogMjAxMS0wMi0wOSAwMToxNzoxNCArMDIwMCAo0YHRgCwgMDkg0YTQtdCy0YAgMjAxMSkgJAogKiAkUmV2aXNpb246IDIzNiAkCiAqLwoKLypqc2xpbnQgYnJvd3NlcjogdHJ1ZSwgb25ldmFyOiB0cnVlLCB1bmRlZjogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgc3RyaWN0OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdyA6IGZhbHNlLCBjbGVhckludGVydmFsOiBmYWxzZSwgY2xlYXJUaW1lb3V0OiBmYWxzZSwgZG9jdW1lbnQ6IGZhbHNlLCBzZXRJbnRlcnZhbDogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBqUXVlcnk6IGZhbHNlLCBuYXZpZ2F0b3I6IGZhbHNlLCBYU0xUUHJvY2Vzc29yOiBmYWxzZSwgRE9NUGFyc2VyOiBmYWxzZSwgWE1MU2VyaWFsaXplcjogZmFsc2UsIEFjdGl2ZVhPYmplY3Q6IGZhbHNlICovCgoidXNlIHN0cmljdCI7CgovLyB0b3Agd3JhcHBlciB0byBwcmV2ZW50IG11bHRpcGxlIGluY2x1c2lvbiAoaXMgdGhpcyBPSz8pCihmdW5jdGlvbiAoKSB7IGlmKGpRdWVyeSAmJiBqUXVlcnkuanN0cmVlKSB7IHJldHVybjsgfQoJdmFyIGlzX2llNiA9IGZhbHNlLCBpc19pZTcgPSBmYWxzZSwgaXNfZmYyID0gZmFsc2U7CgovKgogKiBqc1RyZWUgY29yZQogKi8KKGZ1bmN0aW9uICgkKSB7CgkvLyBDb21tb24gZnVuY3Rpb25zIG5vdCByZWxhdGVkIHRvIGpzVHJlZQoJLy8gZGVjaWRlZCB0byBtb3ZlIHRoZW0gdG8gYSBgdmFrYXRhYCAibmFtZXNwYWNlIgoJJC52YWthdGEgPSB7fTsKCS8vIENTUyByZWxhdGVkIGZ1bmN0aW9ucwoJJC52YWthdGEuY3NzID0gewoJCWdldF9jc3MgOiBmdW5jdGlvbihydWxlX25hbWUsIGRlbGV0ZV9mbGFnLCBzaGVldCkgewoJCQlydWxlX25hbWUgPSBydWxlX25hbWUudG9Mb3dlckNhc2UoKTsKCQkJdmFyIGNzc19ydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzLAoJCQkJaiA9IDA7CgkJCWRvIHsKCQkJCWlmKGNzc19ydWxlcy5sZW5ndGggJiYgaiA+IGNzc19ydWxlcy5sZW5ndGggKyA1KSB7IHJldHVybiBmYWxzZTsgfQoJCQkJaWYoY3NzX3J1bGVzW2pdLnNlbGVjdG9yVGV4dCAmJiBjc3NfcnVsZXNbal0uc2VsZWN0b3JUZXh0LnRvTG93ZXJDYXNlKCkgPT0gcnVsZV9uYW1lKSB7CgkJCQkJaWYoZGVsZXRlX2ZsYWcgPT09IHRydWUpIHsKCQkJCQkJaWYoc2hlZXQucmVtb3ZlUnVsZSkgeyBzaGVldC5yZW1vdmVSdWxlKGopOyB9CgkJCQkJCWlmKHNoZWV0LmRlbGV0ZVJ1bGUpIHsgc2hlZXQuZGVsZXRlUnVsZShqKTsgfQoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZSB7IHJldHVybiBjc3NfcnVsZXNbal07IH0KCQkJCX0KCQkJfQoJCQl3aGlsZSAoY3NzX3J1bGVzWysral0pOwoJCQlyZXR1cm4gZmFsc2U7CgkJfSwKCQlhZGRfY3NzIDogZnVuY3Rpb24ocnVsZV9uYW1lLCBzaGVldCkgewoJCQlpZigkLmpzdHJlZS5jc3MuZ2V0X2NzcyhydWxlX25hbWUsIGZhbHNlLCBzaGVldCkpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCWlmKHNoZWV0Lmluc2VydFJ1bGUpIHsgc2hlZXQuaW5zZXJ0UnVsZShydWxlX25hbWUgKyAnIHsgfScsIDApOyB9IGVsc2UgeyBzaGVldC5hZGRSdWxlKHJ1bGVfbmFtZSwgbnVsbCwgMCk7IH0KCQkJcmV0dXJuICQudmFrYXRhLmNzcy5nZXRfY3NzKHJ1bGVfbmFtZSk7CgkJfSwKCQlyZW1vdmVfY3NzIDogZnVuY3Rpb24ocnVsZV9uYW1lLCBzaGVldCkgewoJCQlyZXR1cm4gJC52YWthdGEuY3NzLmdldF9jc3MocnVsZV9uYW1lLCB0cnVlLCBzaGVldCk7CgkJfSwKCQlhZGRfc2hlZXQgOiBmdW5jdGlvbihvcHRzKSB7CgkJCXZhciB0bXAgPSBmYWxzZSwgaXNfbmV3ID0gdHJ1ZTsKCQkJaWYob3B0cy5zdHIpIHsKCQkJCWlmKG9wdHMudGl0bGUpIHsgdG1wID0gJCgic3R5bGVbaWQ9JyIgKyBvcHRzLnRpdGxlICsgIi1zdHlsZXNoZWV0J10iKVswXTsgfQoJCQkJaWYodG1wKSB7IGlzX25ldyA9IGZhbHNlOyB9CgkJCQllbHNlIHsKCQkJCQl0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwoJCQkJCXRtcC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCJ0ZXh0L2NzcyIpOwoJCQkJCWlmKG9wdHMudGl0bGUpIHsgdG1wLnNldEF0dHJpYnV0ZSgiaWQiLCBvcHRzLnRpdGxlICsgIi1zdHlsZXNoZWV0Iik7IH0KCQkJCX0KCQkJCWlmKHRtcC5zdHlsZVNoZWV0KSB7CgkJCQkJaWYoaXNfbmV3KSB7CgkJCQkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQodG1wKTsKCQkJCQkJdG1wLnN0eWxlU2hlZXQuY3NzVGV4dCA9IG9wdHMuc3RyOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJdG1wLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHRtcC5zdHlsZVNoZWV0LmNzc1RleHQgKyAiICIgKyBvcHRzLnN0cjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0bXAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob3B0cy5zdHIpKTsKCQkJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHRtcCk7CgkJCQl9CgkJCQlyZXR1cm4gdG1wLnNoZWV0IHx8IHRtcC5zdHlsZVNoZWV0OwoJCQl9CgkJCWlmKG9wdHMudXJsKSB7CgkJCQlpZihkb2N1bWVudC5jcmVhdGVTdHlsZVNoZWV0KSB7CgkJCQkJdHJ5IHsgdG1wID0gZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldChvcHRzLnVybCk7IH0gY2F0Y2ggKGUpIHsgfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdG1wCQkJPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CgkJCQkJdG1wLnJlbAkJPSAnc3R5bGVzaGVldCc7CgkJCQkJdG1wLnR5cGUJPSAndGV4dC9jc3MnOwoJCQkJCXRtcC5tZWRpYQk9ICJhbGwiOwoJCQkJCXRtcC5ocmVmCT0gb3B0cy51cmw7CgkJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0bXApOwoJCQkJCXJldHVybiB0bXAuc3R5bGVTaGVldDsKCQkJCX0KCQkJfQoJCX0KCX07CgoJLy8gcHJpdmF0ZSB2YXJpYWJsZXMKCXZhciBpbnN0YW5jZXMgPSBbXSwJCQkvLyBpbnN0YW5jZSBhcnJheSAodXNlZCBieSAkLmpzdHJlZS5yZWZlcmVuY2UvY3JlYXRlL2ZvY3VzZWQpCgkJZm9jdXNlZF9pbnN0YW5jZSA9IC0xLAkvLyB0aGUgaW5kZXggaW4gdGhlIGluc3RhbmNlIGFycmF5IG9mIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBpbnN0YW5jZQoJCXBsdWdpbnMgPSB7fSwJCQkvLyBsaXN0IG9mIGluY2x1ZGVkIHBsdWdpbnMKCQlwcmVwYXJlZF9tb3ZlID0ge307CQkvLyBmb3IgdGhlIG1vdmVfbm9kZSBmdW5jdGlvbgoKCS8vIGpRdWVyeSBwbHVnaW4gd3JhcHBlciAodGhhbmtzIHRvIGpxdWVyeSBVSSB3aWRnZXQgZnVuY3Rpb24pCgkkLmZuLmpzdHJlZSA9IGZ1bmN0aW9uIChzZXR0aW5ncykgewoJCXZhciBpc01ldGhvZENhbGwgPSAodHlwZW9mIHNldHRpbmdzID09ICdzdHJpbmcnKSwgLy8gaXMgdGhpcyBhIG1ldGhvZCBjYWxsIGxpa2UgJCgpLmpzdHJlZSgib3Blbl9ub2RlIikKCQkJYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksCgkJCXJldHVyblZhbHVlID0gdGhpczsKCgkJLy8gaWYgYSBtZXRob2QgY2FsbCBleGVjdXRlIHRoZSBtZXRob2Qgb24gYWxsIHNlbGVjdGVkIGluc3RhbmNlcwoJCWlmKGlzTWV0aG9kQ2FsbCkgewoJCQlpZihzZXR0aW5ncy5zdWJzdHJpbmcoMCwgMSkgPT0gJ18nKSB7IHJldHVybiByZXR1cm5WYWx1ZTsgfQoJCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl2YXIgaW5zdGFuY2UgPSBpbnN0YW5jZXNbJC5kYXRhKHRoaXMsICJqc3RyZWVfaW5zdGFuY2VfaWQiKV0sCgkJCQkJbWV0aG9kVmFsdWUgPSAoaW5zdGFuY2UgJiYgJC5pc0Z1bmN0aW9uKGluc3RhbmNlW3NldHRpbmdzXSkpID8gaW5zdGFuY2Vbc2V0dGluZ3NdLmFwcGx5KGluc3RhbmNlLCBhcmdzKSA6IGluc3RhbmNlOwoJCQkJCWlmKHR5cGVvZiBtZXRob2RWYWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgKHNldHRpbmdzLmluZGV4T2YoImlzXyIpID09PSAwIHx8IChtZXRob2RWYWx1ZSAhPT0gdHJ1ZSAmJiBtZXRob2RWYWx1ZSAhPT0gZmFsc2UpKSkgeyByZXR1cm5WYWx1ZSA9IG1ldGhvZFZhbHVlOyByZXR1cm4gZmFsc2U7IH0KCQkJfSk7CgkJfQoJCWVsc2UgewoJCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkvLyBleHRlbmQgc2V0dGluZ3MgYW5kIGFsbG93IGZvciBtdWx0aXBsZSBoYXNoZXMgYW5kICQuZGF0YQoJCQkJdmFyIGluc3RhbmNlX2lkID0gJC5kYXRhKHRoaXMsICJqc3RyZWVfaW5zdGFuY2VfaWQiKSwKCQkJCQlhID0gW10sCgkJCQkJYiA9IHNldHRpbmdzID8gJC5leHRlbmQoe30sIHRydWUsIHNldHRpbmdzKSA6IHt9LAoJCQkJCWMgPSAkKHRoaXMpLAoJCQkJCXMgPSBmYWxzZSwKCQkJCQl0ID0gW107CgkJCQlhID0gYS5jb25jYXQoYXJncyk7CgkJCQlpZihjLmRhdGEoImpzdHJlZSIpKSB7IGEucHVzaChjLmRhdGEoImpzdHJlZSIpKTsgfQoJCQkJYiA9IGEubGVuZ3RoID8gJC5leHRlbmQuYXBwbHkobnVsbCwgW3RydWUsIGJdLmNvbmNhdChhKSkgOiBiOwoKCQkJCS8vIGlmIGFuIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLCBkZXN0cm95IGl0IGZpcnN0CgkJCQlpZih0eXBlb2YgaW5zdGFuY2VfaWQgIT09ICJ1bmRlZmluZWQiICYmIGluc3RhbmNlc1tpbnN0YW5jZV9pZF0pIHsgaW5zdGFuY2VzW2luc3RhbmNlX2lkXS5kZXN0cm95KCk7IH0KCQkJCS8vIHB1c2ggYSBuZXcgZW1wdHkgb2JqZWN0IHRvIHRoZSBpbnN0YW5jZXMgYXJyYXkKCQkJCWluc3RhbmNlX2lkID0gcGFyc2VJbnQoaW5zdGFuY2VzLnB1c2goe30pLDEwKSAtIDE7CgkJCQkvLyBzdG9yZSB0aGUganN0cmVlIGluc3RhbmNlIGlkIHRvIHRoZSBjb250YWluZXIgZWxlbWVudAoJCQkJJC5kYXRhKHRoaXMsICJqc3RyZWVfaW5zdGFuY2VfaWQiLCBpbnN0YW5jZV9pZCk7CgkJCQkvLyBjbGVhbiB1cCBhbGwgcGx1Z2lucwoJCQkJYi5wbHVnaW5zID0gJC5pc0FycmF5KGIucGx1Z2lucykgPyBiLnBsdWdpbnMgOiAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnNsaWNlKCk7CgkJCQliLnBsdWdpbnMudW5zaGlmdCgiY29yZSIpOwoJCQkJLy8gb25seSB1bmlxdWUgcGx1Z2lucwoJCQkJYi5wbHVnaW5zID0gYi5wbHVnaW5zLnNvcnQoKS5qb2luKCIsLCIpLnJlcGxhY2UoLygsfF4pKFteLF0rKSgsLFwyKSsoLHwkKS9nLCIkMSQyJDQiKS5yZXBsYWNlKC8sLCsvZywiLCIpLnJlcGxhY2UoLywkLywiIikuc3BsaXQoIiwiKTsKCgkJCQkvLyBleHRlbmQgZGVmYXVsdHMgd2l0aCBwYXNzZWQgZGF0YQoJCQkJcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLmpzdHJlZS5kZWZhdWx0cywgYik7CgkJCQlzLnBsdWdpbnMgPSBiLnBsdWdpbnM7CgkJCQkkLmVhY2gocGx1Z2lucywgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCWlmKCQuaW5BcnJheShpLCBzLnBsdWdpbnMpID09PSAtMSkgeyBzW2ldID0gbnVsbDsgZGVsZXRlIHNbaV07IH0KCQkJCQllbHNlIHsgdC5wdXNoKGkpOyB9CgkJCQl9KTsKCQkJCXMucGx1Z2lucyA9IHQ7CgoJCQkJLy8gcHVzaCB0aGUgbmV3IG9iamVjdCB0byB0aGUgaW5zdGFuY2VzIGFycmF5IChhdCB0aGUgc2FtZSB0aW1lIHNldCB0aGUgZGVmYXVsdCBjbGFzc2VzIHRvIHRoZSBjb250YWluZXIpIGFuZCBpbml0CgkJCQlpbnN0YW5jZXNbaW5zdGFuY2VfaWRdID0gbmV3ICQuanN0cmVlLl9pbnN0YW5jZShpbnN0YW5jZV9pZCwgJCh0aGlzKS5hZGRDbGFzcygianN0cmVlIGpzdHJlZS0iICsgaW5zdGFuY2VfaWQpLCBzKTsKCQkJCS8vIGluaXQgYWxsIGFjdGl2YXRlZCBwbHVnaW5zIGZvciB0aGlzIGluc3RhbmNlCgkJCQkkLmVhY2goaW5zdGFuY2VzW2luc3RhbmNlX2lkXS5fZ2V0X3NldHRpbmdzKCkucGx1Z2lucywgZnVuY3Rpb24gKGksIHZhbCkgeyBpbnN0YW5jZXNbaW5zdGFuY2VfaWRdLmRhdGFbdmFsXSA9IHt9OyB9KTsKCQkJCSQuZWFjaChpbnN0YW5jZXNbaW5zdGFuY2VfaWRdLl9nZXRfc2V0dGluZ3MoKS5wbHVnaW5zLCBmdW5jdGlvbiAoaSwgdmFsKSB7IGlmKHBsdWdpbnNbdmFsXSkgeyBwbHVnaW5zW3ZhbF0uX19pbml0LmFwcGx5KGluc3RhbmNlc1tpbnN0YW5jZV9pZF0pOyB9IH0pOwoJCQkJLy8gaW5pdGlhbGl6ZSB0aGUgaW5zdGFuY2UKCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlmKGluc3RhbmNlc1tpbnN0YW5jZV9pZF0pIHsgaW5zdGFuY2VzW2luc3RhbmNlX2lkXS5pbml0KCk7IH0gfSwgMCk7CgkJCX0pOwoJCX0KCQkvLyByZXR1cm4gdGhlIGpxdWVyeSBzZWxlY3Rpb24gKG9yIGlmIGl0IHdhcyBhIG1ldGhvZCBjYWxsIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZSAtIHRoZSByZXR1cm5lZCB2YWx1ZSkKCQlyZXR1cm4gcmV0dXJuVmFsdWU7Cgl9OwoJLy8gb2JqZWN0IHRvIHN0b3JlIGV4cG9zZWQgZnVuY3Rpb25zIGFuZCBvYmplY3RzCgkkLmpzdHJlZSA9IHsKCQlkZWZhdWx0cyA6IHsKCQkJcGx1Z2lucyA6IFtdCgkJfSwKCQlfZm9jdXNlZCA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RhbmNlc1tmb2N1c2VkX2luc3RhbmNlXSB8fCBudWxsOyB9LAoJCV9yZWZlcmVuY2UgOiBmdW5jdGlvbiAobmVlZGxlKSB7CgkJCS8vIGdldCBieSBpbnN0YW5jZSBpZAoJCQlpZihpbnN0YW5jZXNbbmVlZGxlXSkgeyByZXR1cm4gaW5zdGFuY2VzW25lZWRsZV07IH0KCQkJLy8gZ2V0IGJ5IERPTSAoaWYgc3RpbGwgbm8gbHVjayAtIHJldHVybiBudWxsCgkJCXZhciBvID0gJChuZWVkbGUpOwoJCQlpZighby5sZW5ndGggJiYgdHlwZW9mIG5lZWRsZSA9PT0gInN0cmluZyIpIHsgbyA9ICQoIiMiICsgbmVlZGxlKTsgfQoJCQlpZighby5sZW5ndGgpIHsgcmV0dXJuIG51bGw7IH0KCQkJcmV0dXJuIGluc3RhbmNlc1tvLmNsb3Nlc3QoIi5qc3RyZWUiKS5kYXRhKCJqc3RyZWVfaW5zdGFuY2VfaWQiKV0gfHwgbnVsbDsKCQl9LAoJCV9pbnN0YW5jZSA6IGZ1bmN0aW9uIChpbmRleCwgY29udGFpbmVyLCBzZXR0aW5ncykgewoJCQkvLyBmb3IgcGx1Z2lucyB0byBzdG9yZSBkYXRhIGluCgkJCXRoaXMuZGF0YSA9IHsgY29yZSA6IHt9IH07CgkJCXRoaXMuZ2V0X3NldHRpbmdzCT0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIHNldHRpbmdzKTsgfTsKCQkJdGhpcy5fZ2V0X3NldHRpbmdzCT0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0dGluZ3M7IH07CgkJCXRoaXMuZ2V0X2luZGV4CQk9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluZGV4OyB9OwoJCQl0aGlzLmdldF9jb250YWluZXIJPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb250YWluZXI7IH07CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcl91bCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnRhaW5lci5jaGlsZHJlbigidWw6ZXEoMCkiKTsgfTsKCQkJdGhpcy5fc2V0X3NldHRpbmdzCT0gZnVuY3Rpb24gKHMpIHsKCQkJCXNldHRpbmdzID0gJC5leHRlbmQodHJ1ZSwge30sIHNldHRpbmdzLCBzKTsKCQkJfTsKCQl9LAoJCV9mbiA6IHsgfSwKCQlwbHVnaW4gOiBmdW5jdGlvbiAocG5hbWUsIHBkYXRhKSB7CgkJCXBkYXRhID0gJC5leHRlbmQoe30sIHsKCQkJCV9faW5pdAkJOiAkLm5vb3AsCgkJCQlfX2Rlc3Ryb3kJOiAkLm5vb3AsCgkJCQlfZm4JCQk6IHt9LAoJCQkJZGVmYXVsdHMJOiBmYWxzZQoJCQl9LCBwZGF0YSk7CgkJCXBsdWdpbnNbcG5hbWVdID0gcGRhdGE7CgoJCQkkLmpzdHJlZS5kZWZhdWx0c1twbmFtZV0gPSBwZGF0YS5kZWZhdWx0czsKCQkJJC5lYWNoKHBkYXRhLl9mbiwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJdmFsLnBsdWdpbgkJPSBwbmFtZTsKCQkJCXZhbC5vbGQJCQk9ICQuanN0cmVlLl9mbltpXTsKCQkJCSQuanN0cmVlLl9mbltpXSA9IGZ1bmN0aW9uICgpIHsKCQkJCQl2YXIgcnNsdCwKCQkJCQkJZnVuYyA9IHZhbCwKCQkJCQkJYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksCgkJCQkJCWV2bnQgPSBuZXcgJC5FdmVudCgiYmVmb3JlLmpzdHJlZSIpLAoJCQkJCQlybGJrID0gZmFsc2U7CgoJCQkJCWlmKHRoaXMuZGF0YS5jb3JlLmxvY2tlZCA9PT0gdHJ1ZSAmJiBpICE9PSAidW5sb2NrIiAmJiBpICE9PSAiaXNfbG9ja2VkIikgeyByZXR1cm47IH0KCgkJCQkJLy8gQ2hlY2sgaWYgZnVuY3Rpb24gYmVsb25ncyB0byB0aGUgaW5jbHVkZWQgcGx1Z2lucyBvZiB0aGlzIGluc3RhbmNlCgkJCQkJZG8gewoJCQkJCQlpZihmdW5jICYmIGZ1bmMucGx1Z2luICYmICQuaW5BcnJheShmdW5jLnBsdWdpbiwgdGhpcy5fZ2V0X3NldHRpbmdzKCkucGx1Z2lucykgIT09IC0xKSB7IGJyZWFrOyB9CgkJCQkJCWZ1bmMgPSBmdW5jLm9sZDsKCQkJCQl9IHdoaWxlKGZ1bmMpOwoJCQkJCWlmKCFmdW5jKSB7IHJldHVybjsgfQoKCQkJCQkvLyBjb250ZXh0IGFuZCBmdW5jdGlvbiB0byB0cmlnZ2VyIGV2ZW50cywgdGhlbiBmaW5hbGx5IGNhbGwgdGhlIGZ1bmN0aW9uCgkJCQkJaWYoaS5pbmRleE9mKCJfIikgPT09IDApIHsKCQkJCQkJcnNsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlyc2x0ID0gdGhpcy5nZXRfY29udGFpbmVyKCkudHJpZ2dlckhhbmRsZXIoZXZudCwgeyAiZnVuYyIgOiBpLCAiaW5zdCIgOiB0aGlzLCAiYXJncyIgOiBhcmdzLCAicGx1Z2luIiA6IGZ1bmMucGx1Z2luIH0pOwoJCQkJCQlpZihyc2x0ID09PSBmYWxzZSkgeyByZXR1cm47IH0KCQkJCQkJaWYodHlwZW9mIHJzbHQgIT09ICJ1bmRlZmluZWQiKSB7IGFyZ3MgPSByc2x0OyB9CgoJCQkJCQlyc2x0ID0gZnVuYy5hcHBseSgKCQkJCQkJCSQuZXh0ZW5kKHt9LCB0aGlzLCB7CgkJCQkJCQkJX19jYWxsYmFjayA6IGZ1bmN0aW9uIChkYXRhKSB7CgkJCQkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLnRyaWdnZXJIYW5kbGVyKCBpICsgJy5qc3RyZWUnLCB7ICJpbnN0IiA6IHRoaXMsICJhcmdzIiA6IGFyZ3MsICJyc2x0IiA6IGRhdGEsICJybGJrIiA6IHJsYmsgfSk7CgkJCQkJCQkJfSwKCQkJCQkJCQlfX3JvbGxiYWNrIDogZnVuY3Rpb24gKCkgewoJCQkJCQkJCQlybGJrID0gdGhpcy5nZXRfcm9sbGJhY2soKTsKCQkJCQkJCQkJcmV0dXJuIHJsYms7CgkJCQkJCQkJfSwKCQkJCQkJCQlfX2NhbGxfb2xkIDogZnVuY3Rpb24gKHJlcGxhY2VfYXJndW1lbnRzKSB7CgkJCQkJCQkJCXJldHVybiBmdW5jLm9sZC5hcHBseSh0aGlzLCAocmVwbGFjZV9hcmd1bWVudHMgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogYXJncyApICk7CgkJCQkJCQkJfQoJCQkJCQkJfSksIGFyZ3MpOwoJCQkJCX0KCgkJCQkJLy8gcmV0dXJuIHRoZSByZXN1bHQKCQkJCQlyZXR1cm4gcnNsdDsKCQkJCX07CgkJCQkkLmpzdHJlZS5fZm5baV0ub2xkID0gdmFsLm9sZDsKCQkJCSQuanN0cmVlLl9mbltpXS5wbHVnaW4gPSBwbmFtZTsKCQkJfSk7CgkJfSwKCQlyb2xsYmFjayA6IGZ1bmN0aW9uIChyYikgewoJCQlpZihyYikgewoJCQkJaWYoISQuaXNBcnJheShyYikpIHsgcmIgPSBbIHJiIF07IH0KCQkJCSQuZWFjaChyYiwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCWluc3RhbmNlc1t2YWwuaV0uc2V0X3JvbGxiYWNrKHZhbC5oLCB2YWwuZCk7CgkJCQl9KTsKCQkJfQoJCX0KCX07CgkvLyBzZXQgdGhlIHByb3RvdHlwZSBmb3IgYWxsIGluc3RhbmNlcwoJJC5qc3RyZWUuX2ZuID0gJC5qc3RyZWUuX2luc3RhbmNlLnByb3RvdHlwZSA9IHt9OwoKCS8vIGxvYWQgdGhlIGNzcyB3aGVuIERPTSBpcyByZWFkeQoJJChmdW5jdGlvbigpIHsKCQkvLyBjb2RlIGlzIGNvcGllZCBmcm9tIGpRdWVyeSAoJC5icm93c2VyIGlzIGRlcHJlY2F0ZWQgKyB0aGVyZSBpcyBhIGJ1ZyBpbiBJRSkKCQl2YXIgdSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSwKCQkJdiA9ICh1Lm1hdGNoKCAvLis/KD86cnZ8aXR8cmF8aWUpW1wvOiBdKFtcZC5dKykvICkgfHwgWzAsJzAnXSlbMV0sCgkJCWNzc19zdHJpbmcgPSAnJyArCgkJCQknLmpzdHJlZSB1bCwgLmpzdHJlZSBsaSB7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjowIDAgMCAwOyBwYWRkaW5nOjAgMCAwIDA7IGxpc3Qtc3R5bGUtdHlwZTpub25lOyB9ICcgKwoJCQkJJy5qc3RyZWUgbGkgeyBkaXNwbGF5OmJsb2NrOyBtaW4taGVpZ2h0OjE4cHg7IGxpbmUtaGVpZ2h0OjE4cHg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgbWFyZ2luLWxlZnQ6MThweDsgbWluLXdpZHRoOjE4cHg7IH0gJyArCgkJCQknLmpzdHJlZS1ydGwgbGkgeyBtYXJnaW4tbGVmdDowOyBtYXJnaW4tcmlnaHQ6MThweDsgfSAnICsKCQkJCScuanN0cmVlID4gdWwgPiBsaSB7IG1hcmdpbi1sZWZ0OjBweDsgfSAnICsKCQkJCScuanN0cmVlLXJ0bCA+IHVsID4gbGkgeyBtYXJnaW4tcmlnaHQ6MHB4OyB9ICcgKwoJCQkJJy5qc3RyZWUgaW5zIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjpub25lOyB3aWR0aDoxOHB4OyBoZWlnaHQ6MThweDsgbWFyZ2luOjAgMCAwIDA7IHBhZGRpbmc6MDsgfSAnICsKCQkJCScuanN0cmVlIGEgeyBkaXNwbGF5OmlubGluZS1ibG9jazsgbGluZS1oZWlnaHQ6MTZweDsgaGVpZ2h0OjE2cHg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IHBhZGRpbmc6MXB4IDJweDsgbWFyZ2luOjA7IH0gJyArIAoJCQkJJy5qc3RyZWUgYTpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IH0gJyArCgkJCQknLmpzdHJlZSBhID4gaW5zIHsgaGVpZ2h0OjE2cHg7IHdpZHRoOjE2cHg7IH0gJyArCgkJCQknLmpzdHJlZSBhID4gLmpzdHJlZS1pY29uIHsgbWFyZ2luLXJpZ2h0OjNweDsgfSAnICsKCQkJCScuanN0cmVlLXJ0bCBhID4gLmpzdHJlZS1pY29uIHsgbWFyZ2luLWxlZnQ6M3B4OyBtYXJnaW4tcmlnaHQ6MDsgfSAnICsKCQkJCSdsaS5qc3RyZWUtb3BlbiA+IHVsIHsgZGlzcGxheTpibG9jazsgfSAnICsKCQkJCSdsaS5qc3RyZWUtY2xvc2VkID4gdWwgeyBkaXNwbGF5Om5vbmU7IH0gJzsKCQkvLyBDb3JyZWN0IElFIDYgKGRvZXMgbm90IHN1cHBvcnQgdGhlID4gQ1NTIHNlbGVjdG9yKQoJCWlmKC9tc2llLy50ZXN0KHUpICYmIHBhcnNlSW50KHYsIDEwKSA9PSA2KSB7CgkJCWlzX2llNiA9IHRydWU7CgoJCQkvLyBmaXggaW1hZ2UgZmxpY2tlciBhbmQgbGFjayBvZiBjYWNoaW5nCgkJCXRyeSB7CgkJCQlkb2N1bWVudC5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUiLCBmYWxzZSwgdHJ1ZSk7CgkJCX0gY2F0Y2ggKGVycikgeyB9CgoJCQljc3Nfc3RyaW5nICs9ICcnICsKCQkJCScuanN0cmVlIGxpIHsgaGVpZ2h0OjE4cHg7IG1hcmdpbi1sZWZ0OjA7IG1hcmdpbi1yaWdodDowOyB9ICcgKwoJCQkJJy5qc3RyZWUgbGkgbGkgeyBtYXJnaW4tbGVmdDoxOHB4OyB9ICcgKwoJCQkJJy5qc3RyZWUtcnRsIGxpIGxpIHsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tcmlnaHQ6MThweDsgfSAnICsKCQkJCSdsaS5qc3RyZWUtb3BlbiB1bCB7IGRpc3BsYXk6YmxvY2s7IH0gJyArCgkJCQknbGkuanN0cmVlLWNsb3NlZCB1bCB7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9ICcgKwoJCQkJJy5qc3RyZWUgbGkgYSB7IGRpc3BsYXk6aW5saW5lOyBib3JkZXItd2lkdGg6MCAhaW1wb3J0YW50OyBwYWRkaW5nOjBweCAycHggIWltcG9ydGFudDsgfSAnICsKCQkJCScuanN0cmVlIGxpIGEgaW5zIHsgaGVpZ2h0OjE2cHg7IHdpZHRoOjE2cHg7IG1hcmdpbi1yaWdodDozcHg7IH0gJyArCgkJCQknLmpzdHJlZS1ydGwgbGkgYSBpbnMgeyBtYXJnaW4tcmlnaHQ6MHB4OyBtYXJnaW4tbGVmdDozcHg7IH0gJzsKCQl9CgkJLy8gQ29ycmVjdCBJRSA3IChzaGlmdHMgYW5jaG9yIG5vZGVzIG9uaG92ZXIpCgkJaWYoL21zaWUvLnRlc3QodSkgJiYgcGFyc2VJbnQodiwgMTApID09IDcpIHsKCQkJaXNfaWU3ID0gdHJ1ZTsKCQkJY3NzX3N0cmluZyArPSAnLmpzdHJlZSBsaSBhIHsgYm9yZGVyLXdpZHRoOjAgIWltcG9ydGFudDsgcGFkZGluZzowcHggMnB4ICFpbXBvcnRhbnQ7IH0gJzsKCQl9CgkJLy8gY29ycmVjdCBmZjIgbGFjayBvZiBkaXNwbGF5OmlubGluZS1ibG9jawoJCWlmKCEvY29tcGF0aWJsZS8udGVzdCh1KSAmJiAvbW96aWxsYS8udGVzdCh1KSAmJiBwYXJzZUZsb2F0KHYsIDEwKSA8IDEuOSkgewoJCQlpc19mZjIgPSB0cnVlOwoJCQljc3Nfc3RyaW5nICs9ICcnICsKCQkJCScuanN0cmVlIGlucyB7IGRpc3BsYXk6LW1vei1pbmxpbmUtYm94OyB9ICcgKwoJCQkJJy5qc3RyZWUgbGkgeyBsaW5lLWhlaWdodDoxMnB4OyB9ICcgKyAvLyBXSFk/PwoJCQkJJy5qc3RyZWUgYSB7IGRpc3BsYXk6LW1vei1pbmxpbmUtYm94OyB9ICcgKwoJCQkJJy5qc3RyZWUgLmpzdHJlZS1uby1pY29ucyAuanN0cmVlLWNoZWNrYm94IHsgZGlzcGxheTotbW96LWlubGluZS1zdGFjayAhaW1wb3J0YW50OyB9ICc7CgkJCQkvKiB0aGlzIHNob3VsZG4ndCBiZSBoZXJlIGFzIGl0IGlzIHRoZW1lIHNwZWNpZmljICovCgkJfQoJCS8vIHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQKCQkkLnZha2F0YS5jc3MuYWRkX3NoZWV0KHsgc3RyIDogY3NzX3N0cmluZywgdGl0bGUgOiAianN0cmVlIiB9KTsKCX0pOwoKCS8vIGNvcmUgZnVuY3Rpb25zIChvcGVuLCBjbG9zZSwgY3JlYXRlLCB1cGRhdGUsIGRlbGV0ZSkKCSQuanN0cmVlLnBsdWdpbigiY29yZSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZGF0YS5jb3JlLmxvY2tlZCA9IGZhbHNlOwoJCQl0aGlzLmRhdGEuY29yZS50b19vcGVuID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5jb3JlLmluaXRpYWxseV9vcGVuOwoJCQl0aGlzLmRhdGEuY29yZS50b19sb2FkID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5jb3JlLmluaXRpYWxseV9sb2FkOwoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCWh0bWxfdGl0bGVzCTogZmFsc2UsCgkJCWFuaW1hdGlvbgk6IDUwMCwKCQkJaW5pdGlhbGx5X29wZW4gOiBbXSwKCQkJaW5pdGlhbGx5X2xvYWQgOiBbXSwKCQkJb3Blbl9wYXJlbnRzIDogdHJ1ZSwKCQkJbm90aWZ5X3BsdWdpbnMgOiB0cnVlLAoJCQlydGwJCQk6IGZhbHNlLAoJCQlsb2FkX29wZW4JOiBmYWxzZSwKCQkJc3RyaW5ncwkJOiB7CgkJCQlsb2FkaW5nCQk6ICJMb2FkaW5nIC4uLiIsCgkJCQluZXdfbm9kZQk6ICJOZXcgbm9kZSIsCgkJCQltdWx0aXBsZV9zZWxlY3Rpb24gOiAiTXVsdGlwbGUgc2VsZWN0aW9uIgoJCQl9CgkJfSwKCQlfZm4gOiB7CgkJCWluaXQJOiBmdW5jdGlvbiAoKSB7CgkJCQl0aGlzLnNldF9mb2N1cygpOwoJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5ydGwpIHsKCQkJCQl0aGlzLmdldF9jb250YWluZXIoKS5hZGRDbGFzcygianN0cmVlLXJ0bCIpLmNzcygiZGlyZWN0aW9uIiwgInJ0bCIpOwoJCQkJfQoJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuaHRtbCgiPHVsPjxsaSBjbGFzcz0nanN0cmVlLWxhc3QganN0cmVlLWxlYWYnPjxpbnM+JiMxNjA7PC9pbnM+PGEgY2xhc3M9J2pzdHJlZS1sb2FkaW5nJyBocmVmPScjJz48aW5zIGNsYXNzPSdqc3RyZWUtaWNvbic+JiMxNjA7PC9pbnM+IiArIHRoaXMuX2dldF9zdHJpbmcoImxvYWRpbmciKSArICI8L2E+PC9saT48L3VsPiIpOwoJCQkJdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0ID0gdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZCgibGkuanN0cmVlLWNsb3NlZCwgbGkuanN0cmVlLWxlYWYiKS5lcSgwKS5oZWlnaHQoKSB8fCAxODsKCgkJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJCS5kZWxlZ2F0ZSgibGkgPiBpbnMiLCAiY2xpY2suanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZXZlbnQpIHsKCQkJCQkJCXZhciB0cmd0ID0gJChldmVudC50YXJnZXQpOwoJCQkJCQkJLy8gaWYodHJndC5pcygiaW5zIikgJiYgZXZlbnQucGFnZVkgLSB0cmd0Lm9mZnNldCgpLnRvcCA8IHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodCkgeyB0aGlzLnRvZ2dsZV9ub2RlKHRyZ3QpOyB9CgkJCQkJCQl0aGlzLnRvZ2dsZV9ub2RlKHRyZ3QpOwoJCQkJCQl9LCB0aGlzKSkKCQkJCQkuYmluZCgibW91c2Vkb3duLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKCkgewoJCQkJCQkJdGhpcy5zZXRfZm9jdXMoKTsgLy8gVGhpcyB1c2VkIHRvIGJlIHNldFRpbWVvdXQoc2V0X2ZvY3VzLDApIC0gd2h5PwoJCQkJCQl9LCB0aGlzKSkKCQkJCQkuYmluZCgiZGJsY2xpY2suanN0cmVlIiwgZnVuY3Rpb24gKGV2ZW50KSB7CgkJCQkJCXZhciBzZWw7CgkJCQkJCWlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHsgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7IH0KCQkJCQkJZWxzZSB7CgkJCQkJCQlpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7CgkJCQkJCQkJc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKCQkJCQkJCQkJc2VsLmNvbGxhcHNlKCk7CgkJCQkJCQkJfSBjYXRjaCAoZXJyKSB7IH0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0pOwoJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5ub3RpZnlfcGx1Z2lucykgewoJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkJCS5iaW5kKCJsb2FkX25vZGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQkJCXZhciBvID0gdGhpcy5fZ2V0X25vZGUoZGF0YS5yc2x0Lm9iaiksCgkJCQkJCQkJCXQgPSB0aGlzOwoJCQkJCQkJCWlmKG8gPT09IC0xKSB7IG8gPSB0aGlzLmdldF9jb250YWluZXJfdWwoKTsgfQoJCQkJCQkJCWlmKCFvLmxlbmd0aCkgeyByZXR1cm47IH0KCQkJCQkJCQlvLmZpbmQoImxpIikuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJCQkJCXZhciB0aCA9ICQodGhpcyk7CgkJCQkJCQkJCWlmKHRoLmRhdGEoImpzdHJlZSIpKSB7CgkJCQkJCQkJCQkkLmVhY2godGguZGF0YSgianN0cmVlIiksIGZ1bmN0aW9uIChwbHVnaW4sIHZhbHVlcykgewoJCQkJCQkJCQkJCWlmKHQuZGF0YVtwbHVnaW5dICYmICQuaXNGdW5jdGlvbih0WyJfIiArIHBsdWdpbiArICJfbm90aWZ5Il0pKSB7CgkJCQkJCQkJCQkJCXRbIl8iICsgcGx1Z2luICsgIl9ub3RpZnkiXS5jYWxsKHQsIHRoLCB2YWx1ZXMpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0pOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSk7CgkJCQkJCQl9LCB0aGlzKSk7CgkJCQl9CgkJCQlpZih0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLmxvYWRfb3BlbikgewoJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkJCS5iaW5kKCJsb2FkX25vZGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQkJCXZhciBvID0gdGhpcy5fZ2V0X25vZGUoZGF0YS5yc2x0Lm9iaiksCgkJCQkJCQkJCXQgPSB0aGlzOwoJCQkJCQkJCWlmKG8gPT09IC0xKSB7IG8gPSB0aGlzLmdldF9jb250YWluZXJfdWwoKTsgfQoJCQkJCQkJCWlmKCFvLmxlbmd0aCkgeyByZXR1cm47IH0KCQkJCQkJCQlvLmZpbmQoImxpLmpzdHJlZS1vcGVuOm5vdCg6aGFzKHVsKSkiKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCQkJdC5sb2FkX25vZGUodGhpcywgJC5ub29wLCAkLm5vb3ApOwoJCQkJCQkJCX0pOwoJCQkJCQkJfSwgdGhpcykpOwoJCQkJfQoJCQkJdGhpcy5fX2NhbGxiYWNrKCk7CgkJCQl0aGlzLmxvYWRfbm9kZSgtMSwgZnVuY3Rpb24gKCkgeyB0aGlzLmxvYWRlZCgpOyB0aGlzLnJlbG9hZF9ub2RlcygpOyB9KTsKCQkJfSwKCQkJZGVzdHJveQk6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBpLAoJCQkJCW4gPSB0aGlzLmdldF9pbmRleCgpLAoJCQkJCXMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKSwKCQkJCQlfdGhpcyA9IHRoaXM7CgoJCQkJJC5lYWNoKHMucGx1Z2lucywgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCXRyeSB7IHBsdWdpbnNbdmFsXS5fX2Rlc3Ryb3kuYXBwbHkoX3RoaXMpOyB9IGNhdGNoKGVycikgeyB9CgkJCQl9KTsKCQkJCXRoaXMuX19jYWxsYmFjaygpOwoJCQkJLy8gc2V0IGZvY3VzIHRvIGFub3RoZXIgaW5zdGFuY2UgaWYgdGhpcyBvbmUgaXMgZm9jdXNlZAoJCQkJaWYodGhpcy5pc19mb2N1c2VkKCkpIHsKCQkJCQlmb3IoaSBpbiBpbnN0YW5jZXMpIHsKCQkJCQkJaWYoaW5zdGFuY2VzLmhhc093blByb3BlcnR5KGkpICYmIGkgIT0gbikgewoJCQkJCQkJaW5zdGFuY2VzW2ldLnNldF9mb2N1cygpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkvLyBpZiBubyBvdGhlciBpbnN0YW5jZSBmb3VuZAoJCQkJaWYobiA9PT0gZm9jdXNlZF9pbnN0YW5jZSkgeyBmb2N1c2VkX2luc3RhbmNlID0gLTE7IH0KCQkJCS8vIHJlbW92ZSBhbGwgdHJhY2VzIG9mIGpzdHJlZSBpbiB0aGUgRE9NIChvbmx5IHRoZSBvbmVzIHNldCB1c2luZyBqc3RyZWUqKSBhbmQgY2xlYW5zIGFsbCBldmVudHMKCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkJLnVuYmluZCgiLmpzdHJlZSIpCgkJCQkJLnVuZGVsZWdhdGUoIi5qc3RyZWUiKQoJCQkJCS5yZW1vdmVEYXRhKCJqc3RyZWVfaW5zdGFuY2VfaWQiKQoJCQkJCS5maW5kKCJbY2xhc3NePSdqc3RyZWUnXSIpCgkJCQkJCS5hZGRCYWNrKCkKCQkJCQkJLmF0dHIoImNsYXNzIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgvanN0cmVlW14gXSp8JC9pZywnJyk7IH0pOwoJCQkJJChkb2N1bWVudCkKCQkJCQkudW5iaW5kKCIuanN0cmVlLSIgKyBuKQoJCQkJCS51bmRlbGVnYXRlKCIuanN0cmVlLSIgKyBuKTsKCQkJCS8vIHJlbW92ZSB0aGUgYWN0dWFsIGRhdGEKCQkJCWluc3RhbmNlc1tuXSA9IG51bGw7CgkJCQlkZWxldGUgaW5zdGFuY2VzW25dOwoJCQl9LAoKCQkJX2NvcmVfbm90aWZ5IDogZnVuY3Rpb24gKG4sIGRhdGEpIHsKCQkJCWlmKGRhdGEub3BlbmVkKSB7CgkJCQkJdGhpcy5vcGVuX25vZGUobiwgZmFsc2UsIHRydWUpOwoJCQkJfQoJCQl9LAoKCQkJbG9jayA6IGZ1bmN0aW9uICgpIHsKCQkJCXRoaXMuZGF0YS5jb3JlLmxvY2tlZCA9IHRydWU7CgkJCQl0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5hZGRDbGFzcygianN0cmVlLWxvY2tlZCIpLmNzcygib3BhY2l0eSIsIjAuNyIpOwoJCQkJdGhpcy5fX2NhbGxiYWNrKHt9KTsKCQkJfSwKCQkJdW5sb2NrIDogZnVuY3Rpb24gKCkgewoJCQkJdGhpcy5kYXRhLmNvcmUubG9ja2VkID0gZmFsc2U7CgkJCQl0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5yZW1vdmVDbGFzcygianN0cmVlLWxvY2tlZCIpLmNzcygib3BhY2l0eSIsIjEiKTsKCQkJCXRoaXMuX19jYWxsYmFjayh7fSk7CgkJCX0sCgkJCWlzX2xvY2tlZCA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZGF0YS5jb3JlLmxvY2tlZDsgfSwKCQkJc2F2ZV9vcGVuZWQgOiBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgX3RoaXMgPSB0aGlzOwoJCQkJdGhpcy5kYXRhLmNvcmUudG9fb3BlbiA9IFtdOwoJCQkJdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZCgibGkuanN0cmVlLW9wZW4iKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQlpZih0aGlzLmlkKSB7IF90aGlzLmRhdGEuY29yZS50b19vcGVuLnB1c2goIiMiICsgdGhpcy5pZC50b1N0cmluZygpLnJlcGxhY2UoL14jLywiIikucmVwbGFjZSgvXFxcLy9nLCIvIikucmVwbGFjZSgvXC8vZywiXFxcLyIpLnJlcGxhY2UoL1xcXC4vZywiLiIpLnJlcGxhY2UoL1wuL2csIlxcLiIpLnJlcGxhY2UoL1w6L2csIlxcOiIpKTsgfQoJCQkJfSk7CgkJCQl0aGlzLl9fY2FsbGJhY2soX3RoaXMuZGF0YS5jb3JlLnRvX29wZW4pOwoJCQl9LAoJCQlzYXZlX2xvYWRlZCA6IGZ1bmN0aW9uICgpIHsgfSwKCQkJcmVsb2FkX25vZGVzIDogZnVuY3Rpb24gKGlzX2NhbGxiYWNrKSB7CgkJCQl2YXIgX3RoaXMgPSB0aGlzLAoJCQkJCWRvbmUgPSB0cnVlLAoJCQkJCWN1cnJlbnQgPSBbXSwKCQkJCQlyZW1haW5pbmcgPSBbXTsKCQkJCWlmKCFpc19jYWxsYmFjaykgewoJCQkJCXRoaXMuZGF0YS5jb3JlLnJlb3BlbiA9IGZhbHNlOwoJCQkJCXRoaXMuZGF0YS5jb3JlLnJlZnJlc2hpbmcgPSB0cnVlOwoJCQkJCXRoaXMuZGF0YS5jb3JlLnRvX29wZW4gPSAkLm1hcCgkLm1ha2VBcnJheSh0aGlzLmRhdGEuY29yZS50b19vcGVuKSwgZnVuY3Rpb24gKG4pIHsgcmV0dXJuICIjIiArIG4udG9TdHJpbmcoKS5yZXBsYWNlKC9eIy8sIiIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1wvL2csIlxcXC8iKS5yZXBsYWNlKC9cXFwuL2csIi4iKS5yZXBsYWNlKC9cLi9nLCJcXC4iKS5yZXBsYWNlKC9cOi9nLCJcXDoiKTsgfSk7CgkJCQkJdGhpcy5kYXRhLmNvcmUudG9fbG9hZCA9ICQubWFwKCQubWFrZUFycmF5KHRoaXMuZGF0YS5jb3JlLnRvX2xvYWQpLCBmdW5jdGlvbiAobikgeyByZXR1cm4gIiMiICsgbi50b1N0cmluZygpLnJlcGxhY2UoL14jLywiIikucmVwbGFjZSgvXFxcLy9nLCIvIikucmVwbGFjZSgvXC8vZywiXFxcLyIpLnJlcGxhY2UoL1xcXC4vZywiLiIpLnJlcGxhY2UoL1wuL2csIlxcLiIpLnJlcGxhY2UoL1w6L2csIlxcOiIpOyB9KTsKCQkJCQlpZih0aGlzLmRhdGEuY29yZS50b19vcGVuLmxlbmd0aCkgewoJCQkJCQl0aGlzLmRhdGEuY29yZS50b19sb2FkID0gdGhpcy5kYXRhLmNvcmUudG9fbG9hZC5jb25jYXQodGhpcy5kYXRhLmNvcmUudG9fb3Blbik7CgkJCQkJfQoJCQkJfQoJCQkJaWYodGhpcy5kYXRhLmNvcmUudG9fbG9hZC5sZW5ndGgpIHsKCQkJCQkkLmVhY2godGhpcy5kYXRhLmNvcmUudG9fbG9hZCwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCQlpZih2YWwgPT0gIiMiKSB7IHJldHVybiB0cnVlOyB9CgkJCQkJCWlmKCQodmFsKS5sZW5ndGgpIHsgY3VycmVudC5wdXNoKHZhbCk7IH0KCQkJCQkJZWxzZSB7IHJlbWFpbmluZy5wdXNoKHZhbCk7IH0KCQkJCQl9KTsKCQkJCQlpZihjdXJyZW50Lmxlbmd0aCkgewoJCQkJCQl0aGlzLmRhdGEuY29yZS50b19sb2FkID0gcmVtYWluaW5nOwoJCQkJCQkkLmVhY2goY3VycmVudCwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCQkJaWYoIV90aGlzLl9pc19sb2FkZWQodmFsKSkgewoJCQkJCQkJCV90aGlzLmxvYWRfbm9kZSh2YWwsIGZ1bmN0aW9uICgpIHsgX3RoaXMucmVsb2FkX25vZGVzKHRydWUpOyB9LCBmdW5jdGlvbiAoKSB7IF90aGlzLnJlbG9hZF9ub2Rlcyh0cnVlKTsgfSk7CgkJCQkJCQkJZG9uZSA9IGZhbHNlOwoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQl9CgkJCQl9CgkJCQlpZih0aGlzLmRhdGEuY29yZS50b19vcGVuLmxlbmd0aCkgewoJCQkJCSQuZWFjaCh0aGlzLmRhdGEuY29yZS50b19vcGVuLCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQkJCV90aGlzLm9wZW5fbm9kZSh2YWwsIGZhbHNlLCB0cnVlKTsKCQkJCQl9KTsKCQkJCX0KCQkJCWlmKGRvbmUpIHsKCQkJCQkvLyBUT0RPOiBmaW5kIGEgbW9yZSBlbGVnYW50IGFwcHJvYWNoIHRvIHN5bmNyb25pemluZyByZXR1cm5pbmcgcmVxdWVzdHMKCQkJCQlpZih0aGlzLmRhdGEuY29yZS5yZW9wZW4pIHsgY2xlYXJUaW1lb3V0KHRoaXMuZGF0YS5jb3JlLnJlb3Blbik7IH0KCQkJCQl0aGlzLmRhdGEuY29yZS5yZW9wZW4gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgX3RoaXMuX19jYWxsYmFjayh7fSwgX3RoaXMpOyB9LCA1MCk7CgkJCQkJdGhpcy5kYXRhLmNvcmUucmVmcmVzaGluZyA9IGZhbHNlOwoJCQkJCXRoaXMucmVvcGVuKCk7CgkJCQl9CgkJCX0sCgkJCXJlb3BlbiA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBfdGhpcyA9IHRoaXM7CgkJCQlpZih0aGlzLmRhdGEuY29yZS50b19vcGVuLmxlbmd0aCkgewoJCQkJCSQuZWFjaCh0aGlzLmRhdGEuY29yZS50b19vcGVuLCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQkJCV90aGlzLm9wZW5fbm9kZSh2YWwsIGZhbHNlLCB0cnVlKTsKCQkJCQl9KTsKCQkJCX0KCQkJCXRoaXMuX19jYWxsYmFjayh7fSk7CgkJCX0sCgkJCXJlZnJlc2ggOiBmdW5jdGlvbiAob2JqKSB7CgkJCQl2YXIgX3RoaXMgPSB0aGlzOwoJCQkJdGhpcy5zYXZlX29wZW5lZCgpOwoJCQkJaWYoIW9iaikgeyBvYmogPSAtMTsgfQoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmopIHsgb2JqID0gLTE7IH0KCQkJCWlmKG9iaiAhPT0gLTEpIHsgb2JqLmNoaWxkcmVuKCJVTCIpLnJlbW92ZSgpOyB9CgkJCQllbHNlIHsgdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZW1wdHkoKTsgfQoJCQkJdGhpcy5sb2FkX25vZGUob2JqLCBmdW5jdGlvbiAoKSB7IF90aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9ian0pOyBfdGhpcy5yZWxvYWRfbm9kZXMoKTsgfSk7CgkJCX0sCgkJCS8vIER1bW15IGZ1bmN0aW9uIHRvIGZpcmUgYWZ0ZXIgdGhlIGZpcnN0IGxvYWQgKHNvIHRoYXQgdGhlcmUgaXMgYSBqc3RyZWUubG9hZGVkIGV2ZW50KQoJCQlsb2FkZWQJOiBmdW5jdGlvbiAoKSB7CgkJCQl0aGlzLl9fY2FsbGJhY2soKTsKCQkJfSwKCQkJLy8gZGVhbCB3aXRoIGZvY3VzCgkJCXNldF9mb2N1cwk6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKHRoaXMuaXNfZm9jdXNlZCgpKSB7IHJldHVybjsgfQoJCQkJdmFyIGYgPSAkLmpzdHJlZS5fZm9jdXNlZCgpOwoJCQkJaWYoZikgeyBmLnVuc2V0X2ZvY3VzKCk7IH0KCgkJCQl0aGlzLmdldF9jb250YWluZXIoKS5hZGRDbGFzcygianN0cmVlLWZvY3VzZWQiKTsKCQkJCWZvY3VzZWRfaW5zdGFuY2UgPSB0aGlzLmdldF9pbmRleCgpOwoJCQkJdGhpcy5fX2NhbGxiYWNrKCk7CgkJCX0sCgkJCWlzX2ZvY3VzZWQJOiBmdW5jdGlvbiAoKSB7CgkJCQlyZXR1cm4gZm9jdXNlZF9pbnN0YW5jZSA9PSB0aGlzLmdldF9pbmRleCgpOwoJCQl9LAoJCQl1bnNldF9mb2N1cwk6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKHRoaXMuaXNfZm9jdXNlZCgpKSB7CgkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkucmVtb3ZlQ2xhc3MoImpzdHJlZS1mb2N1c2VkIik7CgkJCQkJZm9jdXNlZF9pbnN0YW5jZSA9IC0xOwoJCQkJfQoJCQkJdGhpcy5fX2NhbGxiYWNrKCk7CgkJCX0sCgoJCQkvLyB0cmF2ZXJzZQoJCQlfZ2V0X25vZGUJCTogZnVuY3Rpb24gKG9iaikgewoJCQkJdmFyICRvYmogPSAkKG9iaiwgdGhpcy5nZXRfY29udGFpbmVyKCkpOwoJCQkJaWYoJG9iai5pcygiLmpzdHJlZSIpIHx8IG9iaiA9PSAtMSkgeyByZXR1cm4gLTE7IH0KCQkJCSRvYmogPSAkb2JqLmNsb3Nlc3QoImxpIiwgdGhpcy5nZXRfY29udGFpbmVyKCkpOwoJCQkJcmV0dXJuICRvYmoubGVuZ3RoID8gJG9iaiA6IGZhbHNlOwoJCQl9LAoJCQlfZ2V0X25leHQJCTogZnVuY3Rpb24gKG9iaiwgc3RyaWN0KSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJaWYob2JqID09PSAtMSkgeyByZXR1cm4gdGhpcy5nZXRfY29udGFpbmVyKCkuZmluZCgiPiB1bCA+IGxpOmZpcnN0LWNoaWxkIik7IH0KCQkJCWlmKCFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJaWYoc3RyaWN0KSB7IHJldHVybiAob2JqLm5leHRBbGwoImxpIikuc2l6ZSgpID4gMCkgPyBvYmoubmV4dEFsbCgibGk6ZXEoMCkiKSA6IGZhbHNlOyB9CgoJCQkJaWYob2JqLmhhc0NsYXNzKCJqc3RyZWUtb3BlbiIpKSB7IHJldHVybiBvYmouZmluZCgibGk6ZXEoMCkiKTsgfQoJCQkJZWxzZSBpZihvYmoubmV4dEFsbCgibGkiKS5zaXplKCkgPiAwKSB7IHJldHVybiBvYmoubmV4dEFsbCgibGk6ZXEoMCkiKTsgfQoJCQkJZWxzZSB7IHJldHVybiBvYmoucGFyZW50c1VudGlsKCIuanN0cmVlIiwibGkiKS5uZXh0KCJsaSIpLmVxKDApOyB9CgkJCX0sCgkJCV9nZXRfcHJldgkJOiBmdW5jdGlvbiAob2JqLCBzdHJpY3QpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT09IC0xKSB7IHJldHVybiB0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCI+IHVsID4gbGk6bGFzdC1jaGlsZCIpOyB9CgkJCQlpZighb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCWlmKHN0cmljdCkgeyByZXR1cm4gKG9iai5wcmV2QWxsKCJsaSIpLmxlbmd0aCA+IDApID8gb2JqLnByZXZBbGwoImxpOmVxKDApIikgOiBmYWxzZTsgfQoKCQkJCWlmKG9iai5wcmV2KCJsaSIpLmxlbmd0aCkgewoJCQkJCW9iaiA9IG9iai5wcmV2KCJsaSIpLmVxKDApOwoJCQkJCXdoaWxlKG9iai5oYXNDbGFzcygianN0cmVlLW9wZW4iKSkgeyBvYmogPSBvYmouY2hpbGRyZW4oInVsOmVxKDApIikuY2hpbGRyZW4oImxpOmxhc3QiKTsgfQoJCQkJCXJldHVybiBvYmo7CgkJCQl9CgkJCQllbHNlIHsgdmFyIG8gPSBvYmoucGFyZW50c1VudGlsKCIuanN0cmVlIiwibGk6ZXEoMCkiKTsgcmV0dXJuIG8ubGVuZ3RoID8gbyA6IGZhbHNlOyB9CgkJCX0sCgkJCV9nZXRfcGFyZW50CQk6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT0gLTEgfHwgIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQl2YXIgbyA9IG9iai5wYXJlbnRzVW50aWwoIi5qc3RyZWUiLCAibGk6ZXEoMCkiKTsKCQkJCXJldHVybiBvLmxlbmd0aCA/IG8gOiAtMTsKCQkJfSwKCQkJX2dldF9jaGlsZHJlbgk6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT09IC0xKSB7IHJldHVybiB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWw6ZXEoMCkiKS5jaGlsZHJlbigibGkiKTsgfQoJCQkJaWYoIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlyZXR1cm4gb2JqLmNoaWxkcmVuKCJ1bDplcSgwKSIpLmNoaWxkcmVuKCJsaSIpOwoJCQl9LAoJCQlnZXRfcGF0aAkJOiBmdW5jdGlvbiAob2JqLCBpZF9tb2RlKSB7CgkJCQl2YXIgcCA9IFtdLAoJCQkJCV90aGlzID0gdGhpczsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT09IC0xIHx8ICFvYmogfHwgIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlvYmoucGFyZW50c1VudGlsKCIuanN0cmVlIiwgImxpIikuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJcC5wdXNoKCBpZF9tb2RlID8gdGhpcy5pZCA6IF90aGlzLmdldF90ZXh0KHRoaXMpICk7CgkJCQl9KTsKCQkJCXAucmV2ZXJzZSgpOwoJCQkJcC5wdXNoKCBpZF9tb2RlID8gb2JqLmF0dHIoImlkIikgOiB0aGlzLmdldF90ZXh0KG9iaikgKTsKCQkJCXJldHVybiBwOwoJCQl9LAoKCQkJLy8gc3RyaW5nIGZ1bmN0aW9ucwoJCQlfZ2V0X3N0cmluZyA6IGZ1bmN0aW9uIChrZXkpIHsKCQkJCXJldHVybiB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLnN0cmluZ3Nba2V5XSB8fCBrZXk7CgkJCX0sCgoJCQlpc19vcGVuCQk6IGZ1bmN0aW9uIChvYmopIHsgb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsgcmV0dXJuIG9iaiAmJiBvYmogIT09IC0xICYmIG9iai5oYXNDbGFzcygianN0cmVlLW9wZW4iKTsgfSwKCQkJaXNfY2xvc2VkCTogZnVuY3Rpb24gKG9iaikgeyBvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOyByZXR1cm4gb2JqICYmIG9iaiAhPT0gLTEgJiYgb2JqLmhhc0NsYXNzKCJqc3RyZWUtY2xvc2VkIik7IH0sCgkJCWlzX2xlYWYJCTogZnVuY3Rpb24gKG9iaikgeyBvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOyByZXR1cm4gb2JqICYmIG9iaiAhPT0gLTEgJiYgb2JqLmhhc0NsYXNzKCJqc3RyZWUtbGVhZiIpOyB9LAoJCQljb3JyZWN0X3N0YXRlCTogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmogfHwgb2JqID09PSAtMSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCW9iai5yZW1vdmVDbGFzcygianN0cmVlLWNsb3NlZCBqc3RyZWUtb3BlbiIpLmFkZENsYXNzKCJqc3RyZWUtbGVhZiIpLmNoaWxkcmVuKCJ1bCIpLnJlbW92ZSgpOwoJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCX0sCgkJCS8vIG9wZW4vY2xvc2UKCQkJb3Blbl9ub2RlCTogZnVuY3Rpb24gKG9iaiwgY2FsbGJhY2ssIHNraXBfYW5pbWF0aW9uKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJaWYoIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlpZighb2JqLmhhc0NsYXNzKCJqc3RyZWUtY2xvc2VkIikpIHsgaWYoY2FsbGJhY2spIHsgY2FsbGJhY2suY2FsbCgpOyB9IHJldHVybiBmYWxzZTsgfQoJCQkJdmFyIHMgPSBza2lwX2FuaW1hdGlvbiB8fCBpc19pZTYgPyAwIDogdGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5hbmltYXRpb24sCgkJCQkJdCA9IHRoaXM7CgkJCQlpZighdGhpcy5faXNfbG9hZGVkKG9iaikpIHsKCQkJCQlvYmouY2hpbGRyZW4oImEiKS5hZGRDbGFzcygianN0cmVlLWxvYWRpbmciKTsKCQkJCQl0aGlzLmxvYWRfbm9kZShvYmosIGZ1bmN0aW9uICgpIHsgdC5vcGVuX25vZGUob2JqLCBjYWxsYmFjaywgc2tpcF9hbmltYXRpb24pOyB9LCBjYWxsYmFjayk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZih0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLm9wZW5fcGFyZW50cykgewoJCQkJCQlvYmoucGFyZW50c1VudGlsKCIuanN0cmVlIiwiLmpzdHJlZS1jbG9zZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCXQub3Blbl9ub2RlKHRoaXMsIGZhbHNlLCB0cnVlKTsKCQkJCQkJfSk7CgkJCQkJfQoJCQkJCWlmKHMpIHsgb2JqLmNoaWxkcmVuKCJ1bCIpLmNzcygiZGlzcGxheSIsIm5vbmUiKTsgfQoJCQkJCW9iai5yZW1vdmVDbGFzcygianN0cmVlLWNsb3NlZCIpLmFkZENsYXNzKCJqc3RyZWUtb3BlbiIpLmNoaWxkcmVuKCJhIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1sb2FkaW5nIik7CgkJCQkJaWYocykgeyBvYmouY2hpbGRyZW4oInVsIikuc3RvcCh0cnVlLCB0cnVlKS5zbGlkZURvd24ocywgZnVuY3Rpb24gKCkgeyB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiIjsgdC5hZnRlcl9vcGVuKG9iaik7IH0pOyB9CgkJCQkJZWxzZSB7IHQuYWZ0ZXJfb3BlbihvYmopOyB9CgkJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCQkJaWYoY2FsbGJhY2spIHsgY2FsbGJhY2suY2FsbCgpOyB9CgkJCQl9CgkJCX0sCgkJCWFmdGVyX29wZW4JOiBmdW5jdGlvbiAob2JqKSB7IHRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqIH0pOyB9LAoJCQljbG9zZV9ub2RlCTogZnVuY3Rpb24gKG9iaiwgc2tpcF9hbmltYXRpb24pIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl2YXIgcyA9IHNraXBfYW5pbWF0aW9uIHx8IGlzX2llNiA/IDAgOiB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLmFuaW1hdGlvbiwKCQkJCQl0ID0gdGhpczsKCQkJCWlmKCFvYmoubGVuZ3RoIHx8ICFvYmouaGFzQ2xhc3MoImpzdHJlZS1vcGVuIikpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlpZihzKSB7IG9iai5jaGlsZHJlbigidWwiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIpOyB9CgkJCQlvYmoucmVtb3ZlQ2xhc3MoImpzdHJlZS1vcGVuIikuYWRkQ2xhc3MoImpzdHJlZS1jbG9zZWQiKTsKCQkJCWlmKHMpIHsgb2JqLmNoaWxkcmVuKCJ1bCIpLnN0b3AodHJ1ZSwgdHJ1ZSkuc2xpZGVVcChzLCBmdW5jdGlvbiAoKSB7IHRoaXMuc3R5bGUuZGlzcGxheSA9ICIiOyB0LmFmdGVyX2Nsb3NlKG9iaik7IH0pOyB9CgkJCQllbHNlIHsgdC5hZnRlcl9jbG9zZShvYmopOyB9CgkJCQl0aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9iaiB9KTsKCQkJfSwKCQkJYWZ0ZXJfY2xvc2UJOiBmdW5jdGlvbiAob2JqKSB7IHRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqIH0pOyB9LAoJCQl0b2dnbGVfbm9kZQk6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmouaGFzQ2xhc3MoImpzdHJlZS1jbG9zZWQiKSkgeyByZXR1cm4gdGhpcy5vcGVuX25vZGUob2JqKTsgfQoJCQkJaWYob2JqLmhhc0NsYXNzKCJqc3RyZWUtb3BlbiIpKSB7IHJldHVybiB0aGlzLmNsb3NlX25vZGUob2JqKTsgfQoJCQl9LAoJCQlvcGVuX2FsbAk6IGZ1bmN0aW9uIChvYmosIGRvX2FuaW1hdGlvbiwgb3JpZ2luYWxfb2JqKSB7CgkJCQlvYmogPSBvYmogPyB0aGlzLl9nZXRfbm9kZShvYmopIDogLTE7CgkJCQlpZighb2JqIHx8IG9iaiA9PT0gLTEpIHsgb2JqID0gdGhpcy5nZXRfY29udGFpbmVyX3VsKCk7IH0KCQkJCWlmKG9yaWdpbmFsX29iaikgewoJCQkJCW9iaiA9IG9iai5maW5kKCJsaS5qc3RyZWUtY2xvc2VkIik7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlvcmlnaW5hbF9vYmogPSBvYmo7CgkJCQkJaWYob2JqLmlzKCIuanN0cmVlLWNsb3NlZCIpKSB7IG9iaiA9IG9iai5maW5kKCJsaS5qc3RyZWUtY2xvc2VkIikuYWRkQmFjaygpOyB9CgkJCQkJZWxzZSB7IG9iaiA9IG9iai5maW5kKCJsaS5qc3RyZWUtY2xvc2VkIik7IH0KCQkJCX0KCQkJCXZhciBfdGhpcyA9IHRoaXM7CgkJCQlvYmouZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJdmFyIF9fdGhpcyA9IHRoaXM7CgkJCQkJaWYoIV90aGlzLl9pc19sb2FkZWQodGhpcykpIHsgX3RoaXMub3Blbl9ub2RlKHRoaXMsIGZ1bmN0aW9uKCkgeyBfdGhpcy5vcGVuX2FsbChfX3RoaXMsIGRvX2FuaW1hdGlvbiwgb3JpZ2luYWxfb2JqKTsgfSwgIWRvX2FuaW1hdGlvbik7IH0KCQkJCQllbHNlIHsgX3RoaXMub3Blbl9ub2RlKHRoaXMsIGZhbHNlLCAhZG9fYW5pbWF0aW9uKTsgfQoJCQkJfSk7CgkJCQkvLyBzbyB0aGF0IGNhbGxiYWNrIGlzIGZpcmVkIEFGVEVSIGFsbCBub2RlcyBhcmUgb3BlbgoJCQkJaWYob3JpZ2luYWxfb2JqLmZpbmQoJ2xpLmpzdHJlZS1jbG9zZWQnKS5sZW5ndGggPT09IDApIHsgdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvcmlnaW5hbF9vYmogfSk7IH0KCQkJfSwKCQkJY2xvc2VfYWxsCTogZnVuY3Rpb24gKG9iaiwgZG9fYW5pbWF0aW9uKSB7CgkJCQl2YXIgX3RoaXMgPSB0aGlzOwoJCQkJb2JqID0gb2JqID8gdGhpcy5fZ2V0X25vZGUob2JqKSA6IHRoaXMuZ2V0X2NvbnRhaW5lcigpOwoJCQkJaWYoIW9iaiB8fCBvYmogPT09IC0xKSB7IG9iaiA9IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpOyB9CgkJCQlvYmouZmluZCgibGkuanN0cmVlLW9wZW4iKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbiAoKSB7IF90aGlzLmNsb3NlX25vZGUodGhpcywgIWRvX2FuaW1hdGlvbik7IH0pOwoJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCX0sCgkJCWNsZWFuX25vZGUJOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSBvYmogJiYgb2JqICE9IC0xID8gJChvYmopIDogdGhpcy5nZXRfY29udGFpbmVyX3VsKCk7CgkJCQlvYmogPSBvYmouaXMoImxpIikgPyBvYmouZmluZCgibGkiKS5hZGRCYWNrKCkgOiBvYmouZmluZCgibGkiKTsKCQkJCW9iai5yZW1vdmVDbGFzcygianN0cmVlLWxhc3QiKQoJCQkJCS5maWx0ZXIoImxpOmxhc3QtY2hpbGQiKS5hZGRDbGFzcygianN0cmVlLWxhc3QiKS5lbmQoKQoJCQkJCS5maWx0ZXIoIjpoYXMobGkpIikKCQkJCQkJLm5vdCgiLmpzdHJlZS1vcGVuIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1sZWFmIikuYWRkQ2xhc3MoImpzdHJlZS1jbG9zZWQiKTsKCQkJCW9iai5ub3QoIi5qc3RyZWUtb3BlbiwgLmpzdHJlZS1jbG9zZWQiKS5hZGRDbGFzcygianN0cmVlLWxlYWYiKS5jaGlsZHJlbigidWwiKS5yZW1vdmUoKTsKCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqIH0pOwoJCQl9LAoJCQkvLyByb2xsYmFjawoJCQlnZXRfcm9sbGJhY2sgOiBmdW5jdGlvbiAoKSB7CgkJCQl0aGlzLl9fY2FsbGJhY2soKTsKCQkJCXJldHVybiB7IGkgOiB0aGlzLmdldF9pbmRleCgpLCBoIDogdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuY2xvbmUodHJ1ZSksIGQgOiB0aGlzLmRhdGEgfTsKCQkJfSwKCQkJc2V0X3JvbGxiYWNrIDogZnVuY3Rpb24gKGh0bWwsIGRhdGEpIHsKCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmVtcHR5KCkuYXBwZW5kKGh0bWwpOwoJCQkJdGhpcy5kYXRhID0gZGF0YTsKCQkJCXRoaXMuX19jYWxsYmFjaygpOwoJCQl9LAoJCQkvLyBEdW1teSBmdW5jdGlvbnMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgYW55IGRhdGFzdG9yZSBwbHVnaW4gaW5jbHVkZWQKCQkJbG9hZF9ub2RlCTogZnVuY3Rpb24gKG9iaiwgc19jYWxsLCBlX2NhbGwpIHsgdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7IH0sCgkJCV9pc19sb2FkZWQJOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0cnVlOyB9LAoKCQkJLy8gQmFzaWMgb3BlcmF0aW9uczogY3JlYXRlCgkJCWNyZWF0ZV9ub2RlCTogZnVuY3Rpb24gKG9iaiwgcG9zaXRpb24sIGpzLCBjYWxsYmFjaywgaXNfbG9hZGVkKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJcG9zaXRpb24gPSB0eXBlb2YgcG9zaXRpb24gPT09ICJ1bmRlZmluZWQiID8gImxhc3QiIDogcG9zaXRpb247CgkJCQl2YXIgZCA9ICQoIjxsaSAvPiIpLAoJCQkJCXMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLAoJCQkJCXRtcDsKCgkJCQlpZihvYmogIT09IC0xICYmICFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJaWYoIWlzX2xvYWRlZCAmJiAhdGhpcy5faXNfbG9hZGVkKG9iaikpIHsgdGhpcy5sb2FkX25vZGUob2JqLCBmdW5jdGlvbiAoKSB7IHRoaXMuY3JlYXRlX25vZGUob2JqLCBwb3NpdGlvbiwganMsIGNhbGxiYWNrLCB0cnVlKTsgfSk7IHJldHVybiBmYWxzZTsgfQoKCQkJCXRoaXMuX19yb2xsYmFjaygpOwoKCQkJCWlmKHR5cGVvZiBqcyA9PT0gInN0cmluZyIpIHsganMgPSB7ICJkYXRhIiA6IGpzIH07IH0KCQkJCWlmKCFqcykgeyBqcyA9IHt9OyB9CgkJCQlpZihqcy5hdHRyKSB7IGQuYXR0cihqcy5hdHRyKTsgfQoJCQkJaWYoanMubWV0YWRhdGEpIHsgZC5kYXRhKGpzLm1ldGFkYXRhKTsgfQoJCQkJaWYoanMuc3RhdGUpIHsgZC5hZGRDbGFzcygianN0cmVlLSIgKyBqcy5zdGF0ZSk7IH0KCQkJCWlmKCFqcy5kYXRhKSB7IGpzLmRhdGEgPSB0aGlzLl9nZXRfc3RyaW5nKCJuZXdfbm9kZSIpOyB9CgkJCQlpZighJC5pc0FycmF5KGpzLmRhdGEpKSB7IHRtcCA9IGpzLmRhdGE7IGpzLmRhdGEgPSBbXTsganMuZGF0YS5wdXNoKHRtcCk7IH0KCQkJCSQuZWFjaChqcy5kYXRhLCBmdW5jdGlvbiAoaSwgbSkgewoJCQkJCXRtcCA9ICQoIjxhIC8+Iik7CgkJCQkJaWYoJC5pc0Z1bmN0aW9uKG0pKSB7IG0gPSBtLmNhbGwodGhpcywganMpOyB9CgkJCQkJaWYodHlwZW9mIG0gPT0gInN0cmluZyIpIHsgdG1wLmF0dHIoJ2hyZWYnLCcjJylbIHMuaHRtbF90aXRsZXMgPyAiaHRtbCIgOiAidGV4dCIgXShtKTsgfQoJCQkJCWVsc2UgewoJCQkJCQlpZighbS5hdHRyKSB7IG0uYXR0ciA9IHt9OyB9CgkJCQkJCWlmKCFtLmF0dHIuaHJlZikgeyBtLmF0dHIuaHJlZiA9ICcjJzsgfQoJCQkJCQl0bXAuYXR0cihtLmF0dHIpWyBzLmh0bWxfdGl0bGVzID8gImh0bWwiIDogInRleHQiIF0obS50aXRsZSk7CgkJCQkJCWlmKG0ubGFuZ3VhZ2UpIHsgdG1wLmFkZENsYXNzKG0ubGFuZ3VhZ2UpOyB9CgkJCQkJfQoJCQkJCXRtcC5wcmVwZW5kKCI8aW5zIGNsYXNzPSdqc3RyZWUtaWNvbic+JiMxNjA7PC9pbnM+Iik7CgkJCQkJaWYoIW0uaWNvbiAmJiBqcy5pY29uKSB7IG0uaWNvbiA9IGpzLmljb247IH0KCQkJCQlpZihtLmljb24pIHsKCQkJCQkJaWYobS5pY29uLmluZGV4T2YoIi8iKSA9PT0gLTEpIHsgdG1wLmNoaWxkcmVuKCJpbnMiKS5hZGRDbGFzcyhtLmljb24pOyB9CgkJCQkJCWVsc2UgeyB0bXAuY2hpbGRyZW4oImlucyIpLmNzcygiYmFja2dyb3VuZCIsInVybCgnIiArIG0uaWNvbiArICInKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCIpOyB9CgkJCQkJfQoJCQkJCWQuYXBwZW5kKHRtcCk7CgkJCQl9KTsKCQkJCWQucHJlcGVuZCgiPGlucyBjbGFzcz0nanN0cmVlLWljb24nPiYjMTYwOzwvaW5zPiIpOwoJCQkJaWYob2JqID09PSAtMSkgewoJCQkJCW9iaiA9IHRoaXMuZ2V0X2NvbnRhaW5lcigpOwoJCQkJCWlmKHBvc2l0aW9uID09PSAiYmVmb3JlIikgeyBwb3NpdGlvbiA9ICJmaXJzdCI7IH0KCQkJCQlpZihwb3NpdGlvbiA9PT0gImFmdGVyIikgeyBwb3NpdGlvbiA9ICJsYXN0IjsgfQoJCQkJfQoJCQkJc3dpdGNoKHBvc2l0aW9uKSB7CgkJCQkJY2FzZSAiYmVmb3JlIjogb2JqLmJlZm9yZShkKTsgdG1wID0gdGhpcy5fZ2V0X3BhcmVudChvYmopOyBicmVhazsKCQkJCQljYXNlICJhZnRlciIgOiBvYmouYWZ0ZXIoZCk7ICB0bXAgPSB0aGlzLl9nZXRfcGFyZW50KG9iaik7IGJyZWFrOwoJCQkJCWNhc2UgImluc2lkZSI6CgkJCQkJY2FzZSAiZmlyc3QiIDoKCQkJCQkJaWYoIW9iai5jaGlsZHJlbigidWwiKS5sZW5ndGgpIHsgb2JqLmFwcGVuZCgiPHVsIC8+Iik7IH0KCQkJCQkJb2JqLmNoaWxkcmVuKCJ1bCIpLnByZXBlbmQoZCk7CgkJCQkJCXRtcCA9IG9iajsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAibGFzdCI6CgkJCQkJCWlmKCFvYmouY2hpbGRyZW4oInVsIikubGVuZ3RoKSB7IG9iai5hcHBlbmQoIjx1bCAvPiIpOyB9CgkJCQkJCW9iai5jaGlsZHJlbigidWwiKS5hcHBlbmQoZCk7CgkJCQkJCXRtcCA9IG9iajsKCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoKCQkJCQkJaWYoIW9iai5jaGlsZHJlbigidWwiKS5sZW5ndGgpIHsgb2JqLmFwcGVuZCgiPHVsIC8+Iik7IH0KCQkJCQkJaWYoIXBvc2l0aW9uKSB7IHBvc2l0aW9uID0gMDsgfQoJCQkJCQl0bXAgPSBvYmouY2hpbGRyZW4oInVsIikuY2hpbGRyZW4oImxpIikuZXEocG9zaXRpb24pOwoJCQkJCQlpZih0bXAubGVuZ3RoKSB7IHRtcC5iZWZvcmUoZCk7IH0KCQkJCQkJZWxzZSB7IG9iai5jaGlsZHJlbigidWwiKS5hcHBlbmQoZCk7IH0KCQkJCQkJdG1wID0gb2JqOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKHRtcCA9PT0gLTEgfHwgdG1wLmdldCgwKSA9PT0gdGhpcy5nZXRfY29udGFpbmVyKCkuZ2V0KDApKSB7IHRtcCA9IC0xOyB9CgkJCQl0aGlzLmNsZWFuX25vZGUodG1wKTsKCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogZCwgInBhcmVudCIgOiB0bXAgfSk7CgkJCQlpZihjYWxsYmFjaykgeyBjYWxsYmFjay5jYWxsKHRoaXMsIGQpOyB9CgkJCQlyZXR1cm4gZDsKCQkJfSwKCQkJLy8gQmFzaWMgb3BlcmF0aW9uczogcmVuYW1lIChkZWFsIHdpdGggdGV4dCkKCQkJZ2V0X3RleHQJOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJaWYoIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQl2YXIgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNvcmUuaHRtbF90aXRsZXM7CgkJCQlvYmogPSBvYmouY2hpbGRyZW4oImE6ZXEoMCkiKTsKCQkJCWlmKHMpIHsKCQkJCQlvYmogPSBvYmouY2xvbmUoKTsKCQkJCQlvYmouY2hpbGRyZW4oIklOUyIpLnJlbW92ZSgpOwoJCQkJCXJldHVybiBvYmouaHRtbCgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJb2JqID0gb2JqLmNvbnRlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5ub2RlVHlwZSA9PSAzOyB9KVswXTsKCQkJCQlyZXR1cm4gb2JqLm5vZGVWYWx1ZTsKCQkJCX0KCQkJfSwKCQkJc2V0X3RleHQJOiBmdW5jdGlvbiAob2JqLCB2YWwpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZighb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCW9iaiA9IG9iai5jaGlsZHJlbigiYTplcSgwKSIpOwoJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5odG1sX3RpdGxlcykgewoJCQkJCXZhciB0bXAgPSBvYmouY2hpbGRyZW4oIklOUyIpLmNsb25lKCk7CgkJCQkJb2JqLmh0bWwodmFsKS5wcmVwZW5kKHRtcCk7CgkJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmosICJuYW1lIiA6IHZhbCB9KTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCW9iaiA9IG9iai5jb250ZW50cygpLmZpbHRlcihmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubm9kZVR5cGUgPT0gMzsgfSlbMF07CgkJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmosICJuYW1lIiA6IHZhbCB9KTsKCQkJCQlyZXR1cm4gKG9iai5ub2RlVmFsdWUgPSB2YWwpOwoJCQkJfQoJCQl9LAoJCQlyZW5hbWVfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHZhbCkgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCXRoaXMuX19yb2xsYmFjaygpOwoJCQkJaWYob2JqICYmIG9iai5sZW5ndGggJiYgdGhpcy5zZXRfdGV4dC5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkgeyB0aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9iaiwgIm5hbWUiIDogdmFsIH0pOyB9CgkJCX0sCgkJCS8vIEJhc2ljIG9wZXJhdGlvbnM6IGRlbGV0aW5nIG5vZGVzCgkJCWRlbGV0ZV9ub2RlIDogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJdGhpcy5fX3JvbGxiYWNrKCk7CgkJCQl2YXIgcCA9IHRoaXMuX2dldF9wYXJlbnQob2JqKSwgcHJldiA9ICQoW10pLCB0ID0gdGhpczsKCQkJCW9iai5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQlwcmV2ID0gcHJldi5hZGQodC5fZ2V0X3ByZXYodGhpcykpOwoJCQkJfSk7CgkJCQlvYmogPSBvYmouZGV0YWNoKCk7CgkJCQlpZihwICE9PSAtMSAmJiBwLmZpbmQoIj4gdWwgPiBsaSIpLmxlbmd0aCA9PT0gMCkgewoJCQkJCXAucmVtb3ZlQ2xhc3MoImpzdHJlZS1vcGVuIGpzdHJlZS1jbG9zZWQiKS5hZGRDbGFzcygianN0cmVlLWxlYWYiKTsKCQkJCX0KCQkJCXRoaXMuY2xlYW5fbm9kZShwKTsKCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqLCAicHJldiIgOiBwcmV2LCAicGFyZW50IiA6IHAgfSk7CgkJCQlyZXR1cm4gb2JqOwoJCQl9LAoJCQlwcmVwYXJlX21vdmUgOiBmdW5jdGlvbiAobywgciwgcG9zLCBjYiwgaXNfY2IpIHsKCQkJCXZhciBwID0ge307CgoJCQkJcC5vdCA9ICQuanN0cmVlLl9yZWZlcmVuY2UobykgfHwgdGhpczsKCQkJCXAubyA9IHAub3QuX2dldF9ub2RlKG8pOwoJCQkJcC5yID0gciA9PT0gLSAxID8gLTEgOiB0aGlzLl9nZXRfbm9kZShyKTsKCQkJCXAucCA9ICh0eXBlb2YgcG9zID09PSAidW5kZWZpbmVkIiB8fCBwb3MgPT09IGZhbHNlKSA/ICJsYXN0IiA6IHBvczsgLy8gVE9ETzogbW92ZSB0byBhIHNldHRpbmcKCQkJCWlmKCFpc19jYiAmJiBwcmVwYXJlZF9tb3ZlLm8gJiYgcHJlcGFyZWRfbW92ZS5vWzBdID09PSBwLm9bMF0gJiYgcHJlcGFyZWRfbW92ZS5yWzBdID09PSBwLnJbMF0gJiYgcHJlcGFyZWRfbW92ZS5wID09PSBwLnApIHsKCQkJCQl0aGlzLl9fY2FsbGJhY2socHJlcGFyZWRfbW92ZSk7CgkJCQkJaWYoY2IpIHsgY2IuY2FsbCh0aGlzLCBwcmVwYXJlZF9tb3ZlKTsgfQoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXAub3QgPSAkLmpzdHJlZS5fcmVmZXJlbmNlKHAubykgfHwgdGhpczsKCQkJCXAucnQgPSAkLmpzdHJlZS5fcmVmZXJlbmNlKHAucikgfHwgdGhpczsgLy8gciA9PT0gLTEgPyBwLm90IDogJC5qc3RyZWUuX3JlZmVyZW5jZShwLnIpIHx8IHRoaXMKCQkJCWlmKHAuciA9PT0gLTEgfHwgIXAucikgewoJCQkJCXAuY3IgPSAtMTsKCQkJCQlzd2l0Y2gocC5wKSB7CgkJCQkJCWNhc2UgImZpcnN0IjoKCQkJCQkJY2FzZSAiYmVmb3JlIjoKCQkJCQkJY2FzZSAiaW5zaWRlIjoKCQkJCQkJCXAuY3AgPSAwOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgImFmdGVyIjoKCQkJCQkJY2FzZSAibGFzdCI6CgkJCQkJCQlwLmNwID0gcC5ydC5nZXRfY29udGFpbmVyKCkuZmluZCgiID4gdWwgPiBsaSIpLmxlbmd0aDsKCQkJCQkJCWJyZWFrOwoJCQkJCQlkZWZhdWx0OgoJCQkJCQkJcC5jcCA9IHAucDsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlmKCEvXihiZWZvcmV8YWZ0ZXIpJC8udGVzdChwLnApICYmICF0aGlzLl9pc19sb2FkZWQocC5yKSkgewoJCQkJCQlyZXR1cm4gdGhpcy5sb2FkX25vZGUocC5yLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJlcGFyZV9tb3ZlKG8sIHIsIHBvcywgY2IsIHRydWUpOyB9KTsKCQkJCQl9CgkJCQkJc3dpdGNoKHAucCkgewoJCQkJCQljYXNlICJiZWZvcmUiOgoJCQkJCQkJcC5jcCA9IHAuci5pbmRleCgpOwoJCQkJCQkJcC5jciA9IHAucnQuX2dldF9wYXJlbnQocC5yKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJhZnRlciI6CgkJCQkJCQlwLmNwID0gcC5yLmluZGV4KCkgKyAxOwoJCQkJCQkJcC5jciA9IHAucnQuX2dldF9wYXJlbnQocC5yKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJpbnNpZGUiOgoJCQkJCQljYXNlICJmaXJzdCI6CgkJCQkJCQlwLmNwID0gMDsKCQkJCQkJCXAuY3IgPSBwLnI7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAibGFzdCI6CgkJCQkJCQlwLmNwID0gcC5yLmZpbmQoIiA+IHVsID4gbGkiKS5sZW5ndGg7CgkJCQkJCQlwLmNyID0gcC5yOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWRlZmF1bHQ6CgkJCQkJCQlwLmNwID0gcC5wOwoJCQkJCQkJcC5jciA9IHAucjsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXAubnAgPSBwLmNyID09IC0xID8gcC5ydC5nZXRfY29udGFpbmVyKCkgOiBwLmNyOwoJCQkJcC5vcCA9IHAub3QuX2dldF9wYXJlbnQocC5vKTsKCQkJCXAuY29wID0gcC5vLmluZGV4KCk7CgkJCQlpZihwLm9wID09PSAtMSkgeyBwLm9wID0gcC5vdCA/IHAub3QuZ2V0X2NvbnRhaW5lcigpIDogdGhpcy5nZXRfY29udGFpbmVyKCk7IH0KCQkJCWlmKCEvXihiZWZvcmV8YWZ0ZXIpJC8udGVzdChwLnApICYmIHAub3AgJiYgcC5ucCAmJiBwLm9wWzBdID09PSBwLm5wWzBdICYmIHAuby5pbmRleCgpIDwgcC5jcCkgeyBwLmNwKys7IH0KCQkJCS8vaWYocC5wID09PSAiYmVmb3JlIiAmJiBwLm9wICYmIHAubnAgJiYgcC5vcFswXSA9PT0gcC5ucFswXSAmJiBwLm8uaW5kZXgoKSA8IHAuY3ApIHsgcC5jcC0tOyB9CgkJCQlwLm9yID0gcC5ucC5maW5kKCIgPiB1bCA+IGxpOm50aC1jaGlsZCgiICsgKHAuY3AgKyAxKSArICIpIik7CgkJCQlwcmVwYXJlZF9tb3ZlID0gcDsKCQkJCXRoaXMuX19jYWxsYmFjayhwcmVwYXJlZF9tb3ZlKTsKCQkJCWlmKGNiKSB7IGNiLmNhbGwodGhpcywgcHJlcGFyZWRfbW92ZSk7IH0KCQkJfSwKCQkJY2hlY2tfbW92ZSA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBvYmogPSBwcmVwYXJlZF9tb3ZlLCByZXQgPSB0cnVlLCByID0gb2JqLnIgPT09IC0xID8gdGhpcy5nZXRfY29udGFpbmVyKCkgOiBvYmoucjsKCQkJCWlmKCFvYmogfHwgIW9iai5vIHx8IG9iai5vclswXSA9PT0gb2JqLm9bMF0pIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlpZighb2JqLmN5KSB7CgkJCQkJaWYob2JqLm9wICYmIG9iai5ucCAmJiBvYmoub3BbMF0gPT09IG9iai5ucFswXSAmJiBvYmouY3AgLSAxID09PSBvYmouby5pbmRleCgpKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJCW9iai5vLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJCQlpZihyLnBhcmVudHNVbnRpbCgiLmpzdHJlZSIsICJsaSIpLmFkZEJhY2soKS5pbmRleCh0aGlzKSAhPT0gLTEpIHsgcmV0ID0gZmFsc2U7IHJldHVybiBmYWxzZTsgfQoJCQkJCX0pOwoJCQkJfQoJCQkJcmV0dXJuIHJldDsKCQkJfSwKCQkJbW92ZV9ub2RlIDogZnVuY3Rpb24gKG9iaiwgcmVmLCBwb3NpdGlvbiwgaXNfY29weSwgaXNfcHJlcGFyZWQsIHNraXBfY2hlY2spIHsKCQkJCWlmKCFpc19wcmVwYXJlZCkgewoJCQkJCXJldHVybiB0aGlzLnByZXBhcmVfbW92ZShvYmosIHJlZiwgcG9zaXRpb24sIGZ1bmN0aW9uIChwKSB7CgkJCQkJCXRoaXMubW92ZV9ub2RlKHAsIGZhbHNlLCBmYWxzZSwgaXNfY29weSwgdHJ1ZSwgc2tpcF9jaGVjayk7CgkJCQkJfSk7CgkJCQl9CgkJCQlpZihpc19jb3B5KSB7CgkJCQkJcHJlcGFyZWRfbW92ZS5jeSA9IHRydWU7CgkJCQl9CgkJCQlpZighc2tpcF9jaGVjayAmJiAhdGhpcy5jaGVja19tb3ZlKCkpIHsgcmV0dXJuIGZhbHNlOyB9CgoJCQkJdGhpcy5fX3JvbGxiYWNrKCk7CgkJCQl2YXIgbyA9IGZhbHNlOwoJCQkJaWYoaXNfY29weSkgewoJCQkJCW8gPSBvYmouby5jbG9uZSh0cnVlKTsKCQkJCQlvLmZpbmQoIipbaWRdIikuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJCQlpZih0aGlzLmlkKSB7IHRoaXMuaWQgPSAiY29weV8iICsgdGhpcy5pZDsgfQoJCQkJCX0pOwoJCQkJfQoJCQkJZWxzZSB7IG8gPSBvYmoubzsgfQoKCQkJCWlmKG9iai5vci5sZW5ndGgpIHsgb2JqLm9yLmJlZm9yZShvKTsgfQoJCQkJZWxzZSB7CgkJCQkJaWYoIW9iai5ucC5jaGlsZHJlbigidWwiKS5sZW5ndGgpIHsgJCgiPHVsIC8+IikuYXBwZW5kVG8ob2JqLm5wKTsgfQoJCQkJCW9iai5ucC5jaGlsZHJlbigidWw6ZXEoMCkiKS5hcHBlbmQobyk7CgkJCQl9CgoJCQkJdHJ5IHsKCQkJCQlvYmoub3QuY2xlYW5fbm9kZShvYmoub3ApOwoJCQkJCW9iai5ydC5jbGVhbl9ub2RlKG9iai5ucCk7CgkJCQkJaWYoIW9iai5vcC5maW5kKCI+IHVsID4gbGkiKS5sZW5ndGgpIHsKCQkJCQkJb2JqLm9wLnJlbW92ZUNsYXNzKCJqc3RyZWUtb3BlbiBqc3RyZWUtY2xvc2VkIikuYWRkQ2xhc3MoImpzdHJlZS1sZWFmIikuY2hpbGRyZW4oInVsIikucmVtb3ZlKCk7CgkJCQkJfQoJCQkJfSBjYXRjaCAoZSkgeyB9CgoJCQkJaWYoaXNfY29weSkgewoJCQkJCXByZXBhcmVkX21vdmUuY3kgPSB0cnVlOwoJCQkJCXByZXBhcmVkX21vdmUub2MgPSBvOwoJCQkJfQoJCQkJdGhpcy5fX2NhbGxiYWNrKHByZXBhcmVkX21vdmUpOwoJCQkJcmV0dXJuIHByZXBhcmVkX21vdmU7CgkJCX0sCgkJCV9nZXRfbW92ZSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByZXBhcmVkX21vdmU7IH0KCQl9Cgl9KTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIHVpIHBsdWdpbgogKiBUaGlzIHBsdWdpbnMgaGFuZGxlcyBzZWxlY3RpbmcvZGVzZWxlY3RpbmcvaG92ZXJpbmcvZGVob3ZlcmluZyBub2RlcwogKi8KKGZ1bmN0aW9uICgkKSB7Cgl2YXIgc2Nyb2xsYmFyX3dpZHRoLCBlMSwgZTI7CgkkKGZ1bmN0aW9uKCkgewoJCWlmICgvbXNpZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpKSB7CgkJCWUxID0gJCgnPHRleHRhcmVhIGNvbHM9IjEwIiByb3dzPSIyIj48L3RleHRhcmVhPicpLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IC0xMDAwLCBsZWZ0OiAwIH0pLmFwcGVuZFRvKCdib2R5Jyk7CgkJCWUyID0gJCgnPHRleHRhcmVhIGNvbHM9IjEwIiByb3dzPSIyIiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsiPjwvdGV4dGFyZWE+JykuY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogLTEwMDAsIGxlZnQ6IDAgfSkuYXBwZW5kVG8oJ2JvZHknKTsKCQkJc2Nyb2xsYmFyX3dpZHRoID0gZTEud2lkdGgoKSAtIGUyLndpZHRoKCk7CgkJCWUxLmFkZChlMikucmVtb3ZlKCk7CgkJfQoJCWVsc2UgewoJCQllMSA9ICQoJzxkaXYgLz4nKS5jc3MoeyB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCwgb3ZlcmZsb3c6ICdhdXRvJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogLTEwMDAsIGxlZnQ6IDAgfSkKCQkJCQkucHJlcGVuZFRvKCdib2R5JykuYXBwZW5kKCc8ZGl2IC8+JykuZmluZCgnZGl2JykuY3NzKHsgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAyMDAgfSk7CgkJCXNjcm9sbGJhcl93aWR0aCA9IDEwMCAtIGUxLndpZHRoKCk7CgkJCWUxLnBhcmVudCgpLnJlbW92ZSgpOwoJCX0KCX0pOwoJJC5qc3RyZWUucGx1Z2luKCJ1aSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZGF0YS51aS5zZWxlY3RlZCA9ICQoKTsKCQkJdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgPSBmYWxzZTsKCQkJdGhpcy5kYXRhLnVpLmhvdmVyZWQgPSBudWxsOwoJCQl0aGlzLmRhdGEudWkudG9fc2VsZWN0ID0gdGhpcy5nZXRfc2V0dGluZ3MoKS51aS5pbml0aWFsbHlfc2VsZWN0OwoKCQkJdGhpcy5nZXRfY29udGFpbmVyKCkKCQkJCS5kZWxlZ2F0ZSgiYSIsICJjbGljay5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChldmVudCkgewoJCQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQlldmVudC5jdXJyZW50VGFyZ2V0LmJsdXIoKTsKCQkJCQkJaWYoISQoZXZlbnQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoImpzdHJlZS1sb2FkaW5nIikpIHsKCQkJCQkJCXRoaXMuc2VsZWN0X25vZGUoZXZlbnQuY3VycmVudFRhcmdldCwgdHJ1ZSwgZXZlbnQpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuZGVsZWdhdGUoImEiLCAibW91c2VlbnRlci5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChldmVudCkgewoJCQkJCQlpZighJChldmVudC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygianN0cmVlLWxvYWRpbmciKSkgewoJCQkJCQkJdGhpcy5ob3Zlcl9ub2RlKGV2ZW50LnRhcmdldCk7CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSkKCQkJCS5kZWxlZ2F0ZSgiYSIsICJtb3VzZWxlYXZlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGV2ZW50KSB7CgkJCQkJCWlmKCEkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJqc3RyZWUtbG9hZGluZyIpKSB7CgkJCQkJCQl0aGlzLmRlaG92ZXJfbm9kZShldmVudC50YXJnZXQpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgicmVvcGVuLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKCkgewoJCQkJCQl0aGlzLnJlc2VsZWN0KCk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiZ2V0X3JvbGxiYWNrLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKCkgewoJCQkJCQl0aGlzLmRlaG92ZXJfbm9kZSgpOwoJCQkJCQl0aGlzLnNhdmVfc2VsZWN0ZWQoKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJzZXRfcm9sbGJhY2suanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7CgkJCQkJCXRoaXMucmVzZWxlY3QoKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJjbG9zZV9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGV2ZW50LCBkYXRhKSB7CgkJCQkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkudWksCgkJCQkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShkYXRhLnJzbHQub2JqKSwKCQkJCQkJCWNsayA9IChvYmogJiYgb2JqLmxlbmd0aCkgPyBvYmouY2hpbGRyZW4oInVsIikuZmluZCgiYS5qc3RyZWUtY2xpY2tlZCIpIDogJCgpLAoJCQkJCQkJX3RoaXMgPSB0aGlzOwoJCQkJCQlpZihzLnNlbGVjdGVkX3BhcmVudF9jbG9zZSA9PT0gZmFsc2UgfHwgIWNsay5sZW5ndGgpIHsgcmV0dXJuOyB9CgkJCQkJCWNsay5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCV90aGlzLmRlc2VsZWN0X25vZGUodGhpcyk7CgkJCQkJCQlpZihzLnNlbGVjdGVkX3BhcmVudF9jbG9zZSA9PT0gInNlbGVjdF9wYXJlbnQiKSB7IF90aGlzLnNlbGVjdF9ub2RlKG9iaik7IH0KCQkJCQkJfSk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiZGVsZXRlX25vZGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHsKCQkJCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS51aS5zZWxlY3RfcHJldl9vbl9kZWxldGUsCgkJCQkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShkYXRhLnJzbHQub2JqKSwKCQkJCQkJCWNsayA9IChvYmogJiYgb2JqLmxlbmd0aCkgPyBvYmouZmluZCgiYS5qc3RyZWUtY2xpY2tlZCIpIDogW10sCgkJCQkJCQlfdGhpcyA9IHRoaXM7CgkJCQkJCWNsay5lYWNoKGZ1bmN0aW9uICgpIHsgX3RoaXMuZGVzZWxlY3Rfbm9kZSh0aGlzKTsgfSk7CgkJCQkJCWlmKHMgJiYgY2xrLmxlbmd0aCkgewoJCQkJCQkJZGF0YS5yc2x0LnByZXYuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJCQkJaWYodGhpcy5wYXJlbnROb2RlKSB7IF90aGlzLnNlbGVjdF9ub2RlKHRoaXMpOyByZXR1cm4gZmFsc2U7IC8qIGlmIHJldHVybiBmYWxzZSBpcyByZW1vdmVkIGFsbCBwcmV2IG5vZGVzIHdpbGwgYmUgc2VsZWN0ZWQgKi99CgkJCQkJCQl9KTsKCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoIm1vdmVfbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChldmVudCwgZGF0YSkgewoJCQkJCQlpZihkYXRhLnJzbHQuY3kpIHsKCQkJCQkJCWRhdGEucnNsdC5vYy5maW5kKCJhLmpzdHJlZS1jbGlja2VkIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1jbGlja2VkIik7CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSk7CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJc2VsZWN0X2xpbWl0IDogLTEsIC8vIDAsIDEsIDIgLi4uIG9yIC0xIGZvciB1bmxpbWl0ZWQKCQkJc2VsZWN0X211bHRpcGxlX21vZGlmaWVyIDogImN0cmwiLCAvLyBvbiwgb3IgY3RybCwgc2hpZnQsIGFsdAoJCQlzZWxlY3RfcmFuZ2VfbW9kaWZpZXIgOiAic2hpZnQiLAoJCQlzZWxlY3RlZF9wYXJlbnRfY2xvc2UgOiAic2VsZWN0X3BhcmVudCIsIC8vIGZhbHNlLCAiZGVzZWxlY3QiLCAic2VsZWN0X3BhcmVudCIKCQkJc2VsZWN0ZWRfcGFyZW50X29wZW4gOiB0cnVlLAoJCQlzZWxlY3RfcHJldl9vbl9kZWxldGUgOiB0cnVlLAoJCQlkaXNhYmxlX3NlbGVjdGluZ19jaGlsZHJlbiA6IGZhbHNlLAoJCQlpbml0aWFsbHlfc2VsZWN0IDogW10KCQl9LAoJCV9mbiA6IHsKCQkJX2dldF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgYWxsb3dfbXVsdGlwbGUpIHsKCQkJCWlmKHR5cGVvZiBvYmogPT09ICJ1bmRlZmluZWQiIHx8IG9iaiA9PT0gbnVsbCkgeyByZXR1cm4gYWxsb3dfbXVsdGlwbGUgPyB0aGlzLmRhdGEudWkuc2VsZWN0ZWQgOiB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZDsgfQoJCQkJdmFyICRvYmogPSAkKG9iaiwgdGhpcy5nZXRfY29udGFpbmVyKCkpOwoJCQkJaWYoJG9iai5pcygiLmpzdHJlZSIpIHx8IG9iaiA9PSAtMSkgeyByZXR1cm4gLTE7IH0KCQkJCSRvYmogPSAkb2JqLmNsb3Nlc3QoImxpIiwgdGhpcy5nZXRfY29udGFpbmVyKCkpOwoJCQkJcmV0dXJuICRvYmoubGVuZ3RoID8gJG9iaiA6IGZhbHNlOwoJCQl9LAoJCQlfdWlfbm90aWZ5IDogZnVuY3Rpb24gKG4sIGRhdGEpIHsKCQkJCWlmKGRhdGEuc2VsZWN0ZWQpIHsKCQkJCQl0aGlzLnNlbGVjdF9ub2RlKG4sIGZhbHNlKTsKCQkJCX0KCQkJfSwKCQkJc2F2ZV9zZWxlY3RlZCA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBfdGhpcyA9IHRoaXM7CgkJCQl0aGlzLmRhdGEudWkudG9fc2VsZWN0ID0gW107CgkJCQl0aGlzLmRhdGEudWkuc2VsZWN0ZWQuZWFjaChmdW5jdGlvbiAoKSB7IGlmKHRoaXMuaWQpIHsgX3RoaXMuZGF0YS51aS50b19zZWxlY3QucHVzaCgiIyIgKyB0aGlzLmlkLnRvU3RyaW5nKCkucmVwbGFjZSgvXiMvLCIiKS5yZXBsYWNlKC9cXFwvL2csIi8iKS5yZXBsYWNlKC9cLy9nLCJcXFwvIikucmVwbGFjZSgvXFxcLi9nLCIuIikucmVwbGFjZSgvXC4vZywiXFwuIikucmVwbGFjZSgvXDovZywiXFw6IikpOyB9IH0pOwoJCQkJdGhpcy5fX2NhbGxiYWNrKHRoaXMuZGF0YS51aS50b19zZWxlY3QpOwoJCQl9LAoJCQlyZXNlbGVjdCA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBfdGhpcyA9IHRoaXMsCgkJCQkJcyA9IHRoaXMuZGF0YS51aS50b19zZWxlY3Q7CgkJCQlzID0gJC5tYXAoJC5tYWtlQXJyYXkocyksIGZ1bmN0aW9uIChuKSB7IHJldHVybiAiIyIgKyBuLnRvU3RyaW5nKCkucmVwbGFjZSgvXiMvLCIiKS5yZXBsYWNlKC9cXFwvL2csIi8iKS5yZXBsYWNlKC9cLy9nLCJcXFwvIikucmVwbGFjZSgvXFxcLi9nLCIuIikucmVwbGFjZSgvXC4vZywiXFwuIikucmVwbGFjZSgvXDovZywiXFw6Iik7IH0pOwoJCQkJLy8gdGhpcy5kZXNlbGVjdF9hbGwoKTsgV0hZIGRlc2VsZWN0LCBicmVha3MgcGx1Z2luIHN0YXRlIG5vdGlmaWVyPwoJCQkJJC5lYWNoKHMsIGZ1bmN0aW9uIChpLCB2YWwpIHsgaWYodmFsICYmIHZhbCAhPT0gIiMiKSB7IF90aGlzLnNlbGVjdF9ub2RlKHZhbCk7IH0gfSk7CgkJCQl0aGlzLmRhdGEudWkuc2VsZWN0ZWQgPSB0aGlzLmRhdGEudWkuc2VsZWN0ZWQuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTsgfSk7CgkJCQl0aGlzLl9fY2FsbGJhY2soKTsKCQkJfSwKCQkJcmVmcmVzaCA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCXRoaXMuc2F2ZV9zZWxlY3RlZCgpOwoJCQkJcmV0dXJuIHRoaXMuX19jYWxsX29sZCgpOwoJCQl9LAoJCQlob3Zlcl9ub2RlIDogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJLy9pZih0aGlzLmRhdGEudWkuaG92ZXJlZCAmJiBvYmouZ2V0KDApID09PSB0aGlzLmRhdGEudWkuaG92ZXJlZC5nZXQoMCkpIHsgcmV0dXJuOyB9CgkJCQlpZighb2JqLmhhc0NsYXNzKCJqc3RyZWUtaG92ZXJlZCIpKSB7IHRoaXMuZGVob3Zlcl9ub2RlKCk7IH0KCQkJCXRoaXMuZGF0YS51aS5ob3ZlcmVkID0gb2JqLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoImpzdHJlZS1ob3ZlcmVkIikucGFyZW50KCk7CgkJCQl0aGlzLl9maXhfc2Nyb2xsKG9iaik7CgkJCQl0aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9iaiB9KTsKCQkJfSwKCQkJZGVob3Zlcl9ub2RlIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG9iaiA9IHRoaXMuZGF0YS51aS5ob3ZlcmVkLCBwOwoJCQkJaWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXAgPSBvYmouY2hpbGRyZW4oImEiKS5yZW1vdmVDbGFzcygianN0cmVlLWhvdmVyZWQiKS5wYXJlbnQoKTsKCQkJCWlmKHRoaXMuZGF0YS51aS5ob3ZlcmVkWzBdID09PSBwWzBdKSB7IHRoaXMuZGF0YS51aS5ob3ZlcmVkID0gbnVsbDsgfQoJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCX0sCgkJCXNlbGVjdF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgY2hlY2ssIGUpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT0gLTEgfHwgIW9iaiB8fCAhb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkudWksCgkJCQkJaXNfbXVsdGlwbGUgPSAocy5zZWxlY3RfbXVsdGlwbGVfbW9kaWZpZXIgPT0gIm9uIiB8fCAocy5zZWxlY3RfbXVsdGlwbGVfbW9kaWZpZXIgIT09IGZhbHNlICYmIGUgJiYgZVtzLnNlbGVjdF9tdWx0aXBsZV9tb2RpZmllciArICJLZXkiXSkpLAoJCQkJCWlzX3JhbmdlID0gKHMuc2VsZWN0X3JhbmdlX21vZGlmaWVyICE9PSBmYWxzZSAmJiBlICYmIGVbcy5zZWxlY3RfcmFuZ2VfbW9kaWZpZXIgKyAiS2V5Il0gJiYgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgJiYgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWRbMF0gIT09IG9ialswXSAmJiB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZC5wYXJlbnQoKVswXSA9PT0gb2JqLnBhcmVudCgpWzBdKSwKCQkJCQlpc19zZWxlY3RlZCA9IHRoaXMuaXNfc2VsZWN0ZWQob2JqKSwKCQkJCQlwcm9jZWVkID0gdHJ1ZSwKCQkJCQl0ID0gdGhpczsKCQkJCWlmKGNoZWNrKSB7CgkJCQkJaWYocy5kaXNhYmxlX3NlbGVjdGluZ19jaGlsZHJlbiAmJiBpc19tdWx0aXBsZSAmJgoJCQkJCQkoCgkJCQkJCQkob2JqLnBhcmVudHNVbnRpbCgiLmpzdHJlZSIsImxpIikuY2hpbGRyZW4oImEuanN0cmVlLWNsaWNrZWQiKS5sZW5ndGgpIHx8CgkJCQkJCQkob2JqLmNoaWxkcmVuKCJ1bCIpLmZpbmQoImEuanN0cmVlLWNsaWNrZWQ6ZXEoMCkiKS5sZW5ndGgpCgkJCQkJCSkKCQkJCQkpIHsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCQlwcm9jZWVkID0gZmFsc2U7CgkJCQkJc3dpdGNoKCEwKSB7CgkJCQkJCWNhc2UgKGlzX3JhbmdlKToKCQkJCQkJCXRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkLmFkZENsYXNzKCJqc3RyZWUtbGFzdC1zZWxlY3RlZCIpOwoJCQkJCQkJb2JqID0gb2JqWyBvYmouaW5kZXgoKSA8IHRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkLmluZGV4KCkgPyAibmV4dFVudGlsIiA6ICJwcmV2VW50aWwiIF0oIi5qc3RyZWUtbGFzdC1zZWxlY3RlZCIpLmFkZEJhY2soKTsKCQkJCQkJCWlmKHMuc2VsZWN0X2xpbWl0ID09IC0xIHx8IG9iai5sZW5ndGggPCBzLnNlbGVjdF9saW1pdCkgewoJCQkJCQkJCXRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkLnJlbW92ZUNsYXNzKCJqc3RyZWUtbGFzdC1zZWxlY3RlZCIpOwoJCQkJCQkJCXRoaXMuZGF0YS51aS5zZWxlY3RlZC5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCQkJaWYodGhpcyAhPT0gdC5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWRbMF0pIHsgdC5kZXNlbGVjdF9ub2RlKHRoaXMpOyB9CgkJCQkJCQkJfSk7CgkJCQkJCQkJaXNfc2VsZWN0ZWQgPSBmYWxzZTsKCQkJCQkJCQlwcm9jZWVkID0gdHJ1ZTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCXByb2NlZWQgPSBmYWxzZTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlIChpc19zZWxlY3RlZCAmJiAhaXNfbXVsdGlwbGUpOgoJCQkJCQkJdGhpcy5kZXNlbGVjdF9hbGwoKTsKCQkJCQkJCWlzX3NlbGVjdGVkID0gZmFsc2U7CgkJCQkJCQlwcm9jZWVkID0gdHJ1ZTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICghaXNfc2VsZWN0ZWQgJiYgIWlzX211bHRpcGxlKToKCQkJCQkJCWlmKHMuc2VsZWN0X2xpbWl0ID09IC0xIHx8IHMuc2VsZWN0X2xpbWl0ID4gMCkgewoJCQkJCQkJCXRoaXMuZGVzZWxlY3RfYWxsKCk7CgkJCQkJCQkJcHJvY2VlZCA9IHRydWU7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAoaXNfc2VsZWN0ZWQgJiYgaXNfbXVsdGlwbGUpOgoJCQkJCQkJdGhpcy5kZXNlbGVjdF9ub2RlKG9iaik7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAoIWlzX3NlbGVjdGVkICYmIGlzX211bHRpcGxlKToKCQkJCQkJCWlmKHMuc2VsZWN0X2xpbWl0ID09IC0xIHx8IHRoaXMuZGF0YS51aS5zZWxlY3RlZC5sZW5ndGggKyAxIDw9IHMuc2VsZWN0X2xpbWl0KSB7CgkJCQkJCQkJcHJvY2VlZCA9IHRydWU7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlpZihwcm9jZWVkICYmICFpc19zZWxlY3RlZCkgewoJCQkJCWlmKCFpc19yYW5nZSkgeyB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZCA9IG9iajsgfQoJCQkJCW9iai5jaGlsZHJlbigiYSIpLmFkZENsYXNzKCJqc3RyZWUtY2xpY2tlZCIpOwoJCQkJCWlmKHMuc2VsZWN0ZWRfcGFyZW50X29wZW4pIHsKCQkJCQkJb2JqLnBhcmVudHMoIi5qc3RyZWUtY2xvc2VkIikuZWFjaChmdW5jdGlvbiAoKSB7IHQub3Blbl9ub2RlKHRoaXMsIGZhbHNlLCB0cnVlKTsgfSk7CgkJCQkJfQoJCQkJCXRoaXMuZGF0YS51aS5zZWxlY3RlZCA9IHRoaXMuZGF0YS51aS5zZWxlY3RlZC5hZGQob2JqKTsKCQkJCQl0aGlzLl9maXhfc2Nyb2xsKG9iai5lcSgwKSk7CgkJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmosICJlIiA6IGUgfSk7CgkJCQl9CgkJCX0sCgkJCV9maXhfc2Nyb2xsIDogZnVuY3Rpb24gKG9iaikgewoJCQkJdmFyIGMgPSB0aGlzLmdldF9jb250YWluZXIoKVswXSwgdDsKCQkJCWlmKGMuc2Nyb2xsSGVpZ2h0ID4gYy5vZmZzZXRIZWlnaHQpIHsKCQkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJCWlmKCFvYmogfHwgb2JqID09PSAtMSB8fCAhb2JqLmxlbmd0aCB8fCAhb2JqLmlzKCI6dmlzaWJsZSIpKSB7IHJldHVybjsgfQoJCQkJCXQgPSBvYmoub2Zmc2V0KCkudG9wIC0gdGhpcy5nZXRfY29udGFpbmVyKCkub2Zmc2V0KCkudG9wOwoJCQkJCWlmKHQgPCAwKSB7CgkJCQkJCWMuc2Nyb2xsVG9wID0gYy5zY3JvbGxUb3AgKyB0IC0gMTsKCQkJCQl9CgkJCQkJaWYodCArIHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodCArIChjLnNjcm9sbFdpZHRoID4gYy5vZmZzZXRXaWR0aCA/IHNjcm9sbGJhcl93aWR0aCA6IDApID4gYy5vZmZzZXRIZWlnaHQpIHsKCQkJCQkJYy5zY3JvbGxUb3AgPSBjLnNjcm9sbFRvcCArICh0IC0gYy5vZmZzZXRIZWlnaHQgKyB0aGlzLmRhdGEuY29yZS5saV9oZWlnaHQgKyAxICsgKGMuc2Nyb2xsV2lkdGggPiBjLm9mZnNldFdpZHRoID8gc2Nyb2xsYmFyX3dpZHRoIDogMCkpOwoJCQkJCX0KCQkJCX0KCQkJfSwKCQkJZGVzZWxlY3Rfbm9kZSA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZighb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCWlmKHRoaXMuaXNfc2VsZWN0ZWQob2JqKSkgewoJCQkJCW9iai5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtY2xpY2tlZCIpOwoJCQkJCXRoaXMuZGF0YS51aS5zZWxlY3RlZCA9IHRoaXMuZGF0YS51aS5zZWxlY3RlZC5ub3Qob2JqKTsKCQkJCQlpZih0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZC5nZXQoMCkgPT09IG9iai5nZXQoMCkpIHsgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgPSB0aGlzLmRhdGEudWkuc2VsZWN0ZWQuZXEoMCk7IH0KCQkJCQl0aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9iaiB9KTsKCQkJCX0KCQkJfSwKCQkJdG9nZ2xlX3NlbGVjdCA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZighb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCWlmKHRoaXMuaXNfc2VsZWN0ZWQob2JqKSkgeyB0aGlzLmRlc2VsZWN0X25vZGUob2JqKTsgfQoJCQkJZWxzZSB7IHRoaXMuc2VsZWN0X25vZGUob2JqKTsgfQoJCQl9LAoJCQlpc19zZWxlY3RlZCA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHRoaXMuZGF0YS51aS5zZWxlY3RlZC5pbmRleCh0aGlzLl9nZXRfbm9kZShvYmopKSA+PSAwOyB9LAoJCQlnZXRfc2VsZWN0ZWQgOiBmdW5jdGlvbiAoY29udGV4dCkgewoJCQkJcmV0dXJuIGNvbnRleHQgPyAkKGNvbnRleHQpLmZpbmQoImEuanN0cmVlLWNsaWNrZWQiKS5wYXJlbnQoKSA6IHRoaXMuZGF0YS51aS5zZWxlY3RlZDsKCQkJfSwKCQkJZGVzZWxlY3RfYWxsIDogZnVuY3Rpb24gKGNvbnRleHQpIHsKCQkJCXZhciByZXQgPSBjb250ZXh0ID8gJChjb250ZXh0KS5maW5kKCJhLmpzdHJlZS1jbGlja2VkIikucGFyZW50KCkgOiB0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCJhLmpzdHJlZS1jbGlja2VkIikucGFyZW50KCk7CgkJCQlyZXQuY2hpbGRyZW4oImEuanN0cmVlLWNsaWNrZWQiKS5yZW1vdmVDbGFzcygianN0cmVlLWNsaWNrZWQiKTsKCQkJCXRoaXMuZGF0YS51aS5zZWxlY3RlZCA9ICQoW10pOwoJCQkJdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgPSBmYWxzZTsKCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogcmV0IH0pOwoJCQl9CgkJfQoJfSk7CgkvLyBpbmNsdWRlIHRoZSBzZWxlY3Rpb24gcGx1Z2luIGJ5IGRlZmF1bHQKCSQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnMucHVzaCgidWkiKTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIENSUk0gcGx1Z2luCiAqIEhhbmRsZXMgY3JlYXRpbmcvcmVuYW1pbmcvcmVtb3ZpbmcvbW92aW5nIG5vZGVzIGJ5IHVzZXIgaW50ZXJhY3Rpb24uCiAqLwooZnVuY3Rpb24gKCQpIHsKCSQuanN0cmVlLnBsdWdpbigiY3JybSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYmluZCgibW92ZV9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQlpZih0aGlzLl9nZXRfc2V0dGluZ3MoKS5jcnJtLm1vdmUub3Blbl9vbm1vdmUpIHsKCQkJCQkJdmFyIHQgPSB0aGlzOwoJCQkJCQlkYXRhLnJzbHQubnAucGFyZW50c1VudGlsKCIuanN0cmVlIikuYWRkQmFjaygpLmZpbHRlcigiLmpzdHJlZS1jbG9zZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCXQub3Blbl9ub2RlKHRoaXMsIGZhbHNlLCB0cnVlKTsKCQkJCQkJfSk7CgkJCQkJfQoJCQkJfSwgdGhpcykpOwoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCWlucHV0X3dpZHRoX2xpbWl0IDogMjAwLAoJCQltb3ZlIDogewoJCQkJYWx3YXlzX2NvcHkJCQk6IGZhbHNlLCAvLyBmYWxzZSwgdHJ1ZSBvciAibXVsdGl0cmVlIgoJCQkJb3Blbl9vbm1vdmUJCQk6IHRydWUsCgkJCQlkZWZhdWx0X3Bvc2l0aW9uCTogImxhc3QiLAoJCQkJY2hlY2tfbW92ZQkJCTogZnVuY3Rpb24gKG0pIHsgcmV0dXJuIHRydWU7IH0KCQkJfQoJCX0sCgkJX2ZuIDogewoJCQlfc2hvd19pbnB1dCA6IGZ1bmN0aW9uIChvYmosIGNhbGxiYWNrKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJdmFyIHJ0bCA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNvcmUucnRsLAoJCQkJCXcgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jcnJtLmlucHV0X3dpZHRoX2xpbWl0LAoJCQkJCXcxID0gb2JqLmNoaWxkcmVuKCJpbnMiKS53aWR0aCgpLAoJCQkJCXcyID0gb2JqLmZpbmQoIj4gYTp2aXNpYmxlID4gaW5zIikud2lkdGgoKSAqIG9iai5maW5kKCI+IGE6dmlzaWJsZSA+IGlucyIpLmxlbmd0aCwKCQkJCQl0ID0gdGhpcy5nZXRfdGV4dChvYmopLAoJCQkJCWgxID0gJCgiPGRpdiAvPiIsIHsgY3NzIDogeyAicG9zaXRpb24iIDogImFic29sdXRlIiwgInRvcCIgOiAiLTIwMHB4IiwgImxlZnQiIDogKHJ0bCA/ICIwcHgiIDogIi0xMDAwcHgiKSwgInZpc2liaWxpdHkiIDogImhpZGRlbiIgfSB9KS5hcHBlbmRUbygiYm9keSIpLAoJCQkJCWgyID0gb2JqLmNzcygicG9zaXRpb24iLCJyZWxhdGl2ZSIpLmFwcGVuZCgKCQkJCQkkKCI8aW5wdXQgLz4iLCB7CgkJCQkJCSJ2YWx1ZSIgOiB0LAoJCQkJCQkiY2xhc3MiIDogImpzdHJlZS1yZW5hbWUtaW5wdXQiLAoJCQkJCQkvLyAic2l6ZSIgOiB0Lmxlbmd0aCwKCQkJCQkJImNzcyIgOiB7CgkJCQkJCQkicGFkZGluZyIgOiAiMCIsCgkJCQkJCQkiYm9yZGVyIiA6ICIxcHggc29saWQgc2lsdmVyIiwKCQkJCQkJCSJwb3NpdGlvbiIgOiAiYWJzb2x1dGUiLAoJCQkJCQkJImxlZnQiICA6IChydGwgPyAiYXV0byIgOiAodzEgKyB3MiArIDQpICsgInB4IiksCgkJCQkJCQkicmlnaHQiIDogKHJ0bCA/ICh3MSArIHcyICsgNCkgKyAicHgiIDogImF1dG8iKSwKCQkJCQkJCSJ0b3AiIDogIjBweCIsCgkJCQkJCQkiaGVpZ2h0IiA6ICh0aGlzLmRhdGEuY29yZS5saV9oZWlnaHQgLSAyKSArICJweCIsCgkJCQkJCQkibGluZUhlaWdodCIgOiAodGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0IC0gMikgKyAicHgiLAoJCQkJCQkJIndpZHRoIiA6ICIxNTBweCIgLy8gd2lsbCBiZSBzZXQgYSBiaXQgZnVydGhlciBkb3duCgkJCQkJCX0sCgkJCQkJCSJibHVyIiA6ICQucHJveHkoZnVuY3Rpb24gKCkgewoJCQkJCQkJdmFyIGkgPSBvYmouY2hpbGRyZW4oIi5qc3RyZWUtcmVuYW1lLWlucHV0IiksCgkJCQkJCQkJdiA9IGkudmFsKCk7CgkJCQkJCQlpZih2ID09PSAiIikgeyB2ID0gdDsgfQoJCQkJCQkJaDEucmVtb3ZlKCk7CgkJCQkJCQlpLnJlbW92ZSgpOyAvLyByb2xsYmFjayBwdXJwb3NlcwoJCQkJCQkJdGhpcy5zZXRfdGV4dChvYmosdCk7IC8vIHJvbGxiYWNrIHB1cnBvc2VzCgkJCQkJCQl0aGlzLnJlbmFtZV9ub2RlKG9iaiwgdik7CgkJCQkJCQljYWxsYmFjay5jYWxsKHRoaXMsIG9iaiwgdiwgdCk7CgkJCQkJCQlvYmouY3NzKCJwb3NpdGlvbiIsIiIpOwoJCQkJCQl9LCB0aGlzKSwKCQkJCQkJImtleXVwIiA6IGZ1bmN0aW9uIChldmVudCkgewoJCQkJCQkJdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7CgkJCQkJCQlpZihrZXkgPT0gMjcpIHsgdGhpcy52YWx1ZSA9IHQ7IHRoaXMuYmx1cigpOyByZXR1cm47IH0KCQkJCQkJCWVsc2UgaWYoa2V5ID09IDEzKSB7IHRoaXMuYmx1cigpOyByZXR1cm47IH0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCWgyLndpZHRoKE1hdGgubWluKGgxLnRleHQoInBXIiArIHRoaXMudmFsdWUpLndpZHRoKCksdykpOwoJCQkJCQkJfQoJCQkJCQl9LAoJCQkJCQkia2V5cHJlc3MiIDogZnVuY3Rpb24oZXZlbnQpIHsKCQkJCQkJCXZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoOwoJCQkJCQkJaWYoa2V5ID09IDEzKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJCQl9CgkJCQkJfSkKCQkJCSkuY2hpbGRyZW4oIi5qc3RyZWUtcmVuYW1lLWlucHV0Iik7CgkJCQl0aGlzLnNldF90ZXh0KG9iaiwgIiIpOwoJCQkJaDEuY3NzKHsKCQkJCQkJZm9udEZhbWlseQkJOiBoMi5jc3MoJ2ZvbnRGYW1pbHknKQkJfHwgJycsCgkJCQkJCWZvbnRTaXplCQk6IGgyLmNzcygnZm9udFNpemUnKQkJfHwgJycsCgkJCQkJCWZvbnRXZWlnaHQJCTogaDIuY3NzKCdmb250V2VpZ2h0JykJCXx8ICcnLAoJCQkJCQlmb250U3R5bGUJCTogaDIuY3NzKCdmb250U3R5bGUnKQkJfHwgJycsCgkJCQkJCWZvbnRTdHJldGNoCQk6IGgyLmNzcygnZm9udFN0cmV0Y2gnKQkJfHwgJycsCgkJCQkJCWZvbnRWYXJpYW50CQk6IGgyLmNzcygnZm9udFZhcmlhbnQnKQkJfHwgJycsCgkJCQkJCWxldHRlclNwYWNpbmcJOiBoMi5jc3MoJ2xldHRlclNwYWNpbmcnKQl8fCAnJywKCQkJCQkJd29yZFNwYWNpbmcJCTogaDIuY3NzKCd3b3JkU3BhY2luZycpCQl8fCAnJwoJCQkJfSk7CgkJCQloMi53aWR0aChNYXRoLm1pbihoMS50ZXh0KCJwVyIgKyBoMlswXS52YWx1ZSkud2lkdGgoKSx3KSlbMF0uc2VsZWN0KCk7CgkJCX0sCgkJCXJlbmFtZSA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl0aGlzLl9fcm9sbGJhY2soKTsKCQkJCXZhciBmID0gdGhpcy5fX2NhbGxiYWNrOwoJCQkJdGhpcy5fc2hvd19pbnB1dChvYmosIGZ1bmN0aW9uIChvYmosIG5ld19uYW1lLCBvbGRfbmFtZSkgewoJCQkJCWYuY2FsbCh0aGlzLCB7ICJvYmoiIDogb2JqLCAibmV3X25hbWUiIDogbmV3X25hbWUsICJvbGRfbmFtZSIgOiBvbGRfbmFtZSB9KTsKCQkJCX0pOwoJCQl9LAoJCQljcmVhdGUgOiBmdW5jdGlvbiAob2JqLCBwb3NpdGlvbiwganMsIGNhbGxiYWNrLCBza2lwX3JlbmFtZSkgewoJCQkJdmFyIHQsIF90aGlzID0gdGhpczsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZighb2JqKSB7IG9iaiA9IC0xOyB9CgkJCQl0aGlzLl9fcm9sbGJhY2soKTsKCQkJCXQgPSB0aGlzLmNyZWF0ZV9ub2RlKG9iaiwgcG9zaXRpb24sIGpzLCBmdW5jdGlvbiAodCkgewoJCQkJCXZhciBwID0gdGhpcy5fZ2V0X3BhcmVudCh0KSwKCQkJCQkJcG9zID0gJCh0KS5pbmRleCgpOwoJCQkJCWlmKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdCk7IH0KCQkJCQlpZihwLmxlbmd0aCAmJiBwLmhhc0NsYXNzKCJqc3RyZWUtY2xvc2VkIikpIHsgdGhpcy5vcGVuX25vZGUocCwgZmFsc2UsIHRydWUpOyB9CgkJCQkJaWYoIXNraXBfcmVuYW1lKSB7CgkJCQkJCXRoaXMuX3Nob3dfaW5wdXQodCwgZnVuY3Rpb24gKG9iaiwgbmV3X25hbWUsIG9sZF9uYW1lKSB7CgkJCQkJCQlfdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmosICJuYW1lIiA6IG5ld19uYW1lLCAicGFyZW50IiA6IHAsICJwb3NpdGlvbiIgOiBwb3MgfSk7CgkJCQkJCX0pOwoJCQkJCX0KCQkJCQllbHNlIHsgX3RoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogdCwgIm5hbWUiIDogdGhpcy5nZXRfdGV4dCh0KSwgInBhcmVudCIgOiBwLCAicG9zaXRpb24iIDogcG9zIH0pOyB9CgkJCQl9KTsKCQkJCXJldHVybiB0OwoJCQl9LAoJCQlyZW1vdmUgOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmosIHRydWUpOwoJCQkJdmFyIHAgPSB0aGlzLl9nZXRfcGFyZW50KG9iaiksIHByZXYgPSB0aGlzLl9nZXRfcHJldihvYmopOwoJCQkJdGhpcy5fX3JvbGxiYWNrKCk7CgkJCQlvYmogPSB0aGlzLmRlbGV0ZV9ub2RlKG9iaik7CgkJCQlpZihvYmogIT09IGZhbHNlKSB7IHRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqLCAicHJldiIgOiBwcmV2LCAicGFyZW50IiA6IHAgfSk7IH0KCQkJfSwKCQkJY2hlY2tfbW92ZSA6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKCF0aGlzLl9fY2FsbF9vbGQoKSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY3JybS5tb3ZlOwoJCQkJaWYoIXMuY2hlY2tfbW92ZS5jYWxsKHRoaXMsIHRoaXMuX2dldF9tb3ZlKCkpKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJcmV0dXJuIHRydWU7CgkJCX0sCgkJCW1vdmVfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHJlZiwgcG9zaXRpb24sIGlzX2NvcHksIGlzX3ByZXBhcmVkLCBza2lwX2NoZWNrKSB7CgkJCQl2YXIgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNycm0ubW92ZTsKCQkJCWlmKCFpc19wcmVwYXJlZCkgewoJCQkJCWlmKHR5cGVvZiBwb3NpdGlvbiA9PT0gInVuZGVmaW5lZCIpIHsgcG9zaXRpb24gPSBzLmRlZmF1bHRfcG9zaXRpb247IH0KCQkJCQlpZihwb3NpdGlvbiA9PT0gImluc2lkZSIgJiYgIXMuZGVmYXVsdF9wb3NpdGlvbi5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pKSB7IHBvc2l0aW9uID0gcy5kZWZhdWx0X3Bvc2l0aW9uOyB9CgkJCQkJcmV0dXJuIHRoaXMuX19jYWxsX29sZCh0cnVlLCBvYmosIHJlZiwgcG9zaXRpb24sIGlzX2NvcHksIGZhbHNlLCBza2lwX2NoZWNrKTsKCQkJCX0KCQkJCS8vIGlmIHRoZSBtb3ZlIGlzIGFscmVhZHkgcHJlcGFyZWQKCQkJCWlmKHMuYWx3YXlzX2NvcHkgPT09IHRydWUgfHwgKHMuYWx3YXlzX2NvcHkgPT09ICJtdWx0aXRyZWUiICYmIG9iai5ydC5nZXRfaW5kZXgoKSAhPT0gb2JqLm90LmdldF9pbmRleCgpICkpIHsKCQkJCQlpc19jb3B5ID0gdHJ1ZTsKCQkJCX0KCQkJCXRoaXMuX19jYWxsX29sZCh0cnVlLCBvYmosIHJlZiwgcG9zaXRpb24sIGlzX2NvcHksIHRydWUsIHNraXBfY2hlY2spOwoJCQl9LAoKCQkJY3V0IDogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqLCB0cnVlKTsKCQkJCWlmKCFvYmogfHwgIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQl0aGlzLmRhdGEuY3JybS5jcF9ub2RlcyA9IGZhbHNlOwoJCQkJdGhpcy5kYXRhLmNycm0uY3Rfbm9kZXMgPSBvYmo7CgkJCQl0aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IG9iaiB9KTsKCQkJfSwKCQkJY29weSA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaiwgdHJ1ZSk7CgkJCQlpZighb2JqIHx8ICFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJdGhpcy5kYXRhLmNycm0uY3Rfbm9kZXMgPSBmYWxzZTsKCQkJCXRoaXMuZGF0YS5jcnJtLmNwX25vZGVzID0gb2JqOwoJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCX0sCgkJCXBhc3RlIDogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmogfHwgIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQl2YXIgbm9kZXMgPSB0aGlzLmRhdGEuY3JybS5jdF9ub2RlcyA/IHRoaXMuZGF0YS5jcnJtLmN0X25vZGVzIDogdGhpcy5kYXRhLmNycm0uY3Bfbm9kZXM7CgkJCQlpZighdGhpcy5kYXRhLmNycm0uY3Rfbm9kZXMgJiYgIXRoaXMuZGF0YS5jcnJtLmNwX25vZGVzKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJaWYodGhpcy5kYXRhLmNycm0uY3Rfbm9kZXMpIHsgdGhpcy5tb3ZlX25vZGUodGhpcy5kYXRhLmNycm0uY3Rfbm9kZXMsIG9iaik7IHRoaXMuZGF0YS5jcnJtLmN0X25vZGVzID0gZmFsc2U7IH0KCQkJCWlmKHRoaXMuZGF0YS5jcnJtLmNwX25vZGVzKSB7IHRoaXMubW92ZV9ub2RlKHRoaXMuZGF0YS5jcnJtLmNwX25vZGVzLCBvYmosIGZhbHNlLCB0cnVlKTsgfQoJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmosICJub2RlcyIgOiBub2RlcyB9KTsKCQkJfQoJCX0KCX0pOwoJLy8gaW5jbHVkZSB0aGUgY3JyIHBsdWdpbiBieSBkZWZhdWx0CgkvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goImNycm0iKTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIHRoZW1lcyBwbHVnaW4KICogSGFuZGxlcyBsb2FkaW5nIGFuZCBzZXR0aW5nIHRoZW1lcywgYXMgd2VsbCBhcyBkZXRlY3RpbmcgcGF0aCB0byB0aGVtZXMsIGV0Yy4KICovCihmdW5jdGlvbiAoJCkgewoJdmFyIHRoZW1lc19sb2FkZWQgPSBbXTsKCS8vIHRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBwYXRoIHRvIHRoZSB0aGVtZXMgZm9sZGVyIC0gaWYgbGVmdCBhcyBmYWxzZSAtIGl0IHdpbGwgYmUgYXV0b2RldGVjdGVkCgkkLmpzdHJlZS5fdGhlbWVzID0gZmFsc2U7CgkkLmpzdHJlZS5wbHVnaW4oInRoZW1lcyIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYmluZCgiaW5pdC5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHsKCQkJCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS50aGVtZXM7CgkJCQkJCXRoaXMuZGF0YS50aGVtZXMuZG90cyA9IHMuZG90czsKCQkJCQkJdGhpcy5kYXRhLnRoZW1lcy5pY29ucyA9IHMuaWNvbnM7CgkJCQkJCXRoaXMuc2V0X3RoZW1lKHMudGhlbWUsIHMudXJsKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJsb2FkZWQuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7CgkJCQkJCS8vIGJvdW5kIGhlcmUgdG9vLCBhcyBzaW1wbGUgSFRNTCB0cmVlJ3Mgd29uJ3QgaG9ub3IgZG90cyAmIGljb25zIG90aGVyd2lzZQoJCQkJCQlpZighdGhpcy5kYXRhLnRoZW1lcy5kb3RzKSB7IHRoaXMuaGlkZV9kb3RzKCk7IH0KCQkJCQkJZWxzZSB7IHRoaXMuc2hvd19kb3RzKCk7IH0KCQkJCQkJaWYoIXRoaXMuZGF0YS50aGVtZXMuaWNvbnMpIHsgdGhpcy5oaWRlX2ljb25zKCk7IH0KCQkJCQkJZWxzZSB7IHRoaXMuc2hvd19pY29ucygpOyB9CgkJCQkJfSwgdGhpcykpOwoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCXRoZW1lIDogImRlZmF1bHQiLAoJCQl1cmwgOiBmYWxzZSwKCQkJZG90cyA6IHRydWUsCgkJCWljb25zIDogdHJ1ZQoJCX0sCgkJX2ZuIDogewoJCQlzZXRfdGhlbWUgOiBmdW5jdGlvbiAodGhlbWVfbmFtZSwgdGhlbWVfdXJsKSB7CgkJCQlpZighdGhlbWVfbmFtZSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCWlmKCF0aGVtZV91cmwpIHsgdGhlbWVfdXJsID0gJC5qc3RyZWUuX3RoZW1lcyArIHRoZW1lX25hbWUgKyAnL3N0eWxlLmNzcyc7IH0KCQkJCWlmKCQuaW5BcnJheSh0aGVtZV91cmwsIHRoZW1lc19sb2FkZWQpID09IC0xKSB7CgkJCQkJJC52YWthdGEuY3NzLmFkZF9zaGVldCh7ICJ1cmwiIDogdGhlbWVfdXJsIH0pOwoJCQkJCXRoZW1lc19sb2FkZWQucHVzaCh0aGVtZV91cmwpOwoJCQkJfQoJCQkJaWYodGhpcy5kYXRhLnRoZW1lcy50aGVtZSAhPSB0aGVtZV9uYW1lKSB7CgkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkucmVtb3ZlQ2xhc3MoJ2pzdHJlZS0nICsgdGhpcy5kYXRhLnRoZW1lcy50aGVtZSk7CgkJCQkJdGhpcy5kYXRhLnRoZW1lcy50aGVtZSA9IHRoZW1lX25hbWU7CgkJCQl9CgkJCQl0aGlzLmdldF9jb250YWluZXIoKS5hZGRDbGFzcygnanN0cmVlLScgKyB0aGVtZV9uYW1lKTsKCQkJCWlmKCF0aGlzLmRhdGEudGhlbWVzLmRvdHMpIHsgdGhpcy5oaWRlX2RvdHMoKTsgfQoJCQkJZWxzZSB7IHRoaXMuc2hvd19kb3RzKCk7IH0KCQkJCWlmKCF0aGlzLmRhdGEudGhlbWVzLmljb25zKSB7IHRoaXMuaGlkZV9pY29ucygpOyB9CgkJCQllbHNlIHsgdGhpcy5zaG93X2ljb25zKCk7IH0KCQkJCXRoaXMuX19jYWxsYmFjaygpOwoJCQl9LAoJCQlnZXRfdGhlbWUJOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRhdGEudGhlbWVzLnRoZW1lOyB9LAoKCQkJc2hvd19kb3RzCTogZnVuY3Rpb24gKCkgeyB0aGlzLmRhdGEudGhlbWVzLmRvdHMgPSB0cnVlOyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5yZW1vdmVDbGFzcygianN0cmVlLW5vLWRvdHMiKTsgfSwKCQkJaGlkZV9kb3RzCTogZnVuY3Rpb24gKCkgeyB0aGlzLmRhdGEudGhlbWVzLmRvdHMgPSBmYWxzZTsgdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuYWRkQ2xhc3MoImpzdHJlZS1uby1kb3RzIik7IH0sCgkJCXRvZ2dsZV9kb3RzCTogZnVuY3Rpb24gKCkgeyBpZih0aGlzLmRhdGEudGhlbWVzLmRvdHMpIHsgdGhpcy5oaWRlX2RvdHMoKTsgfSBlbHNlIHsgdGhpcy5zaG93X2RvdHMoKTsgfSB9LAoKCQkJc2hvd19pY29ucwk6IGZ1bmN0aW9uICgpIHsgdGhpcy5kYXRhLnRoZW1lcy5pY29ucyA9IHRydWU7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbm8taWNvbnMiKTsgfSwKCQkJaGlkZV9pY29ucwk6IGZ1bmN0aW9uICgpIHsgdGhpcy5kYXRhLnRoZW1lcy5pY29ucyA9IGZhbHNlOyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5hZGRDbGFzcygianN0cmVlLW5vLWljb25zIik7IH0sCgkJCXRvZ2dsZV9pY29uczogZnVuY3Rpb24gKCkgeyBpZih0aGlzLmRhdGEudGhlbWVzLmljb25zKSB7IHRoaXMuaGlkZV9pY29ucygpOyB9IGVsc2UgeyB0aGlzLnNob3dfaWNvbnMoKTsgfSB9CgkJfQoJfSk7CgkvLyBhdXRvZGV0ZWN0IHRoZW1lcyBwYXRoCgkkKGZ1bmN0aW9uICgpIHsKCQlpZigkLmpzdHJlZS5fdGhlbWVzID09PSBmYWxzZSkgewoJCQkkKCJzY3JpcHQiKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCWlmKHRoaXMuc3JjLnRvU3RyaW5nKCkubWF0Y2goL2pxdWVyeVwuanN0cmVlW15cL10qP1wuanMoXD8uKik/JC8pKSB7CgkJCQkJJC5qc3RyZWUuX3RoZW1lcyA9IHRoaXMuc3JjLnRvU3RyaW5nKCkucmVwbGFjZSgvanF1ZXJ5XC5qc3RyZWVbXlwvXSo/XC5qcyhcPy4qKT8kLywgIiIpICsgJ3RoZW1lcy8nOwoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfSk7CgkJfQoJCWlmKCQuanN0cmVlLl90aGVtZXMgPT09IGZhbHNlKSB7ICQuanN0cmVlLl90aGVtZXMgPSAidGhlbWVzLyI7IH0KCX0pOwoJLy8gaW5jbHVkZSB0aGUgdGhlbWVzIHBsdWdpbiBieSBkZWZhdWx0CgkkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goInRoZW1lcyIpOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgaG90a2V5cyBwbHVnaW4KICogRW5hYmxlcyBrZXlib2FyZCBuYXZpZ2F0aW9uIGZvciBhbGwgdHJlZSBpbnN0YW5jZXMKICogRGVwZW5kcyBvbiB0aGUganN0cmVlIHVpICYganF1ZXJ5IGhvdGtleXMgcGx1Z2lucwogKi8KKGZ1bmN0aW9uICgkKSB7Cgl2YXIgYm91bmQgPSBbXTsKCWZ1bmN0aW9uIGV4ZWMoaSwgZXZlbnQpIHsKCQl2YXIgZiA9ICQuanN0cmVlLl9mb2N1c2VkKCksIHRtcDsKCQlpZihmICYmIGYuZGF0YSAmJiBmLmRhdGEuaG90a2V5cyAmJiBmLmRhdGEuaG90a2V5cy5lbmFibGVkKSB7CgkJCXRtcCA9IGYuX2dldF9zZXR0aW5ncygpLmhvdGtleXNbaV07CgkJCWlmKHRtcCkgeyByZXR1cm4gdG1wLmNhbGwoZiwgZXZlbnQpOyB9CgkJfQoJfQoJJC5qc3RyZWUucGx1Z2luKCJob3RrZXlzIiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJaWYodHlwZW9mICQuaG90a2V5cyA9PT0gInVuZGVmaW5lZCIpIHsgdGhyb3cgImpzVHJlZSBob3RrZXlzOiBqUXVlcnkgaG90a2V5cyBwbHVnaW4gbm90IGluY2x1ZGVkLiI7IH0KCQkJaWYoIXRoaXMuZGF0YS51aSkgeyB0aHJvdyAianNUcmVlIGhvdGtleXM6IGpzVHJlZSBVSSBwbHVnaW4gbm90IGluY2x1ZGVkLiI7IH0KCQkJJC5lYWNoKHRoaXMuX2dldF9zZXR0aW5ncygpLmhvdGtleXMsIGZ1bmN0aW9uIChpLCB2KSB7CgkJCQlpZih2ICE9PSBmYWxzZSAmJiAkLmluQXJyYXkoaSwgYm91bmQpID09IC0xKSB7CgkJCQkJJChkb2N1bWVudCkuYmluZCgia2V5ZG93biIsIGksIGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gZXhlYyhpLCBldmVudCk7IH0pOwoJCQkJCWJvdW5kLnB1c2goaSk7CgkJCQl9CgkJCX0pOwoJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJLmJpbmQoImxvY2suanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7CgkJCQkJCWlmKHRoaXMuZGF0YS5ob3RrZXlzLmVuYWJsZWQpIHsgdGhpcy5kYXRhLmhvdGtleXMuZW5hYmxlZCA9IGZhbHNlOyB0aGlzLmRhdGEuaG90a2V5cy5yZXZlcnQgPSB0cnVlOyB9CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgidW5sb2NrLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKCkgewoJCQkJCQlpZih0aGlzLmRhdGEuaG90a2V5cy5yZXZlcnQpIHsgdGhpcy5kYXRhLmhvdGtleXMuZW5hYmxlZCA9IHRydWU7IH0KCQkJCQl9LCB0aGlzKSk7CgkJCXRoaXMuZW5hYmxlX2hvdGtleXMoKTsKCQl9LAoJCWRlZmF1bHRzIDogewoJCQkidXAiIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmRhdGEudWkuaG92ZXJlZCB8fCB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZCB8fCAtMTsKCQkJCXRoaXMuaG92ZXJfbm9kZSh0aGlzLl9nZXRfcHJldihvKSk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJjdHJsK3VwIiA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBvID0gdGhpcy5kYXRhLnVpLmhvdmVyZWQgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgfHwgLTE7CgkJCQl0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X3ByZXYobykpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQkic2hpZnQrdXAiIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmRhdGEudWkuaG92ZXJlZCB8fCB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZCB8fCAtMTsKCQkJCXRoaXMuaG92ZXJfbm9kZSh0aGlzLl9nZXRfcHJldihvKSk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJkb3duIiA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBvID0gdGhpcy5kYXRhLnVpLmhvdmVyZWQgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgfHwgLTE7CgkJCQl0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X25leHQobykpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQkiY3RybCtkb3duIiA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBvID0gdGhpcy5kYXRhLnVpLmhvdmVyZWQgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQgfHwgLTE7CgkJCQl0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X25leHQobykpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQkic2hpZnQrZG93biIgOiBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgbyA9IHRoaXMuZGF0YS51aS5ob3ZlcmVkIHx8IHRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkIHx8IC0xOwoJCQkJdGhpcy5ob3Zlcl9ub2RlKHRoaXMuX2dldF9uZXh0KG8pKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSwKCQkJImxlZnQiIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmRhdGEudWkuaG92ZXJlZCB8fCB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZDsKCQkJCWlmKG8pIHsKCQkJCQlpZihvLmhhc0NsYXNzKCJqc3RyZWUtb3BlbiIpKSB7IHRoaXMuY2xvc2Vfbm9kZShvKTsgfQoJCQkJCWVsc2UgeyB0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X3ByZXYobykpOyB9CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJjdHJsK2xlZnQiIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmRhdGEudWkuaG92ZXJlZCB8fCB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZDsKCQkJCWlmKG8pIHsKCQkJCQlpZihvLmhhc0NsYXNzKCJqc3RyZWUtb3BlbiIpKSB7IHRoaXMuY2xvc2Vfbm9kZShvKTsgfQoJCQkJCWVsc2UgeyB0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X3ByZXYobykpOyB9CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJzaGlmdCtsZWZ0IiA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBvID0gdGhpcy5kYXRhLnVpLmhvdmVyZWQgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQ7CgkJCQlpZihvKSB7CgkJCQkJaWYoby5oYXNDbGFzcygianN0cmVlLW9wZW4iKSkgeyB0aGlzLmNsb3NlX25vZGUobyk7IH0KCQkJCQllbHNlIHsgdGhpcy5ob3Zlcl9ub2RlKHRoaXMuX2dldF9wcmV2KG8pKTsgfQoJCQkJfQoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQkicmlnaHQiIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmRhdGEudWkuaG92ZXJlZCB8fCB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZDsKCQkJCWlmKG8gJiYgby5sZW5ndGgpIHsKCQkJCQlpZihvLmhhc0NsYXNzKCJqc3RyZWUtY2xvc2VkIikpIHsgdGhpcy5vcGVuX25vZGUobyk7IH0KCQkJCQllbHNlIHsgdGhpcy5ob3Zlcl9ub2RlKHRoaXMuX2dldF9uZXh0KG8pKTsgfQoJCQkJfQoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9LAoJCQkiY3RybCtyaWdodCIgOiBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgbyA9IHRoaXMuZGF0YS51aS5ob3ZlcmVkIHx8IHRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkOwoJCQkJaWYobyAmJiBvLmxlbmd0aCkgewoJCQkJCWlmKG8uaGFzQ2xhc3MoImpzdHJlZS1jbG9zZWQiKSkgeyB0aGlzLm9wZW5fbm9kZShvKTsgfQoJCQkJCWVsc2UgeyB0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X25leHQobykpOyB9CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJzaGlmdCtyaWdodCIgOiBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgbyA9IHRoaXMuZGF0YS51aS5ob3ZlcmVkIHx8IHRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkOwoJCQkJaWYobyAmJiBvLmxlbmd0aCkgewoJCQkJCWlmKG8uaGFzQ2xhc3MoImpzdHJlZS1jbG9zZWQiKSkgeyB0aGlzLm9wZW5fbm9kZShvKTsgfQoJCQkJCWVsc2UgeyB0aGlzLmhvdmVyX25vZGUodGhpcy5fZ2V0X25leHQobykpOyB9CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJzcGFjZSIgOiBmdW5jdGlvbiAoKSB7CgkJCQlpZih0aGlzLmRhdGEudWkuaG92ZXJlZCkgeyB0aGlzLmRhdGEudWkuaG92ZXJlZC5jaGlsZHJlbigiYTplcSgwKSIpLmNsaWNrKCk7IH0KCQkJCXJldHVybiBmYWxzZTsKCQkJfSwKCQkJImN0cmwrc3BhY2UiIDogZnVuY3Rpb24gKGV2ZW50KSB7CgkJCQlldmVudC50eXBlID0gImNsaWNrIjsKCQkJCWlmKHRoaXMuZGF0YS51aS5ob3ZlcmVkKSB7IHRoaXMuZGF0YS51aS5ob3ZlcmVkLmNoaWxkcmVuKCJhOmVxKDApIikudHJpZ2dlcihldmVudCk7IH0KCQkJCXJldHVybiBmYWxzZTsKCQkJfSwKCQkJInNoaWZ0K3NwYWNlIiA6IGZ1bmN0aW9uIChldmVudCkgewoJCQkJZXZlbnQudHlwZSA9ICJjbGljayI7CgkJCQlpZih0aGlzLmRhdGEudWkuaG92ZXJlZCkgeyB0aGlzLmRhdGEudWkuaG92ZXJlZC5jaGlsZHJlbigiYTplcSgwKSIpLnRyaWdnZXIoZXZlbnQpOyB9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0sCgkJCSJmMiIgOiBmdW5jdGlvbiAoKSB7IHRoaXMucmVuYW1lKHRoaXMuZGF0YS51aS5ob3ZlcmVkIHx8IHRoaXMuZGF0YS51aS5sYXN0X3NlbGVjdGVkKTsgfSwKCQkJImRlbCIgOiBmdW5jdGlvbiAoKSB7IHRoaXMucmVtb3ZlKHRoaXMuZGF0YS51aS5ob3ZlcmVkIHx8IHRoaXMuX2dldF9ub2RlKG51bGwpKTsgfQoJCX0sCgkJX2ZuIDogewoJCQllbmFibGVfaG90a2V5cyA6IGZ1bmN0aW9uICgpIHsKCQkJCXRoaXMuZGF0YS5ob3RrZXlzLmVuYWJsZWQgPSB0cnVlOwoJCQl9LAoJCQlkaXNhYmxlX2hvdGtleXMgOiBmdW5jdGlvbiAoKSB7CgkJCQl0aGlzLmRhdGEuaG90a2V5cy5lbmFibGVkID0gZmFsc2U7CgkJCX0KCQl9Cgl9KTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIEpTT04gcGx1Z2luCiAqIFRoZSBKU09OIGRhdGEgc3RvcmUuIERhdGFzdG9yZXMgYXJlIGJ1aWxkIGJ5IG92ZXJyaWRpbmcgdGhlIGBsb2FkX25vZGVgIGFuZCBgX2lzX2xvYWRlZGAgZnVuY3Rpb25zLgogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oImpzb25fZGF0YSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbigpIHsKCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5qc29uX2RhdGE7CgkJCWlmKHMucHJvZ3Jlc3NpdmVfdW5sb2FkKSB7CgkJCQl0aGlzLmdldF9jb250YWluZXIoKS5iaW5kKCJhZnRlcl9jbG9zZS5qc3RyZWUiLCBmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCWRhdGEucnNsdC5vYmouY2hpbGRyZW4oInVsIikucmVtb3ZlKCk7CgkJCQl9KTsKCQkJfQoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCS8vIGBkYXRhYCBjYW4gYmUgYSBmdW5jdGlvbjoKCQkJLy8gICogYWNjZXB0cyB0d28gYXJndW1lbnRzIC0gbm9kZSBiZWluZyBsb2FkZWQgYW5kIGEgY2FsbGJhY2sgdG8gcGFzcyB0aGUgcmVzdWx0IHRvCgkJCS8vICAqIHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnQgdHJlZSdzIHNjb3BlICYgYWpheCB3b24ndCBiZSBzdXBwb3J0ZWQKCQkJZGF0YSA6IGZhbHNlLAoJCQlhamF4IDogZmFsc2UsCgkJCWNvcnJlY3Rfc3RhdGUgOiB0cnVlLAoJCQlwcm9ncmVzc2l2ZV9yZW5kZXIgOiBmYWxzZSwKCQkJcHJvZ3Jlc3NpdmVfdW5sb2FkIDogZmFsc2UKCQl9LAoJCV9mbiA6IHsKCQkJbG9hZF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgc19jYWxsLCBlX2NhbGwpIHsgdmFyIF90aGlzID0gdGhpczsgdGhpcy5sb2FkX25vZGVfanNvbihvYmosIGZ1bmN0aW9uICgpIHsgX3RoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogX3RoaXMuX2dldF9ub2RlKG9iaikgfSk7IHNfY2FsbC5jYWxsKHRoaXMpOyB9LCBlX2NhbGwpOyB9LAoJCQlfaXNfbG9hZGVkIDogZnVuY3Rpb24gKG9iaikgewoJCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5qc29uX2RhdGE7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJcmV0dXJuIG9iaiA9PSAtMSB8fCAhb2JqIHx8ICghcy5hamF4ICYmICFzLnByb2dyZXNzaXZlX3JlbmRlciAmJiAhJC5pc0Z1bmN0aW9uKHMuZGF0YSkpIHx8IG9iai5pcygiLmpzdHJlZS1vcGVuLCAuanN0cmVlLWxlYWYiKSB8fCBvYmouY2hpbGRyZW4oInVsIikuY2hpbGRyZW4oImxpIikubGVuZ3RoID4gMDsKCQkJfSwKCQkJcmVmcmVzaCA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl2YXIgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmpzb25fZGF0YTsKCQkJCWlmKG9iaiAmJiBvYmogIT09IC0xICYmIHMucHJvZ3Jlc3NpdmVfdW5sb2FkICYmICgkLmlzRnVuY3Rpb24ocy5kYXRhKSB8fCAhIXMuYWpheCkpIHsKCQkJCQlvYmoucmVtb3ZlRGF0YSgianN0cmVlX2NoaWxkcmVuIik7CgkJCQl9CgkJCQlyZXR1cm4gdGhpcy5fX2NhbGxfb2xkKCk7CgkJCX0sCgkJCWxvYWRfbm9kZV9qc29uIDogZnVuY3Rpb24gKG9iaiwgc19jYWxsLCBlX2NhbGwpIHsKCQkJCXZhciBzID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5qc29uX2RhdGEsIGQsCgkJCQkJZXJyb3JfZnVuYyA9IGZ1bmN0aW9uICgpIHt9LAoJCQkJCXN1Y2Nlc3NfZnVuYyA9IGZ1bmN0aW9uICgpIHt9OwoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCgkJCQlpZihvYmogJiYgb2JqICE9PSAtMSAmJiAocy5wcm9ncmVzc2l2ZV9yZW5kZXIgfHwgcy5wcm9ncmVzc2l2ZV91bmxvYWQpICYmICFvYmouaXMoIi5qc3RyZWUtb3BlbiwgLmpzdHJlZS1sZWFmIikgJiYgb2JqLmNoaWxkcmVuKCJ1bCIpLmNoaWxkcmVuKCJsaSIpLmxlbmd0aCA9PT0gMCAmJiBvYmouZGF0YSgianN0cmVlX2NoaWxkcmVuIikpIHsKCQkJCQlkID0gdGhpcy5fcGFyc2VfanNvbihvYmouZGF0YSgianN0cmVlX2NoaWxkcmVuIiksIG9iaik7CgkJCQkJaWYoZCkgewoJCQkJCQlvYmouYXBwZW5kKGQpOwoJCQkJCQlpZighcy5wcm9ncmVzc2l2ZV91bmxvYWQpIHsgb2JqLnJlbW92ZURhdGEoImpzdHJlZV9jaGlsZHJlbiIpOyB9CgkJCQkJfQoJCQkJCXRoaXMuY2xlYW5fbm9kZShvYmopOwoJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQlpZihvYmogJiYgb2JqICE9PSAtMSkgewoJCQkJCWlmKG9iai5kYXRhKCJqc3RyZWVfaXNfbG9hZGluZyIpKSB7IHJldHVybjsgfQoJCQkJCWVsc2UgeyBvYmouZGF0YSgianN0cmVlX2lzX2xvYWRpbmciLHRydWUpOyB9CgkJCQl9CgkJCQlzd2l0Y2goITApIHsKCQkJCQljYXNlICghcy5kYXRhICYmICFzLmFqYXgpOiB0aHJvdyAiTmVpdGhlciBkYXRhIG5vciBhamF4IHNldHRpbmdzIHN1cHBsaWVkLiI7CgkJCQkJLy8gZnVuY3Rpb24gb3B0aW9uIGFkZGVkIGhlcmUgZm9yIGVhc2llciBtb2RlbCBpbnRlZ3JhdGlvbiAoYWxzbyBzdXBwb3J0aW5nIGFzeW5jIC0gc2VlIGNhbGxiYWNrKQoJCQkJCWNhc2UgKCQuaXNGdW5jdGlvbihzLmRhdGEpKToKCQkJCQkJcy5kYXRhLmNhbGwodGhpcywgb2JqLCAkLnByb3h5KGZ1bmN0aW9uIChkKSB7CgkJCQkJCQlkID0gdGhpcy5fcGFyc2VfanNvbihkLCBvYmopOwoJCQkJCQkJaWYoIWQpIHsKCQkJCQkJCQlpZihvYmogPT09IC0xIHx8ICFvYmopIHsKCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCk7IH0KCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCW9iai5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOwoJCQkJCQkJCQlvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsKCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7IHRoaXMuY29ycmVjdF9zdGF0ZShvYmopOyB9CgkJCQkJCQkJfQoJCQkJCQkJCWlmKGVfY2FsbCkgeyBlX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJaWYob2JqID09PSAtMSB8fCAhb2JqKSB7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCkuYXBwZW5kKGQuY2hpbGRyZW4oKSk7IH0KCQkJCQkJCQllbHNlIHsgb2JqLmFwcGVuZChkKS5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOyBvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsgfQoJCQkJCQkJCXRoaXMuY2xlYW5fbm9kZShvYmopOwoJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJfQoJCQkJCQl9LCB0aGlzKSk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgKCEhcy5kYXRhICYmICFzLmFqYXgpIHx8ICghIXMuZGF0YSAmJiAhIXMuYWpheCAmJiAoIW9iaiB8fCBvYmogPT09IC0xKSk6CgkJCQkJCWlmKCFvYmogfHwgb2JqID09IC0xKSB7CgkJCQkJCQlkID0gdGhpcy5fcGFyc2VfanNvbihzLmRhdGEsIG9iaik7CgkJCQkJCQlpZihkKSB7CgkJCQkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKS5hcHBlbmQoZC5jaGlsZHJlbigpKTsKCQkJCQkJCQl0aGlzLmNsZWFuX25vZGUoKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCWlmKHMuY29ycmVjdF9zdGF0ZSkgeyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lbXB0eSgpOyB9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgKCFzLmRhdGEgJiYgISFzLmFqYXgpIHx8ICghIXMuZGF0YSAmJiAhIXMuYWpheCAmJiBvYmogJiYgb2JqICE9PSAtMSk6CgkJCQkJCWVycm9yX2Z1bmMgPSBmdW5jdGlvbiAoeCwgdCwgZSkgewoJCQkJCQkJdmFyIGVmID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5qc29uX2RhdGEuYWpheC5lcnJvcjsKCQkJCQkJCWlmKGVmKSB7IGVmLmNhbGwodGhpcywgeCwgdCwgZSk7IH0KCQkJCQkJCWlmKG9iaiAhPSAtMSAmJiBvYmoubGVuZ3RoKSB7CgkJCQkJCQkJb2JqLmNoaWxkcmVuKCJhLmpzdHJlZS1sb2FkaW5nIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1sb2FkaW5nIik7CgkJCQkJCQkJb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7CgkJCQkJCQkJaWYodCA9PT0gInN1Y2Nlc3MiICYmIHMuY29ycmVjdF9zdGF0ZSkgeyB0aGlzLmNvcnJlY3Rfc3RhdGUob2JqKTsgfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJaWYodCA9PT0gInN1Y2Nlc3MiICYmIHMuY29ycmVjdF9zdGF0ZSkgeyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lbXB0eSgpOyB9CgkJCQkJCQl9CgkJCQkJCQlpZihlX2NhbGwpIHsgZV9jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJfTsKCQkJCQkJc3VjY2Vzc19mdW5jID0gZnVuY3Rpb24gKGQsIHQsIHgpIHsKCQkJCQkJCXZhciBzZiA9IHRoaXMuZ2V0X3NldHRpbmdzKCkuanNvbl9kYXRhLmFqYXguc3VjY2VzczsKCQkJCQkJCWlmKHNmKSB7IGQgPSBzZi5jYWxsKHRoaXMsZCx0LHgpIHx8IGQ7IH0KCQkJCQkJCWlmKGQgPT09ICIiIHx8IChkICYmIGQudG9TdHJpbmcgJiYgZC50b1N0cmluZygpLnJlcGxhY2UoL15bXHNcbl0rJC8sIiIpID09PSAiIikgfHwgKCEkLmlzQXJyYXkoZCkgJiYgISQuaXNQbGFpbk9iamVjdChkKSkpIHsKCQkJCQkJCQlyZXR1cm4gZXJyb3JfZnVuYy5jYWxsKHRoaXMsIHgsIHQsICIiKTsKCQkJCQkJCX0KCQkJCQkJCWQgPSB0aGlzLl9wYXJzZV9qc29uKGQsIG9iaik7CgkJCQkJCQlpZihkKSB7CgkJCQkJCQkJaWYob2JqID09PSAtMSB8fCAhb2JqKSB7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCkuYXBwZW5kKGQuY2hpbGRyZW4oKSk7IH0KCQkJCQkJCQllbHNlIHsgb2JqLmFwcGVuZChkKS5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOyBvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsgfQoJCQkJCQkJCXRoaXMuY2xlYW5fbm9kZShvYmopOwoJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJaWYob2JqID09PSAtMSB8fCAhb2JqKSB7CgkJCQkJCQkJCWlmKHMuY29ycmVjdF9zdGF0ZSkgewoJCQkJCQkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKTsKCQkJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQlvYmouY2hpbGRyZW4oImEuanN0cmVlLWxvYWRpbmciKS5yZW1vdmVDbGFzcygianN0cmVlLWxvYWRpbmciKTsKCQkJCQkJCQkJb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7CgkJCQkJCQkJCWlmKHMuY29ycmVjdF9zdGF0ZSkgewoJCQkJCQkJCQkJdGhpcy5jb3JyZWN0X3N0YXRlKG9iaik7CgkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfTsKCQkJCQkJcy5hamF4LmNvbnRleHQgPSB0aGlzOwoJCQkJCQlzLmFqYXguZXJyb3IgPSBlcnJvcl9mdW5jOwoJCQkJCQlzLmFqYXguc3VjY2VzcyA9IHN1Y2Nlc3NfZnVuYzsKCQkJCQkJaWYoIXMuYWpheC5kYXRhVHlwZSkgeyBzLmFqYXguZGF0YVR5cGUgPSAianNvbiI7IH0KCQkJCQkJaWYoJC5pc0Z1bmN0aW9uKHMuYWpheC51cmwpKSB7IHMuYWpheC51cmwgPSBzLmFqYXgudXJsLmNhbGwodGhpcywgb2JqKTsgfQoJCQkJCQlpZigkLmlzRnVuY3Rpb24ocy5hamF4LmRhdGEpKSB7IHMuYWpheC5kYXRhID0gcy5hamF4LmRhdGEuY2FsbCh0aGlzLCBvYmopOyB9CgkJCQkJCSQuYWpheChzLmFqYXgpOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJfSwKCQkJX3BhcnNlX2pzb24gOiBmdW5jdGlvbiAoanMsIG9iaiwgaXNfY2FsbGJhY2spIHsKCQkJCXZhciBkID0gZmFsc2UsCgkJCQkJcCA9IHRoaXMuX2dldF9zZXR0aW5ncygpLAoJCQkJCXMgPSBwLmpzb25fZGF0YSwKCQkJCQl0ID0gcC5jb3JlLmh0bWxfdGl0bGVzLAoJCQkJCXRtcCwgaSwgaiwgdWwxLCB1bDI7CgoJCQkJaWYoIWpzKSB7IHJldHVybiBkOyB9CgkJCQlpZihzLnByb2dyZXNzaXZlX3VubG9hZCAmJiBvYmogJiYgb2JqICE9PSAtMSkgewoJCQkJCW9iai5kYXRhKCJqc3RyZWVfY2hpbGRyZW4iLCBkKTsKCQkJCX0KCQkJCWlmKCQuaXNBcnJheShqcykpIHsKCQkJCQlkID0gJCgpOwoJCQkJCWlmKCFqcy5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQkJZm9yKGkgPSAwLCBqID0ganMubGVuZ3RoOyBpIDwgajsgaSsrKSB7CgkJCQkJCXRtcCA9IHRoaXMuX3BhcnNlX2pzb24oanNbaV0sIG9iaiwgdHJ1ZSk7CgkJCQkJCWlmKHRtcC5sZW5ndGgpIHsgZCA9IGQuYWRkKHRtcCk7IH0KCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZih0eXBlb2YganMgPT0gInN0cmluZyIpIHsganMgPSB7IGRhdGEgOiBqcyB9OyB9CgkJCQkJaWYoIWpzLmRhdGEgJiYganMuZGF0YSAhPT0gIiIpIHsgcmV0dXJuIGQ7IH0KCQkJCQlkID0gJCgiPGxpIC8+Iik7CgkJCQkJaWYoanMuYXR0cikgeyBkLmF0dHIoanMuYXR0cik7IH0KCQkJCQlpZihqcy5tZXRhZGF0YSkgeyBkLmRhdGEoanMubWV0YWRhdGEpOyB9CgkJCQkJaWYoanMuc3RhdGUpIHsgZC5hZGRDbGFzcygianN0cmVlLSIgKyBqcy5zdGF0ZSk7IH0KCQkJCQlpZighJC5pc0FycmF5KGpzLmRhdGEpKSB7IHRtcCA9IGpzLmRhdGE7IGpzLmRhdGEgPSBbXTsganMuZGF0YS5wdXNoKHRtcCk7IH0KCQkJCQkkLmVhY2goanMuZGF0YSwgZnVuY3Rpb24gKGksIG0pIHsKCQkJCQkJdG1wID0gJCgiPGEgLz4iKTsKCQkJCQkJaWYoJC5pc0Z1bmN0aW9uKG0pKSB7IG0gPSBtLmNhbGwodGhpcywganMpOyB9CgkJCQkJCWlmKHR5cGVvZiBtID09ICJzdHJpbmciKSB7IHRtcC5hdHRyKCdocmVmJywnIycpWyB0ID8gImh0bWwiIDogInRleHQiIF0obSk7IH0KCQkJCQkJZWxzZSB7CgkJCQkJCQlpZighbS5hdHRyKSB7IG0uYXR0ciA9IHt9OyB9CgkJCQkJCQlpZighbS5hdHRyLmhyZWYpIHsgbS5hdHRyLmhyZWYgPSAnIyc7IH0KCQkJCQkJCXRtcC5hdHRyKG0uYXR0cilbIHQgPyAiaHRtbCIgOiAidGV4dCIgXShtLnRpdGxlKTsKCQkJCQkJCWlmKG0ubGFuZ3VhZ2UpIHsgdG1wLmFkZENsYXNzKG0ubGFuZ3VhZ2UpOyB9CgkJCQkJCX0KCQkJCQkJdG1wLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKTsKCQkJCQkJaWYoIW0uaWNvbiAmJiBqcy5pY29uKSB7IG0uaWNvbiA9IGpzLmljb247IH0KCQkJCQkJaWYobS5pY29uKSB7CgkJCQkJCQlpZihtLmljb24uaW5kZXhPZigiLyIpID09PSAtMSkgeyB0bXAuY2hpbGRyZW4oImlucyIpLmFkZENsYXNzKG0uaWNvbik7IH0KCQkJCQkJCWVsc2UgeyB0bXAuY2hpbGRyZW4oImlucyIpLmNzcygiYmFja2dyb3VuZCIsInVybCgnIiArIG0uaWNvbiArICInKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCIpOyB9CgkJCQkJCX0KCQkJCQkJZC5hcHBlbmQodG1wKTsKCQkJCQl9KTsKCQkJCQlkLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKTsKCQkJCQlpZihqcy5jaGlsZHJlbikgewoJCQkJCQlpZihzLnByb2dyZXNzaXZlX3JlbmRlciAmJiBqcy5zdGF0ZSAhPT0gIm9wZW4iKSB7CgkJCQkJCQlkLmFkZENsYXNzKCJqc3RyZWUtY2xvc2VkIikuZGF0YSgianN0cmVlX2NoaWxkcmVuIiwganMuY2hpbGRyZW4pOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJaWYocy5wcm9ncmVzc2l2ZV91bmxvYWQpIHsgZC5kYXRhKCJqc3RyZWVfY2hpbGRyZW4iLCBqcy5jaGlsZHJlbik7IH0KCQkJCQkJCWlmKCQuaXNBcnJheShqcy5jaGlsZHJlbikgJiYganMuY2hpbGRyZW4ubGVuZ3RoKSB7CgkJCQkJCQkJdG1wID0gdGhpcy5fcGFyc2VfanNvbihqcy5jaGlsZHJlbiwgb2JqLCB0cnVlKTsKCQkJCQkJCQlpZih0bXAubGVuZ3RoKSB7CgkJCQkJCQkJCXVsMiA9ICQoIjx1bCAvPiIpOwoJCQkJCQkJCQl1bDIuYXBwZW5kKHRtcCk7CgkJCQkJCQkJCWQuYXBwZW5kKHVsMik7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJaWYoIWlzX2NhbGxiYWNrKSB7CgkJCQkJdWwxID0gJCgiPHVsIC8+Iik7CgkJCQkJdWwxLmFwcGVuZChkKTsKCQkJCQlkID0gdWwxOwoJCQkJfQoJCQkJcmV0dXJuIGQ7CgkJCX0sCgkJCWdldF9qc29uIDogZnVuY3Rpb24gKG9iaiwgbGlfYXR0ciwgYV9hdHRyLCBpc19jYWxsYmFjaykgewoJCQkJdmFyIHJlc3VsdCA9IFtdLAoJCQkJCXMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKSwKCQkJCQlfdGhpcyA9IHRoaXMsCgkJCQkJdG1wMSwgdG1wMiwgbGksIGEsIHQsIGxhbmc7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJaWYoIW9iaiB8fCBvYmogPT09IC0xKSB7IG9iaiA9IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIj4gdWwgPiBsaSIpOyB9CgkJCQlsaV9hdHRyID0gJC5pc0FycmF5KGxpX2F0dHIpID8gbGlfYXR0ciA6IFsgImlkIiwgImNsYXNzIiBdOwoJCQkJaWYoIWlzX2NhbGxiYWNrICYmIHRoaXMuZGF0YS50eXBlcykgeyBsaV9hdHRyLnB1c2gocy50eXBlcy50eXBlX2F0dHIpOyB9CgkJCQlhX2F0dHIgPSAkLmlzQXJyYXkoYV9hdHRyKSA/IGFfYXR0ciA6IFsgXTsKCgkJCQlvYmouZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJbGkgPSAkKHRoaXMpOwoJCQkJCXRtcDEgPSB7IGRhdGEgOiBbXSB9OwoJCQkJCWlmKGxpX2F0dHIubGVuZ3RoKSB7IHRtcDEuYXR0ciA9IHsgfTsgfQoJCQkJCSQuZWFjaChsaV9hdHRyLCBmdW5jdGlvbiAoaSwgdikgewoJCQkJCQl0bXAyID0gbGkuYXR0cih2KTsKCQkJCQkJaWYodG1wMiAmJiB0bXAyLmxlbmd0aCAmJiB0bXAyLnJlcGxhY2UoL2pzdHJlZVteIF0qL2lnLCcnKS5sZW5ndGgpIHsKCQkJCQkJCXRtcDEuYXR0clt2XSA9ICgiICIgKyB0bXAyKS5yZXBsYWNlKC8ganN0cmVlW14gXSovaWcsJycpLnJlcGxhY2UoL1xzKyQvaWcsIiAiKS5yZXBsYWNlKC9eIC8sIiIpLnJlcGxhY2UoLyAkLywiIik7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCQlpZihsaS5oYXNDbGFzcygianN0cmVlLW9wZW4iKSkgeyB0bXAxLnN0YXRlID0gIm9wZW4iOyB9CgkJCQkJaWYobGkuaGFzQ2xhc3MoImpzdHJlZS1jbG9zZWQiKSkgeyB0bXAxLnN0YXRlID0gImNsb3NlZCI7IH0KCQkJCQlpZihsaS5kYXRhKCkpIHsgdG1wMS5tZXRhZGF0YSA9IGxpLmRhdGEoKTsgfQoJCQkJCWEgPSBsaS5jaGlsZHJlbigiYSIpOwoJCQkJCWEuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJCXQgPSAkKHRoaXMpOwoJCQkJCQlpZigKCQkJCQkJCWFfYXR0ci5sZW5ndGggfHwKCQkJCQkJCSQuaW5BcnJheSgibGFuZ3VhZ2VzIiwgcy5wbHVnaW5zKSAhPT0gLTEgfHwKCQkJCQkJCXQuY2hpbGRyZW4oImlucyIpLmdldCgwKS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UubGVuZ3RoIHx8CgkJCQkJCQkodC5jaGlsZHJlbigiaW5zIikuZ2V0KDApLmNsYXNzTmFtZSAmJiB0LmNoaWxkcmVuKCJpbnMiKS5nZXQoMCkuY2xhc3NOYW1lLnJlcGxhY2UoL2pzdHJlZVteIF0qfCQvaWcsJycpLmxlbmd0aCkKCQkJCQkJKSB7CgkJCQkJCQlsYW5nID0gZmFsc2U7CgkJCQkJCQlpZigkLmluQXJyYXkoImxhbmd1YWdlcyIsIHMucGx1Z2lucykgIT09IC0xICYmICQuaXNBcnJheShzLmxhbmd1YWdlcykgJiYgcy5sYW5ndWFnZXMubGVuZ3RoKSB7CgkJCQkJCQkJJC5lYWNoKHMubGFuZ3VhZ2VzLCBmdW5jdGlvbiAobCwgbHYpIHsKCQkJCQkJCQkJaWYodC5oYXNDbGFzcyhsdikpIHsKCQkJCQkJCQkJCWxhbmcgPSBsdjsKCQkJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0pOwoJCQkJCQkJfQoJCQkJCQkJdG1wMiA9IHsgYXR0ciA6IHsgfSwgdGl0bGUgOiBfdGhpcy5nZXRfdGV4dCh0LCBsYW5nKSB9OwoJCQkJCQkJJC5lYWNoKGFfYXR0ciwgZnVuY3Rpb24gKGssIHopIHsKCQkJCQkJCQl0bXAyLmF0dHJbel0gPSAoIiAiICsgKHQuYXR0cih6KSB8fCAiIikpLnJlcGxhY2UoLyBqc3RyZWVbXiBdKi9pZywnJykucmVwbGFjZSgvXHMrJC9pZywiICIpLnJlcGxhY2UoL14gLywiIikucmVwbGFjZSgvICQvLCIiKTsKCQkJCQkJCX0pOwoJCQkJCQkJaWYoJC5pbkFycmF5KCJsYW5ndWFnZXMiLCBzLnBsdWdpbnMpICE9PSAtMSAmJiAkLmlzQXJyYXkocy5sYW5ndWFnZXMpICYmIHMubGFuZ3VhZ2VzLmxlbmd0aCkgewoJCQkJCQkJCSQuZWFjaChzLmxhbmd1YWdlcywgZnVuY3Rpb24gKGssIHopIHsKCQkJCQkJCQkJaWYodC5oYXNDbGFzcyh6KSkgeyB0bXAyLmxhbmd1YWdlID0gejsgcmV0dXJuIHRydWU7IH0KCQkJCQkJCQl9KTsKCQkJCQkJCX0KCQkJCQkJCWlmKHQuY2hpbGRyZW4oImlucyIpLmdldCgwKS5jbGFzc05hbWUucmVwbGFjZSgvanN0cmVlW14gXSp8JC9pZywnJykucmVwbGFjZSgvXlxzKyQvaWcsIiIpLmxlbmd0aCkgewoJCQkJCQkJCXRtcDIuaWNvbiA9IHQuY2hpbGRyZW4oImlucyIpLmdldCgwKS5jbGFzc05hbWUucmVwbGFjZSgvanN0cmVlW14gXSp8JC9pZywnJykucmVwbGFjZSgvXHMrJC9pZywiICIpLnJlcGxhY2UoL14gLywiIikucmVwbGFjZSgvICQvLCIiKTsKCQkJCQkJCX0KCQkJCQkJCWlmKHQuY2hpbGRyZW4oImlucyIpLmdldCgwKS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UubGVuZ3RoKSB7CgkJCQkJCQkJdG1wMi5pY29uID0gdC5jaGlsZHJlbigiaW5zIikuZ2V0KDApLnN0eWxlLmJhY2tncm91bmRJbWFnZS5yZXBsYWNlKCJ1cmwoIiwiIikucmVwbGFjZSgiKSIsIiIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJdG1wMiA9IF90aGlzLmdldF90ZXh0KHQpOwoJCQkJCQl9CgkJCQkJCWlmKGEubGVuZ3RoID4gMSkgeyB0bXAxLmRhdGEucHVzaCh0bXAyKTsgfQoJCQkJCQllbHNlIHsgdG1wMS5kYXRhID0gdG1wMjsgfQoJCQkJCX0pOwoJCQkJCWxpID0gbGkuZmluZCgiPiB1bCA+IGxpIik7CgkJCQkJaWYobGkubGVuZ3RoKSB7IHRtcDEuY2hpbGRyZW4gPSBfdGhpcy5nZXRfanNvbihsaSwgbGlfYXR0ciwgYV9hdHRyLCB0cnVlKTsgfQoJCQkJCXJlc3VsdC5wdXNoKHRtcDEpOwoJCQkJfSk7CgkJCQlyZXR1cm4gcmVzdWx0OwoJCQl9CgkJfQoJfSk7Cn0pKGpRdWVyeSk7Ci8vKi8KCi8qCiAqIGpzVHJlZSBsYW5ndWFnZXMgcGx1Z2luCiAqIEFkZHMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2UgdmVyc2lvbnMgaW4gb25lIHRyZWUKICogVGhpcyBiYXNpY2FsbHkgYWxsb3dzIGZvciBtYW55IHRpdGxlcyBjb2V4aXN0aW5nIGluIG9uZSBub2RlLCBidXQgb25seSBvbmUgb2YgdGhlbSBiZWluZyB2aXNpYmxlIGF0IGFueSBnaXZlbiB0aW1lCiAqIFRoaXMgaXMgdXNlZnVsIGZvciBtYWludGFpbmluZyB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gbWFueSBsYW5ndWFnZXMgKGhlbmNlIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4pCiAqLwooZnVuY3Rpb24gKCQpIHsKCXZhciBzaCA9IGZhbHNlOwoJJC5qc3RyZWUucGx1Z2luKCJsYW5ndWFnZXMiLCB7CgkJX19pbml0IDogZnVuY3Rpb24gKCkgeyB0aGlzLl9sb2FkX2NzcygpOyAgfSwKCQlkZWZhdWx0cyA6IFtdLAoJCV9mbiA6IHsKCQkJc2V0X2xhbmcgOiBmdW5jdGlvbiAoaSkgewoJCQkJdmFyIGxhbmdzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkubGFuZ3VhZ2VzLAoJCQkJCXN0ID0gZmFsc2UsCgkJCQkJc2VsZWN0b3IgPSAiLmpzdHJlZS0iICsgdGhpcy5nZXRfaW5kZXgoKSArICcgYSc7CgkJCQlpZighJC5pc0FycmF5KGxhbmdzKSB8fCBsYW5ncy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQlpZigkLmluQXJyYXkoaSxsYW5ncykgPT0gLTEpIHsKCQkJCQlpZighIWxhbmdzW2ldKSB7IGkgPSBsYW5nc1tpXTsgfQoJCQkJCWVsc2UgeyByZXR1cm4gZmFsc2U7IH0KCQkJCX0KCQkJCWlmKGkgPT0gdGhpcy5kYXRhLmxhbmd1YWdlcy5jdXJyZW50X2xhbmd1YWdlKSB7IHJldHVybiB0cnVlOyB9CgkJCQlzdCA9ICQudmFrYXRhLmNzcy5nZXRfY3NzKHNlbGVjdG9yICsgIi4iICsgdGhpcy5kYXRhLmxhbmd1YWdlcy5jdXJyZW50X2xhbmd1YWdlLCBmYWxzZSwgc2gpOwoJCQkJaWYoc3QgIT09IGZhbHNlKSB7IHN0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IH0KCQkJCXN0ID0gJC52YWthdGEuY3NzLmdldF9jc3Moc2VsZWN0b3IgKyAiLiIgKyBpLCBmYWxzZSwgc2gpOwoJCQkJaWYoc3QgIT09IGZhbHNlKSB7IHN0LnN0eWxlLmRpc3BsYXkgPSAiIjsgfQoJCQkJdGhpcy5kYXRhLmxhbmd1YWdlcy5jdXJyZW50X2xhbmd1YWdlID0gaTsKCQkJCXRoaXMuX19jYWxsYmFjayhpKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9LAoJCQlnZXRfbGFuZyA6IGZ1bmN0aW9uICgpIHsKCQkJCXJldHVybiB0aGlzLmRhdGEubGFuZ3VhZ2VzLmN1cnJlbnRfbGFuZ3VhZ2U7CgkJCX0sCgkJCV9nZXRfc3RyaW5nIDogZnVuY3Rpb24gKGtleSwgbGFuZykgewoJCQkJdmFyIGxhbmdzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkubGFuZ3VhZ2VzLAoJCQkJCXMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLnN0cmluZ3M7CgkJCQlpZigkLmlzQXJyYXkobGFuZ3MpICYmIGxhbmdzLmxlbmd0aCkgewoJCQkJCWxhbmcgPSAobGFuZyAmJiAkLmluQXJyYXkobGFuZyxsYW5ncykgIT0gLTEpID8gbGFuZyA6IHRoaXMuZGF0YS5sYW5ndWFnZXMuY3VycmVudF9sYW5ndWFnZTsKCQkJCX0KCQkJCWlmKHNbbGFuZ10gJiYgc1tsYW5nXVtrZXldKSB7IHJldHVybiBzW2xhbmddW2tleV07IH0KCQkJCWlmKHNba2V5XSkgeyByZXR1cm4gc1trZXldOyB9CgkJCQlyZXR1cm4ga2V5OwoJCQl9LAoJCQlnZXRfdGV4dCA6IGZ1bmN0aW9uIChvYmosIGxhbmcpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaikgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQ7CgkJCQlpZighb2JqLnNpemUoKSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXZhciBsYW5ncyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmxhbmd1YWdlcywKCQkJCQlzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5odG1sX3RpdGxlczsKCQkJCWlmKCQuaXNBcnJheShsYW5ncykgJiYgbGFuZ3MubGVuZ3RoKSB7CgkJCQkJbGFuZyA9IChsYW5nICYmICQuaW5BcnJheShsYW5nLGxhbmdzKSAhPSAtMSkgPyBsYW5nIDogdGhpcy5kYXRhLmxhbmd1YWdlcy5jdXJyZW50X2xhbmd1YWdlOwoJCQkJCW9iaiA9IG9iai5jaGlsZHJlbigiYS4iICsgbGFuZyk7CgkJCQl9CgkJCQllbHNlIHsgb2JqID0gb2JqLmNoaWxkcmVuKCJhOmVxKDApIik7IH0KCQkJCWlmKHMpIHsKCQkJCQlvYmogPSBvYmouY2xvbmUoKTsKCQkJCQlvYmouY2hpbGRyZW4oIklOUyIpLnJlbW92ZSgpOwoJCQkJCXJldHVybiBvYmouaHRtbCgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJb2JqID0gb2JqLmNvbnRlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5ub2RlVHlwZSA9PSAzOyB9KVswXTsKCQkJCQlyZXR1cm4gb2JqLm5vZGVWYWx1ZTsKCQkJCX0KCQkJfSwKCQkJc2V0X3RleHQgOiBmdW5jdGlvbiAob2JqLCB2YWwsIGxhbmcpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaikgfHwgdGhpcy5kYXRhLnVpLmxhc3Rfc2VsZWN0ZWQ7CgkJCQlpZighb2JqLnNpemUoKSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXZhciBsYW5ncyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmxhbmd1YWdlcywKCQkJCQlzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5odG1sX3RpdGxlcywKCQkJCQl0bXA7CgkJCQlpZigkLmlzQXJyYXkobGFuZ3MpICYmIGxhbmdzLmxlbmd0aCkgewoJCQkJCWxhbmcgPSAobGFuZyAmJiAkLmluQXJyYXkobGFuZyxsYW5ncykgIT0gLTEpID8gbGFuZyA6IHRoaXMuZGF0YS5sYW5ndWFnZXMuY3VycmVudF9sYW5ndWFnZTsKCQkJCQlvYmogPSBvYmouY2hpbGRyZW4oImEuIiArIGxhbmcpOwoJCQkJfQoJCQkJZWxzZSB7IG9iaiA9IG9iai5jaGlsZHJlbigiYTplcSgwKSIpOyB9CgkJCQlpZihzKSB7CgkJCQkJdG1wID0gb2JqLmNoaWxkcmVuKCJJTlMiKS5jbG9uZSgpOwoJCQkJCW9iai5odG1sKHZhbCkucHJlcGVuZCh0bXApOwoJCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqLCAibmFtZSIgOiB2YWwsICJsYW5nIiA6IGxhbmcgfSk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlvYmogPSBvYmouY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm5vZGVUeXBlID09IDM7IH0pWzBdOwoJCQkJCXRoaXMuX19jYWxsYmFjayh7ICJvYmoiIDogb2JqLCAibmFtZSIgOiB2YWwsICJsYW5nIiA6IGxhbmcgfSk7CgkJCQkJcmV0dXJuIChvYmoubm9kZVZhbHVlID0gdmFsKTsKCQkJCX0KCQkJfSwKCQkJX2xvYWRfY3NzIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIGxhbmdzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkubGFuZ3VhZ2VzLAoJCQkJCXN0ciA9ICIvKiBsYW5ndWFnZXMgY3NzICovIiwKCQkJCQlzZWxlY3RvciA9ICIuanN0cmVlLSIgKyB0aGlzLmdldF9pbmRleCgpICsgJyBhJywKCQkJCQlsbjsKCQkJCWlmKCQuaXNBcnJheShsYW5ncykgJiYgbGFuZ3MubGVuZ3RoKSB7CgkJCQkJdGhpcy5kYXRhLmxhbmd1YWdlcy5jdXJyZW50X2xhbmd1YWdlID0gbGFuZ3NbMF07CgkJCQkJZm9yKGxuID0gMDsgbG4gPCBsYW5ncy5sZW5ndGg7IGxuKyspIHsKCQkJCQkJc3RyICs9IHNlbGVjdG9yICsgIi4iICsgbGFuZ3NbbG5dICsgIiB7IjsKCQkJCQkJaWYobGFuZ3NbbG5dICE9IHRoaXMuZGF0YS5sYW5ndWFnZXMuY3VycmVudF9sYW5ndWFnZSkgeyBzdHIgKz0gIiBkaXNwbGF5Om5vbmU7ICI7IH0KCQkJCQkJc3RyICs9ICIgfSAiOwoJCQkJCX0KCQkJCQlzaCA9ICQudmFrYXRhLmNzcy5hZGRfc2hlZXQoeyAnc3RyJyA6IHN0ciwgJ3RpdGxlJyA6ICJqc3RyZWUtbGFuZ3VhZ2VzIiB9KTsKCQkJCX0KCQkJfSwKCQkJY3JlYXRlX25vZGUgOiBmdW5jdGlvbiAob2JqLCBwb3NpdGlvbiwganMsIGNhbGxiYWNrKSB7CgkJCQl2YXIgdCA9IHRoaXMuX19jYWxsX29sZCh0cnVlLCBvYmosIHBvc2l0aW9uLCBqcywgZnVuY3Rpb24gKHQpIHsKCQkJCQl2YXIgbGFuZ3MgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5sYW5ndWFnZXMsCgkJCQkJCWEgPSB0LmNoaWxkcmVuKCJhIiksCgkJCQkJCWxuOwoJCQkJCWlmKCQuaXNBcnJheShsYW5ncykgJiYgbGFuZ3MubGVuZ3RoKSB7CgkJCQkJCWZvcihsbiA9IDA7IGxuIDwgbGFuZ3MubGVuZ3RoOyBsbisrKSB7CgkJCQkJCQlpZighYS5pcygiLiIgKyBsYW5nc1tsbl0pKSB7CgkJCQkJCQkJdC5hcHBlbmQoYS5lcSgwKS5jbG9uZSgpLnJlbW92ZUNsYXNzKGxhbmdzLmpvaW4oIiAiKSkuYWRkQ2xhc3MobGFuZ3NbbG5dKSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJYS5ub3QoIi4iICsgbGFuZ3Muam9pbigiLCAuIikpLnJlbW92ZSgpOwoJCQkJCX0KCQkJCQlpZihjYWxsYmFjaykgeyBjYWxsYmFjay5jYWxsKHRoaXMsIHQpOyB9CgkJCQl9KTsKCQkJCXJldHVybiB0OwoJCQl9CgkJfQoJfSk7Cn0pKGpRdWVyeSk7Ci8vKi8KCi8qCiAqIGpzVHJlZSBjb29raWVzIHBsdWdpbgogKiBTdG9yZXMgdGhlIGN1cnJlbnRseSBvcGVuZWQvc2VsZWN0ZWQgbm9kZXMgaW4gYSBjb29raWUgYW5kIHRoZW4gcmVzdG9yZXMgdGhlbQogKiBEZXBlbmRzIG9uIHRoZSBqcXVlcnkuY29va2llIHBsdWdpbgogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oImNvb2tpZXMiLCB7CgkJX19pbml0IDogZnVuY3Rpb24gKCkgewoJCQlpZih0eXBlb2YgJC5jb29raWUgPT09ICJ1bmRlZmluZWQiKSB7IHRocm93ICJqc1RyZWUgY29va2llOiBqUXVlcnkgY29va2llIHBsdWdpbiBub3QgaW5jbHVkZWQuIjsgfQoKCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb29raWVzLAoJCQkJdG1wOwoJCQlpZighIXMuc2F2ZV9sb2FkZWQpIHsKCQkJCXRtcCA9ICQuY29va2llKHMuc2F2ZV9sb2FkZWQpOwoJCQkJaWYodG1wICYmIHRtcC5sZW5ndGgpIHsgdGhpcy5kYXRhLmNvcmUudG9fbG9hZCA9IHRtcC5zcGxpdCgiLCIpOyB9CgkJCX0KCQkJaWYoISFzLnNhdmVfb3BlbmVkKSB7CgkJCQl0bXAgPSAkLmNvb2tpZShzLnNhdmVfb3BlbmVkKTsKCQkJCWlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7IHRoaXMuZGF0YS5jb3JlLnRvX29wZW4gPSB0bXAuc3BsaXQoIiwiKTsgfQoJCQl9CgkJCWlmKCEhcy5zYXZlX3NlbGVjdGVkKSB7CgkJCQl0bXAgPSAkLmNvb2tpZShzLnNhdmVfc2VsZWN0ZWQpOwoJCQkJaWYodG1wICYmIHRtcC5sZW5ndGggJiYgdGhpcy5kYXRhLnVpKSB7IHRoaXMuZGF0YS51aS50b19zZWxlY3QgPSB0bXAuc3BsaXQoIiwiKTsgfQoJCQl9CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkub25lKCAoIHRoaXMuZGF0YS51aSA/ICJyZXNlbGVjdCIgOiAicmVvcGVuIiApICsgIi5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHsKCQkJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJCQkuYmluZCgib3Blbl9ub2RlLmpzdHJlZSBjbG9zZV9ub2RlLmpzdHJlZSBzZWxlY3Rfbm9kZS5qc3RyZWUgZGVzZWxlY3Rfbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuY29va2llcy5hdXRvX3NhdmUpIHsgdGhpcy5zYXZlX2Nvb2tpZSgoZS5oYW5kbGVPYmoubmFtZXNwYWNlICsgZS5oYW5kbGVPYmoudHlwZSkucmVwbGFjZSgianN0cmVlIiwiIikpOyB9CgkJCQkJCQl9LCB0aGlzKSk7CgkJCQl9LCB0aGlzKSk7CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJc2F2ZV9sb2FkZWQJCTogImpzdHJlZV9sb2FkIiwKCQkJc2F2ZV9vcGVuZWQJCTogImpzdHJlZV9vcGVuIiwKCQkJc2F2ZV9zZWxlY3RlZAk6ICJqc3RyZWVfc2VsZWN0IiwKCQkJYXV0b19zYXZlCQk6IHRydWUsCgkJCWNvb2tpZV9vcHRpb25zCToge30KCQl9LAoJCV9mbiA6IHsKCQkJc2F2ZV9jb29raWUgOiBmdW5jdGlvbiAoYykgewoJCQkJaWYodGhpcy5kYXRhLmNvcmUucmVmcmVzaGluZykgeyByZXR1cm47IH0KCQkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY29va2llczsKCQkJCWlmKCFjKSB7IC8vIGlmIGNhbGxlZCBtYW51YWxseSBhbmQgbm90IGJ5IGV2ZW50CgkJCQkJaWYocy5zYXZlX2xvYWRlZCkgewoJCQkJCQl0aGlzLnNhdmVfbG9hZGVkKCk7CgkJCQkJCSQuY29va2llKHMuc2F2ZV9sb2FkZWQsIHRoaXMuZGF0YS5jb3JlLnRvX2xvYWQuam9pbigiLCIpLCBzLmNvb2tpZV9vcHRpb25zKTsKCQkJCQl9CgkJCQkJaWYocy5zYXZlX29wZW5lZCkgewoJCQkJCQl0aGlzLnNhdmVfb3BlbmVkKCk7CgkJCQkJCSQuY29va2llKHMuc2F2ZV9vcGVuZWQsIHRoaXMuZGF0YS5jb3JlLnRvX29wZW4uam9pbigiLCIpLCBzLmNvb2tpZV9vcHRpb25zKTsKCQkJCQl9CgkJCQkJaWYocy5zYXZlX3NlbGVjdGVkICYmIHRoaXMuZGF0YS51aSkgewoJCQkJCQl0aGlzLnNhdmVfc2VsZWN0ZWQoKTsKCQkJCQkJJC5jb29raWUocy5zYXZlX3NlbGVjdGVkLCB0aGlzLmRhdGEudWkudG9fc2VsZWN0LmpvaW4oIiwiKSwgcy5jb29raWVfb3B0aW9ucyk7CgkJCQkJfQoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXN3aXRjaChjKSB7CgkJCQkJY2FzZSAib3Blbl9ub2RlIjoKCQkJCQljYXNlICJjbG9zZV9ub2RlIjoKCQkJCQkJaWYoISFzLnNhdmVfb3BlbmVkKSB7CgkJCQkJCQl0aGlzLnNhdmVfb3BlbmVkKCk7CgkJCQkJCQkkLmNvb2tpZShzLnNhdmVfb3BlbmVkLCB0aGlzLmRhdGEuY29yZS50b19vcGVuLmpvaW4oIiwiKSwgcy5jb29raWVfb3B0aW9ucyk7CgkJCQkJCX0KCQkJCQkJaWYoISFzLnNhdmVfbG9hZGVkKSB7CgkJCQkJCQl0aGlzLnNhdmVfbG9hZGVkKCk7CgkJCQkJCQkkLmNvb2tpZShzLnNhdmVfbG9hZGVkLCB0aGlzLmRhdGEuY29yZS50b19sb2FkLmpvaW4oIiwiKSwgcy5jb29raWVfb3B0aW9ucyk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic2VsZWN0X25vZGUiOgoJCQkJCWNhc2UgImRlc2VsZWN0X25vZGUiOgoJCQkJCQlpZighIXMuc2F2ZV9zZWxlY3RlZCAmJiB0aGlzLmRhdGEudWkpIHsKCQkJCQkJCXRoaXMuc2F2ZV9zZWxlY3RlZCgpOwoJCQkJCQkJJC5jb29raWUocy5zYXZlX3NlbGVjdGVkLCB0aGlzLmRhdGEudWkudG9fc2VsZWN0LmpvaW4oIiwiKSwgcy5jb29raWVfb3B0aW9ucyk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9Cgl9KTsKCS8vIGluY2x1ZGUgY29va2llcyBieSBkZWZhdWx0CgkvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goImNvb2tpZXMiKTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIHNvcnQgcGx1Z2luCiAqIFNvcnRzIGl0ZW1zIGFscGhhYmV0aWNhbGx5IChvciB1c2luZyBhbnkgb3RoZXIgZnVuY3Rpb24pCiAqLwooZnVuY3Rpb24gKCQpIHsKCSQuanN0cmVlLnBsdWdpbigic29ydCIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYmluZCgibG9hZF9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdmFyIG9iaiA9IHRoaXMuX2dldF9ub2RlKGRhdGEucnNsdC5vYmopOwoJCQkJCQlvYmogPSBvYmogPT09IC0xID8gdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikgOiBvYmouY2hpbGRyZW4oInVsIik7CgkJCQkJCXRoaXMuc29ydChvYmopOwoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoInJlbmFtZV9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWUgY3JlYXRlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdGhpcy5zb3J0KGRhdGEucnNsdC5vYmoucGFyZW50KCkpOwoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoIm1vdmVfbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCXZhciBtID0gZGF0YS5yc2x0Lm5wID09IC0xID8gdGhpcy5nZXRfY29udGFpbmVyKCkgOiBkYXRhLnJzbHQubnA7CgkJCQkJCXRoaXMuc29ydChtLmNoaWxkcmVuKCJ1bCIpKTsKCQkJCQl9LCB0aGlzKSk7CgkJfSwKCQlkZWZhdWx0cyA6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLmdldF90ZXh0KGEpID4gdGhpcy5nZXRfdGV4dChiKSA/IDEgOiAtMTsgfSwKCQlfZm4gOiB7CgkJCXNvcnQgOiBmdW5jdGlvbiAob2JqKSB7CgkJCQl2YXIgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLnNvcnQsCgkJCQkJdCA9IHRoaXM7CgkJCQlvYmouYXBwZW5kKCQubWFrZUFycmF5KG9iai5jaGlsZHJlbigibGkiKSkuc29ydCgkLnByb3h5KHMsIHQpKSk7CgkJCQlvYmouZmluZCgiPiBsaSA+IHVsIikuZWFjaChmdW5jdGlvbigpIHsgdC5zb3J0KCQodGhpcykpOyB9KTsKCQkJCXRoaXMuY2xlYW5fbm9kZShvYmopOwoJCQl9CgkJfQoJfSk7Cn0pKGpRdWVyeSk7Ci8vKi8KCi8qCiAqIGpzVHJlZSBETkQgcGx1Z2luCiAqIERyYWcgYW5kIGRyb3AgcGx1Z2luIGZvciBtb3ZpbmcvY29weWluZyBub2RlcwogKi8KKGZ1bmN0aW9uICgkKSB7Cgl2YXIgbyA9IGZhbHNlLAoJCXIgPSBmYWxzZSwKCQltID0gZmFsc2UsCgkJbWwgPSBmYWxzZSwKCQlzbGkgPSBmYWxzZSwKCQlzdGkgPSBmYWxzZSwKCQlkaXIxID0gZmFsc2UsCgkJZGlyMiA9IGZhbHNlLAoJCWxhc3RfcG9zID0gZmFsc2U7CgkkLnZha2F0YS5kbmQgPSB7CgkJaXNfZG93biA6IGZhbHNlLAoJCWlzX2RyYWcgOiBmYWxzZSwKCQloZWxwZXIgOiBmYWxzZSwKCQlzY3JvbGxfc3BkIDogMTAsCgkJaW5pdF94IDogMCwKCQlpbml0X3kgOiAwLAoJCXRocmVzaG9sZCA6IDUsCgkJaGVscGVyX2xlZnQgOiA1LAoJCWhlbHBlcl90b3AgOiAxMCwKCQl1c2VyX2RhdGEgOiB7fSwKCgkJZHJhZ19zdGFydCA6IGZ1bmN0aW9uIChlLCBkYXRhLCBodG1sKSB7CgkJCWlmKCQudmFrYXRhLmRuZC5pc19kcmFnKSB7ICQudmFrYXRhLmRyYWdfc3RvcCh7fSk7IH0KCQkJdHJ5IHsKCQkJCWUuY3VycmVudFRhcmdldC51bnNlbGVjdGFibGUgPSAib24iOwoJCQkJZS5jdXJyZW50VGFyZ2V0Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9OwoJCQkJaWYoZS5jdXJyZW50VGFyZ2V0LnN0eWxlKSB7IGUuY3VycmVudFRhcmdldC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gIm5vbmUiOyB9CgkJCX0gY2F0Y2goZXJyKSB7IH0KCQkJJC52YWthdGEuZG5kLmluaXRfeCA9IGUucGFnZVg7CgkJCSQudmFrYXRhLmRuZC5pbml0X3kgPSBlLnBhZ2VZOwoJCQkkLnZha2F0YS5kbmQudXNlcl9kYXRhID0gZGF0YTsKCQkJJC52YWthdGEuZG5kLmlzX2Rvd24gPSB0cnVlOwoJCQkkLnZha2F0YS5kbmQuaGVscGVyID0gJCgiPGRpdiBpZD0ndmFrYXRhLWRyYWdnZWQnIC8+IikuaHRtbChodG1sKTsgLy8uZmFkZVRvKDEwLDAuMjUpOwoJCQkkKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUiLCAkLnZha2F0YS5kbmQuZHJhZyk7CgkJCSQoZG9jdW1lbnQpLmJpbmQoIm1vdXNldXAiLCAkLnZha2F0YS5kbmQuZHJhZ19zdG9wKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0sCgkJZHJhZyA6IGZ1bmN0aW9uIChlKSB7CgkJCWlmKCEkLnZha2F0YS5kbmQuaXNfZG93bikgeyByZXR1cm47IH0KCQkJaWYoISQudmFrYXRhLmRuZC5pc19kcmFnKSB7CgkJCQlpZihNYXRoLmFicyhlLnBhZ2VYIC0gJC52YWthdGEuZG5kLmluaXRfeCkgPiA1IHx8IE1hdGguYWJzKGUucGFnZVkgLSAkLnZha2F0YS5kbmQuaW5pdF95KSA+IDUpIHsKCQkJCQkkLnZha2F0YS5kbmQuaGVscGVyLmFwcGVuZFRvKCJib2R5Iik7CgkJCQkJJC52YWthdGEuZG5kLmlzX2RyYWcgPSB0cnVlOwoJCQkJCSQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJkcmFnX3N0YXJ0LnZha2F0YSIsIHsgImV2ZW50IiA6IGUsICJkYXRhIiA6ICQudmFrYXRhLmRuZC51c2VyX2RhdGEgfSk7CgkJCQl9CgkJCQllbHNlIHsgcmV0dXJuOyB9CgkJCX0KCgkJCS8vIG1heWJlIHVzZSBhIHNjcm9sbGluZyBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkIG9mIGRvY3VtZW50PwoJCQlpZihlLnR5cGUgPT09ICJtb3VzZW1vdmUiKSB7IC8vIHRob3VnaHQgb2YgYWRkaW5nIHNjcm9sbCBpbiBvcmRlciB0byBtb3ZlIHRoZSBoZWxwZXIsIGJ1dCBtb3VzZSBwb2lzaXRpb24gaXMgbi9hCgkJCQl2YXIgZCA9ICQoZG9jdW1lbnQpLCB0ID0gZC5zY3JvbGxUb3AoKSwgbCA9IGQuc2Nyb2xsTGVmdCgpOwoJCQkJaWYoZS5wYWdlWSAtIHQgPCAyMCkgewoJCQkJCWlmKHN0aSAmJiBkaXIxID09PSAiZG93biIpIHsgY2xlYXJJbnRlcnZhbChzdGkpOyBzdGkgPSBmYWxzZTsgfQoJCQkJCWlmKCFzdGkpIHsgZGlyMSA9ICJ1cCI7IHN0aSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkuc2Nyb2xsVG9wKCQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpIC0gJC52YWthdGEuZG5kLnNjcm9sbF9zcGQpOyB9LCAxNTApOyB9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZihzdGkgJiYgZGlyMSA9PT0gInVwIikgeyBjbGVhckludGVydmFsKHN0aSk7IHN0aSA9IGZhbHNlOyB9CgkJCQl9CgkJCQlpZigkKHdpbmRvdykuaGVpZ2h0KCkgLSAoZS5wYWdlWSAtIHQpIDwgMjApIHsKCQkJCQlpZihzdGkgJiYgZGlyMSA9PT0gInVwIikgeyBjbGVhckludGVydmFsKHN0aSk7IHN0aSA9IGZhbHNlOyB9CgkJCQkJaWYoIXN0aSkgeyBkaXIxID0gImRvd24iOyBzdGkgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnNjcm9sbFRvcCgkKGRvY3VtZW50KS5zY3JvbGxUb3AoKSArICQudmFrYXRhLmRuZC5zY3JvbGxfc3BkKTsgfSwgMTUwKTsgfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYoc3RpICYmIGRpcjEgPT09ICJkb3duIikgeyBjbGVhckludGVydmFsKHN0aSk7IHN0aSA9IGZhbHNlOyB9CgkJCQl9CgoJCQkJaWYoZS5wYWdlWCAtIGwgPCAyMCkgewoJCQkJCWlmKHNsaSAmJiBkaXIyID09PSAicmlnaHQiKSB7IGNsZWFySW50ZXJ2YWwoc2xpKTsgc2xpID0gZmFsc2U7IH0KCQkJCQlpZighc2xpKSB7IGRpcjIgPSAibGVmdCI7IHNsaSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgLSAkLnZha2F0YS5kbmQuc2Nyb2xsX3NwZCk7IH0sIDE1MCk7IH0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlmKHNsaSAmJiBkaXIyID09PSAibGVmdCIpIHsgY2xlYXJJbnRlcnZhbChzbGkpOyBzbGkgPSBmYWxzZTsgfQoJCQkJfQoJCQkJaWYoJCh3aW5kb3cpLndpZHRoKCkgLSAoZS5wYWdlWCAtIGwpIDwgMjApIHsKCQkJCQlpZihzbGkgJiYgZGlyMiA9PT0gImxlZnQiKSB7IGNsZWFySW50ZXJ2YWwoc2xpKTsgc2xpID0gZmFsc2U7IH0KCQkJCQlpZighc2xpKSB7IGRpcjIgPSAicmlnaHQiOyBzbGkgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnNjcm9sbExlZnQoJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpICsgJC52YWthdGEuZG5kLnNjcm9sbF9zcGQpOyB9LCAxNTApOyB9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZihzbGkgJiYgZGlyMiA9PT0gInJpZ2h0IikgeyBjbGVhckludGVydmFsKHNsaSk7IHNsaSA9IGZhbHNlOyB9CgkJCQl9CgkJCX0KCgkJCSQudmFrYXRhLmRuZC5oZWxwZXIuY3NzKHsgbGVmdCA6IChlLnBhZ2VYICsgJC52YWthdGEuZG5kLmhlbHBlcl9sZWZ0KSArICJweCIsIHRvcCA6IChlLnBhZ2VZICsgJC52YWthdGEuZG5kLmhlbHBlcl90b3ApICsgInB4IiB9KTsKCQkJJChkb2N1bWVudCkudHJpZ2dlckhhbmRsZXIoImRyYWcudmFrYXRhIiwgeyAiZXZlbnQiIDogZSwgImRhdGEiIDogJC52YWthdGEuZG5kLnVzZXJfZGF0YSB9KTsKCQl9LAoJCWRyYWdfc3RvcCA6IGZ1bmN0aW9uIChlKSB7CgkJCWlmKHNsaSkgeyBjbGVhckludGVydmFsKHNsaSk7IH0KCQkJaWYoc3RpKSB7IGNsZWFySW50ZXJ2YWwoc3RpKTsgfQoJCQkkKGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZSIsICQudmFrYXRhLmRuZC5kcmFnKTsKCQkJJChkb2N1bWVudCkudW5iaW5kKCJtb3VzZXVwIiwgJC52YWthdGEuZG5kLmRyYWdfc3RvcCk7CgkJCSQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJkcmFnX3N0b3AudmFrYXRhIiwgeyAiZXZlbnQiIDogZSwgImRhdGEiIDogJC52YWthdGEuZG5kLnVzZXJfZGF0YSB9KTsKCQkJJC52YWthdGEuZG5kLmhlbHBlci5yZW1vdmUoKTsKCQkJJC52YWthdGEuZG5kLmluaXRfeCA9IDA7CgkJCSQudmFrYXRhLmRuZC5pbml0X3kgPSAwOwoJCQkkLnZha2F0YS5kbmQudXNlcl9kYXRhID0ge307CgkJCSQudmFrYXRhLmRuZC5pc19kb3duID0gZmFsc2U7CgkJCSQudmFrYXRhLmRuZC5pc19kcmFnID0gZmFsc2U7CgkJfQoJfTsKCSQoZnVuY3Rpb24oKSB7CgkJdmFyIGNzc19zdHJpbmcgPSAnI3Zha2F0YS1kcmFnZ2VkIHsgZGlzcGxheTpibG9jazsgbWFyZ2luOjAgMCAwIDA7IHBhZGRpbmc6NHB4IDRweCA0cHggMjRweDsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDotMjAwMHB4OyBsaW5lLWhlaWdodDoxNnB4OyB6LWluZGV4OjEwMDAwOyB9ICc7CgkJJC52YWthdGEuY3NzLmFkZF9zaGVldCh7IHN0ciA6IGNzc19zdHJpbmcsIHRpdGxlIDogInZha2F0YSIgfSk7Cgl9KTsKCgkkLmpzdHJlZS5wbHVnaW4oImRuZCIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZGF0YS5kbmQgPSB7CgkJCQlhY3RpdmUgOiBmYWxzZSwKCQkJCWFmdGVyIDogZmFsc2UsCgkJCQlpbnNpZGUgOiBmYWxzZSwKCQkJCWJlZm9yZSA6IGZhbHNlLAoJCQkJb2ZmIDogZmFsc2UsCgkJCQlwcmVwYXJlZCA6IGZhbHNlLAoJCQkJdyA6IDAsCgkJCQl0bzEgOiBmYWxzZSwKCQkJCXRvMiA6IGZhbHNlLAoJCQkJY29mIDogZmFsc2UsCgkJCQljdyA6IGZhbHNlLAoJCQkJY2ggOiBmYWxzZSwKCQkJCWkxIDogZmFsc2UsCgkJCQlpMiA6IGZhbHNlLAoJCQkJbXRvIDogZmFsc2UKCQkJfTsKCQkJdGhpcy5nZXRfY29udGFpbmVyKCkKCQkJCS5iaW5kKCJtb3VzZWVudGVyLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJaWYoJC52YWthdGEuZG5kLmlzX2RyYWcgJiYgJC52YWthdGEuZG5kLnVzZXJfZGF0YS5qc3RyZWUpIHsKCQkJCQkJCWlmKHRoaXMuZGF0YS50aGVtZXMpIHsKCQkJCQkJCQltLmF0dHIoImNsYXNzIiwgImpzdHJlZS0iICsgdGhpcy5kYXRhLnRoZW1lcy50aGVtZSk7CgkJCQkJCQkJaWYobWwpIHsgbWwuYXR0cigiY2xhc3MiLCAianN0cmVlLSIgKyB0aGlzLmRhdGEudGhlbWVzLnRoZW1lKTsgfQoJCQkJCQkJCSQudmFrYXRhLmRuZC5oZWxwZXIuYXR0cigiY2xhc3MiLCAianN0cmVlLWRuZC1oZWxwZXIganN0cmVlLSIgKyB0aGlzLmRhdGEudGhlbWVzLnRoZW1lKTsKCQkJCQkJCX0KCQkJCQkJCS8vaWYoJChlLmN1cnJlbnRUYXJnZXQpLmZpbmQoIj4gdWwgPiBsaSIpLmxlbmd0aCA9PT0gMCkgewoJCQkJCQkJaWYoZS5jdXJyZW50VGFyZ2V0ID09PSBlLnRhcmdldCAmJiAkLnZha2F0YS5kbmQudXNlcl9kYXRhLm9iaiAmJiAkKCQudmFrYXRhLmRuZC51c2VyX2RhdGEub2JqKS5sZW5ndGggJiYgJCgkLnZha2F0YS5kbmQudXNlcl9kYXRhLm9iaikucGFyZW50cygiLmpzdHJlZTplcSgwKSIpWzBdICE9PSBlLnRhcmdldCkgeyAvLyBub2RlIHNob3VsZCBub3QgYmUgZnJvbSB0aGUgc2FtZSB0cmVlCgkJCQkJCQkJdmFyIHRyID0gJC5qc3RyZWUuX3JlZmVyZW5jZShlLnRhcmdldCksIGRjOwoJCQkJCQkJCWlmKHRyLmRhdGEuZG5kLmZvcmVpZ24pIHsKCQkJCQkJCQkJZGMgPSB0ci5fZ2V0X3NldHRpbmdzKCkuZG5kLmRyYWdfY2hlY2suY2FsbCh0aGlzLCB7ICJvIiA6IG8sICJyIiA6IHRyLmdldF9jb250YWluZXIoKSwgaXNfcm9vdCA6IHRydWUgfSk7CgkJCQkJCQkJCWlmKGRjID09PSB0cnVlIHx8IGRjLmluc2lkZSA9PT0gdHJ1ZSB8fCBkYy5iZWZvcmUgPT09IHRydWUgfHwgZGMuYWZ0ZXIgPT09IHRydWUpIHsKCQkJCQkJCQkJCSQudmFrYXRhLmRuZC5oZWxwZXIuY2hpbGRyZW4oImlucyIpLmF0dHIoImNsYXNzIiwianN0cmVlLW9rIik7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCXRyLnByZXBhcmVfbW92ZShvLCB0ci5nZXRfY29udGFpbmVyKCksICJsYXN0Iik7CgkJCQkJCQkJCWlmKHRyLmNoZWNrX21vdmUoKSkgewoJCQkJCQkJCQkJJC52YWthdGEuZG5kLmhlbHBlci5jaGlsZHJlbigiaW5zIikuYXR0cigiY2xhc3MiLCJqc3RyZWUtb2siKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoIm1vdXNldXAuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQkvL2lmKCQudmFrYXRhLmRuZC5pc19kcmFnICYmICQudmFrYXRhLmRuZC51c2VyX2RhdGEuanN0cmVlICYmICQoZS5jdXJyZW50VGFyZ2V0KS5maW5kKCI+IHVsID4gbGkiKS5sZW5ndGggPT09IDApIHsKCQkJCQkJaWYoJC52YWthdGEuZG5kLmlzX2RyYWcgJiYgJC52YWthdGEuZG5kLnVzZXJfZGF0YS5qc3RyZWUgJiYgZS5jdXJyZW50VGFyZ2V0ID09PSBlLnRhcmdldCAmJiAkLnZha2F0YS5kbmQudXNlcl9kYXRhLm9iaiAmJiAkKCQudmFrYXRhLmRuZC51c2VyX2RhdGEub2JqKS5sZW5ndGggJiYgJCgkLnZha2F0YS5kbmQudXNlcl9kYXRhLm9iaikucGFyZW50cygiLmpzdHJlZTplcSgwKSIpWzBdICE9PSBlLnRhcmdldCkgeyAvLyBub2RlIHNob3VsZCBub3QgYmUgZnJvbSB0aGUgc2FtZSB0cmVlCgkJCQkJCQl2YXIgdHIgPSAkLmpzdHJlZS5fcmVmZXJlbmNlKGUuY3VycmVudFRhcmdldCksIGRjOwoJCQkJCQkJaWYodHIuZGF0YS5kbmQuZm9yZWlnbikgewoJCQkJCQkJCWRjID0gdHIuX2dldF9zZXR0aW5ncygpLmRuZC5kcmFnX2NoZWNrLmNhbGwodGhpcywgeyAibyIgOiBvLCAiciIgOiB0ci5nZXRfY29udGFpbmVyKCksIGlzX3Jvb3QgOiB0cnVlIH0pOwoJCQkJCQkJCWlmKGRjID09PSB0cnVlIHx8IGRjLmluc2lkZSA9PT0gdHJ1ZSB8fCBkYy5iZWZvcmUgPT09IHRydWUgfHwgZGMuYWZ0ZXIgPT09IHRydWUpIHsKCQkJCQkJCQkJdHIuX2dldF9zZXR0aW5ncygpLmRuZC5kcmFnX2ZpbmlzaC5jYWxsKHRoaXMsIHsgIm8iIDogbywgInIiIDogdHIuZ2V0X2NvbnRhaW5lcigpLCBpc19yb290IDogdHJ1ZSB9KTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQl0ci5tb3ZlX25vZGUobywgdHIuZ2V0X2NvbnRhaW5lcigpLCAibGFzdCIsIGVbdHIuX2dldF9zZXR0aW5ncygpLmRuZC5jb3B5X21vZGlmaWVyICsgIktleSJdKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoIm1vdXNlbGVhdmUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQlpZihlLnJlbGF0ZWRUYXJnZXQgJiYgZS5yZWxhdGVkVGFyZ2V0LmlkICYmIGUucmVsYXRlZFRhcmdldC5pZCA9PT0gImpzdHJlZS1tYXJrZXItbGluZSIpIHsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfQoJCQkJCQlpZigkLnZha2F0YS5kbmQuaXNfZHJhZyAmJiAkLnZha2F0YS5kbmQudXNlcl9kYXRhLmpzdHJlZSkgewoJCQkJCQkJaWYodGhpcy5kYXRhLmRuZC5pMSkgeyBjbGVhckludGVydmFsKHRoaXMuZGF0YS5kbmQuaTEpOyB9CgkJCQkJCQlpZih0aGlzLmRhdGEuZG5kLmkyKSB7IGNsZWFySW50ZXJ2YWwodGhpcy5kYXRhLmRuZC5pMik7IH0KCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQudG8xKSB7IGNsZWFyVGltZW91dCh0aGlzLmRhdGEuZG5kLnRvMSk7IH0KCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQudG8yKSB7IGNsZWFyVGltZW91dCh0aGlzLmRhdGEuZG5kLnRvMik7IH0KCQkJCQkJCWlmKCQudmFrYXRhLmRuZC5oZWxwZXIuY2hpbGRyZW4oImlucyIpLmhhc0NsYXNzKCJqc3RyZWUtb2siKSkgewoJCQkJCQkJCSQudmFrYXRhLmRuZC5oZWxwZXIuY2hpbGRyZW4oImlucyIpLmF0dHIoImNsYXNzIiwianN0cmVlLWludmFsaWQiKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoIm1vdXNlbW92ZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCWlmKCQudmFrYXRhLmRuZC5pc19kcmFnICYmICQudmFrYXRhLmRuZC51c2VyX2RhdGEuanN0cmVlKSB7CgkJCQkJCQl2YXIgY250ID0gdGhpcy5nZXRfY29udGFpbmVyKClbMF07CgoJCQkJCQkJLy8gSG9yaXpvbnRhbCBzY3JvbGwKCQkJCQkJCWlmKGUucGFnZVggKyAyNCA+IHRoaXMuZGF0YS5kbmQuY29mLmxlZnQgKyB0aGlzLmRhdGEuZG5kLmN3KSB7CgkJCQkJCQkJaWYodGhpcy5kYXRhLmRuZC5pMSkgeyBjbGVhckludGVydmFsKHRoaXMuZGF0YS5kbmQuaTEpOyB9CgkJCQkJCQkJdGhpcy5kYXRhLmRuZC5pMSA9IHNldEludGVydmFsKCQucHJveHkoZnVuY3Rpb24gKCkgeyB0aGlzLnNjcm9sbExlZnQgKz0gJC52YWthdGEuZG5kLnNjcm9sbF9zcGQ7IH0sIGNudCksIDEwMCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlIGlmKGUucGFnZVggLSAyNCA8IHRoaXMuZGF0YS5kbmQuY29mLmxlZnQpIHsKCQkJCQkJCQlpZih0aGlzLmRhdGEuZG5kLmkxKSB7IGNsZWFySW50ZXJ2YWwodGhpcy5kYXRhLmRuZC5pMSk7IH0KCQkJCQkJCQl0aGlzLmRhdGEuZG5kLmkxID0gc2V0SW50ZXJ2YWwoJC5wcm94eShmdW5jdGlvbiAoKSB7IHRoaXMuc2Nyb2xsTGVmdCAtPSAkLnZha2F0YS5kbmQuc2Nyb2xsX3NwZDsgfSwgY250KSwgMTAwKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuaTEpIHsgY2xlYXJJbnRlcnZhbCh0aGlzLmRhdGEuZG5kLmkxKTsgfQoJCQkJCQkJfQoKCQkJCQkJCS8vIFZlcnRpY2FsIHNjcm9sbAoJCQkJCQkJaWYoZS5wYWdlWSArIDI0ID4gdGhpcy5kYXRhLmRuZC5jb2YudG9wICsgdGhpcy5kYXRhLmRuZC5jaCkgewoJCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuaTIpIHsgY2xlYXJJbnRlcnZhbCh0aGlzLmRhdGEuZG5kLmkyKTsgfQoJCQkJCQkJCXRoaXMuZGF0YS5kbmQuaTIgPSBzZXRJbnRlcnZhbCgkLnByb3h5KGZ1bmN0aW9uICgpIHsgdGhpcy5zY3JvbGxUb3AgKz0gJC52YWthdGEuZG5kLnNjcm9sbF9zcGQ7IH0sIGNudCksIDEwMCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlIGlmKGUucGFnZVkgLSAyNCA8IHRoaXMuZGF0YS5kbmQuY29mLnRvcCkgewoJCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuaTIpIHsgY2xlYXJJbnRlcnZhbCh0aGlzLmRhdGEuZG5kLmkyKTsgfQoJCQkJCQkJCXRoaXMuZGF0YS5kbmQuaTIgPSBzZXRJbnRlcnZhbCgkLnByb3h5KGZ1bmN0aW9uICgpIHsgdGhpcy5zY3JvbGxUb3AgLT0gJC52YWthdGEuZG5kLnNjcm9sbF9zcGQ7IH0sIGNudCksIDEwMCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQlpZih0aGlzLmRhdGEuZG5kLmkyKSB7IGNsZWFySW50ZXJ2YWwodGhpcy5kYXRhLmRuZC5pMik7IH0KCQkJCQkJCX0KCgkJCQkJCX0KCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJzY3JvbGwuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQlpZigkLnZha2F0YS5kbmQuaXNfZHJhZyAmJiAkLnZha2F0YS5kbmQudXNlcl9kYXRhLmpzdHJlZSAmJiBtICYmIG1sKSB7CgkJCQkJCQltLmhpZGUoKTsKCQkJCQkJCW1sLmhpZGUoKTsKCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmRlbGVnYXRlKCJhIiwgIm1vdXNlZG93bi5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCWlmKGUud2hpY2ggPT09IDEpIHsKCQkJCQkJCXRoaXMuc3RhcnRfZHJhZyhlLmN1cnJlbnRUYXJnZXQsIGUpOwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuZGVsZWdhdGUoImEiLCAibW91c2VlbnRlci5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCWlmKCQudmFrYXRhLmRuZC5pc19kcmFnICYmICQudmFrYXRhLmRuZC51c2VyX2RhdGEuanN0cmVlKSB7CgkJCQkJCQl0aGlzLmRuZF9lbnRlcihlLmN1cnJlbnRUYXJnZXQpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuZGVsZWdhdGUoImEiLCAibW91c2Vtb3ZlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJaWYoJC52YWthdGEuZG5kLmlzX2RyYWcgJiYgJC52YWthdGEuZG5kLnVzZXJfZGF0YS5qc3RyZWUpIHsKCQkJCQkJCWlmKCFyIHx8ICFyLmxlbmd0aCB8fCByLmNoaWxkcmVuKCJhIilbMF0gIT09IGUuY3VycmVudFRhcmdldCkgewoJCQkJCQkJCXRoaXMuZG5kX2VudGVyKGUuY3VycmVudFRhcmdldCk7CgkJCQkJCQl9CgkJCQkJCQlpZih0eXBlb2YgdGhpcy5kYXRhLmRuZC5vZmYudG9wID09PSAidW5kZWZpbmVkIikgeyB0aGlzLmRhdGEuZG5kLm9mZiA9ICQoZS50YXJnZXQpLm9mZnNldCgpOyB9CgkJCQkJCQl0aGlzLmRhdGEuZG5kLncgPSAoZS5wYWdlWSAtICh0aGlzLmRhdGEuZG5kLm9mZi50b3AgfHwgMCkpICUgdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0OwoJCQkJCQkJaWYodGhpcy5kYXRhLmRuZC53IDwgMCkgeyB0aGlzLmRhdGEuZG5kLncgKz0gdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0OyB9CgkJCQkJCQl0aGlzLmRuZF9zaG93KCk7CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSkKCQkJCS5kZWxlZ2F0ZSgiYSIsICJtb3VzZWxlYXZlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJaWYoJC52YWthdGEuZG5kLmlzX2RyYWcgJiYgJC52YWthdGEuZG5kLnVzZXJfZGF0YS5qc3RyZWUpIHsKCQkJCQkJCWlmKGUucmVsYXRlZFRhcmdldCAmJiBlLnJlbGF0ZWRUYXJnZXQuaWQgJiYgZS5yZWxhdGVkVGFyZ2V0LmlkID09PSAianN0cmVlLW1hcmtlci1saW5lIikgewoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCX0KCQkJCQkJCQlpZihtKSB7IG0uaGlkZSgpOyB9CgkJCQkJCQkJaWYobWwpIHsgbWwuaGlkZSgpOyB9CgkJCQkJCQkvKgoJCQkJCQkJdmFyIGVjID0gJChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoImxpIiksCgkJCQkJCQkJZXIgPSAkKGUucmVsYXRlZFRhcmdldCkuY2xvc2VzdCgibGkiKTsKCQkJCQkJCWlmKGVyWzBdICE9PSBlYy5wcmV2KClbMF0gJiYgZXJbMF0gIT09IGVjLm5leHQoKVswXSkgewoJCQkJCQkJCWlmKG0pIHsgbS5oaWRlKCk7IH0KCQkJCQkJCQlpZihtbCkgeyBtbC5oaWRlKCk7IH0KCQkJCQkJCX0KCQkJCQkJCSovCgkJCQkJCQl0aGlzLmRhdGEuZG5kLm10byA9IHNldFRpbWVvdXQoCgkJCQkJCQkJKGZ1bmN0aW9uICh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHQuZG5kX2xlYXZlKGUpOyB9OyB9KSh0aGlzKSwKCQkJCQkJCTApOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuZGVsZWdhdGUoImEiLCAibW91c2V1cC5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCWlmKCQudmFrYXRhLmRuZC5pc19kcmFnICYmICQudmFrYXRhLmRuZC51c2VyX2RhdGEuanN0cmVlKSB7CgkJCQkJCQl0aGlzLmRuZF9maW5pc2goZSk7CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSk7CgoJCQkkKGRvY3VtZW50KQoJCQkJLmJpbmQoImRyYWdfc3RvcC52YWthdGEiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHsKCQkJCQkJaWYodGhpcy5kYXRhLmRuZC50bzEpIHsgY2xlYXJUaW1lb3V0KHRoaXMuZGF0YS5kbmQudG8xKTsgfQoJCQkJCQlpZih0aGlzLmRhdGEuZG5kLnRvMikgeyBjbGVhclRpbWVvdXQodGhpcy5kYXRhLmRuZC50bzIpOyB9CgkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuaTEpIHsgY2xlYXJJbnRlcnZhbCh0aGlzLmRhdGEuZG5kLmkxKTsgfQoJCQkJCQlpZih0aGlzLmRhdGEuZG5kLmkyKSB7IGNsZWFySW50ZXJ2YWwodGhpcy5kYXRhLmRuZC5pMik7IH0KCQkJCQkJdGhpcy5kYXRhLmRuZC5hZnRlcgkJPSBmYWxzZTsKCQkJCQkJdGhpcy5kYXRhLmRuZC5iZWZvcmUJPSBmYWxzZTsKCQkJCQkJdGhpcy5kYXRhLmRuZC5pbnNpZGUJPSBmYWxzZTsKCQkJCQkJdGhpcy5kYXRhLmRuZC5vZmYJCT0gZmFsc2U7CgkJCQkJCXRoaXMuZGF0YS5kbmQucHJlcGFyZWQJPSBmYWxzZTsKCQkJCQkJdGhpcy5kYXRhLmRuZC53CQkJPSBmYWxzZTsKCQkJCQkJdGhpcy5kYXRhLmRuZC50bzEJCT0gZmFsc2U7CgkJCQkJCXRoaXMuZGF0YS5kbmQudG8yCQk9IGZhbHNlOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmkxCQk9IGZhbHNlOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmkyCQk9IGZhbHNlOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmFjdGl2ZQk9IGZhbHNlOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmZvcmVpZ24JPSBmYWxzZTsKCQkJCQkJaWYobSkgeyBtLmNzcyh7ICJ0b3AiIDogIi0yMDAwcHgiIH0pOyB9CgkJCQkJCWlmKG1sKSB7IG1sLmNzcyh7ICJ0b3AiIDogIi0yMDAwcHgiIH0pOyB9CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiZHJhZ19zdGFydC52YWthdGEiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCWlmKGRhdGEuZGF0YS5qc3RyZWUpIHsKCQkJCQkJCXZhciBldCA9ICQoZGF0YS5ldmVudC50YXJnZXQpOwoJCQkJCQkJaWYoZXQuY2xvc2VzdCgiLmpzdHJlZSIpLmhhc0NsYXNzKCJqc3RyZWUtIiArIHRoaXMuZ2V0X2luZGV4KCkpKSB7CgkJCQkJCQkJdGhpcy5kbmRfZW50ZXIoZXQpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSwgdGhpcykpOwoJCQkJLyoKCQkJCS5iaW5kKCJrZXlkb3duLmpzdHJlZS0iICsgdGhpcy5nZXRfaW5kZXgoKSArICIga2V5dXAuanN0cmVlLSIgKyB0aGlzLmdldF9pbmRleCgpLCAkLnByb3h5KGZ1bmN0aW9uKGUpIHsKCQkJCQkJaWYoJC52YWthdGEuZG5kLmlzX2RyYWcgJiYgJC52YWthdGEuZG5kLnVzZXJfZGF0YS5qc3RyZWUgJiYgIXRoaXMuZGF0YS5kbmQuZm9yZWlnbikgewoJCQkJCQkJdmFyIGggPSAkLnZha2F0YS5kbmQuaGVscGVyLmNoaWxkcmVuKCJpbnMiKTsKCQkJCQkJCWlmKGVbdGhpcy5fZ2V0X3NldHRpbmdzKCkuZG5kLmNvcHlfbW9kaWZpZXIgKyAiS2V5Il0gJiYgaC5oYXNDbGFzcygianN0cmVlLW9rIikpIHsKCQkJCQkJCQloLnBhcmVudCgpLmh0bWwoaC5wYXJlbnQoKS5odG1sKCkucmVwbGFjZSgvIFwoQ29weVwpJC8sICIiKSArICIgKENvcHkpIik7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQloLnBhcmVudCgpLmh0bWwoaC5wYXJlbnQoKS5odG1sKCkucmVwbGFjZSgvIFwoQ29weVwpJC8sICIiKSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSk7ICovCgoKCgkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuZG5kOwoJCQlpZihzLmRyYWdfdGFyZ2V0KSB7CgkJCQkkKGRvY3VtZW50KQoJCQkJCS5kZWxlZ2F0ZShzLmRyYWdfdGFyZ2V0LCAibW91c2Vkb3duLmpzdHJlZS0iICsgdGhpcy5nZXRfaW5kZXgoKSwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQlvID0gZS50YXJnZXQ7CgkJCQkJCSQudmFrYXRhLmRuZC5kcmFnX3N0YXJ0KGUsIHsganN0cmVlIDogdHJ1ZSwgb2JqIDogZS50YXJnZXQgfSwgIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz48L2lucz4iICsgJChlLnRhcmdldCkudGV4dCgpICk7CgkJCQkJCWlmKHRoaXMuZGF0YS50aGVtZXMpIHsKCQkJCQkJCWlmKG0pIHsgbS5hdHRyKCJjbGFzcyIsICJqc3RyZWUtIiArIHRoaXMuZGF0YS50aGVtZXMudGhlbWUpOyB9CgkJCQkJCQlpZihtbCkgeyBtbC5hdHRyKCJjbGFzcyIsICJqc3RyZWUtIiArIHRoaXMuZGF0YS50aGVtZXMudGhlbWUpOyB9CgkJCQkJCQkkLnZha2F0YS5kbmQuaGVscGVyLmF0dHIoImNsYXNzIiwgImpzdHJlZS1kbmQtaGVscGVyIGpzdHJlZS0iICsgdGhpcy5kYXRhLnRoZW1lcy50aGVtZSk7CgkJCQkJCX0KCQkJCQkJJC52YWthdGEuZG5kLmhlbHBlci5jaGlsZHJlbigiaW5zIikuYXR0cigiY2xhc3MiLCJqc3RyZWUtaW52YWxpZCIpOwoJCQkJCQl2YXIgY250ID0gdGhpcy5nZXRfY29udGFpbmVyKCk7CgkJCQkJCXRoaXMuZGF0YS5kbmQuY29mID0gY250Lm9mZnNldCgpOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmN3ID0gcGFyc2VJbnQoY250LndpZHRoKCksMTApOwoJCQkJCQl0aGlzLmRhdGEuZG5kLmNoID0gcGFyc2VJbnQoY250LmhlaWdodCgpLDEwKTsKCQkJCQkJdGhpcy5kYXRhLmRuZC5mb3JlaWduID0gdHJ1ZTsKCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCX0sIHRoaXMpKTsKCQkJfQoJCQlpZihzLmRyb3BfdGFyZ2V0KSB7CgkJCQkkKGRvY3VtZW50KQoJCQkJCS5kZWxlZ2F0ZShzLmRyb3BfdGFyZ2V0LCAibW91c2VlbnRlci5qc3RyZWUtIiArIHRoaXMuZ2V0X2luZGV4KCksICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuYWN0aXZlICYmIHRoaXMuX2dldF9zZXR0aW5ncygpLmRuZC5kcm9wX2NoZWNrLmNhbGwodGhpcywgeyAibyIgOiBvLCAiciIgOiAkKGUudGFyZ2V0KSwgImUiIDogZSB9KSkgewoJCQkJCQkJCSQudmFrYXRhLmRuZC5oZWxwZXIuY2hpbGRyZW4oImlucyIpLmF0dHIoImNsYXNzIiwianN0cmVlLW9rIik7CgkJCQkJCQl9CgkJCQkJCX0sIHRoaXMpKQoJCQkJCS5kZWxlZ2F0ZShzLmRyb3BfdGFyZ2V0LCAibW91c2VsZWF2ZS5qc3RyZWUtIiArIHRoaXMuZ2V0X2luZGV4KCksICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJCWlmKHRoaXMuZGF0YS5kbmQuYWN0aXZlKSB7CgkJCQkJCQkJJC52YWthdGEuZG5kLmhlbHBlci5jaGlsZHJlbigiaW5zIikuYXR0cigiY2xhc3MiLCJqc3RyZWUtaW52YWxpZCIpOwoJCQkJCQkJfQoJCQkJCQl9LCB0aGlzKSkKCQkJCQkuZGVsZWdhdGUocy5kcm9wX3RhcmdldCwgIm1vdXNldXAuanN0cmVlLSIgKyB0aGlzLmdldF9pbmRleCgpLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCQlpZih0aGlzLmRhdGEuZG5kLmFjdGl2ZSAmJiAkLnZha2F0YS5kbmQuaGVscGVyLmNoaWxkcmVuKCJpbnMiKS5oYXNDbGFzcygianN0cmVlLW9rIikpIHsKCQkJCQkJCQl0aGlzLl9nZXRfc2V0dGluZ3MoKS5kbmQuZHJvcF9maW5pc2guY2FsbCh0aGlzLCB7ICJvIiA6IG8sICJyIiA6ICQoZS50YXJnZXQpLCAiZSIgOiBlIH0pOwoJCQkJCQkJfQoJCQkJCQl9LCB0aGlzKSk7CgkJCX0KCQl9LAoJCWRlZmF1bHRzIDogewoJCQljb3B5X21vZGlmaWVyCTogImN0cmwiLAoJCQljaGVja190aW1lb3V0CTogMTAwLAoJCQlvcGVuX3RpbWVvdXQJOiA1MDAsCgkJCWRyb3BfdGFyZ2V0CQk6ICIuanN0cmVlLWRyb3AiLAoJCQlkcm9wX2NoZWNrCQk6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiB0cnVlOyB9LAoJCQlkcm9wX2ZpbmlzaAkJOiAkLm5vb3AsCgkJCWRyYWdfdGFyZ2V0CQk6ICIuanN0cmVlLWRyYWdnYWJsZSIsCgkJCWRyYWdfZmluaXNoCQk6ICQubm9vcCwKCQkJZHJhZ19jaGVjawkJOiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4geyBhZnRlciA6IGZhbHNlLCBiZWZvcmUgOiBmYWxzZSwgaW5zaWRlIDogdHJ1ZSB9OyB9CgkJfSwKCQlfZm4gOiB7CgkJCWRuZF9wcmVwYXJlIDogZnVuY3Rpb24gKCkgewoJCQkJaWYoIXIgfHwgIXIubGVuZ3RoKSB7IHJldHVybjsgfQoJCQkJdGhpcy5kYXRhLmRuZC5vZmYgPSByLm9mZnNldCgpOwoJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuY29yZS5ydGwpIHsKCQkJCQl0aGlzLmRhdGEuZG5kLm9mZi5yaWdodCA9IHRoaXMuZGF0YS5kbmQub2ZmLmxlZnQgKyByLndpZHRoKCk7CgkJCQl9CgkJCQlpZih0aGlzLmRhdGEuZG5kLmZvcmVpZ24pIHsKCQkJCQl2YXIgYSA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmRuZC5kcmFnX2NoZWNrLmNhbGwodGhpcywgeyAibyIgOiBvLCAiciIgOiByIH0pOwoJCQkJCXRoaXMuZGF0YS5kbmQuYWZ0ZXIgPSBhLmFmdGVyOwoJCQkJCXRoaXMuZGF0YS5kbmQuYmVmb3JlID0gYS5iZWZvcmU7CgkJCQkJdGhpcy5kYXRhLmRuZC5pbnNpZGUgPSBhLmluc2lkZTsKCQkJCQl0aGlzLmRhdGEuZG5kLnByZXBhcmVkID0gdHJ1ZTsKCQkJCQlyZXR1cm4gdGhpcy5kbmRfc2hvdygpOwoJCQkJfQoJCQkJdGhpcy5wcmVwYXJlX21vdmUobywgciwgImJlZm9yZSIpOwoJCQkJdGhpcy5kYXRhLmRuZC5iZWZvcmUgPSB0aGlzLmNoZWNrX21vdmUoKTsKCQkJCXRoaXMucHJlcGFyZV9tb3ZlKG8sIHIsICJhZnRlciIpOwoJCQkJdGhpcy5kYXRhLmRuZC5hZnRlciA9IHRoaXMuY2hlY2tfbW92ZSgpOwoJCQkJaWYodGhpcy5faXNfbG9hZGVkKHIpKSB7CgkJCQkJdGhpcy5wcmVwYXJlX21vdmUobywgciwgImluc2lkZSIpOwoJCQkJCXRoaXMuZGF0YS5kbmQuaW5zaWRlID0gdGhpcy5jaGVja19tb3ZlKCk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0aGlzLmRhdGEuZG5kLmluc2lkZSA9IGZhbHNlOwoJCQkJfQoJCQkJdGhpcy5kYXRhLmRuZC5wcmVwYXJlZCA9IHRydWU7CgkJCQlyZXR1cm4gdGhpcy5kbmRfc2hvdygpOwoJCQl9LAoJCQlkbmRfc2hvdyA6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKCF0aGlzLmRhdGEuZG5kLnByZXBhcmVkKSB7IHJldHVybjsgfQoJCQkJdmFyIG8gPSBbImJlZm9yZSIsImluc2lkZSIsImFmdGVyIl0sCgkJCQkJciA9IGZhbHNlLAoJCQkJCXJ0bCA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNvcmUucnRsLAoJCQkJCXBvczsKCQkJCWlmKHRoaXMuZGF0YS5kbmQudyA8IHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodC8zKSB7IG8gPSBbImJlZm9yZSIsImluc2lkZSIsImFmdGVyIl07IH0KCQkJCWVsc2UgaWYodGhpcy5kYXRhLmRuZC53IDw9IHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodCoyLzMpIHsKCQkJCQlvID0gdGhpcy5kYXRhLmRuZC53IDwgdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0LzIgPyBbImluc2lkZSIsImJlZm9yZSIsImFmdGVyIl0gOiBbImluc2lkZSIsImFmdGVyIiwiYmVmb3JlIl07CgkJCQl9CgkJCQllbHNlIHsgbyA9IFsiYWZ0ZXIiLCJpbnNpZGUiLCJiZWZvcmUiXTsgfQoJCQkJJC5lYWNoKG8sICQucHJveHkoZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCWlmKHRoaXMuZGF0YS5kbmRbdmFsXSkgewoJCQkJCQkkLnZha2F0YS5kbmQuaGVscGVyLmNoaWxkcmVuKCJpbnMiKS5hdHRyKCJjbGFzcyIsImpzdHJlZS1vayIpOwoJCQkJCQlyID0gdmFsOwoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfSwgdGhpcykpOwoJCQkJaWYociA9PT0gZmFsc2UpIHsgJC52YWthdGEuZG5kLmhlbHBlci5jaGlsZHJlbigiaW5zIikuYXR0cigiY2xhc3MiLCJqc3RyZWUtaW52YWxpZCIpOyB9CgoJCQkJcG9zID0gcnRsID8gKHRoaXMuZGF0YS5kbmQub2ZmLnJpZ2h0IC0gMTgpIDogKHRoaXMuZGF0YS5kbmQub2ZmLmxlZnQgKyAxMCk7CgkJCQlzd2l0Y2gocikgewoJCQkJCWNhc2UgImJlZm9yZSI6CgkJCQkJCW0uY3NzKHsgImxlZnQiIDogcG9zICsgInB4IiwgInRvcCIgOiAodGhpcy5kYXRhLmRuZC5vZmYudG9wIC0gNikgKyAicHgiIH0pLnNob3coKTsKCQkJCQkJaWYobWwpIHsgbWwuY3NzKHsgImxlZnQiIDogKHBvcyArIDgpICsgInB4IiwgInRvcCIgOiAodGhpcy5kYXRhLmRuZC5vZmYudG9wIC0gMSkgKyAicHgiIH0pLnNob3coKTsgfQoJCQkJCQlicmVhazsKCQkJCQljYXNlICJhZnRlciI6CgkJCQkJCW0uY3NzKHsgImxlZnQiIDogcG9zICsgInB4IiwgInRvcCIgOiAodGhpcy5kYXRhLmRuZC5vZmYudG9wICsgdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0IC0gNikgKyAicHgiIH0pLnNob3coKTsKCQkJCQkJaWYobWwpIHsgbWwuY3NzKHsgImxlZnQiIDogKHBvcyArIDgpICsgInB4IiwgInRvcCIgOiAodGhpcy5kYXRhLmRuZC5vZmYudG9wICsgdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0IC0gMSkgKyAicHgiIH0pLnNob3coKTsgfQoJCQkJCQlicmVhazsKCQkJCQljYXNlICJpbnNpZGUiOgoJCQkJCQltLmNzcyh7ICJsZWZ0IiA6IHBvcyArICggcnRsID8gLTQgOiA0KSArICJweCIsICJ0b3AiIDogKHRoaXMuZGF0YS5kbmQub2ZmLnRvcCArIHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodC8yIC0gNSkgKyAicHgiIH0pLnNob3coKTsKCQkJCQkJaWYobWwpIHsgbWwuaGlkZSgpOyB9CgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCW0uaGlkZSgpOwoJCQkJCQlpZihtbCkgeyBtbC5oaWRlKCk7IH0KCQkJCQkJYnJlYWs7CgkJCQl9CgkJCQlsYXN0X3BvcyA9IHI7CgkJCQlyZXR1cm4gcjsKCQkJfSwKCQkJZG5kX29wZW4gOiBmdW5jdGlvbiAoKSB7CgkJCQl0aGlzLmRhdGEuZG5kLnRvMiA9IGZhbHNlOwoJCQkJdGhpcy5vcGVuX25vZGUociwgJC5wcm94eSh0aGlzLmRuZF9wcmVwYXJlLHRoaXMpLCB0cnVlKTsKCQkJfSwKCQkJZG5kX2ZpbmlzaCA6IGZ1bmN0aW9uIChlKSB7CgkJCQlpZih0aGlzLmRhdGEuZG5kLmZvcmVpZ24pIHsKCQkJCQlpZih0aGlzLmRhdGEuZG5kLmFmdGVyIHx8IHRoaXMuZGF0YS5kbmQuYmVmb3JlIHx8IHRoaXMuZGF0YS5kbmQuaW5zaWRlKSB7CgkJCQkJCXRoaXMuX2dldF9zZXR0aW5ncygpLmRuZC5kcmFnX2ZpbmlzaC5jYWxsKHRoaXMsIHsgIm8iIDogbywgInIiIDogciwgInAiIDogbGFzdF9wb3MgfSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdGhpcy5kbmRfcHJlcGFyZSgpOwoJCQkJCXRoaXMubW92ZV9ub2RlKG8sIHIsIGxhc3RfcG9zLCBlW3RoaXMuX2dldF9zZXR0aW5ncygpLmRuZC5jb3B5X21vZGlmaWVyICsgIktleSJdKTsKCQkJCX0KCQkJCW8gPSBmYWxzZTsKCQkJCXIgPSBmYWxzZTsKCQkJCW0uaGlkZSgpOwoJCQkJaWYobWwpIHsgbWwuaGlkZSgpOyB9CgkJCX0sCgkJCWRuZF9lbnRlciA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCWlmKHRoaXMuZGF0YS5kbmQubXRvKSB7CgkJCQkJY2xlYXJUaW1lb3V0KHRoaXMuZGF0YS5kbmQubXRvKTsKCQkJCQl0aGlzLmRhdGEuZG5kLm10byA9IGZhbHNlOwoJCQkJfQoJCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5kbmQ7CgkJCQl0aGlzLmRhdGEuZG5kLnByZXBhcmVkID0gZmFsc2U7CgkJCQlyID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKHMuY2hlY2tfdGltZW91dCkgewoJCQkJCS8vIGRvIHRoZSBjYWxjdWxhdGlvbnMgYWZ0ZXIgYSBtaW5pbWFsIHRpbWVvdXQgKHVzZXJzIHRlbmQgdG8gZHJhZyBxdWlja2x5IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uKQoJCQkJCWlmKHRoaXMuZGF0YS5kbmQudG8xKSB7IGNsZWFyVGltZW91dCh0aGlzLmRhdGEuZG5kLnRvMSk7IH0KCQkJCQl0aGlzLmRhdGEuZG5kLnRvMSA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLmRuZF9wcmVwYXJlLCB0aGlzKSwgcy5jaGVja190aW1lb3V0KTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXRoaXMuZG5kX3ByZXBhcmUoKTsKCQkJCX0KCQkJCWlmKHMub3Blbl90aW1lb3V0KSB7CgkJCQkJaWYodGhpcy5kYXRhLmRuZC50bzIpIHsgY2xlYXJUaW1lb3V0KHRoaXMuZGF0YS5kbmQudG8yKTsgfQoJCQkJCWlmKHIgJiYgci5sZW5ndGggJiYgci5oYXNDbGFzcygianN0cmVlLWNsb3NlZCIpKSB7CgkJCQkJCS8vIGlmIHRoZSBub2RlIGlzIGNsb3NlZCAtIG9wZW4gaXQsIHRoZW4gcmVjYWxjdWxhdGUKCQkJCQkJdGhpcy5kYXRhLmRuZC50bzIgPSBzZXRUaW1lb3V0KCQucHJveHkodGhpcy5kbmRfb3BlbiwgdGhpcyksIHMub3Blbl90aW1lb3V0KTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZihyICYmIHIubGVuZ3RoICYmIHIuaGFzQ2xhc3MoImpzdHJlZS1jbG9zZWQiKSkgewoJCQkJCQl0aGlzLmRuZF9vcGVuKCk7CgkJCQkJfQoJCQkJfQoJCQl9LAoJCQlkbmRfbGVhdmUgOiBmdW5jdGlvbiAoZSkgewoJCQkJdGhpcy5kYXRhLmRuZC5hZnRlcgkJPSBmYWxzZTsKCQkJCXRoaXMuZGF0YS5kbmQuYmVmb3JlCT0gZmFsc2U7CgkJCQl0aGlzLmRhdGEuZG5kLmluc2lkZQk9IGZhbHNlOwoJCQkJJC52YWthdGEuZG5kLmhlbHBlci5jaGlsZHJlbigiaW5zIikuYXR0cigiY2xhc3MiLCJqc3RyZWUtaW52YWxpZCIpOwoJCQkJbS5oaWRlKCk7CgkJCQlpZihtbCkgeyBtbC5oaWRlKCk7IH0KCQkJCWlmKHIgJiYgclswXSA9PT0gZS50YXJnZXQucGFyZW50Tm9kZSkgewoJCQkJCWlmKHRoaXMuZGF0YS5kbmQudG8xKSB7CgkJCQkJCWNsZWFyVGltZW91dCh0aGlzLmRhdGEuZG5kLnRvMSk7CgkJCQkJCXRoaXMuZGF0YS5kbmQudG8xID0gZmFsc2U7CgkJCQkJfQoJCQkJCWlmKHRoaXMuZGF0YS5kbmQudG8yKSB7CgkJCQkJCWNsZWFyVGltZW91dCh0aGlzLmRhdGEuZG5kLnRvMik7CgkJCQkJCXRoaXMuZGF0YS5kbmQudG8yID0gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQl9LAoJCQlzdGFydF9kcmFnIDogZnVuY3Rpb24gKG9iaiwgZSkgewoJCQkJbyA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZih0aGlzLmRhdGEudWkgJiYgdGhpcy5pc19zZWxlY3RlZChvKSkgeyBvID0gdGhpcy5fZ2V0X25vZGUobnVsbCwgdHJ1ZSk7IH0KCQkJCXZhciBkdCA9IG8ubGVuZ3RoID4gMSA/IHRoaXMuX2dldF9zdHJpbmcoIm11bHRpcGxlX3NlbGVjdGlvbiIpIDogdGhpcy5nZXRfdGV4dChvKSwKCQkJCQljbnQgPSB0aGlzLmdldF9jb250YWluZXIoKTsKCQkJCWlmKCF0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLmh0bWxfdGl0bGVzKSB7IGR0ID0gZHQucmVwbGFjZSgvPC9pZywiJmx0OyIpLnJlcGxhY2UoLz4vaWcsIiZndDsiKTsgfQoJCQkJJC52YWthdGEuZG5kLmRyYWdfc3RhcnQoZSwgeyBqc3RyZWUgOiB0cnVlLCBvYmogOiBvIH0sICI8aW5zIGNsYXNzPSdqc3RyZWUtaWNvbic+PC9pbnM+IiArIGR0ICk7CgkJCQlpZih0aGlzLmRhdGEudGhlbWVzKSB7CgkJCQkJaWYobSkgeyBtLmF0dHIoImNsYXNzIiwgImpzdHJlZS0iICsgdGhpcy5kYXRhLnRoZW1lcy50aGVtZSk7IH0KCQkJCQlpZihtbCkgeyBtbC5hdHRyKCJjbGFzcyIsICJqc3RyZWUtIiArIHRoaXMuZGF0YS50aGVtZXMudGhlbWUpOyB9CgkJCQkJJC52YWthdGEuZG5kLmhlbHBlci5hdHRyKCJjbGFzcyIsICJqc3RyZWUtZG5kLWhlbHBlciBqc3RyZWUtIiArIHRoaXMuZGF0YS50aGVtZXMudGhlbWUpOwoJCQkJfQoJCQkJdGhpcy5kYXRhLmRuZC5jb2YgPSBjbnQub2Zmc2V0KCk7CgkJCQl0aGlzLmRhdGEuZG5kLmN3ID0gcGFyc2VJbnQoY250LndpZHRoKCksMTApOwoJCQkJdGhpcy5kYXRhLmRuZC5jaCA9IHBhcnNlSW50KGNudC5oZWlnaHQoKSwxMCk7CgkJCQl0aGlzLmRhdGEuZG5kLmFjdGl2ZSA9IHRydWU7CgkJCX0KCQl9Cgl9KTsKCSQoZnVuY3Rpb24oKSB7CgkJdmFyIGNzc19zdHJpbmcgPSAnJyArCgkJCScjdmFrYXRhLWRyYWdnZWQgaW5zIHsgZGlzcGxheTpibG9jazsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IHdpZHRoOjE2cHg7IGhlaWdodDoxNnB4OyBtYXJnaW46MCAwIDAgMDsgcGFkZGluZzowOyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjRweDsgbGVmdDo0cHg7ICcgKwoJCQknIC1tb3otYm9yZGVyLXJhZGl1czo0cHg7IGJvcmRlci1yYWRpdXM6NHB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4OyAnICsKCQkJJ30gJyArCgkJCScjdmFrYXRhLWRyYWdnZWQgLmpzdHJlZS1vayB7IGJhY2tncm91bmQ6Z3JlZW47IH0gJyArCgkJCScjdmFrYXRhLWRyYWdnZWQgLmpzdHJlZS1pbnZhbGlkIHsgYmFja2dyb3VuZDpyZWQ7IH0gJyArCgkJCScjanN0cmVlLW1hcmtlciB7IHBhZGRpbmc6MDsgbWFyZ2luOjA7IGZvbnQtc2l6ZToxMnB4OyBvdmVyZmxvdzpoaWRkZW47IGhlaWdodDoxMnB4OyB3aWR0aDo4cHg7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6LTMwcHg7IHotaW5kZXg6MTAwMDE7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyB0ZXh0LXNoYWRvdzoxcHggMXB4IDFweCB3aGl0ZTsgY29sb3I6YmxhY2s7IGxpbmUtaGVpZ2h0OjEwcHg7IH0gJyArCgkJCScjanN0cmVlLW1hcmtlci1saW5lIHsgcGFkZGluZzowOyBtYXJnaW46MDsgbGluZS1oZWlnaHQ6MCU7IGZvbnQtc2l6ZToxcHg7IG92ZXJmbG93OmhpZGRlbjsgaGVpZ2h0OjFweDsgd2lkdGg6MTAwcHg7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6LTMwcHg7IHotaW5kZXg6MTAwMDA7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgZGlzcGxheTpub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiM0NTZjNDM7ICcgKwoJCQknIGN1cnNvcjpwb2ludGVyOyBib3JkZXI6MXB4IHNvbGlkICNlZWVlZWU7IGJvcmRlci1sZWZ0OjA7IC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAycHggIzY2NjsgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDJweCAjNjY2OyBib3gtc2hhZG93OiAwcHggMHB4IDJweCAjNjY2OyAnICsKCQkJJyAtbW96LWJvcmRlci1yYWRpdXM6MXB4OyBib3JkZXItcmFkaXVzOjFweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDsgJyArCgkJCSd9JyArCgkJCScnOwoJCSQudmFrYXRhLmNzcy5hZGRfc2hlZXQoeyBzdHIgOiBjc3Nfc3RyaW5nLCB0aXRsZSA6ICJqc3RyZWUiIH0pOwoJCW0gPSAkKCI8ZGl2IC8+IikuYXR0cih7IGlkIDogImpzdHJlZS1tYXJrZXIiIH0pLmhpZGUoKS5odG1sKCImcmFxdW87IikKCQkJLmJpbmQoIm1vdXNlbGVhdmUgbW91c2VlbnRlciIsIGZ1bmN0aW9uIChlKSB7CgkJCQltLmhpZGUoKTsKCQkJCW1sLmhpZGUoKTsKCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0pCgkJCS5hcHBlbmRUbygiYm9keSIpOwoJCW1sID0gJCgiPGRpdiAvPiIpLmF0dHIoeyBpZCA6ICJqc3RyZWUtbWFya2VyLWxpbmUiIH0pLmhpZGUoKQoJCQkuYmluZCgibW91c2V1cCIsIGZ1bmN0aW9uIChlKSB7CgkJCQlpZihyICYmIHIubGVuZ3RoKSB7CgkJCQkJci5jaGlsZHJlbigiYSIpLnRyaWdnZXIoZSk7CgkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9KQoJCQkuYmluZCgibW91c2VsZWF2ZSIsIGZ1bmN0aW9uIChlKSB7CgkJCQl2YXIgcnQgPSAkKGUucmVsYXRlZFRhcmdldCk7CgkJCQlpZihydC5pcygiLmpzdHJlZSIpIHx8IHJ0LmNsb3Nlc3QoIi5qc3RyZWUiKS5sZW5ndGggPT09IDApIHsKCQkJCQlpZihyICYmIHIubGVuZ3RoKSB7CgkJCQkJCXIuY2hpbGRyZW4oImEiKS50cmlnZ2VyKGUpOwoJCQkJCQltLmhpZGUoKTsKCQkJCQkJbWwuaGlkZSgpOwoJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCX0pCgkJCS5hcHBlbmRUbygiYm9keSIpOwoJCSQoZG9jdW1lbnQpLmJpbmQoImRyYWdfc3RhcnQudmFrYXRhIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJaWYoZGF0YS5kYXRhLmpzdHJlZSkgeyBtLnNob3coKTsgaWYobWwpIHsgbWwuc2hvdygpOyB9IH0KCQl9KTsKCQkkKGRvY3VtZW50KS5iaW5kKCJkcmFnX3N0b3AudmFrYXRhIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJaWYoZGF0YS5kYXRhLmpzdHJlZSkgeyBtLmhpZGUoKTsgaWYobWwpIHsgbWwuaGlkZSgpOyB9IH0KCQl9KTsKCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgY2hlY2tib3ggcGx1Z2luCiAqIEluc2VydHMgY2hlY2tib3hlcyBpbiBmcm9udCBvZiBldmVyeSBub2RlCiAqIERlcGVuZHMgb24gdGhlIHVpIHBsdWdpbgogKiBET0VTIE5PVCBXT1JLIE5JQ0VMWSBXSVRIIE1VTFRJVFJFRSBEUkFHJ04nRFJPUAogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oImNoZWNrYm94IiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5kYXRhLmNoZWNrYm94Lm5vdWkgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC5vdmVycmlkZV91aTsKCQkJaWYodGhpcy5kYXRhLnVpICYmIHRoaXMuZGF0YS5jaGVja2JveC5ub3VpKSB7CgkJCQl0aGlzLnNlbGVjdF9ub2RlID0gdGhpcy5kZXNlbGVjdF9ub2RlID0gdGhpcy5kZXNlbGVjdF9hbGwgPSAkLm5vb3A7CgkJCQl0aGlzLmdldF9zZWxlY3RlZCA9IHRoaXMuZ2V0X2NoZWNrZWQ7CgkJCX0KCgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYmluZCgib3Blbl9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWUgY2xlYW5fbm9kZS5qc3RyZWUgcmVmcmVzaC5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCXRoaXMuX3ByZXBhcmVfY2hlY2tib3hlcyhkYXRhLnJzbHQub2JqKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJsb2FkZWQuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQl0aGlzLl9wcmVwYXJlX2NoZWNrYm94ZXMoKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5kZWxlZ2F0ZSggKHRoaXMuZGF0YS51aSAmJiB0aGlzLmRhdGEuY2hlY2tib3gubm91aSA/ICJhIiA6ICJpbnMuanN0cmVlLWNoZWNrYm94IikgLCAiY2xpY2suanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWlmKHRoaXMuX2dldF9ub2RlKGUudGFyZ2V0KS5oYXNDbGFzcygianN0cmVlLWNoZWNrZWQiKSkgeyB0aGlzLnVuY2hlY2tfbm9kZShlLnRhcmdldCk7IH0KCQkJCQkJZWxzZSB7IHRoaXMuY2hlY2tfbm9kZShlLnRhcmdldCk7IH0KCQkJCQkJaWYodGhpcy5kYXRhLnVpICYmIHRoaXMuZGF0YS5jaGVja2JveC5ub3VpKSB7CgkJCQkJCQl0aGlzLnNhdmVfc2VsZWN0ZWQoKTsKCQkJCQkJCWlmKHRoaXMuZGF0YS5jb29raWVzKSB7IHRoaXMuc2F2ZV9jb29raWUoInNlbGVjdF9ub2RlIik7IH0KCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9LCB0aGlzKSk7CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJb3ZlcnJpZGVfdWkgOiBmYWxzZSwKCQkJdHdvX3N0YXRlIDogZmFsc2UsCgkJCXJlYWxfY2hlY2tib3hlcyA6IGZhbHNlLAoJCQljaGVja2VkX3BhcmVudF9vcGVuIDogdHJ1ZSwKCQkJcmVhbF9jaGVja2JveGVzX25hbWVzIDogZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFsgKCJjaGVja18iICsgKG5bMF0uaWQgfHwgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMCkpKSAsIDFdOyB9CgkJfSwKCQlfX2Rlc3Ryb3kgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuZmluZCgiaW5wdXQuanN0cmVlLXJlYWwtY2hlY2tib3giKS5yZW1vdmVDbGFzcygianN0cmVlLXJlYWwtY2hlY2tib3giKS5lbmQoKQoJCQkJLmZpbmQoImlucy5qc3RyZWUtY2hlY2tib3giKS5yZW1vdmUoKTsKCQl9LAoJCV9mbiA6IHsKCQkJX2NoZWNrYm94X25vdGlmeSA6IGZ1bmN0aW9uIChuLCBkYXRhKSB7CgkJCQlpZihkYXRhLmNoZWNrZWQpIHsKCQkJCQl0aGlzLmNoZWNrX25vZGUobiwgZmFsc2UpOwoJCQkJfQoJCQl9LAoJCQlfcHJlcGFyZV9jaGVja2JveGVzIDogZnVuY3Rpb24gKG9iaikgewoJCQkJb2JqID0gIW9iaiB8fCBvYmogPT0gLTEgPyB0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCI+IHVsID4gbGkiKSA6IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogPT09IGZhbHNlKSB7IHJldHVybjsgfSAvLyBhZGRlZCBmb3IgcmVtb3Zpbmcgcm9vdCBub2RlcwoJCQkJdmFyIGMsIF90aGlzID0gdGhpcywgdCwgdHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC50d29fc3RhdGUsIHJjID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY2hlY2tib3gucmVhbF9jaGVja2JveGVzLCByY24gPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC5yZWFsX2NoZWNrYm94ZXNfbmFtZXM7CgkJCQlvYmouZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJdCA9ICQodGhpcyk7CgkJCQkJYyA9IHQuaXMoImxpIikgJiYgKHQuaGFzQ2xhc3MoImpzdHJlZS1jaGVja2VkIikgfHwgKHJjICYmIHQuY2hpbGRyZW4oIjpjaGVja2VkIikubGVuZ3RoKSkgPyAianN0cmVlLWNoZWNrZWQiIDogImpzdHJlZS11bmNoZWNrZWQiOwoJCQkJCXQuZmluZCgibGkiKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJCXZhciAkdCA9ICQodGhpcyksIG5tOwoJCQkJCQkkdC5jaGlsZHJlbigiYSIgKyAoX3RoaXMuZGF0YS5sYW5ndWFnZXMgPyAiIiA6ICI6ZXEoMCkiKSApLm5vdCgiOmhhcyguanN0cmVlLWNoZWNrYm94KSIpLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1jaGVja2JveCc+JiMxNjA7PC9pbnM+IikucGFyZW50KCkubm90KCIuanN0cmVlLWNoZWNrZWQsIC5qc3RyZWUtdW5jaGVja2VkIikuYWRkQ2xhc3MoIHRzID8gImpzdHJlZS11bmNoZWNrZWQiIDogYyApOwoJCQkJCQlpZihyYykgewoJCQkJCQkJaWYoISR0LmNoaWxkcmVuKCI6Y2hlY2tib3giKS5sZW5ndGgpIHsKCQkJCQkJCQlubSA9IHJjbi5jYWxsKF90aGlzLCAkdCk7CgkJCQkJCQkJJHQucHJlcGVuZCgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBjbGFzcz0nanN0cmVlLXJlYWwtY2hlY2tib3gnIGlkPSciICsgbm1bMF0gKyAiJyBuYW1lPSciICsgbm1bMF0gKyAiJyB2YWx1ZT0nIiArIG5tWzFdICsgIicgLz4iKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCSR0LmNoaWxkcmVuKCI6Y2hlY2tib3giKS5hZGRDbGFzcygianN0cmVlLXJlYWwtY2hlY2tib3giKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZighdHMpIHsKCQkJCQkJCWlmKGMgPT09ICJqc3RyZWUtY2hlY2tlZCIgfHwgJHQuaGFzQ2xhc3MoImpzdHJlZS1jaGVja2VkIikgfHwgJHQuY2hpbGRyZW4oJzpjaGVja2VkJykubGVuZ3RoKSB7CgkJCQkJCQkJJHQuZmluZCgibGkiKS5hZGRCYWNrKCkuYWRkQ2xhc3MoImpzdHJlZS1jaGVja2VkIikuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWlmKCR0Lmhhc0NsYXNzKCJqc3RyZWUtY2hlY2tlZCIpIHx8ICR0LmNoaWxkcmVuKCc6Y2hlY2tlZCcpLmxlbmd0aCkgewoJCQkJCQkJCSR0LmFkZENsYXNzKCJqc3RyZWUtY2hlY2tlZCIpLmNoaWxkcmVuKCI6Y2hlY2tib3giKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9KTsKCQkJCX0pOwoJCQkJaWYoIXRzKSB7CgkJCQkJb2JqLmZpbmQoIi5qc3RyZWUtY2hlY2tlZCIpLnBhcmVudCgpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKCkgeyBfdGhpcy5fcmVwYWlyX3N0YXRlKHRoaXMpOyB9KTsKCQkJCX0KCQkJfSwKCQkJY2hhbmdlX3N0YXRlIDogZnVuY3Rpb24gKG9iaiwgc3RhdGUpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl2YXIgY29sbCA9IGZhbHNlLCByYyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNoZWNrYm94LnJlYWxfY2hlY2tib3hlczsKCQkJCWlmKCFvYmogfHwgb2JqID09PSAtMSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXN0YXRlID0gKHN0YXRlID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gdHJ1ZSkgPyBzdGF0ZSA6IG9iai5oYXNDbGFzcygianN0cmVlLWNoZWNrZWQiKTsKCQkJCWlmKHRoaXMuX2dldF9zZXR0aW5ncygpLmNoZWNrYm94LnR3b19zdGF0ZSkgewoJCQkJCWlmKHN0YXRlKSB7CgkJCQkJCW9iai5yZW1vdmVDbGFzcygianN0cmVlLWNoZWNrZWQiKS5hZGRDbGFzcygianN0cmVlLXVuY2hlY2tlZCIpOwoJCQkJCQlpZihyYykgeyBvYmouY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7IH0KCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCW9iai5yZW1vdmVDbGFzcygianN0cmVlLXVuY2hlY2tlZCIpLmFkZENsYXNzKCJqc3RyZWUtY2hlY2tlZCIpOwoJCQkJCQlpZihyYykgeyBvYmouY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsgfQoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlmKHN0YXRlKSB7CgkJCQkJCWNvbGwgPSBvYmouZmluZCgibGkiKS5hZGRCYWNrKCk7CgkJCQkJCWlmKCFjb2xsLmZpbHRlcigiLmpzdHJlZS1jaGVja2VkLCAuanN0cmVlLXVuZGV0ZXJtaW5lZCIpLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJY29sbC5yZW1vdmVDbGFzcygianN0cmVlLWNoZWNrZWQganN0cmVlLXVuZGV0ZXJtaW5lZCIpLmFkZENsYXNzKCJqc3RyZWUtdW5jaGVja2VkIik7CgkJCQkJCWlmKHJjKSB7IGNvbGwuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7IH0KCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCWNvbGwgPSBvYmouZmluZCgibGkiKS5hZGRCYWNrKCk7CgkJCQkJCWlmKCFjb2xsLmZpbHRlcigiLmpzdHJlZS11bmNoZWNrZWQsIC5qc3RyZWUtdW5kZXRlcm1pbmVkIikubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJCQljb2xsLnJlbW92ZUNsYXNzKCJqc3RyZWUtdW5jaGVja2VkIGpzdHJlZS11bmRldGVybWluZWQiKS5hZGRDbGFzcygianN0cmVlLWNoZWNrZWQiKTsKCQkJCQkJaWYocmMpIHsgY29sbC5jaGlsZHJlbigiOmNoZWNrYm94IikucHJvcCgiY2hlY2tlZCIsIHRydWUpOyB9CgkJCQkJCWlmKHRoaXMuZGF0YS51aSkgeyB0aGlzLmRhdGEudWkubGFzdF9zZWxlY3RlZCA9IG9iajsgfQoJCQkJCQl0aGlzLmRhdGEuY2hlY2tib3gubGFzdF9zZWxlY3RlZCA9IG9iajsKCQkJCQl9CgkJCQkJb2JqLnBhcmVudHNVbnRpbCgiLmpzdHJlZSIsICJsaSIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJCQl2YXIgJHRoaXMgPSAkKHRoaXMpOwoJCQkJCQlpZihzdGF0ZSkgewoJCQkJCQkJaWYoJHRoaXMuY2hpbGRyZW4oInVsIikuY2hpbGRyZW4oImxpLmpzdHJlZS1jaGVja2VkLCBsaS5qc3RyZWUtdW5kZXRlcm1pbmVkIikubGVuZ3RoKSB7CgkJCQkJCQkJJHRoaXMucGFyZW50c1VudGlsKCIuanN0cmVlIiwgImxpIikuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJqc3RyZWUtY2hlY2tlZCBqc3RyZWUtdW5jaGVja2VkIikuYWRkQ2xhc3MoImpzdHJlZS11bmRldGVybWluZWQiKTsKCQkJCQkJCQlpZihyYykgeyAkdGhpcy5wYXJlbnRzVW50aWwoIi5qc3RyZWUiLCAibGkiKS5hZGRCYWNrKCkuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7IH0KCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQkkdGhpcy5yZW1vdmVDbGFzcygianN0cmVlLWNoZWNrZWQganN0cmVlLXVuZGV0ZXJtaW5lZCIpLmFkZENsYXNzKCJqc3RyZWUtdW5jaGVja2VkIik7CgkJCQkJCQkJaWYocmMpIHsgJHRoaXMuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7IH0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWlmKCR0aGlzLmNoaWxkcmVuKCJ1bCIpLmNoaWxkcmVuKCJsaS5qc3RyZWUtdW5jaGVja2VkLCBsaS5qc3RyZWUtdW5kZXRlcm1pbmVkIikubGVuZ3RoKSB7CgkJCQkJCQkJJHRoaXMucGFyZW50c1VudGlsKCIuanN0cmVlIiwgImxpIikuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJqc3RyZWUtY2hlY2tlZCBqc3RyZWUtdW5jaGVja2VkIikuYWRkQ2xhc3MoImpzdHJlZS11bmRldGVybWluZWQiKTsKCQkJCQkJCQlpZihyYykgeyAkdGhpcy5wYXJlbnRzVW50aWwoIi5qc3RyZWUiLCAibGkiKS5hZGRCYWNrKCkuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7IH0KCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQkkdGhpcy5yZW1vdmVDbGFzcygianN0cmVlLXVuY2hlY2tlZCBqc3RyZWUtdW5kZXRlcm1pbmVkIikuYWRkQ2xhc3MoImpzdHJlZS1jaGVja2VkIik7CgkJCQkJCQkJaWYocmMpIHsgJHRoaXMuY2hpbGRyZW4oIjpjaGVja2JveCIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsgfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJCQlpZih0aGlzLmRhdGEudWkgJiYgdGhpcy5kYXRhLmNoZWNrYm94Lm5vdWkpIHsgdGhpcy5kYXRhLnVpLnNlbGVjdGVkID0gdGhpcy5nZXRfY2hlY2tlZCgpOyB9CgkJCQl0aGlzLl9fY2FsbGJhY2sob2JqKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9LAoJCQljaGVja19ub2RlIDogZnVuY3Rpb24gKG9iaikgewoJCQkJaWYodGhpcy5jaGFuZ2Vfc3RhdGUob2JqLCBmYWxzZSkpIHsKCQkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJCWlmKHRoaXMuX2dldF9zZXR0aW5ncygpLmNoZWNrYm94LmNoZWNrZWRfcGFyZW50X29wZW4pIHsKCQkJCQkJdmFyIHQgPSB0aGlzOwoJCQkJCQlvYmoucGFyZW50cygiLmpzdHJlZS1jbG9zZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdC5vcGVuX25vZGUodGhpcywgZmFsc2UsIHRydWUpOyB9KTsKCQkJCQl9CgkJCQkJdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBvYmogfSk7CgkJCQl9CgkJCX0sCgkJCXVuY2hlY2tfbm9kZSA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCWlmKHRoaXMuY2hhbmdlX3N0YXRlKG9iaiwgdHJ1ZSkpIHsgdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiB0aGlzLl9nZXRfbm9kZShvYmopIH0pOyB9CgkJCX0sCgkJCWNoZWNrX2FsbCA6IGZ1bmN0aW9uICgpIHsKCQkJCXZhciBfdGhpcyA9IHRoaXMsCgkJCQkJY29sbCA9IHRoaXMuX2dldF9zZXR0aW5ncygpLmNoZWNrYm94LnR3b19zdGF0ZSA/IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmZpbmQoImxpIikgOiB0aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbigibGkiKTsKCQkJCWNvbGwuZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJX3RoaXMuY2hhbmdlX3N0YXRlKHRoaXMsIGZhbHNlKTsKCQkJCX0pOwoJCQkJdGhpcy5fX2NhbGxiYWNrKCk7CgkJCX0sCgkJCXVuY2hlY2tfYWxsIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIF90aGlzID0gdGhpcywKCQkJCQljb2xsID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkuY2hlY2tib3gudHdvX3N0YXRlID8gdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZCgibGkiKSA6IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKCJsaSIpOwoJCQkJY29sbC5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQlfdGhpcy5jaGFuZ2Vfc3RhdGUodGhpcywgdHJ1ZSk7CgkJCQl9KTsKCQkJCXRoaXMuX19jYWxsYmFjaygpOwoJCQl9LAoKCQkJaXNfY2hlY2tlZCA6IGZ1bmN0aW9uKG9iaikgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCXJldHVybiBvYmoubGVuZ3RoID8gb2JqLmlzKCIuanN0cmVlLWNoZWNrZWQiKSA6IGZhbHNlOwoJCQl9LAoJCQlnZXRfY2hlY2tlZCA6IGZ1bmN0aW9uIChvYmosIGdldF9hbGwpIHsKCQkJCW9iaiA9ICFvYmogfHwgb2JqID09PSAtMSA/IHRoaXMuZ2V0X2NvbnRhaW5lcigpIDogdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCXJldHVybiBnZXRfYWxsIHx8IHRoaXMuX2dldF9zZXR0aW5ncygpLmNoZWNrYm94LnR3b19zdGF0ZSA/IG9iai5maW5kKCIuanN0cmVlLWNoZWNrZWQiKSA6IG9iai5maW5kKCI+IHVsID4gLmpzdHJlZS1jaGVja2VkLCAuanN0cmVlLXVuZGV0ZXJtaW5lZCA+IHVsID4gLmpzdHJlZS1jaGVja2VkIik7CgkJCX0sCgkJCWdldF91bmNoZWNrZWQgOiBmdW5jdGlvbiAob2JqLCBnZXRfYWxsKSB7CgkJCQlvYmogPSAhb2JqIHx8IG9iaiA9PT0gLTEgPyB0aGlzLmdldF9jb250YWluZXIoKSA6IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlyZXR1cm4gZ2V0X2FsbCB8fCB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC50d29fc3RhdGUgPyBvYmouZmluZCgiLmpzdHJlZS11bmNoZWNrZWQiKSA6IG9iai5maW5kKCI+IHVsID4gLmpzdHJlZS11bmNoZWNrZWQsIC5qc3RyZWUtdW5kZXRlcm1pbmVkID4gdWwgPiAuanN0cmVlLXVuY2hlY2tlZCIpOwoJCQl9LAoKCQkJc2hvd19jaGVja2JveGVzIDogZnVuY3Rpb24gKCkgeyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5yZW1vdmVDbGFzcygianN0cmVlLW5vLWNoZWNrYm94ZXMiKTsgfSwKCQkJaGlkZV9jaGVja2JveGVzIDogZnVuY3Rpb24gKCkgeyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5hZGRDbGFzcygianN0cmVlLW5vLWNoZWNrYm94ZXMiKTsgfSwKCgkJCV9yZXBhaXJfc3RhdGUgOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJaWYoIW9iai5sZW5ndGgpIHsgcmV0dXJuOyB9CgkJCQlpZih0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC50d29fc3RhdGUpIHsKCQkJCQlvYmouZmluZCgnbGknKS5hZGRCYWNrKCkubm90KCcuanN0cmVlLWNoZWNrZWQnKS5yZW1vdmVDbGFzcygnanN0cmVlLXVuZGV0ZXJtaW5lZCcpLmFkZENsYXNzKCdqc3RyZWUtdW5jaGVja2VkJykuY2hpbGRyZW4oJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQl2YXIgcmMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS5jaGVja2JveC5yZWFsX2NoZWNrYm94ZXMsCgkJCQkJYSA9IG9iai5maW5kKCI+IHVsID4gLmpzdHJlZS1jaGVja2VkIikubGVuZ3RoLAoJCQkJCWIgPSBvYmouZmluZCgiPiB1bCA+IC5qc3RyZWUtdW5kZXRlcm1pbmVkIikubGVuZ3RoLAoJCQkJCWMgPSBvYmouZmluZCgiPiB1bCA+IGxpIikubGVuZ3RoOwoJCQkJaWYoYyA9PT0gMCkgeyBpZihvYmouaGFzQ2xhc3MoImpzdHJlZS11bmRldGVybWluZWQiKSkgeyB0aGlzLmNoYW5nZV9zdGF0ZShvYmosIGZhbHNlKTsgfSB9CgkJCQllbHNlIGlmKGEgPT09IDAgJiYgYiA9PT0gMCkgeyB0aGlzLmNoYW5nZV9zdGF0ZShvYmosIHRydWUpOyB9CgkJCQllbHNlIGlmKGEgPT09IGMpIHsgdGhpcy5jaGFuZ2Vfc3RhdGUob2JqLCBmYWxzZSk7IH0KCQkJCWVsc2UgewoJCQkJCW9iai5wYXJlbnRzVW50aWwoIi5qc3RyZWUiLCJsaSIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcygianN0cmVlLWNoZWNrZWQganN0cmVlLXVuY2hlY2tlZCIpLmFkZENsYXNzKCJqc3RyZWUtdW5kZXRlcm1pbmVkIik7CgkJCQkJaWYocmMpIHsgb2JqLnBhcmVudHNVbnRpbCgiLmpzdHJlZSIsICJsaSIpLmFkZEJhY2soKS5jaGlsZHJlbigiOmNoZWNrYm94IikucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsgfQoJCQkJfQoJCQl9LAoJCQlyZXNlbGVjdCA6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKHRoaXMuZGF0YS51aSAmJiB0aGlzLmRhdGEuY2hlY2tib3gubm91aSkgewoJCQkJCXZhciBfdGhpcyA9IHRoaXMsCgkJCQkJCXMgPSB0aGlzLmRhdGEudWkudG9fc2VsZWN0OwoJCQkJCXMgPSAkLm1hcCgkLm1ha2VBcnJheShzKSwgZnVuY3Rpb24gKG4pIHsgcmV0dXJuICIjIiArIG4udG9TdHJpbmcoKS5yZXBsYWNlKC9eIy8sIiIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1wvL2csIlxcXC8iKS5yZXBsYWNlKC9cXFwuL2csIi4iKS5yZXBsYWNlKC9cLi9nLCJcXC4iKS5yZXBsYWNlKC9cOi9nLCJcXDoiKTsgfSk7CgkJCQkJdGhpcy5kZXNlbGVjdF9hbGwoKTsKCQkJCQkkLmVhY2gocywgZnVuY3Rpb24gKGksIHZhbCkgeyBfdGhpcy5jaGVja19ub2RlKHZhbCk7IH0pOwoJCQkJCXRoaXMuX19jYWxsYmFjaygpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdGhpcy5fX2NhbGxfb2xkKCk7CgkJCQl9CgkJCX0sCgkJCXNhdmVfbG9hZGVkIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIF90aGlzID0gdGhpczsKCQkJCXRoaXMuZGF0YS5jb3JlLnRvX2xvYWQgPSBbXTsKCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmZpbmQoImxpLmpzdHJlZS1jbG9zZWQuanN0cmVlLXVuZGV0ZXJtaW5lZCIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJCWlmKHRoaXMuaWQpIHsgX3RoaXMuZGF0YS5jb3JlLnRvX2xvYWQucHVzaCgiIyIgKyB0aGlzLmlkKTsgfQoJCQkJfSk7CgkJCX0KCQl9Cgl9KTsKCSQoZnVuY3Rpb24oKSB7CgkJdmFyIGNzc19zdHJpbmcgPSAnLmpzdHJlZSAuanN0cmVlLXJlYWwtY2hlY2tib3ggeyBkaXNwbGF5Om5vbmU7IH0gJzsKCQkkLnZha2F0YS5jc3MuYWRkX3NoZWV0KHsgc3RyIDogY3NzX3N0cmluZywgdGl0bGUgOiAianN0cmVlIiB9KTsKCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgWE1MIHBsdWdpbgogKiBUaGUgWE1MIGRhdGEgc3RvcmUuIERhdGFzdG9yZXMgYXJlIGJ1aWxkIGJ5IG92ZXJyaWRpbmcgdGhlIGBsb2FkX25vZGVgIGFuZCBgX2lzX2xvYWRlZGAgZnVuY3Rpb25zLgogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLnZha2F0YS54c2x0ID0gZnVuY3Rpb24gKHhtbCwgeHNsLCBjYWxsYmFjaykgewoJCXZhciByID0gZmFsc2UsIHAsIHEsIHM7CgkJLy8gSUU5CgkJaWYociA9PT0gZmFsc2UgJiYgd2luZG93LkFjdGl2ZVhPYmplY3QpIHsKCQkJdHJ5IHsKCQkJCXIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhTTFRlbXBsYXRlIik7CgkJCQlxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5ET01Eb2N1bWVudCIpOwoJCQkJcS5sb2FkWE1MKHhtbCk7CgkJCQlzID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5GcmVlVGhyZWFkZWRET01Eb2N1bWVudCIpOwoJCQkJcy5sb2FkWE1MKHhzbCk7CgkJCQlyLnN0eWxlc2hlZXQgPSBzOwoJCQkJcCA9IHIuY3JlYXRlUHJvY2Vzc29yKCk7CgkJCQlwLmlucHV0ID0gcTsKCQkJCXAudHJhbnNmb3JtKCk7CgkJCQlyID0gcC5vdXRwdXQ7CgkJCX0KCQkJY2F0Y2ggKGUpIHsgfQoJCX0KCQl4bWwgPSAkLnBhcnNlWE1MKHhtbCk7CgkJeHNsID0gJC5wYXJzZVhNTCh4c2wpOwoJCS8vIEZGLCBDaHJvbWUKCQlpZihyID09PSBmYWxzZSAmJiB0eXBlb2YgKFhTTFRQcm9jZXNzb3IpICE9PSAidW5kZWZpbmVkIikgewoJCQlwID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKCQkJcC5pbXBvcnRTdHlsZXNoZWV0KHhzbCk7CgkJCXIgPSBwLnRyYW5zZm9ybVRvRnJhZ21lbnQoeG1sLCBkb2N1bWVudCk7CgkJCXIgPSAkKCc8ZGl2IC8+JykuYXBwZW5kKHIpLmh0bWwoKTsKCQl9CgkJLy8gT0xEIElFCgkJaWYociA9PT0gZmFsc2UgJiYgdHlwZW9mICh4bWwudHJhbnNmb3JtTm9kZSkgIT09ICJ1bmRlZmluZWQiKSB7CgkJCXIgPSB4bWwudHJhbnNmb3JtTm9kZSh4c2wpOwoJCX0KCQljYWxsYmFjay5jYWxsKG51bGwsIHIpOwoJfTsKCXZhciB4c2wgPSB7CgkJJ25lc3QnIDogJzwnICsgJz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+JyArCgkJCSc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgPicgKwoJCQknPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBlbmNvZGluZz0idXRmLTgiIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiIHN0YW5kYWxvbmU9Im5vIiBpbmRlbnQ9Im5vIiBtZWRpYS10eXBlPSJ0ZXh0L2h0bWwiIC8+JyArCgkJCSc8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4nICsKCQkJJwk8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibm9kZXMiPicgKwoJCQknCQk8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIvcm9vdCIgLz4nICsKCQkJJwk8L3hzbDpjYWxsLXRlbXBsYXRlPicgKwoJCQknPC94c2w6dGVtcGxhdGU+JyArCgkJCSc8eHNsOnRlbXBsYXRlIG5hbWU9Im5vZGVzIj4nICsKCQkJJwk8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIC8+JyArCgkJCScJPHVsPicgKwoJCQknCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkbm9kZS9pdGVtIj4nICsKCQkJJwkJPHhzbDp2YXJpYWJsZSBuYW1lPSJjaGlsZHJlbiIgc2VsZWN0PSJjb3VudCguL2l0ZW0pICZndDsgMCIgLz4nICsKCQkJJwkJPGxpPicgKwoJCQknCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPicgKwoJCQknCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA9IGxhc3QoKSI+anN0cmVlLWxhc3QgPC94c2w6aWY+JyArCgkJCScJCQkJPHhzbDpjaG9vc2U+JyArCgkJCScJCQkJCTx4c2w6d2hlbiB0ZXN0PSJAc3RhdGUgPSBcJ29wZW5cJyI+anN0cmVlLW9wZW4gPC94c2w6d2hlbj4nICsKCQkJJwkJCQkJPHhzbDp3aGVuIHRlc3Q9IiRjaGlsZHJlbiBvciBAaGFzQ2hpbGRyZW4gb3IgQHN0YXRlID0gXCdjbG9zZWRcJyI+anN0cmVlLWNsb3NlZCA8L3hzbDp3aGVuPicgKwoJCQknCQkJCQk8eHNsOm90aGVyd2lzZT5qc3RyZWUtbGVhZiA8L3hzbDpvdGhlcndpc2U+JyArCgkJCScJCQkJPC94c2w6Y2hvb3NlPicgKwoJCQknCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY2xhc3MiIC8+JyArCgkJCScJCQk8L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iQCoiPicgKwoJCQknCQkJCTx4c2w6aWYgdGVzdD0ibmFtZSgpICE9IFwnY2xhc3NcJyBhbmQgbmFtZSgpICE9IFwnc3RhdGVcJyBhbmQgbmFtZSgpICE9IFwnaGFzQ2hpbGRyZW5cJyI+JyArCgkJCScJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9IntuYW1lKCl9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIgLz48L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQkJPC94c2w6aWY+JyArCgkJCScJCQk8L3hzbDpmb3ItZWFjaD4nICsKCQkJJwk8aW5zIGNsYXNzPSJqc3RyZWUtaWNvbiI+PHhzbDp0ZXh0PiYjeGEwOzwveHNsOnRleHQ+PC9pbnM+JyArCgkJCScJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iY29udGVudC9uYW1lIj4nICsKCQkJJwkJCQk8YT4nICsKCQkJJwkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4nICsKCQkJJwkJCQkJPHhzbDpjaG9vc2U+JyArCgkJCScJCQkJCTx4c2w6d2hlbiB0ZXN0PSJAaHJlZiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBocmVmIiAvPjwveHNsOndoZW4+JyArCgkJCScJCQkJCTx4c2w6b3RoZXJ3aXNlPiM8L3hzbDpvdGhlcndpc2U+JyArCgkJCScJCQkJCTwveHNsOmNob29zZT4nICsKCQkJJwkJCQk8L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFuZyIgLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjbGFzcyIgLz48L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3R5bGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAc3R5bGUiIC8+PC94c2w6YXR0cmlidXRlPicgKwoJCQknCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJAKiI+JyArCgkJCScJCQkJCTx4c2w6aWYgdGVzdD0ibmFtZSgpICE9IFwnc3R5bGVcJyBhbmQgbmFtZSgpICE9IFwnY2xhc3NcJyBhbmQgbmFtZSgpICE9IFwnaHJlZlwnIj4nICsKCQkJJwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9IntuYW1lKCl9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIgLz48L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQkJCTwveHNsOmlmPicgKwoJCQknCQkJCTwveHNsOmZvci1lYWNoPicgKwoJCQknCQkJCQk8aW5zPicgKwoJCQknCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmpzdHJlZS1pY29uICcgKwoJCQknCQkJCQkJCTx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChhdHRyaWJ1dGU6Omljb24pID4gMCBhbmQgbm90KGNvbnRhaW5zKEBpY29uLFwnL1wnKSkiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaWNvbiIgLz48L3hzbDppZj4nICsKCQkJJwkJCQkJCTwveHNsOmF0dHJpYnV0ZT4nICsKCQkJJwkJCQkJCTx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChhdHRyaWJ1dGU6Omljb24pID4gMCBhbmQgY29udGFpbnMoQGljb24sXCcvXCcpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSI+YmFja2dyb3VuZDp1cmwoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpY29uIiAvPikgY2VudGVyIGNlbnRlciBuby1yZXBlYXQ7PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPicgKwoJCQknCQkJCQkJPHhzbDp0ZXh0PiYjeGEwOzwveHNsOnRleHQ+JyArCgkJCScJCQkJCTwvaW5zPicgKwoJCQknCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSIuL2NoaWxkOjpub2RlKCkiIC8+JyArCgkJCScJCQkJPC9hPicgKwoJCQknCQkJPC94c2w6Zm9yLWVhY2g+JyArCgkJCScJCQk8eHNsOmlmIHRlc3Q9IiRjaGlsZHJlbiBvciBAaGFzQ2hpbGRyZW4iPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJub2RlcyI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iY3VycmVudCgpIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6aWY+JyArCgkJCScJCTwvbGk+JyArCgkJCScJPC94c2w6Zm9yLWVhY2g+JyArCgkJCScJPC91bD4nICsKCQkJJzwveHNsOnRlbXBsYXRlPicgKwoJCQknPC94c2w6c3R5bGVzaGVldD4nLAoKCQknZmxhdCcgOiAnPCcgKyAnP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4nICsKCQkJJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiA+JyArCgkJCSc8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGVuY29kaW5nPSJ1dGYtOCIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIgc3RhbmRhbG9uZT0ibm8iIGluZGVudD0ibm8iIG1lZGlhLXR5cGU9InRleHQveG1sIiAvPicgKwoJCQknPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+JyArCgkJCScJPHVsPicgKwoJCQknCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvL2l0ZW1bbm90KEBwYXJlbnRfaWQpIG9yIEBwYXJlbnRfaWQ9MCBvciBub3QoQHBhcmVudF9pZCA9IC8vaXRlbS9AaWQpXSI+JyArIC8qIHRoZSBsYXN0IGBvcmAgbWF5IGJlIHJlbW92ZWQgKi8KCQkJJwkJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im5vZGVzIj4nICsKCQkJJwkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iIC8+JyArCgkJCScJCQk8eHNsOndpdGgtcGFyYW0gbmFtZT0iaXNfbGFzdCIgc2VsZWN0PSJudW1iZXIocG9zaXRpb24oKSA9IGxhc3QoKSkiIC8+JyArCgkJCScJCTwveHNsOmNhbGwtdGVtcGxhdGU+JyArCgkJCScJPC94c2w6Zm9yLWVhY2g+JyArCgkJCScJPC91bD4nICsKCQkJJzwveHNsOnRlbXBsYXRlPicgKwoJCQknPHhzbDp0ZW1wbGF0ZSBuYW1lPSJub2RlcyI+JyArCgkJCScJPHhzbDpwYXJhbSBuYW1lPSJub2RlIiAvPicgKwoJCQknCTx4c2w6cGFyYW0gbmFtZT0iaXNfbGFzdCIgLz4nICsKCQkJJwk8eHNsOnZhcmlhYmxlIG5hbWU9ImNoaWxkcmVuIiBzZWxlY3Q9ImNvdW50KC8vaXRlbVtAcGFyZW50X2lkPSRub2RlL2F0dHJpYnV0ZTo6aWRdKSAmZ3Q7IDAiIC8+JyArCgkJCScJPGxpPicgKwoJCQknCTx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4nICsKCQkJJwkJPHhzbDppZiB0ZXN0PSIkaXNfbGFzdCA9IHRydWUoKSI+anN0cmVlLWxhc3QgPC94c2w6aWY+JyArCgkJCScJCTx4c2w6Y2hvb3NlPicgKwoJCQknCQkJPHhzbDp3aGVuIHRlc3Q9IkBzdGF0ZSA9IFwnb3BlblwnIj5qc3RyZWUtb3BlbiA8L3hzbDp3aGVuPicgKwoJCQknCQkJPHhzbDp3aGVuIHRlc3Q9IiRjaGlsZHJlbiBvciBAaGFzQ2hpbGRyZW4gb3IgQHN0YXRlID0gXCdjbG9zZWRcJyI+anN0cmVlLWNsb3NlZCA8L3hzbDp3aGVuPicgKwoJCQknCQkJPHhzbDpvdGhlcndpc2U+anN0cmVlLWxlYWYgPC94c2w6b3RoZXJ3aXNlPicgKwoJCQknCQk8L3hzbDpjaG9vc2U+JyArCgkJCScJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY2xhc3MiIC8+JyArCgkJCScJPC94c2w6YXR0cmlidXRlPicgKwoJCQknCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJAKiI+JyArCgkJCScJCTx4c2w6aWYgdGVzdD0ibmFtZSgpICE9IFwncGFyZW50X2lkXCcgYW5kIG5hbWUoKSAhPSBcJ2hhc0NoaWxkcmVuXCcgYW5kIG5hbWUoKSAhPSBcJ2NsYXNzXCcgYW5kIG5hbWUoKSAhPSBcJ3N0YXRlXCciPicgKwoJCQknCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ7bmFtZSgpfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iIC8+PC94c2w6YXR0cmlidXRlPicgKwoJCQknCQk8L3hzbDppZj4nICsKCQkJJwk8L3hzbDpmb3ItZWFjaD4nICsKCQkJJwk8aW5zIGNsYXNzPSJqc3RyZWUtaWNvbiI+PHhzbDp0ZXh0PiYjeGEwOzwveHNsOnRleHQ+PC9pbnM+JyArCgkJCScJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImNvbnRlbnQvbmFtZSI+JyArCgkJCScJCTxhPicgKwoJCQknCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4nICsKCQkJJwkJCTx4c2w6Y2hvb3NlPicgKwoJCQknCQkJPHhzbDp3aGVuIHRlc3Q9IkBocmVmIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGhyZWYiIC8+PC94c2w6d2hlbj4nICsKCQkJJwkJCTx4c2w6b3RoZXJ3aXNlPiM8L3hzbDpvdGhlcndpc2U+JyArCgkJCScJCQk8L3hzbDpjaG9vc2U+JyArCgkJCScJCTwveHNsOmF0dHJpYnV0ZT4nICsKCQkJJwkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFuZyIgLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjbGFzcyIgLz48L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCTx4c2w6YXR0cmlidXRlIG5hbWU9InN0eWxlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN0eWxlIiAvPjwveHNsOmF0dHJpYnV0ZT4nICsKCQkJJwkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IkAqIj4nICsKCQkJJwkJCTx4c2w6aWYgdGVzdD0ibmFtZSgpICE9IFwnc3R5bGVcJyBhbmQgbmFtZSgpICE9IFwnY2xhc3NcJyBhbmQgbmFtZSgpICE9IFwnaHJlZlwnIj4nICsKCQkJJwkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ7bmFtZSgpfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iIC8+PC94c2w6YXR0cmlidXRlPicgKwoJCQknCQkJPC94c2w6aWY+JyArCgkJCScJCTwveHNsOmZvci1lYWNoPicgKwoJCQknCQkJPGlucz4nICsKCQkJJwkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+anN0cmVlLWljb24gJyArCgkJCScJCQkJCTx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChhdHRyaWJ1dGU6Omljb24pID4gMCBhbmQgbm90KGNvbnRhaW5zKEBpY29uLFwnL1wnKSkiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaWNvbiIgLz48L3hzbDppZj4nICsKCQkJJwkJCQk8L3hzbDphdHRyaWJ1dGU+JyArCgkJCScJCQkJPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKGF0dHJpYnV0ZTo6aWNvbikgPiAwIGFuZCBjb250YWlucyhAaWNvbixcJy9cJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InN0eWxlIj5iYWNrZ3JvdW5kOnVybCg8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGljb24iIC8+KSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDs8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+JyArCgkJCScJCQkJPHhzbDp0ZXh0PiYjeGEwOzwveHNsOnRleHQ+JyArCgkJCScJCQk8L2lucz4nICsKCQkJJwkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4vY2hpbGQ6Om5vZGUoKSIgLz4nICsKCQkJJwkJPC9hPicgKwoJCQknCTwveHNsOmZvci1lYWNoPicgKwoJCQknCTx4c2w6aWYgdGVzdD0iJGNoaWxkcmVuIj4nICsKCQkJJwkJPHVsPicgKwoJCQknCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iLy9pdGVtW0BwYXJlbnRfaWQ9JG5vZGUvYXR0cmlidXRlOjppZF0iPicgKwoJCQknCQkJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im5vZGVzIj4nICsKCQkJJwkJCQk8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuIiAvPicgKwoJCQknCQkJCTx4c2w6d2l0aC1wYXJhbSBuYW1lPSJpc19sYXN0IiBzZWxlY3Q9Im51bWJlcihwb3NpdGlvbigpID0gbGFzdCgpKSIgLz4nICsKCQkJJwkJCTwveHNsOmNhbGwtdGVtcGxhdGU+JyArCgkJCScJCTwveHNsOmZvci1lYWNoPicgKwoJCQknCQk8L3VsPicgKwoJCQknCTwveHNsOmlmPicgKwoJCQknCTwvbGk+JyArCgkJCSc8L3hzbDp0ZW1wbGF0ZT4nICsKCQkJJzwveHNsOnN0eWxlc2hlZXQ+JwoJfSwKCWVzY2FwZV94bWwgPSBmdW5jdGlvbihzdHJpbmcpIHsKCQlyZXR1cm4gc3RyaW5nCgkJCS50b1N0cmluZygpCgkJCS5yZXBsYWNlKC8mL2csICcmYW1wOycpCgkJCS5yZXBsYWNlKC88L2csICcmbHQ7JykKCQkJLnJlcGxhY2UoLz4vZywgJyZndDsnKQoJCQkucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKCQkJLnJlcGxhY2UoLycvZywgJyZhcG9zOycpOwoJfTsKCSQuanN0cmVlLnBsdWdpbigieG1sX2RhdGEiLCB7CgkJZGVmYXVsdHMgOiB7CgkJCWRhdGEgOiBmYWxzZSwKCQkJYWpheCA6IGZhbHNlLAoJCQl4c2wgOiAiZmxhdCIsCgkJCWNsZWFuX25vZGUgOiBmYWxzZSwKCQkJY29ycmVjdF9zdGF0ZSA6IHRydWUsCgkJCWdldF9za2lwX2VtcHR5IDogZmFsc2UsCgkJCWdldF9pbmNsdWRlX3ByZWFtYmxlIDogdHJ1ZQoJCX0sCgkJX2ZuIDogewoJCQlsb2FkX25vZGUgOiBmdW5jdGlvbiAob2JqLCBzX2NhbGwsIGVfY2FsbCkgeyB2YXIgX3RoaXMgPSB0aGlzOyB0aGlzLmxvYWRfbm9kZV94bWwob2JqLCBmdW5jdGlvbiAoKSB7IF90aGlzLl9fY2FsbGJhY2soeyAib2JqIiA6IF90aGlzLl9nZXRfbm9kZShvYmopIH0pOyBzX2NhbGwuY2FsbCh0aGlzKTsgfSwgZV9jYWxsKTsgfSwKCQkJX2lzX2xvYWRlZCA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkueG1sX2RhdGE7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJcmV0dXJuIG9iaiA9PSAtMSB8fCAhb2JqIHx8ICghcy5hamF4ICYmICEkLmlzRnVuY3Rpb24ocy5kYXRhKSkgfHwgb2JqLmlzKCIuanN0cmVlLW9wZW4sIC5qc3RyZWUtbGVhZiIpIHx8IG9iai5jaGlsZHJlbigidWwiKS5jaGlsZHJlbigibGkiKS5zaXplKCkgPiAwOwoJCQl9LAoJCQlsb2FkX25vZGVfeG1sIDogZnVuY3Rpb24gKG9iaiwgc19jYWxsLCBlX2NhbGwpIHsKCQkJCXZhciBzID0gdGhpcy5nZXRfc2V0dGluZ3MoKS54bWxfZGF0YSwKCQkJCQllcnJvcl9mdW5jID0gZnVuY3Rpb24gKCkge30sCgkJCQkJc3VjY2Vzc19mdW5jID0gZnVuY3Rpb24gKCkge307CgoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKG9iaiAmJiBvYmogIT09IC0xKSB7CgkJCQkJaWYob2JqLmRhdGEoImpzdHJlZV9pc19sb2FkaW5nIikpIHsgcmV0dXJuOyB9CgkJCQkJZWxzZSB7IG9iai5kYXRhKCJqc3RyZWVfaXNfbG9hZGluZyIsdHJ1ZSk7IH0KCQkJCX0KCQkJCXN3aXRjaCghMCkgewoJCQkJCWNhc2UgKCFzLmRhdGEgJiYgIXMuYWpheCk6IHRocm93ICJOZWl0aGVyIGRhdGEgbm9yIGFqYXggc2V0dGluZ3Mgc3VwcGxpZWQuIjsKCQkJCQljYXNlICgkLmlzRnVuY3Rpb24ocy5kYXRhKSk6CgkJCQkJCXMuZGF0YS5jYWxsKHRoaXMsIG9iaiwgJC5wcm94eShmdW5jdGlvbiAoZCkgewoJCQkJCQkJdGhpcy5wYXJzZV94bWwoZCwgJC5wcm94eShmdW5jdGlvbiAoZCkgewoJCQkJCQkJCWlmKGQpIHsKCQkJCQkJCQkJZCA9IGQucmVwbGFjZSgvID94bWxucz0iW14iXSoiL2lnLCAiIik7CgkJCQkJCQkJCWlmKGQubGVuZ3RoID4gMTApIHsKCQkJCQkJCQkJCWQgPSAkKGQpOwoJCQkJCQkJCQkJaWYob2JqID09PSAtMSB8fCAhb2JqKSB7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCkuYXBwZW5kKGQuY2hpbGRyZW4oKSk7IH0KCQkJCQkJCQkJCWVsc2UgeyBvYmouY2hpbGRyZW4oImEuanN0cmVlLWxvYWRpbmciKS5yZW1vdmVDbGFzcygianN0cmVlLWxvYWRpbmciKTsgb2JqLmFwcGVuZChkKTsgb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7IH0KCQkJCQkJCQkJCWlmKHMuY2xlYW5fbm9kZSkgeyB0aGlzLmNsZWFuX25vZGUob2JqKTsgfQoJCQkJCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCQlpZihvYmogJiYgb2JqICE9PSAtMSkgewoJCQkJCQkJCQkJCW9iai5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOwoJCQkJCQkJCQkJCW9iai5yZW1vdmVEYXRhKCJqc3RyZWVfaXNfbG9hZGluZyIpOwoJCQkJCQkJCQkJCWlmKHMuY29ycmVjdF9zdGF0ZSkgewoJCQkJCQkJCQkJCQl0aGlzLmNvcnJlY3Rfc3RhdGUob2JqKTsKCQkJCQkJCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJZWxzZSB7CgkJCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7CgkJCQkJCQkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCk7CgkJCQkJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0sIHRoaXMpKTsKCQkJCQkJfSwgdGhpcykpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICghIXMuZGF0YSAmJiAhcy5hamF4KSB8fCAoISFzLmRhdGEgJiYgISFzLmFqYXggJiYgKCFvYmogfHwgb2JqID09PSAtMSkpOgoJCQkJCQlpZighb2JqIHx8IG9iaiA9PSAtMSkgewoJCQkJCQkJdGhpcy5wYXJzZV94bWwocy5kYXRhLCAkLnByb3h5KGZ1bmN0aW9uIChkKSB7CgkJCQkJCQkJaWYoZCkgewoJCQkJCQkJCQlkID0gZC5yZXBsYWNlKC8gP3htbG5zPSJbXiJdKiIvaWcsICIiKTsKCQkJCQkJCQkJaWYoZC5sZW5ndGggPiAxMCkgewoJCQkJCQkJCQkJZCA9ICQoZCk7CgkJCQkJCQkJCQl0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lbXB0eSgpLmFwcGVuZChkLmNoaWxkcmVuKCkpOwoJCQkJCQkJCQkJaWYocy5jbGVhbl9ub2RlKSB7IHRoaXMuY2xlYW5fbm9kZShvYmopOyB9CgkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCQllbHNlIHsKCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7CgkJCQkJCQkJCQl0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lbXB0eSgpOwoJCQkJCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9LCB0aGlzKSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAoIXMuZGF0YSAmJiAhIXMuYWpheCkgfHwgKCEhcy5kYXRhICYmICEhcy5hamF4ICYmIG9iaiAmJiBvYmogIT09IC0xKToKCQkJCQkJZXJyb3JfZnVuYyA9IGZ1bmN0aW9uICh4LCB0LCBlKSB7CgkJCQkJCQl2YXIgZWYgPSB0aGlzLmdldF9zZXR0aW5ncygpLnhtbF9kYXRhLmFqYXguZXJyb3I7CgkJCQkJCQlpZihlZikgeyBlZi5jYWxsKHRoaXMsIHgsIHQsIGUpOyB9CgkJCQkJCQlpZihvYmogIT09IC0xICYmIG9iai5sZW5ndGgpIHsKCQkJCQkJCQlvYmouY2hpbGRyZW4oImEuanN0cmVlLWxvYWRpbmciKS5yZW1vdmVDbGFzcygianN0cmVlLWxvYWRpbmciKTsKCQkJCQkJCQlvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsKCQkJCQkJCQlpZih0ID09PSAic3VjY2VzcyIgJiYgcy5jb3JyZWN0X3N0YXRlKSB7IHRoaXMuY29ycmVjdF9zdGF0ZShvYmopOyB9CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQlpZih0ID09PSAic3VjY2VzcyIgJiYgcy5jb3JyZWN0X3N0YXRlKSB7IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCk7IH0KCQkJCQkJCX0KCQkJCQkJCWlmKGVfY2FsbCkgeyBlX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQl9OwoJCQkJCQlzdWNjZXNzX2Z1bmMgPSBmdW5jdGlvbiAoZCwgdCwgeCkgewoJCQkJCQkJZCA9IHgucmVzcG9uc2VUZXh0OwoJCQkJCQkJdmFyIHNmID0gdGhpcy5nZXRfc2V0dGluZ3MoKS54bWxfZGF0YS5hamF4LnN1Y2Nlc3M7CgkJCQkJCQlpZihzZikgeyBkID0gc2YuY2FsbCh0aGlzLGQsdCx4KSB8fCBkOyB9CgkJCQkJCQlpZihkID09PSAiIiB8fCAoZCAmJiBkLnRvU3RyaW5nICYmIGQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW1xzXG5dKyQvLCIiKSA9PT0gIiIpKSB7CgkJCQkJCQkJcmV0dXJuIGVycm9yX2Z1bmMuY2FsbCh0aGlzLCB4LCB0LCAiIik7CgkJCQkJCQl9CgkJCQkJCQl0aGlzLnBhcnNlX3htbChkLCAkLnByb3h5KGZ1bmN0aW9uIChkKSB7CgkJCQkJCQkJaWYoZCkgewoJCQkJCQkJCQlkID0gZC5yZXBsYWNlKC8gP3htbG5zPSJbXiJdKiIvaWcsICIiKTsKCQkJCQkJCQkJaWYoZC5sZW5ndGggPiAxMCkgewoJCQkJCQkJCQkJZCA9ICQoZCk7CgkJCQkJCQkJCQlpZihvYmogPT09IC0xIHx8ICFvYmopIHsgdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKS5hcHBlbmQoZC5jaGlsZHJlbigpKTsgfQoJCQkJCQkJCQkJZWxzZSB7IG9iai5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOyBvYmouYXBwZW5kKGQpOyBvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsgfQoJCQkJCQkJCQkJaWYocy5jbGVhbl9ub2RlKSB7IHRoaXMuY2xlYW5fbm9kZShvYmopOyB9CgkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlIHsKCQkJCQkJCQkJCWlmKG9iaiAmJiBvYmogIT09IC0xKSB7CgkJCQkJCQkJCQkJb2JqLmNoaWxkcmVuKCJhLmpzdHJlZS1sb2FkaW5nIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1sb2FkaW5nIik7CgkJCQkJCQkJCQkJb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7CgkJCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7CgkJCQkJCQkJCQkJCXRoaXMuY29ycmVjdF9zdGF0ZShvYmopOwoJCQkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQllbHNlIHsKCQkJCQkJCQkJCQlpZihzLmNvcnJlY3Rfc3RhdGUpIHsKCQkJCQkJCQkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKTsKCQkJCQkJCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfSwgdGhpcykpOwoJCQkJCQl9OwoJCQkJCQlzLmFqYXguY29udGV4dCA9IHRoaXM7CgkJCQkJCXMuYWpheC5lcnJvciA9IGVycm9yX2Z1bmM7CgkJCQkJCXMuYWpheC5zdWNjZXNzID0gc3VjY2Vzc19mdW5jOwoJCQkJCQlpZighcy5hamF4LmRhdGFUeXBlKSB7IHMuYWpheC5kYXRhVHlwZSA9ICJ4bWwiOyB9CgkJCQkJCWlmKCQuaXNGdW5jdGlvbihzLmFqYXgudXJsKSkgeyBzLmFqYXgudXJsID0gcy5hamF4LnVybC5jYWxsKHRoaXMsIG9iaik7IH0KCQkJCQkJaWYoJC5pc0Z1bmN0aW9uKHMuYWpheC5kYXRhKSkgeyBzLmFqYXguZGF0YSA9IHMuYWpheC5kYXRhLmNhbGwodGhpcywgb2JqKTsgfQoJCQkJCQkkLmFqYXgocy5hamF4KTsKCQkJCQkJYnJlYWs7CgkJCQl9CgkJCX0sCgkJCXBhcnNlX3htbCA6IGZ1bmN0aW9uICh4bWwsIGNhbGxiYWNrKSB7CgkJCQl2YXIgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLnhtbF9kYXRhOwoJCQkJJC52YWthdGEueHNsdCh4bWwsIHhzbFtzLnhzbF0sIGNhbGxiYWNrKTsKCQkJfSwKCQkJZ2V0X3htbCA6IGZ1bmN0aW9uICh0cCwgb2JqLCBsaV9hdHRyLCBhX2F0dHIsIGlzX2NhbGxiYWNrKSB7CgkJCQl2YXIgcmVzdWx0ID0gIiIsCgkJCQkJcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLAoJCQkJCV90aGlzID0gdGhpcywKCQkJCQl0bXAxLCB0bXAyLCBsaSwgYSwgbGFuZzsKCQkJCWlmKCF0cCkgeyB0cCA9ICJmbGF0IjsgfQoJCQkJaWYoIWlzX2NhbGxiYWNrKSB7IGlzX2NhbGxiYWNrID0gMDsgfQoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKCFvYmogfHwgb2JqID09PSAtMSkgeyBvYmogPSB0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCI+IHVsID4gbGkiKTsgfQoJCQkJbGlfYXR0ciA9ICQuaXNBcnJheShsaV9hdHRyKSA/IGxpX2F0dHIgOiBbICJpZCIsICJjbGFzcyIgXTsKCQkJCWlmKCFpc19jYWxsYmFjayAmJiB0aGlzLmRhdGEudHlwZXMgJiYgJC5pbkFycmF5KHMudHlwZXMudHlwZV9hdHRyLCBsaV9hdHRyKSA9PT0gLTEpIHsgbGlfYXR0ci5wdXNoKHMudHlwZXMudHlwZV9hdHRyKTsgfQoKCQkJCWFfYXR0ciA9ICQuaXNBcnJheShhX2F0dHIpID8gYV9hdHRyIDogWyBdOwoKCQkJCWlmKCFpc19jYWxsYmFjaykgewoJCQkJCWlmKHMueG1sX2RhdGEuZ2V0X2luY2x1ZGVfcHJlYW1ibGUpIHsKCQkJCQkJcmVzdWx0ICs9ICc8JyArICc/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8nICsgJz4nOwoJCQkJCX0KCQkJCQlyZXN1bHQgKz0gIjxyb290PiI7CgkJCQl9CgkJCQlvYmouZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJcmVzdWx0ICs9ICI8aXRlbSI7CgkJCQkJbGkgPSAkKHRoaXMpOwoJCQkJCSQuZWFjaChsaV9hdHRyLCBmdW5jdGlvbiAoaSwgdikgewoJCQkJCQl2YXIgdCA9IGxpLmF0dHIodik7CgkJCQkJCWlmKCFzLnhtbF9kYXRhLmdldF9za2lwX2VtcHR5IHx8IHR5cGVvZiB0ICE9PSAidW5kZWZpbmVkIikgewoJCQkJCQkJcmVzdWx0ICs9ICIgIiArIHYgKyAiPVwiIiArIGVzY2FwZV94bWwoKCIgIiArICh0IHx8ICIiKSkucmVwbGFjZSgvIGpzdHJlZVteIF0qL2lnLCcnKS5yZXBsYWNlKC9ccyskL2lnLCIgIikucmVwbGFjZSgvXiAvLCIiKS5yZXBsYWNlKC8gJC8sIiIpKSArICJcIiI7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCQlpZihsaS5oYXNDbGFzcygianN0cmVlLW9wZW4iKSkgeyByZXN1bHQgKz0gIiBzdGF0ZT1cIm9wZW5cIiI7IH0KCQkJCQlpZihsaS5oYXNDbGFzcygianN0cmVlLWNsb3NlZCIpKSB7IHJlc3VsdCArPSAiIHN0YXRlPVwiY2xvc2VkXCIiOyB9CgkJCQkJaWYodHAgPT09ICJmbGF0IikgeyByZXN1bHQgKz0gIiBwYXJlbnRfaWQ9XCIiICsgZXNjYXBlX3htbChpc19jYWxsYmFjaykgKyAiXCIiOyB9CgkJCQkJcmVzdWx0ICs9ICI+IjsKCQkJCQlyZXN1bHQgKz0gIjxjb250ZW50PiI7CgkJCQkJYSA9IGxpLmNoaWxkcmVuKCJhIik7CgkJCQkJYS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJdG1wMSA9ICQodGhpcyk7CgkJCQkJCWxhbmcgPSBmYWxzZTsKCQkJCQkJcmVzdWx0ICs9ICI8bmFtZSI7CgkJCQkJCWlmKCQuaW5BcnJheSgibGFuZ3VhZ2VzIiwgcy5wbHVnaW5zKSAhPT0gLTEpIHsKCQkJCQkJCSQuZWFjaChzLmxhbmd1YWdlcywgZnVuY3Rpb24gKGssIHopIHsKCQkJCQkJCQlpZih0bXAxLmhhc0NsYXNzKHopKSB7IHJlc3VsdCArPSAiIGxhbmc9XCIiICsgZXNjYXBlX3htbCh6KSArICJcIiI7IGxhbmcgPSB6OyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJCX0pOwoJCQkJCQl9CgkJCQkJCWlmKGFfYXR0ci5sZW5ndGgpIHsKCQkJCQkJCSQuZWFjaChhX2F0dHIsIGZ1bmN0aW9uIChrLCB6KSB7CgkJCQkJCQkJdmFyIHQgPSB0bXAxLmF0dHIoeik7CgkJCQkJCQkJaWYoIXMueG1sX2RhdGEuZ2V0X3NraXBfZW1wdHkgfHwgdHlwZW9mIHQgIT09ICJ1bmRlZmluZWQiKSB7CgkJCQkJCQkJCXJlc3VsdCArPSAiICIgKyB6ICsgIj1cIiIgKyBlc2NhcGVfeG1sKCgiICIgKyB0IHx8ICIiKS5yZXBsYWNlKC8ganN0cmVlW14gXSovaWcsJycpLnJlcGxhY2UoL1xzKyQvaWcsIiAiKS5yZXBsYWNlKC9eIC8sIiIpLnJlcGxhY2UoLyAkLywiIikpICsgIlwiIjsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJCQkJfQoJCQkJCQlpZih0bXAxLmNoaWxkcmVuKCJpbnMiKS5nZXQoMCkuY2xhc3NOYW1lLnJlcGxhY2UoL2pzdHJlZVteIF0qfCQvaWcsJycpLnJlcGxhY2UoL15ccyskL2lnLCIiKS5sZW5ndGgpIHsKCQkJCQkJCXJlc3VsdCArPSAnIGljb249IicgKyBlc2NhcGVfeG1sKHRtcDEuY2hpbGRyZW4oImlucyIpLmdldCgwKS5jbGFzc05hbWUucmVwbGFjZSgvanN0cmVlW14gXSp8JC9pZywnJykucmVwbGFjZSgvXHMrJC9pZywiICIpLnJlcGxhY2UoL14gLywiIikucmVwbGFjZSgvICQvLCIiKSkgKyAnIic7CgkJCQkJCX0KCQkJCQkJaWYodG1wMS5jaGlsZHJlbigiaW5zIikuZ2V0KDApLnN0eWxlLmJhY2tncm91bmRJbWFnZS5sZW5ndGgpIHsKCQkJCQkJCXJlc3VsdCArPSAnIGljb249IicgKyBlc2NhcGVfeG1sKHRtcDEuY2hpbGRyZW4oImlucyIpLmdldCgwKS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UucmVwbGFjZSgidXJsKCIsIiIpLnJlcGxhY2UoIikiLCIiKS5yZXBsYWNlKC8nL2lnLCIiKS5yZXBsYWNlKC8iL2lnLCIiKSkgKyAnIic7CgkJCQkJCX0KCQkJCQkJcmVzdWx0ICs9ICI+IjsKCQkJCQkJcmVzdWx0ICs9ICI8IVtDREFUQVsiICsgX3RoaXMuZ2V0X3RleHQodG1wMSwgbGFuZykgKyAiXV0+IjsKCQkJCQkJcmVzdWx0ICs9ICI8L25hbWU+IjsKCQkJCQl9KTsKCQkJCQlyZXN1bHQgKz0gIjwvY29udGVudD4iOwoJCQkJCXRtcDIgPSBsaVswXS5pZCB8fCB0cnVlOwoJCQkJCWxpID0gbGkuZmluZCgiPiB1bCA+IGxpIik7CgkJCQkJaWYobGkubGVuZ3RoKSB7IHRtcDIgPSBfdGhpcy5nZXRfeG1sKHRwLCBsaSwgbGlfYXR0ciwgYV9hdHRyLCB0bXAyKTsgfQoJCQkJCWVsc2UgeyB0bXAyID0gIiI7IH0KCQkJCQlpZih0cCA9PSAibmVzdCIpIHsgcmVzdWx0ICs9IHRtcDI7IH0KCQkJCQlyZXN1bHQgKz0gIjwvaXRlbT4iOwoJCQkJCWlmKHRwID09ICJmbGF0IikgeyByZXN1bHQgKz0gdG1wMjsgfQoJCQkJfSk7CgkJCQlpZighaXNfY2FsbGJhY2spIHsgcmVzdWx0ICs9ICI8L3Jvb3Q+IjsgfQoJCQkJcmV0dXJuIHJlc3VsdDsKCQkJfQoJCX0KCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgc2VhcmNoIHBsdWdpbgogKiBFbmFibGVzIGJvdGggc3luYyBhbmQgYXN5bmMgc2VhcmNoIG9uIHRoZSB0cmVlCiAqIERPRVMgTk9UIFdPUksgV0lUSCBKU09OIFBST0dSRVNTSVZFIFJFTkRFUgogKi8KKGZ1bmN0aW9uICgkKSB7CglpZigkKCkuanF1ZXJ5LnNwbGl0KCcuJylbMV0gPj0gOCkgewoJCSQuZXhwclsnOiddLmpzdHJlZV9jb250YWlucyA9ICQuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oc2VhcmNoKSB7CgkJCXJldHVybiBmdW5jdGlvbihhKSB7CgkJCQlyZXR1cm4gKGEudGV4dENvbnRlbnQgfHwgYS5pbm5lclRleHQgfHwgIiIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSk+PTA7CgkJCX07CgkJfSk7CgkJJC5leHByWyc6J10uanN0cmVlX3RpdGxlX2NvbnRhaW5zID0gJC5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbihzZWFyY2gpIHsKCQkJcmV0dXJuIGZ1bmN0aW9uKGEpIHsKCQkJCXJldHVybiAoYS5nZXRBdHRyaWJ1dGUoInRpdGxlIikgfHwgIiIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSk+PTA7CgkJCX07CgkJfSk7Cgl9CgllbHNlIHsKCQkkLmV4cHJbJzonXS5qc3RyZWVfY29udGFpbnMgPSBmdW5jdGlvbihhLGksbSl7CgkJCXJldHVybiAoYS50ZXh0Q29udGVudCB8fCBhLmlubmVyVGV4dCB8fCAiIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKG1bM10udG9Mb3dlckNhc2UoKSk+PTA7CgkJfTsKCQkkLmV4cHJbJzonXS5qc3RyZWVfdGl0bGVfY29udGFpbnMgPSBmdW5jdGlvbihhLGksbSkgewoJCQlyZXR1cm4gKGEuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobVszXS50b0xvd2VyQ2FzZSgpKT49MDsKCQl9OwoJfQoJJC5qc3RyZWUucGx1Z2luKCJzZWFyY2giLCB7CgkJX19pbml0IDogZnVuY3Rpb24gKCkgewoJCQl0aGlzLmRhdGEuc2VhcmNoLnN0ciA9ICIiOwoJCQl0aGlzLmRhdGEuc2VhcmNoLnJlc3VsdCA9ICQoKTsKCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkuc2VhcmNoLnNob3dfb25seV9tYXRjaGVzKSB7CgkJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJCS5iaW5kKCJzZWFyY2guanN0cmVlIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJJCh0aGlzKS5jaGlsZHJlbigidWwiKS5maW5kKCJsaSIpLmhpZGUoKS5yZW1vdmVDbGFzcygianN0cmVlLWxhc3QiKTsKCQkJCQkJZGF0YS5yc2x0Lm5vZGVzLnBhcmVudHNVbnRpbCgiLmpzdHJlZSIpLmFkZEJhY2soKS5zaG93KCkKCQkJCQkJCS5maWx0ZXIoInVsIikuZWFjaChmdW5jdGlvbiAoKSB7ICQodGhpcykuY2hpbGRyZW4oImxpOnZpc2libGUiKS5lcSgtMSkuYWRkQ2xhc3MoImpzdHJlZS1sYXN0Iik7IH0pOwoJCQkJCX0pCgkJCQkJLmJpbmQoImNsZWFyX3NlYXJjaC5qc3RyZWUiLCBmdW5jdGlvbiAoKSB7CgkJCQkJCSQodGhpcykuY2hpbGRyZW4oInVsIikuZmluZCgibGkiKS5jc3MoImRpc3BsYXkiLCIiKS5lbmQoKS5lbmQoKS5qc3RyZWUoImNsZWFuX25vZGUiLCAtMSk7CgkJCQkJfSk7CgkJCX0KCQl9LAoJCWRlZmF1bHRzIDogewoJCQlhamF4IDogZmFsc2UsCgkJCXNlYXJjaF9tZXRob2QgOiAianN0cmVlX2NvbnRhaW5zIiwgLy8gZm9yIGNhc2UgaW5zZW5zaXRpdmUgLSBqc3RyZWVfY29udGFpbnMKCQkJc2hvd19vbmx5X21hdGNoZXMgOiBmYWxzZQoJCX0sCgkJX2ZuIDogewoJCQlzZWFyY2ggOiBmdW5jdGlvbiAoc3RyLCBza2lwX2FzeW5jKSB7CgkJCQlpZigkLnRyaW0oc3RyKSA9PT0gIiIpIHsgdGhpcy5jbGVhcl9zZWFyY2goKTsgcmV0dXJuOyB9CgkJCQl2YXIgcyA9IHRoaXMuZ2V0X3NldHRpbmdzKCkuc2VhcmNoLAoJCQkJCXQgPSB0aGlzLAoJCQkJCWVycm9yX2Z1bmMgPSBmdW5jdGlvbiAoKSB7IH0sCgkJCQkJc3VjY2Vzc19mdW5jID0gZnVuY3Rpb24gKCkgeyB9OwoJCQkJdGhpcy5kYXRhLnNlYXJjaC5zdHIgPSBzdHI7CgoJCQkJaWYoIXNraXBfYXN5bmMgJiYgcy5hamF4ICE9PSBmYWxzZSAmJiB0aGlzLmdldF9jb250YWluZXJfdWwoKS5maW5kKCJsaS5qc3RyZWUtY2xvc2VkOm5vdCg6aGFzKHVsKSk6ZXEoMCkiKS5sZW5ndGggPiAwKSB7CgkJCQkJdGhpcy5zZWFyY2guc3VwcmVzc19jYWxsYmFjayA9IHRydWU7CgkJCQkJZXJyb3JfZnVuYyA9IGZ1bmN0aW9uICgpIHsgfTsKCQkJCQlzdWNjZXNzX2Z1bmMgPSBmdW5jdGlvbiAoZCwgdCwgeCkgewoJCQkJCQl2YXIgc2YgPSB0aGlzLmdldF9zZXR0aW5ncygpLnNlYXJjaC5hamF4LnN1Y2Nlc3M7CgkJCQkJCWlmKHNmKSB7IGQgPSBzZi5jYWxsKHRoaXMsZCx0LHgpIHx8IGQ7IH0KCQkJCQkJdGhpcy5kYXRhLnNlYXJjaC50b19vcGVuID0gZDsKCQkJCQkJdGhpcy5fc2VhcmNoX29wZW4oKTsKCQkJCQl9OwoJCQkJCXMuYWpheC5jb250ZXh0ID0gdGhpczsKCQkJCQlzLmFqYXguZXJyb3IgPSBlcnJvcl9mdW5jOwoJCQkJCXMuYWpheC5zdWNjZXNzID0gc3VjY2Vzc19mdW5jOwoJCQkJCWlmKCQuaXNGdW5jdGlvbihzLmFqYXgudXJsKSkgeyBzLmFqYXgudXJsID0gcy5hamF4LnVybC5jYWxsKHRoaXMsIHN0cik7IH0KCQkJCQlpZigkLmlzRnVuY3Rpb24ocy5hamF4LmRhdGEpKSB7IHMuYWpheC5kYXRhID0gcy5hamF4LmRhdGEuY2FsbCh0aGlzLCBzdHIpOyB9CgkJCQkJaWYoIXMuYWpheC5kYXRhKSB7IHMuYWpheC5kYXRhID0geyAic2VhcmNoX3N0cmluZyIgOiBzdHIgfTsgfQoJCQkJCWlmKCFzLmFqYXguZGF0YVR5cGUgfHwgL15qc29uLy5leGVjKHMuYWpheC5kYXRhVHlwZSkpIHsgcy5hamF4LmRhdGFUeXBlID0gImpzb24iOyB9CgkJCQkJJC5hamF4KHMuYWpheCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJaWYodGhpcy5kYXRhLnNlYXJjaC5yZXN1bHQubGVuZ3RoKSB7IHRoaXMuY2xlYXJfc2VhcmNoKCk7IH0KCQkJCXRoaXMuZGF0YS5zZWFyY2gucmVzdWx0ID0gdGhpcy5nZXRfY29udGFpbmVyKCkuZmluZCgiYSIgKyAodGhpcy5kYXRhLmxhbmd1YWdlcyA/ICIuIiArIHRoaXMuZ2V0X2xhbmcoKSA6ICIiICkgKyAiOiIgKyAocy5zZWFyY2hfbWV0aG9kKSArICIoIiArIHRoaXMuZGF0YS5zZWFyY2guc3RyICsgIikiKTsKCQkJCXRoaXMuZGF0YS5zZWFyY2gucmVzdWx0LmFkZENsYXNzKCJqc3RyZWUtc2VhcmNoIikucGFyZW50KCkucGFyZW50cygiLmpzdHJlZS1jbG9zZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQl0Lm9wZW5fbm9kZSh0aGlzLCBmYWxzZSwgdHJ1ZSk7CgkJCQl9KTsKCQkJCXRoaXMuX19jYWxsYmFjayh7IG5vZGVzIDogdGhpcy5kYXRhLnNlYXJjaC5yZXN1bHQsIHN0ciA6IHN0ciB9KTsKCQkJfSwKCQkJY2xlYXJfc2VhcmNoIDogZnVuY3Rpb24gKHN0cikgewoJCQkJdGhpcy5kYXRhLnNlYXJjaC5yZXN1bHQucmVtb3ZlQ2xhc3MoImpzdHJlZS1zZWFyY2giKTsKCQkJCXRoaXMuX19jYWxsYmFjayh0aGlzLmRhdGEuc2VhcmNoLnJlc3VsdCk7CgkJCQl0aGlzLmRhdGEuc2VhcmNoLnJlc3VsdCA9ICQoKTsKCQkJfSwKCQkJX3NlYXJjaF9vcGVuIDogZnVuY3Rpb24gKGlzX2NhbGxiYWNrKSB7CgkJCQl2YXIgX3RoaXMgPSB0aGlzLAoJCQkJCWRvbmUgPSB0cnVlLAoJCQkJCWN1cnJlbnQgPSBbXSwKCQkJCQlyZW1haW5pbmcgPSBbXTsKCQkJCWlmKHRoaXMuZGF0YS5zZWFyY2gudG9fb3Blbi5sZW5ndGgpIHsKCQkJCQkkLmVhY2godGhpcy5kYXRhLnNlYXJjaC50b19vcGVuLCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQkJCWlmKHZhbCA9PSAiIyIpIHsgcmV0dXJuIHRydWU7IH0KCQkJCQkJaWYoJCh2YWwpLmxlbmd0aCAmJiAkKHZhbCkuaXMoIi5qc3RyZWUtY2xvc2VkIikpIHsgY3VycmVudC5wdXNoKHZhbCk7IH0KCQkJCQkJZWxzZSB7IHJlbWFpbmluZy5wdXNoKHZhbCk7IH0KCQkJCQl9KTsKCQkJCQlpZihjdXJyZW50Lmxlbmd0aCkgewoJCQkJCQl0aGlzLmRhdGEuc2VhcmNoLnRvX29wZW4gPSByZW1haW5pbmc7CgkJCQkJCSQuZWFjaChjdXJyZW50LCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQkJCQlfdGhpcy5vcGVuX25vZGUodmFsLCBmdW5jdGlvbiAoKSB7IF90aGlzLl9zZWFyY2hfb3Blbih0cnVlKTsgfSk7CgkJCQkJCX0pOwoJCQkJCQlkb25lID0gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQkJaWYoZG9uZSkgeyB0aGlzLnNlYXJjaCh0aGlzLmRhdGEuc2VhcmNoLnN0ciwgdHJ1ZSk7IH0KCQkJfQoJCX0KCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgY29udGV4dG1lbnUgcGx1Z2luCiAqLwooZnVuY3Rpb24gKCQpIHsKCSQudmFrYXRhLmNvbnRleHQgPSB7CgkJaGlkZV9vbl9tb3VzZWxlYXZlIDogZmFsc2UsCgoJCWNudAkJOiAkKCI8ZGl2IGlkPSd2YWthdGEtY29udGV4dG1lbnUnIC8+IiksCgkJdmlzCQk6IGZhbHNlLAoJCXRndAkJOiBmYWxzZSwKCQlwYXIJCTogZmFsc2UsCgkJZnVuYwk6IGZhbHNlLAoJCWRhdGEJOiBmYWxzZSwKCQlydGwJCTogZmFsc2UsCgkJc2hvdwk6IGZ1bmN0aW9uIChzLCB0LCB4LCB5LCBkLCBwLCBydGwpIHsKCQkJJC52YWthdGEuY29udGV4dC5ydGwgPSAhIXJ0bDsKCQkJdmFyIGh0bWwgPSAkLnZha2F0YS5jb250ZXh0LnBhcnNlKHMpLCBoLCB3OwoJCQlpZighaHRtbCkgeyByZXR1cm47IH0KCQkJJC52YWthdGEuY29udGV4dC52aXMgPSB0cnVlOwoJCQkkLnZha2F0YS5jb250ZXh0LnRndCA9IHQ7CgkJCSQudmFrYXRhLmNvbnRleHQucGFyID0gcCB8fCB0IHx8IG51bGw7CgkJCSQudmFrYXRhLmNvbnRleHQuZGF0YSA9IGQgfHwgbnVsbDsKCQkJJC52YWthdGEuY29udGV4dC5jbnQKCQkJCS5odG1sKGh0bWwpCgkJCQkuY3NzKHsgInZpc2liaWxpdHkiIDogImhpZGRlbiIsICJkaXNwbGF5IiA6ICJibG9jayIsICJsZWZ0IiA6IDAsICJ0b3AiIDogMCB9KTsKCgkJCWlmKCQudmFrYXRhLmNvbnRleHQuaGlkZV9vbl9tb3VzZWxlYXZlKSB7CgkJCQkkLnZha2F0YS5jb250ZXh0LmNudAoJCQkJCS5vbmUoIm1vdXNlbGVhdmUiLCBmdW5jdGlvbihlKSB7ICQudmFrYXRhLmNvbnRleHQuaGlkZSgpOyB9KTsKCQkJfQoKCQkJaCA9ICQudmFrYXRhLmNvbnRleHQuY250LmhlaWdodCgpOwoJCQl3ID0gJC52YWthdGEuY29udGV4dC5jbnQud2lkdGgoKTsKCQkJaWYoeCArIHcgPiAkKGRvY3VtZW50KS53aWR0aCgpKSB7CgkJCQl4ID0gJChkb2N1bWVudCkud2lkdGgoKSAtICh3ICsgNSk7CgkJCQkkLnZha2F0YS5jb250ZXh0LmNudC5maW5kKCJsaSA+IHVsIikuYWRkQ2xhc3MoInJpZ2h0Iik7CgkJCX0KCQkJaWYoeSArIGggPiAkKGRvY3VtZW50KS5oZWlnaHQoKSkgewoJCQkJeSA9IHkgLSAoaCArIHRbMF0ub2Zmc2V0SGVpZ2h0KTsKCQkJCSQudmFrYXRhLmNvbnRleHQuY250LmZpbmQoImxpID4gdWwiKS5hZGRDbGFzcygiYm90dG9tIik7CgkJCX0KCgkJCSQudmFrYXRhLmNvbnRleHQuY250CgkJCQkuY3NzKHsgImxlZnQiIDogeCwgInRvcCIgOiB5IH0pCgkJCQkuZmluZCgibGk6aGFzKHVsKSIpCgkJCQkJLmJpbmQoIm1vdXNlZW50ZXIiLCBmdW5jdGlvbiAoZSkgewoJCQkJCQl2YXIgdyA9ICQoZG9jdW1lbnQpLndpZHRoKCksCgkJCQkJCQloID0gJChkb2N1bWVudCkuaGVpZ2h0KCksCgkJCQkJCQl1bCA9ICQodGhpcykuY2hpbGRyZW4oInVsIikuc2hvdygpOwoJCQkJCQlpZih3ICE9PSAkKGRvY3VtZW50KS53aWR0aCgpKSB7IHVsLnRvZ2dsZUNsYXNzKCJyaWdodCIpOyB9CgkJCQkJCWlmKGggIT09ICQoZG9jdW1lbnQpLmhlaWdodCgpKSB7IHVsLnRvZ2dsZUNsYXNzKCJib3R0b20iKTsgfQoJCQkJCX0pCgkJCQkJLmJpbmQoIm1vdXNlbGVhdmUiLCBmdW5jdGlvbiAoZSkgewoJCQkJCQkkKHRoaXMpLmNoaWxkcmVuKCJ1bCIpLmhpZGUoKTsKCQkJCQl9KQoJCQkJCS5lbmQoKQoJCQkJLmNzcyh7ICJ2aXNpYmlsaXR5IiA6ICJ2aXNpYmxlIiB9KQoJCQkJLnNob3coKTsKCQkJJChkb2N1bWVudCkudHJpZ2dlckhhbmRsZXIoImNvbnRleHRfc2hvdy52YWthdGEiKTsKCQl9LAoJCWhpZGUJOiBmdW5jdGlvbiAoKSB7CgkJCSQudmFrYXRhLmNvbnRleHQudmlzID0gZmFsc2U7CgkJCSQudmFrYXRhLmNvbnRleHQuY250LmF0dHIoImNsYXNzIiwiIikuY3NzKHsgInZpc2liaWxpdHkiIDogImhpZGRlbiIgfSk7CgkJCSQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJjb250ZXh0X2hpZGUudmFrYXRhIik7CgkJfSwKCQlwYXJzZQk6IGZ1bmN0aW9uIChzLCBpc19jYWxsYmFjaykgewoJCQlpZighcykgeyByZXR1cm4gZmFsc2U7IH0KCQkJdmFyIHN0ciA9ICIiLAoJCQkJdG1wID0gZmFsc2UsCgkJCQl3YXNfc2VwID0gdHJ1ZTsKCQkJaWYoIWlzX2NhbGxiYWNrKSB7ICQudmFrYXRhLmNvbnRleHQuZnVuYyA9IHt9OyB9CgkJCXN0ciArPSAiPHVsPiI7CgkJCSQuZWFjaChzLCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQlpZighdmFsKSB7IHJldHVybiB0cnVlOyB9CgkJCQkkLnZha2F0YS5jb250ZXh0LmZ1bmNbaV0gPSB2YWwuYWN0aW9uOwoJCQkJaWYoIXdhc19zZXAgJiYgdmFsLnNlcGFyYXRvcl9iZWZvcmUpIHsKCQkJCQlzdHIgKz0gIjxsaSBjbGFzcz0ndmFrYXRhLXNlcGFyYXRvciB2YWthdGEtc2VwYXJhdG9yLWJlZm9yZSc+PC9saT4iOwoJCQkJfQoJCQkJd2FzX3NlcCA9IGZhbHNlOwoJCQkJc3RyICs9ICI8bGkgY2xhc3M9JyIgKyAodmFsLl9jbGFzcyB8fCAiIikgKyAodmFsLl9kaXNhYmxlZCA/ICIganN0cmVlLWNvbnRleHRtZW51LWRpc2FibGVkICIgOiAiIikgKyAiJz48aW5zICI7CgkJCQlpZih2YWwuaWNvbiAmJiB2YWwuaWNvbi5pbmRleE9mKCIvIikgPT09IC0xKSB7IHN0ciArPSAiIGNsYXNzPSciICsgdmFsLmljb24gKyAiJyAiOyB9CgkJCQlpZih2YWwuaWNvbiAmJiB2YWwuaWNvbi5pbmRleE9mKCIvIikgIT09IC0xKSB7IHN0ciArPSAiIHN0eWxlPSdiYWNrZ3JvdW5kOnVybCgiICsgdmFsLmljb24gKyAiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDsnICI7IH0KCQkJCXN0ciArPSAiPiYjMTYwOzwvaW5zPjxhIGhyZWY9JyMnIHJlbD0nIiArIGkgKyAiJz4iOwoJCQkJaWYodmFsLnN1Ym1lbnUpIHsKCQkJCQlzdHIgKz0gIjxzcGFuIHN0eWxlPSdmbG9hdDoiICsgKCQudmFrYXRhLmNvbnRleHQucnRsID8gImxlZnQiIDogInJpZ2h0IikgKyAiOyc+JnJhcXVvOzwvc3Bhbj4iOwoJCQkJfQoJCQkJc3RyICs9IHZhbC5sYWJlbCArICI8L2E+IjsKCQkJCWlmKHZhbC5zdWJtZW51KSB7CgkJCQkJdG1wID0gJC52YWthdGEuY29udGV4dC5wYXJzZSh2YWwuc3VibWVudSwgdHJ1ZSk7CgkJCQkJaWYodG1wKSB7IHN0ciArPSB0bXA7IH0KCQkJCX0KCQkJCXN0ciArPSAiPC9saT4iOwoJCQkJaWYodmFsLnNlcGFyYXRvcl9hZnRlcikgewoJCQkJCXN0ciArPSAiPGxpIGNsYXNzPSd2YWthdGEtc2VwYXJhdG9yIHZha2F0YS1zZXBhcmF0b3ItYWZ0ZXInPjwvbGk+IjsKCQkJCQl3YXNfc2VwID0gdHJ1ZTsKCQkJCX0KCQkJfSk7CgkJCXN0ciA9IHN0ci5yZXBsYWNlKC88bGkgY2xhc3NcPSd2YWthdGEtc2VwYXJhdG9yIHZha2F0YS1zZXBhcmF0b3ItYWZ0ZXInXD48XC9saVw+JC8sIiIpOwoJCQlzdHIgKz0gIjwvdWw+IjsKCQkJJChkb2N1bWVudCkudHJpZ2dlckhhbmRsZXIoImNvbnRleHRfcGFyc2UudmFrYXRhIik7CgkJCXJldHVybiBzdHIubGVuZ3RoID4gMTAgPyBzdHIgOiBmYWxzZTsKCQl9LAoJCWV4ZWMJOiBmdW5jdGlvbiAoaSkgewoJCQlpZigkLmlzRnVuY3Rpb24oJC52YWthdGEuY29udGV4dC5mdW5jW2ldKSkgewoJCQkJLy8gaWYgaXMgc3RyaW5nIC0gZXZhbCBhbmQgY2FsbCBpdCEKCQkJCSQudmFrYXRhLmNvbnRleHQuZnVuY1tpXS5jYWxsKCQudmFrYXRhLmNvbnRleHQuZGF0YSwgJC52YWthdGEuY29udGV4dC5wYXIpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJZWxzZSB7IHJldHVybiBmYWxzZTsgfQoJCX0KCX07CgkkKGZ1bmN0aW9uICgpIHsKCQl2YXIgY3NzX3N0cmluZyA9ICcnICsKCQkJJyN2YWthdGEtY29udGV4dG1lbnUgeyBkaXNwbGF5OmJsb2NrOyB2aXNpYmlsaXR5OmhpZGRlbjsgbGVmdDowOyB0b3A6LTIwMHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgbWluLXdpZHRoOjE4MHB4OyBiYWNrZ3JvdW5kOiNlYmViZWI7IGJvcmRlcjoxcHggc29saWQgc2lsdmVyOyB6LWluZGV4OjEwMDAwOyAqd2lkdGg6MTgwcHg7IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IHVsIHsgbWluLXdpZHRoOjE4MHB4OyAqd2lkdGg6MTgwcHg7IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IHVsLCAjdmFrYXRhLWNvbnRleHRtZW51IGxpIHsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgbGlzdC1zdHlsZS10eXBlOm5vbmU7IGRpc3BsYXk6YmxvY2s7IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IGxpIHsgbGluZS1oZWlnaHQ6MjBweDsgbWluLWhlaWdodDoyMHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgcGFkZGluZzowcHg7IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IGxpIGEgeyBwYWRkaW5nOjFweCA2cHg7IGxpbmUtaGVpZ2h0OjE3cHg7IGRpc3BsYXk6YmxvY2s7IHRleHQtZGVjb3JhdGlvbjpub25lOyBtYXJnaW46MXB4IDFweCAwIDFweDsgfSAnICsKCQkJJyN2YWthdGEtY29udGV4dG1lbnUgbGkgaW5zIHsgZmxvYXQ6bGVmdDsgd2lkdGg6MTZweDsgaGVpZ2h0OjE2cHg7IHRleHQtZGVjb3JhdGlvbjpub25lOyBtYXJnaW4tcmlnaHQ6MnB4OyB9ICcgKwoJCQknI3Zha2F0YS1jb250ZXh0bWVudSBsaSBhOmhvdmVyLCAjdmFrYXRhLWNvbnRleHRtZW51IGxpLnZha2F0YS1ob3ZlciA+IGEgeyBiYWNrZ3JvdW5kOmdyYXk7IGNvbG9yOndoaXRlOyB9ICcgKwoJCQknI3Zha2F0YS1jb250ZXh0bWVudSBsaSB1bCB7IGRpc3BsYXk6bm9uZTsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDotMnB4OyBsZWZ0OjEwMCU7IGJhY2tncm91bmQ6I2ViZWJlYjsgYm9yZGVyOjFweCBzb2xpZCBncmF5OyB9ICcgKwoJCQknI3Zha2F0YS1jb250ZXh0bWVudSAucmlnaHQgeyByaWdodDoxMDAlOyBsZWZ0OmF1dG87IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IC5ib3R0b20geyBib3R0b206LTFweDsgdG9wOmF1dG87IH0gJyArCgkJCScjdmFrYXRhLWNvbnRleHRtZW51IGxpLnZha2F0YS1zZXBhcmF0b3IgeyBtaW4taGVpZ2h0OjA7IGhlaWdodDoxcHg7IGxpbmUtaGVpZ2h0OjFweDsgZm9udC1zaXplOjFweDsgb3ZlcmZsb3c6aGlkZGVuOyBtYXJnaW46MCAycHg7IGJhY2tncm91bmQ6c2lsdmVyOyAvKiBib3JkZXItdG9wOjFweCBzb2xpZCAjZmVmZWZlOyAqLyBwYWRkaW5nOjA7IH0gJzsKCQkkLnZha2F0YS5jc3MuYWRkX3NoZWV0KHsgc3RyIDogY3NzX3N0cmluZywgdGl0bGUgOiAidmFrYXRhIiB9KTsKCQkkLnZha2F0YS5jb250ZXh0LmNudAoJCQkuZGVsZWdhdGUoImEiLCJjbGljayIsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgfSkKCQkJLmRlbGVnYXRlKCJhIiwibW91c2V1cCIsIGZ1bmN0aW9uIChlKSB7CgkJCQlpZighJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygianN0cmVlLWNvbnRleHRtZW51LWRpc2FibGVkIikgJiYgJC52YWthdGEuY29udGV4dC5leGVjKCQodGhpcykuYXR0cigicmVsIikpKSB7CgkJCQkJJC52YWthdGEuY29udGV4dC5oaWRlKCk7CgkJCQl9CgkJCQllbHNlIHsgJCh0aGlzKS5ibHVyKCk7IH0KCQkJfSkKCQkJLmRlbGVnYXRlKCJhIiwibW91c2VvdmVyIiwgZnVuY3Rpb24gKCkgewoJCQkJJC52YWthdGEuY29udGV4dC5jbnQuZmluZCgiLnZha2F0YS1ob3ZlciIpLnJlbW92ZUNsYXNzKCJ2YWthdGEtaG92ZXIiKTsKCQkJfSkKCQkJLmFwcGVuZFRvKCJib2R5Iik7CgkJJChkb2N1bWVudCkuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24gKGUpIHsgaWYoJC52YWthdGEuY29udGV4dC52aXMgJiYgISQuY29udGFpbnMoJC52YWthdGEuY29udGV4dC5jbnRbMF0sIGUudGFyZ2V0KSkgeyAkLnZha2F0YS5jb250ZXh0LmhpZGUoKTsgfSB9KTsKCQlpZih0eXBlb2YgJC5ob3RrZXlzICE9PSAidW5kZWZpbmVkIikgewoJCQkkKGRvY3VtZW50KQoJCQkJLmJpbmQoImtleWRvd24iLCAidXAiLCBmdW5jdGlvbiAoZSkgewoJCQkJCWlmKCQudmFrYXRhLmNvbnRleHQudmlzKSB7CgkJCQkJCXZhciBvID0gJC52YWthdGEuY29udGV4dC5jbnQuZmluZCgidWw6dmlzaWJsZSIpLmxhc3QoKS5jaGlsZHJlbigiLnZha2F0YS1ob3ZlciIpLnJlbW92ZUNsYXNzKCJ2YWthdGEtaG92ZXIiKS5wcmV2QWxsKCJsaTpub3QoLnZha2F0YS1zZXBhcmF0b3IpIikuZmlyc3QoKTsKCQkJCQkJaWYoIW8ubGVuZ3RoKSB7IG8gPSAkLnZha2F0YS5jb250ZXh0LmNudC5maW5kKCJ1bDp2aXNpYmxlIikubGFzdCgpLmNoaWxkcmVuKCJsaTpub3QoLnZha2F0YS1zZXBhcmF0b3IpIikubGFzdCgpOyB9CgkJCQkJCW8uYWRkQ2xhc3MoInZha2F0YS1ob3ZlciIpOwoJCQkJCQllLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwoJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJfQoJCQkJfSkKCQkJCS5iaW5kKCJrZXlkb3duIiwgImRvd24iLCBmdW5jdGlvbiAoZSkgewoJCQkJCWlmKCQudmFrYXRhLmNvbnRleHQudmlzKSB7CgkJCQkJCXZhciBvID0gJC52YWthdGEuY29udGV4dC5jbnQuZmluZCgidWw6dmlzaWJsZSIpLmxhc3QoKS5jaGlsZHJlbigiLnZha2F0YS1ob3ZlciIpLnJlbW92ZUNsYXNzKCJ2YWthdGEtaG92ZXIiKS5uZXh0QWxsKCJsaTpub3QoLnZha2F0YS1zZXBhcmF0b3IpIikuZmlyc3QoKTsKCQkJCQkJaWYoIW8ubGVuZ3RoKSB7IG8gPSAkLnZha2F0YS5jb250ZXh0LmNudC5maW5kKCJ1bDp2aXNpYmxlIikubGFzdCgpLmNoaWxkcmVuKCJsaTpub3QoLnZha2F0YS1zZXBhcmF0b3IpIikuZmlyc3QoKTsgfQoJCQkJCQlvLmFkZENsYXNzKCJ2YWthdGEtaG92ZXIiKTsKCQkJCQkJZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCX0KCQkJCX0pCgkJCQkuYmluZCgia2V5ZG93biIsICJyaWdodCIsIGZ1bmN0aW9uIChlKSB7CgkJCQkJaWYoJC52YWthdGEuY29udGV4dC52aXMpIHsKCQkJCQkJJC52YWthdGEuY29udGV4dC5jbnQuZmluZCgiLnZha2F0YS1ob3ZlciIpLmNoaWxkcmVuKCJ1bCIpLnNob3coKS5jaGlsZHJlbigibGk6bm90KC52YWthdGEtc2VwYXJhdG9yKSIpLnJlbW92ZUNsYXNzKCJ2YWthdGEtaG92ZXIiKS5maXJzdCgpLmFkZENsYXNzKCJ2YWthdGEtaG92ZXIiKTsKCQkJCQkJZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCX0KCQkJCX0pCgkJCQkuYmluZCgia2V5ZG93biIsICJsZWZ0IiwgZnVuY3Rpb24gKGUpIHsKCQkJCQlpZigkLnZha2F0YS5jb250ZXh0LnZpcykgewoJCQkJCQkkLnZha2F0YS5jb250ZXh0LmNudC5maW5kKCIudmFrYXRhLWhvdmVyIikuY2hpbGRyZW4oInVsIikuaGlkZSgpLmNoaWxkcmVuKCIudmFrYXRhLXNlcGFyYXRvciIpLnJlbW92ZUNsYXNzKCJ2YWthdGEtaG92ZXIiKTsKCQkJCQkJZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCX0KCQkJCX0pCgkJCQkuYmluZCgia2V5ZG93biIsICJlc2MiLCBmdW5jdGlvbiAoZSkgewoJCQkJCSQudmFrYXRhLmNvbnRleHQuaGlkZSgpOwoJCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCX0pCgkJCQkuYmluZCgia2V5ZG93biIsICJzcGFjZSIsIGZ1bmN0aW9uIChlKSB7CgkJCQkJJC52YWthdGEuY29udGV4dC5jbnQuZmluZCgiLnZha2F0YS1ob3ZlciIpLmxhc3QoKS5jaGlsZHJlbigiYSIpLmNsaWNrKCk7CgkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJfSk7CgkJfQoJfSk7CgoJJC5qc3RyZWUucGx1Z2luKCJjb250ZXh0bWVudSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuZGVsZWdhdGUoImEiLCAiY29udGV4dG1lbnUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWlmKCEkKGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoImpzdHJlZS1sb2FkaW5nIikpIHsKCQkJCQkJCXRoaXMuc2hvd19jb250ZXh0bWVudShlLmN1cnJlbnRUYXJnZXQsIGUucGFnZVgsIGUucGFnZVkpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuZGVsZWdhdGUoImEiLCAiY2xpY2suanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSkgewoJCQkJCQlpZih0aGlzLmRhdGEuY29udGV4dG1lbnUpIHsKCQkJCQkJCSQudmFrYXRhLmNvbnRleHQuaGlkZSgpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiZGVzdHJveS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHsKCQkJCQkJLy8gVE9ETzogbW92ZSB0aGlzIHRvIGRlc2NydWN0IG1ldGhvZAoJCQkJCQlpZih0aGlzLmRhdGEuY29udGV4dG1lbnUpIHsKCQkJCQkJCSQudmFrYXRhLmNvbnRleHQuaGlkZSgpOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpOwoJCQkkKGRvY3VtZW50KS5iaW5kKCJjb250ZXh0X2hpZGUudmFrYXRhIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7IHRoaXMuZGF0YS5jb250ZXh0bWVudSA9IGZhbHNlOyB9LCB0aGlzKSk7CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJc2VsZWN0X25vZGUgOiBmYWxzZSwgLy8gcmVxdWlyZXMgVUkgcGx1Z2luCgkJCXNob3dfYXRfbm9kZSA6IHRydWUsCgkJCWl0ZW1zIDogeyAvLyBDb3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhbiBvYmplY3QgbGlrZSB0aGlzIG9uZQoJCQkJImNyZWF0ZSIgOiB7CgkJCQkJInNlcGFyYXRvcl9iZWZvcmUiCTogZmFsc2UsCgkJCQkJInNlcGFyYXRvcl9hZnRlciIJOiB0cnVlLAoJCQkJCSJsYWJlbCIJCQkJOiAiQ3JlYXRlIiwKCQkJCQkiYWN0aW9uIgkJCTogZnVuY3Rpb24gKG9iaikgeyB0aGlzLmNyZWF0ZShvYmopOyB9CgkJCQl9LAoJCQkJInJlbmFtZSIgOiB7CgkJCQkJInNlcGFyYXRvcl9iZWZvcmUiCTogZmFsc2UsCgkJCQkJInNlcGFyYXRvcl9hZnRlciIJOiBmYWxzZSwKCQkJCQkibGFiZWwiCQkJCTogIlJlbmFtZSIsCgkJCQkJImFjdGlvbiIJCQk6IGZ1bmN0aW9uIChvYmopIHsgdGhpcy5yZW5hbWUob2JqKTsgfQoJCQkJfSwKCQkJCSJyZW1vdmUiIDogewoJCQkJCSJzZXBhcmF0b3JfYmVmb3JlIgk6IGZhbHNlLAoJCQkJCSJpY29uIgkJCQk6IGZhbHNlLAoJCQkJCSJzZXBhcmF0b3JfYWZ0ZXIiCTogZmFsc2UsCgkJCQkJImxhYmVsIgkJCQk6ICJEZWxldGUiLAoJCQkJCSJhY3Rpb24iCQkJOiBmdW5jdGlvbiAob2JqKSB7IGlmKHRoaXMuaXNfc2VsZWN0ZWQob2JqKSkgeyB0aGlzLnJlbW92ZSgpOyB9IGVsc2UgeyB0aGlzLnJlbW92ZShvYmopOyB9IH0KCQkJCX0sCgkJCQkiY2NwIiA6IHsKCQkJCQkic2VwYXJhdG9yX2JlZm9yZSIJOiB0cnVlLAoJCQkJCSJpY29uIgkJCQk6IGZhbHNlLAoJCQkJCSJzZXBhcmF0b3JfYWZ0ZXIiCTogZmFsc2UsCgkJCQkJImxhYmVsIgkJCQk6ICJFZGl0IiwKCQkJCQkiYWN0aW9uIgkJCTogZmFsc2UsCgkJCQkJInN1Ym1lbnUiIDogewoJCQkJCQkiY3V0IiA6IHsKCQkJCQkJCSJzZXBhcmF0b3JfYmVmb3JlIgk6IGZhbHNlLAoJCQkJCQkJInNlcGFyYXRvcl9hZnRlciIJOiBmYWxzZSwKCQkJCQkJCSJsYWJlbCIJCQkJOiAiQ3V0IiwKCQkJCQkJCSJhY3Rpb24iCQkJOiBmdW5jdGlvbiAob2JqKSB7IHRoaXMuY3V0KG9iaik7IH0KCQkJCQkJfSwKCQkJCQkJImNvcHkiIDogewoJCQkJCQkJInNlcGFyYXRvcl9iZWZvcmUiCTogZmFsc2UsCgkJCQkJCQkiaWNvbiIJCQkJOiBmYWxzZSwKCQkJCQkJCSJzZXBhcmF0b3JfYWZ0ZXIiCTogZmFsc2UsCgkJCQkJCQkibGFiZWwiCQkJCTogIkNvcHkiLAoJCQkJCQkJImFjdGlvbiIJCQk6IGZ1bmN0aW9uIChvYmopIHsgdGhpcy5jb3B5KG9iaik7IH0KCQkJCQkJfSwKCQkJCQkJInBhc3RlIiA6IHsKCQkJCQkJCSJzZXBhcmF0b3JfYmVmb3JlIgk6IGZhbHNlLAoJCQkJCQkJImljb24iCQkJCTogZmFsc2UsCgkJCQkJCQkic2VwYXJhdG9yX2FmdGVyIgk6IGZhbHNlLAoJCQkJCQkJImxhYmVsIgkJCQk6ICJQYXN0ZSIsCgkJCQkJCQkiYWN0aW9uIgkJCTogZnVuY3Rpb24gKG9iaikgeyB0aGlzLnBhc3RlKG9iaik7IH0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJX2ZuIDogewoJCQlzaG93X2NvbnRleHRtZW51IDogZnVuY3Rpb24gKG9iaiwgeCwgeSkgewoJCQkJb2JqID0gdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCXZhciBzID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5jb250ZXh0bWVudSwKCQkJCQlhID0gb2JqLmNoaWxkcmVuKCJhOnZpc2libGU6ZXEoMCkiKSwKCQkJCQlvID0gZmFsc2UsCgkJCQkJaSA9IGZhbHNlOwoJCQkJaWYocy5zZWxlY3Rfbm9kZSAmJiB0aGlzLmRhdGEudWkgJiYgIXRoaXMuaXNfc2VsZWN0ZWQob2JqKSkgewoJCQkJCXRoaXMuZGVzZWxlY3RfYWxsKCk7CgkJCQkJdGhpcy5zZWxlY3Rfbm9kZShvYmosIHRydWUpOwoJCQkJfQoJCQkJaWYocy5zaG93X2F0X25vZGUgfHwgdHlwZW9mIHggPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB5ID09PSAidW5kZWZpbmVkIikgewoJCQkJCW8gPSBhLm9mZnNldCgpOwoJCQkJCXggPSBvLmxlZnQ7CgkJCQkJeSA9IG8udG9wICsgdGhpcy5kYXRhLmNvcmUubGlfaGVpZ2h0OwoJCQkJfQoJCQkJaSA9IG9iai5kYXRhKCJqc3RyZWUiKSAmJiBvYmouZGF0YSgianN0cmVlIikuY29udGV4dG1lbnUgPyBvYmouZGF0YSgianN0cmVlIikuY29udGV4dG1lbnUgOiBzLml0ZW1zOwoJCQkJaWYoJC5pc0Z1bmN0aW9uKGkpKSB7IGkgPSBpLmNhbGwodGhpcywgb2JqKTsgfQoJCQkJdGhpcy5kYXRhLmNvbnRleHRtZW51ID0gdHJ1ZTsKCQkJCSQudmFrYXRhLmNvbnRleHQuc2hvdyhpLCBhLCB4LCB5LCB0aGlzLCBvYmosIHRoaXMuX2dldF9zZXR0aW5ncygpLmNvcmUucnRsKTsKCQkJCWlmKHRoaXMuZGF0YS50aGVtZXMpIHsgJC52YWthdGEuY29udGV4dC5jbnQuYXR0cigiY2xhc3MiLCAianN0cmVlLSIgKyB0aGlzLmRhdGEudGhlbWVzLnRoZW1lICsgIi1jb250ZXh0Iik7IH0KCQkJfQoJCX0KCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgdHlwZXMgcGx1Z2luCiAqIEFkZHMgc3VwcG9ydCB0eXBlcyBvZiBub2RlcwogKiBZb3UgY2FuIHNldCBhbiBhdHRyaWJ1dGUgb24gZWFjaCBsaSBub2RlLCB0aGF0IHJlcHJlc2VudHMgaXRzIHR5cGUuCiAqIEFjY29yZGluZyB0byB0aGUgdHlwZSBzZXR0aW5nIHRoZSBub2RlIG1heSBnZXQgY3VzdG9tIGljb24vdmFsaWRhdGlvbiBydWxlcwogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oInR5cGVzIiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS50eXBlczsKCQkJdGhpcy5kYXRhLnR5cGVzLmF0dGFjaF90byA9IFtdOwoJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJLmJpbmQoImluaXQuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7CgkJCQkJCXZhciB0eXBlcyA9IHMudHlwZXMsCgkJCQkJCQlhdHRyICA9IHMudHlwZV9hdHRyLAoJCQkJCQkJaWNvbnNfY3NzID0gIiIsCgkJCQkJCQlfdGhpcyA9IHRoaXM7CgoJCQkJCQkkLmVhY2godHlwZXMsIGZ1bmN0aW9uIChpLCB0cCkgewoJCQkJCQkJJC5lYWNoKHRwLCBmdW5jdGlvbiAoaywgdikgewoJCQkJCQkJCWlmKCEvXihtYXhfZGVwdGh8bWF4X2NoaWxkcmVufGljb258dmFsaWRfY2hpbGRyZW4pJC8udGVzdChrKSkgeyBfdGhpcy5kYXRhLnR5cGVzLmF0dGFjaF90by5wdXNoKGspOyB9CgkJCQkJCQl9KTsKCQkJCQkJCWlmKCF0cC5pY29uKSB7IHJldHVybiB0cnVlOyB9CgkJCQkJCQlpZiggdHAuaWNvbi5pbWFnZSB8fCB0cC5pY29uLnBvc2l0aW9uKSB7CgkJCQkJCQkJaWYoaSA9PSAiZGVmYXVsdCIpCXsgaWNvbnNfY3NzICs9ICcuanN0cmVlLScgKyBfdGhpcy5nZXRfaW5kZXgoKSArICcgYSA+IC5qc3RyZWUtaWNvbiB7ICc7IH0KCQkJCQkJCQllbHNlCQkJCXsgaWNvbnNfY3NzICs9ICcuanN0cmVlLScgKyBfdGhpcy5nZXRfaW5kZXgoKSArICcgbGlbJyArIGF0dHIgKyAnPSInICsgaSArICciXSA+IGEgPiAuanN0cmVlLWljb24geyAnOyB9CgkJCQkJCQkJaWYodHAuaWNvbi5pbWFnZSkJeyBpY29uc19jc3MgKz0gJyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnICsgdHAuaWNvbi5pbWFnZSArICcpOyAnOyB9CgkJCQkJCQkJaWYodHAuaWNvbi5wb3NpdGlvbil7IGljb25zX2NzcyArPSAnIGJhY2tncm91bmQtcG9zaXRpb246JyArIHRwLmljb24ucG9zaXRpb24gKyAnOyAnOyB9CgkJCQkJCQkJZWxzZQkJCQl7IGljb25zX2NzcyArPSAnIGJhY2tncm91bmQtcG9zaXRpb246MCAwOyAnOyB9CgkJCQkJCQkJaWNvbnNfY3NzICs9ICd9ICc7CgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCQlpZihpY29uc19jc3MgIT09ICIiKSB7ICQudmFrYXRhLmNzcy5hZGRfc2hlZXQoeyAnc3RyJyA6IGljb25zX2NzcywgdGl0bGUgOiAianN0cmVlLXR5cGVzIiB9KTsgfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoImJlZm9yZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCXZhciBzLCB0LAoJCQkJCQkJbyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLnR5cGVzLnVzZV9kYXRhID8gdGhpcy5fZ2V0X25vZGUoZGF0YS5hcmdzWzBdKSA6IGZhbHNlLAoJCQkJCQkJZCA9IG8gJiYgbyAhPT0gLTEgJiYgby5sZW5ndGggPyBvLmRhdGEoImpzdHJlZSIpIDogZmFsc2U7CgkJCQkJCWlmKGQgJiYgZC50eXBlcyAmJiBkLnR5cGVzW2RhdGEuZnVuY10gPT09IGZhbHNlKSB7IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7IHJldHVybiBmYWxzZTsgfQoJCQkJCQlpZigkLmluQXJyYXkoZGF0YS5mdW5jLCB0aGlzLmRhdGEudHlwZXMuYXR0YWNoX3RvKSAhPT0gLTEpIHsKCQkJCQkJCWlmKCFkYXRhLmFyZ3NbMF0gfHwgKCFkYXRhLmFyZ3NbMF0udGFnTmFtZSAmJiAhZGF0YS5hcmdzWzBdLmpxdWVyeSkpIHsgcmV0dXJuOyB9CgkJCQkJCQlzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkudHlwZXMudHlwZXM7CgkJCQkJCQl0ID0gdGhpcy5fZ2V0X3R5cGUoZGF0YS5hcmdzWzBdKTsKCQkJCQkJCWlmKAoJCQkJCQkJCSgKCQkJCQkJCQkJKHNbdF0gJiYgdHlwZW9mIHNbdF1bZGF0YS5mdW5jXSAhPT0gInVuZGVmaW5lZCIpIHx8CgkJCQkJCQkJCShzWyJkZWZhdWx0Il0gJiYgdHlwZW9mIHNbImRlZmF1bHQiXVtkYXRhLmZ1bmNdICE9PSAidW5kZWZpbmVkIikKCQkJCQkJCQkpICYmIHRoaXMuX2NoZWNrKGRhdGEuZnVuYywgZGF0YS5hcmdzWzBdKSA9PT0gZmFsc2UKCQkJCQkJCSkgewoJCQkJCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSwgdGhpcykpOwoJCQlpZihpc19pZTYpIHsKCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkJLmJpbmQoImxvYWRfbm9kZS5qc3RyZWUgc2V0X3R5cGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQkJdmFyIHIgPSBkYXRhICYmIGRhdGEucnNsdCAmJiBkYXRhLnJzbHQub2JqICYmIGRhdGEucnNsdC5vYmogIT09IC0xID8gdGhpcy5fZ2V0X25vZGUoZGF0YS5yc2x0Lm9iaikucGFyZW50KCkgOiB0aGlzLmdldF9jb250YWluZXJfdWwoKSwKCQkJCQkJCQljID0gZmFsc2UsCgkJCQkJCQkJcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLnR5cGVzOwoJCQkJCQkJJC5lYWNoKHMudHlwZXMsIGZ1bmN0aW9uIChpLCB0cCkgewoJCQkJCQkJCWlmKHRwLmljb24gJiYgKHRwLmljb24uaW1hZ2UgfHwgdHAuaWNvbi5wb3NpdGlvbikpIHsKCQkJCQkJCQkJYyA9IGkgPT09ICJkZWZhdWx0IiA/IHIuZmluZCgibGkgPiBhID4gLmpzdHJlZS1pY29uIikgOiByLmZpbmQoImxpWyIgKyBzLnR5cGVfYXR0ciArICI9JyIgKyBpICsgIiddID4gYSA+IC5qc3RyZWUtaWNvbiIpOwoJCQkJCQkJCQlpZih0cC5pY29uLmltYWdlKSB7IGMuY3NzKCJiYWNrZ3JvdW5kSW1hZ2UiLCJ1cmwoIiArIHRwLmljb24uaW1hZ2UgKyAiKSIpOyB9CgkJCQkJCQkJCWMuY3NzKCJiYWNrZ3JvdW5kUG9zaXRpb24iLCB0cC5pY29uLnBvc2l0aW9uIHx8ICIwIDAiKTsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJCQkJfSwgdGhpcykpOwoJCQl9CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJLy8gZGVmaW5lcyBtYXhpbXVtIG51bWJlciBvZiByb290IG5vZGVzICgtMSBtZWFucyB1bmxpbWl0ZWQsIC0yIG1lYW5zIGRpc2FibGUgbWF4X2NoaWxkcmVuIGNoZWNraW5nKQoJCQltYXhfY2hpbGRyZW4JCTogLTEsCgkJCS8vIGRlZmluZXMgdGhlIG1heGltdW0gZGVwdGggb2YgdGhlIHRyZWUgKC0xIG1lYW5zIHVubGltaXRlZCwgLTIgbWVhbnMgZGlzYWJsZSBtYXhfZGVwdGggY2hlY2tpbmcpCgkJCW1heF9kZXB0aAkJCTogLTEsCgkJCS8vIGRlZmluZXMgdmFsaWQgbm9kZSB0eXBlcyBmb3IgdGhlIHJvb3Qgbm9kZXMKCQkJdmFsaWRfY2hpbGRyZW4JCTogImFsbCIsCgoJCQkvLyB3aGV0aGVyIHRvIHVzZSAkLmRhdGEKCQkJdXNlX2RhdGEgOiBmYWxzZSwKCQkJLy8gd2hlcmUgaXMgdGhlIHR5cGUgc3RvcmVzICh0aGUgcmVsIGF0dHJpYnV0ZSBvZiB0aGUgTEkgZWxlbWVudCkKCQkJdHlwZV9hdHRyIDogInJlbCIsCgkJCS8vIGEgbGlzdCBvZiB0eXBlcwoJCQl0eXBlcyA6IHsKCQkJCS8vIHRoZSBkZWZhdWx0IHR5cGUKCQkJCSJkZWZhdWx0IiA6IHsKCQkJCQkibWF4X2NoaWxkcmVuIgk6IC0xLAoJCQkJCSJtYXhfZGVwdGgiCQk6IC0xLAoJCQkJCSJ2YWxpZF9jaGlsZHJlbiI6ICJhbGwiCgoJCQkJCS8vIEJvdW5kIGZ1bmN0aW9ucyAtIHlvdSBjYW4gYmluZCBhbnkgb3RoZXIgZnVuY3Rpb24gaGVyZSAodXNpbmcgYm9vbGVhbiBvciBmdW5jdGlvbikKCQkJCQkvLyJzZWxlY3Rfbm9kZSIJOiB0cnVlCgkJCQl9CgkJCX0KCQl9LAoJCV9mbiA6IHsKCQkJX3R5cGVzX25vdGlmeSA6IGZ1bmN0aW9uIChuLCBkYXRhKSB7CgkJCQlpZihkYXRhLnR5cGUgJiYgdGhpcy5fZ2V0X3NldHRpbmdzKCkudHlwZXMudXNlX2RhdGEpIHsKCQkJCQl0aGlzLnNldF90eXBlKGRhdGEudHlwZSwgbik7CgkJCQl9CgkJCX0sCgkJCV9nZXRfdHlwZSA6IGZ1bmN0aW9uIChvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlyZXR1cm4gKCFvYmogfHwgIW9iai5sZW5ndGgpID8gZmFsc2UgOiBvYmouYXR0cih0aGlzLl9nZXRfc2V0dGluZ3MoKS50eXBlcy50eXBlX2F0dHIpIHx8ICJkZWZhdWx0IjsKCQkJfSwKCQkJc2V0X3R5cGUgOiBmdW5jdGlvbiAoc3RyLCBvYmopIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl2YXIgcmV0ID0gKCFvYmoubGVuZ3RoIHx8ICFzdHIpID8gZmFsc2UgOiBvYmouYXR0cih0aGlzLl9nZXRfc2V0dGluZ3MoKS50eXBlcy50eXBlX2F0dHIsIHN0cik7CgkJCQlpZihyZXQpIHsgdGhpcy5fX2NhbGxiYWNrKHsgb2JqIDogb2JqLCB0eXBlIDogc3RyfSk7IH0KCQkJCXJldHVybiByZXQ7CgkJCX0sCgkJCV9jaGVjayA6IGZ1bmN0aW9uIChydWxlLCBvYmosIG9wdHMpIHsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQl2YXIgdiA9IGZhbHNlLCB0ID0gdGhpcy5fZ2V0X3R5cGUob2JqKSwgZCA9IDAsIF90aGlzID0gdGhpcywgcyA9IHRoaXMuX2dldF9zZXR0aW5ncygpLnR5cGVzLCBkYXRhID0gZmFsc2U7CgkJCQlpZihvYmogPT09IC0xKSB7CgkJCQkJaWYoISFzW3J1bGVdKSB7IHYgPSBzW3J1bGVdOyB9CgkJCQkJZWxzZSB7IHJldHVybjsgfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYodCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9CgkJCQkJZGF0YSA9IHMudXNlX2RhdGEgPyBvYmouZGF0YSgianN0cmVlIikgOiBmYWxzZTsKCQkJCQlpZihkYXRhICYmIGRhdGEudHlwZXMgJiYgdHlwZW9mIGRhdGEudHlwZXNbcnVsZV0gIT09ICJ1bmRlZmluZWQiKSB7IHYgPSBkYXRhLnR5cGVzW3J1bGVdOyB9CgkJCQkJZWxzZSBpZighIXMudHlwZXNbdF0gJiYgdHlwZW9mIHMudHlwZXNbdF1bcnVsZV0gIT09ICJ1bmRlZmluZWQiKSB7IHYgPSBzLnR5cGVzW3RdW3J1bGVdOyB9CgkJCQkJZWxzZSBpZighIXMudHlwZXNbImRlZmF1bHQiXSAmJiB0eXBlb2Ygcy50eXBlc1siZGVmYXVsdCJdW3J1bGVdICE9PSAidW5kZWZpbmVkIikgeyB2ID0gcy50eXBlc1siZGVmYXVsdCJdW3J1bGVdOyB9CgkJCQl9CgkJCQlpZigkLmlzRnVuY3Rpb24odikpIHsgdiA9IHYuY2FsbCh0aGlzLCBvYmopOyB9CgkJCQlpZihydWxlID09PSAibWF4X2RlcHRoIiAmJiBvYmogIT09IC0xICYmIG9wdHMgIT09IGZhbHNlICYmIHMubWF4X2RlcHRoICE9PSAtMiAmJiB2ICE9PSAwKSB7CgkJCQkJLy8gYWxzbyBpbmNsdWRlIHRoZSBub2RlIGl0c2VsZiAtIG90aGVyd2lzZSBpZiByb290IG5vZGUgaXQgaXMgbm90IGNoZWNrZWQKCQkJCQlvYmouY2hpbGRyZW4oImE6ZXEoMCkiKS5wYXJlbnRzVW50aWwoIi5qc3RyZWUiLCJsaSIpLmVhY2goZnVuY3Rpb24gKGkpIHsKCQkJCQkJLy8gY2hlY2sgaWYgY3VycmVudCBkZXB0aCBhbHJlYWR5IGV4Y2VlZHMgZ2xvYmFsIHRyZWUgZGVwdGgKCQkJCQkJaWYocy5tYXhfZGVwdGggIT09IC0xICYmIHMubWF4X2RlcHRoIC0gKGkgKyAxKSA8PSAwKSB7IHYgPSAwOyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJZCA9IChpID09PSAwKSA/IHYgOiBfdGhpcy5fY2hlY2socnVsZSwgdGhpcywgZmFsc2UpOwoJCQkJCQkvLyBjaGVjayBpZiBjdXJyZW50IG5vZGUgbWF4IGRlcHRoIGlzIGFscmVhZHkgbWF0Y2hlZCBvciBleGNlZWRlZAoJCQkJCQlpZihkICE9PSAtMSAmJiBkIC0gKGkgKyAxKSA8PSAwKSB7IHYgPSAwOyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJLy8gb3RoZXJ3aXNlIC0gc2V0IHRoZSBtYXggZGVwdGggdG8gdGhlIGN1cnJlbnQgdmFsdWUgbWludXMgY3VycmVudCBkZXB0aAoJCQkJCQlpZihkID49IDAgJiYgKGQgLSAoaSArIDEpIDwgdiB8fCB2IDwgMCkgKSB7IHYgPSBkIC0gKGkgKyAxKTsgfQoJCQkJCQkvLyBpZiB0aGUgZ2xvYmFsIHRyZWUgZGVwdGggZXhpc3RzIGFuZCBpdCBtaW51cyB0aGUgbm9kZXMgY2FsY3VsYXRlZCBzbyBmYXIgaXMgbGVzcyB0aGFuIGB2YCBvciBgdmAgaXMgdW5saW1pdGVkCgkJCQkJCWlmKHMubWF4X2RlcHRoID49IDAgJiYgKHMubWF4X2RlcHRoIC0gKGkgKyAxKSA8IHYgfHwgdiA8IDApICkgeyB2ID0gcy5tYXhfZGVwdGggLSAoaSArIDEpOyB9CgkJCQkJfSk7CgkJCQl9CgkJCQlyZXR1cm4gdjsKCQkJfSwKCQkJY2hlY2tfbW92ZSA6IGZ1bmN0aW9uICgpIHsKCQkJCWlmKCF0aGlzLl9fY2FsbF9vbGQoKSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCXZhciBtICA9IHRoaXMuX2dldF9tb3ZlKCksCgkJCQkJcyAgPSBtLnJ0Ll9nZXRfc2V0dGluZ3MoKS50eXBlcywKCQkJCQltYyA9IG0ucnQuX2NoZWNrKCJtYXhfY2hpbGRyZW4iLCBtLmNyKSwKCQkJCQltZCA9IG0ucnQuX2NoZWNrKCJtYXhfZGVwdGgiLCBtLmNyKSwKCQkJCQl2YyA9IG0ucnQuX2NoZWNrKCJ2YWxpZF9jaGlsZHJlbiIsIG0uY3IpLAoJCQkJCWNoID0gMCwgZCA9IDEsIHQ7CgoJCQkJaWYodmMgPT09ICJub25lIikgeyByZXR1cm4gZmFsc2U7IH0KCQkJCWlmKCQuaXNBcnJheSh2YykgJiYgbS5vdCAmJiBtLm90Ll9nZXRfdHlwZSkgewoJCQkJCW0uby5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJaWYoJC5pbkFycmF5KG0ub3QuX2dldF90eXBlKHRoaXMpLCB2YykgPT09IC0xKSB7IGQgPSBmYWxzZTsgcmV0dXJuIGZhbHNlOyB9CgkJCQkJfSk7CgkJCQkJaWYoZCA9PT0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQl9CgkJCQlpZihzLm1heF9jaGlsZHJlbiAhPT0gLTIgJiYgbWMgIT09IC0xKSB7CgkJCQkJY2ggPSBtLmNyID09PSAtMSA/IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIj4gdWwgPiBsaSIpLm5vdChtLm8pLmxlbmd0aCA6IG0uY3IuZmluZCgiPiB1bCA+IGxpIikubm90KG0ubykubGVuZ3RoOwoJCQkJCWlmKGNoICsgbS5vLmxlbmd0aCA+IG1jKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJfQoJCQkJaWYocy5tYXhfZGVwdGggIT09IC0yICYmIG1kICE9PSAtMSkgewoJCQkJCWQgPSAwOwoJCQkJCWlmKG1kID09PSAwKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJCWlmKHR5cGVvZiBtLm8uZCA9PT0gInVuZGVmaW5lZCIpIHsKCQkJCQkJLy8gVE9ETzogZGVhbCB3aXRoIHByb2dyZXNzaXZlIHJlbmRlcmluZyBhbmQgYXN5bmMgd2hlbiBjaGVja2luZyBtYXhfZGVwdGggKGhvdyB0byBrbm93IHRoZSBkZXB0aCBvZiB0aGUgbW92ZWQgbm9kZSkKCQkJCQkJdCA9IG0ubzsKCQkJCQkJd2hpbGUodC5sZW5ndGggPiAwKSB7CgkJCQkJCQl0ID0gdC5maW5kKCI+IHVsID4gbGkiKTsKCQkJCQkJCWQgKys7CgkJCQkJCX0KCQkJCQkJbS5vLmQgPSBkOwoJCQkJCX0KCQkJCQlpZihtZCAtIG0uby5kIDwgMCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCX0KCQkJCXJldHVybiB0cnVlOwoJCQl9LAoJCQljcmVhdGVfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHBvc2l0aW9uLCBqcywgY2FsbGJhY2ssIGlzX2xvYWRlZCwgc2tpcF9jaGVjaykgewoJCQkJaWYoIXNraXBfY2hlY2sgJiYgKGlzX2xvYWRlZCB8fCB0aGlzLl9pc19sb2FkZWQob2JqKSkpIHsKCQkJCQl2YXIgcCAgPSAodHlwZW9mIHBvc2l0aW9uID09ICJzdHJpbmciICYmIHBvc2l0aW9uLm1hdGNoKC9eYmVmb3JlfGFmdGVyJC9pKSAmJiBvYmogIT09IC0xKSA/IHRoaXMuX2dldF9wYXJlbnQob2JqKSA6IHRoaXMuX2dldF9ub2RlKG9iaiksCgkJCQkJCXMgID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkudHlwZXMsCgkJCQkJCW1jID0gdGhpcy5fY2hlY2soIm1heF9jaGlsZHJlbiIsIHApLAoJCQkJCQltZCA9IHRoaXMuX2NoZWNrKCJtYXhfZGVwdGgiLCBwKSwKCQkJCQkJdmMgPSB0aGlzLl9jaGVjaygidmFsaWRfY2hpbGRyZW4iLCBwKSwKCQkJCQkJY2g7CgkJCQkJaWYodHlwZW9mIGpzID09PSAic3RyaW5nIikgeyBqcyA9IHsgZGF0YSA6IGpzIH07IH0KCQkJCQlpZighanMpIHsganMgPSB7fTsgfQoJCQkJCWlmKHZjID09PSAibm9uZSIpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQkJaWYoJC5pc0FycmF5KHZjKSkgewoJCQkJCQlpZighanMuYXR0ciB8fCAhanMuYXR0cltzLnR5cGVfYXR0cl0pIHsKCQkJCQkJCWlmKCFqcy5hdHRyKSB7IGpzLmF0dHIgPSB7fTsgfQoJCQkJCQkJanMuYXR0cltzLnR5cGVfYXR0cl0gPSB2Y1swXTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWlmKCQuaW5BcnJheShqcy5hdHRyW3MudHlwZV9hdHRyXSwgdmMpID09PSAtMSkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJfQoJCQkJCX0KCQkJCQlpZihzLm1heF9jaGlsZHJlbiAhPT0gLTIgJiYgbWMgIT09IC0xKSB7CgkJCQkJCWNoID0gcCA9PT0gLTEgPyB0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCI+IHVsID4gbGkiKS5sZW5ndGggOiBwLmZpbmQoIj4gdWwgPiBsaSIpLmxlbmd0aDsKCQkJCQkJaWYoY2ggKyAxID4gbWMpIHsgcmV0dXJuIGZhbHNlOyB9CgkJCQkJfQoJCQkJCWlmKHMubWF4X2RlcHRoICE9PSAtMiAmJiBtZCAhPT0gLTEgJiYgKG1kIC0gMSkgPCAwKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJfQoJCQkJcmV0dXJuIHRoaXMuX19jYWxsX29sZCh0cnVlLCBvYmosIHBvc2l0aW9uLCBqcywgY2FsbGJhY2ssIGlzX2xvYWRlZCwgc2tpcF9jaGVjayk7CgkJCX0KCQl9Cgl9KTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKICoganNUcmVlIEhUTUwgcGx1Z2luCiAqIFRoZSBIVE1MIGRhdGEgc3RvcmUuIERhdGFzdG9yZXMgYXJlIGJ1aWxkIGJ5IHJlcGxhY2luZyB0aGUgYGxvYWRfbm9kZWAgYW5kIGBfaXNfbG9hZGVkYCBmdW5jdGlvbnMuCiAqLwooZnVuY3Rpb24gKCQpIHsKCSQuanN0cmVlLnBsdWdpbigiaHRtbF9kYXRhIiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJLy8gdGhpcyB1c2VkIHRvIHVzZSBodG1sKCkgYW5kIGNsZWFuIHRoZSB3aGl0ZXNwYWNlLCBidXQgdGhpcyB3YXkgYW55IGF0dGFjaGVkIGRhdGEgd2FzIGxvc3QKCQkJdGhpcy5kYXRhLmh0bWxfZGF0YS5vcmlnaW5hbF9jb250YWluZXJfaHRtbCA9IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIiA+IHVsID4gbGkiKS5jbG9uZSh0cnVlKTsKCQkJLy8gcmVtb3ZlIHdoaXRlIHNwYWNlIGZyb20gTEkgbm9kZSAtIG90aGVyd2lzZSBub2RlcyBhcHBlYXIgYSBiaXQgdG8gdGhlIHJpZ2h0CgkJCXRoaXMuZGF0YS5odG1sX2RhdGEub3JpZ2luYWxfY29udGFpbmVyX2h0bWwuZmluZCgibGkiKS5hZGRCYWNrKCkuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm5vZGVUeXBlID09IDM7IH0pLnJlbW92ZSgpOwoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCWRhdGEgOiBmYWxzZSwKCQkJYWpheCA6IGZhbHNlLAoJCQljb3JyZWN0X3N0YXRlIDogdHJ1ZQoJCX0sCgkJX2ZuIDogewoJCQlsb2FkX25vZGUgOiBmdW5jdGlvbiAob2JqLCBzX2NhbGwsIGVfY2FsbCkgeyB2YXIgX3RoaXMgPSB0aGlzOyB0aGlzLmxvYWRfbm9kZV9odG1sKG9iaiwgZnVuY3Rpb24gKCkgeyBfdGhpcy5fX2NhbGxiYWNrKHsgIm9iaiIgOiBfdGhpcy5fZ2V0X25vZGUob2JqKSB9KTsgc19jYWxsLmNhbGwodGhpcyk7IH0sIGVfY2FsbCk7IH0sCgkJCV9pc19sb2FkZWQgOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSB0aGlzLl9nZXRfbm9kZShvYmopOwoJCQkJcmV0dXJuIG9iaiA9PSAtMSB8fCAhb2JqIHx8ICghdGhpcy5fZ2V0X3NldHRpbmdzKCkuaHRtbF9kYXRhLmFqYXggJiYgISQuaXNGdW5jdGlvbih0aGlzLl9nZXRfc2V0dGluZ3MoKS5odG1sX2RhdGEuZGF0YSkpIHx8IG9iai5pcygiLmpzdHJlZS1vcGVuLCAuanN0cmVlLWxlYWYiKSB8fCBvYmouY2hpbGRyZW4oInVsIikuY2hpbGRyZW4oImxpIikuc2l6ZSgpID4gMDsKCQkJfSwKCQkJbG9hZF9ub2RlX2h0bWwgOiBmdW5jdGlvbiAob2JqLCBzX2NhbGwsIGVfY2FsbCkgewoJCQkJdmFyIGQsCgkJCQkJcyA9IHRoaXMuZ2V0X3NldHRpbmdzKCkuaHRtbF9kYXRhLAoJCQkJCWVycm9yX2Z1bmMgPSBmdW5jdGlvbiAoKSB7fSwKCQkJCQlzdWNjZXNzX2Z1bmMgPSBmdW5jdGlvbiAoKSB7fTsKCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlpZihvYmogJiYgb2JqICE9PSAtMSkgewoJCQkJCWlmKG9iai5kYXRhKCJqc3RyZWVfaXNfbG9hZGluZyIpKSB7IHJldHVybjsgfQoJCQkJCWVsc2UgeyBvYmouZGF0YSgianN0cmVlX2lzX2xvYWRpbmciLHRydWUpOyB9CgkJCQl9CgkJCQlzd2l0Y2goITApIHsKCQkJCQljYXNlICgkLmlzRnVuY3Rpb24ocy5kYXRhKSk6CgkJCQkJCXMuZGF0YS5jYWxsKHRoaXMsIG9iaiwgJC5wcm94eShmdW5jdGlvbiAoZCkgewoJCQkJCQkJaWYoZCAmJiBkICE9PSAiIiAmJiBkLnRvU3RyaW5nICYmIGQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW1xzXG5dKyQvLCIiKSAhPT0gIiIpIHsKCQkJCQkJCQlkID0gJChkKTsKCQkJCQkJCQlpZighZC5pcygidWwiKSkgeyBkID0gJCgiPHVsIC8+IikuYXBwZW5kKGQpOyB9CgkJCQkJCQkJaWYob2JqID09IC0xIHx8ICFvYmopIHsgdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKS5hcHBlbmQoZC5jaGlsZHJlbigpKS5maW5kKCJsaSwgYSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5maXJzdENoaWxkIHx8ICF0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSB8fCB0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSAhPT0gIklOUyI7IH0pLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKS5lbmQoKS5maWx0ZXIoImEiKS5jaGlsZHJlbigiaW5zOmZpcnN0LWNoaWxkIikubm90KCIuanN0cmVlLWljb24iKS5hZGRDbGFzcygianN0cmVlLWljb24iKTsgfQoJCQkJCQkJCWVsc2UgeyBvYmouY2hpbGRyZW4oImEuanN0cmVlLWxvYWRpbmciKS5yZW1vdmVDbGFzcygianN0cmVlLWxvYWRpbmciKTsgb2JqLmFwcGVuZChkKS5jaGlsZHJlbigidWwiKS5maW5kKCJsaSwgYSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5maXJzdENoaWxkIHx8ICF0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSB8fCB0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSAhPT0gIklOUyI7IH0pLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKS5lbmQoKS5maWx0ZXIoImEiKS5jaGlsZHJlbigiaW5zOmZpcnN0LWNoaWxkIikubm90KCIuanN0cmVlLWljb24iKS5hZGRDbGFzcygianN0cmVlLWljb24iKTsgb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7IH0KCQkJCQkJCQl0aGlzLmNsZWFuX25vZGUob2JqKTsKCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCWlmKG9iaiAmJiBvYmogIT09IC0xKSB7CgkJCQkJCQkJCW9iai5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOwoJCQkJCQkJCQlvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsKCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7CgkJCQkJCQkJCQl0aGlzLmNvcnJlY3Rfc3RhdGUob2JqKTsKCQkJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQlpZihzLmNvcnJlY3Rfc3RhdGUpIHsKCQkJCQkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCk7CgkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSwgdGhpcykpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICghcy5kYXRhICYmICFzLmFqYXgpOgoJCQkJCQlpZighb2JqIHx8IG9iaiA9PSAtMSkgewoJCQkJCQkJdGhpcy5nZXRfY29udGFpbmVyKCkKCQkJCQkJCQkuY2hpbGRyZW4oInVsIikuZW1wdHkoKQoJCQkJCQkJCS5hcHBlbmQodGhpcy5kYXRhLmh0bWxfZGF0YS5vcmlnaW5hbF9jb250YWluZXJfaHRtbCkKCQkJCQkJCQkuZmluZCgibGksIGEiKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMuZmlyc3RDaGlsZCB8fCAhdGhpcy5maXJzdENoaWxkLnRhZ05hbWUgfHwgdGhpcy5maXJzdENoaWxkLnRhZ05hbWUgIT09ICJJTlMiOyB9KS5wcmVwZW5kKCI8aW5zIGNsYXNzPSdqc3RyZWUtaWNvbic+JiMxNjA7PC9pbnM+IikuZW5kKCkKCQkJCQkJCQkuZmlsdGVyKCJhIikuY2hpbGRyZW4oImluczpmaXJzdC1jaGlsZCIpLm5vdCgiLmpzdHJlZS1pY29uIikuYWRkQ2xhc3MoImpzdHJlZS1pY29uIik7CgkJCQkJCQl0aGlzLmNsZWFuX25vZGUoKTsKCQkJCQkJfQoJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAoISFzLmRhdGEgJiYgIXMuYWpheCkgfHwgKCEhcy5kYXRhICYmICEhcy5hamF4ICYmICghb2JqIHx8IG9iaiA9PT0gLTEpKToKCQkJCQkJaWYoIW9iaiB8fCBvYmogPT0gLTEpIHsKCQkJCQkJCWQgPSAkKHMuZGF0YSk7CgkJCQkJCQlpZighZC5pcygidWwiKSkgeyBkID0gJCgiPHVsIC8+IikuYXBwZW5kKGQpOyB9CgkJCQkJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJCQkJCS5jaGlsZHJlbigidWwiKS5lbXB0eSgpLmFwcGVuZChkLmNoaWxkcmVuKCkpCgkJCQkJCQkJLmZpbmQoImxpLCBhIikuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICF0aGlzLmZpcnN0Q2hpbGQgfHwgIXRoaXMuZmlyc3RDaGlsZC50YWdOYW1lIHx8IHRoaXMuZmlyc3RDaGlsZC50YWdOYW1lICE9PSAiSU5TIjsgfSkucHJlcGVuZCgiPGlucyBjbGFzcz0nanN0cmVlLWljb24nPiYjMTYwOzwvaW5zPiIpLmVuZCgpCgkJCQkJCQkJLmZpbHRlcigiYSIpLmNoaWxkcmVuKCJpbnM6Zmlyc3QtY2hpbGQiKS5ub3QoIi5qc3RyZWUtaWNvbiIpLmFkZENsYXNzKCJqc3RyZWUtaWNvbiIpOwoJCQkJCQkJdGhpcy5jbGVhbl9ub2RlKCk7CgkJCQkJCX0KCQkJCQkJaWYoc19jYWxsKSB7IHNfY2FsbC5jYWxsKHRoaXMpOyB9CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgKCFzLmRhdGEgJiYgISFzLmFqYXgpIHx8ICghIXMuZGF0YSAmJiAhIXMuYWpheCAmJiBvYmogJiYgb2JqICE9PSAtMSk6CgkJCQkJCW9iaiA9IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQkJCWVycm9yX2Z1bmMgPSBmdW5jdGlvbiAoeCwgdCwgZSkgewoJCQkJCQkJdmFyIGVmID0gdGhpcy5nZXRfc2V0dGluZ3MoKS5odG1sX2RhdGEuYWpheC5lcnJvcjsKCQkJCQkJCWlmKGVmKSB7IGVmLmNhbGwodGhpcywgeCwgdCwgZSk7IH0KCQkJCQkJCWlmKG9iaiAhPSAtMSAmJiBvYmoubGVuZ3RoKSB7CgkJCQkJCQkJb2JqLmNoaWxkcmVuKCJhLmpzdHJlZS1sb2FkaW5nIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1sb2FkaW5nIik7CgkJCQkJCQkJb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7CgkJCQkJCQkJaWYodCA9PT0gInN1Y2Nlc3MiICYmIHMuY29ycmVjdF9zdGF0ZSkgeyB0aGlzLmNvcnJlY3Rfc3RhdGUob2JqKTsgfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSB7CgkJCQkJCQkJaWYodCA9PT0gInN1Y2Nlc3MiICYmIHMuY29ycmVjdF9zdGF0ZSkgeyB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lbXB0eSgpOyB9CgkJCQkJCQl9CgkJCQkJCQlpZihlX2NhbGwpIHsgZV9jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJfTsKCQkJCQkJc3VjY2Vzc19mdW5jID0gZnVuY3Rpb24gKGQsIHQsIHgpIHsKCQkJCQkJCXZhciBzZiA9IHRoaXMuZ2V0X3NldHRpbmdzKCkuaHRtbF9kYXRhLmFqYXguc3VjY2VzczsKCQkJCQkJCWlmKHNmKSB7IGQgPSBzZi5jYWxsKHRoaXMsZCx0LHgpIHx8IGQ7IH0KCQkJCQkJCWlmKGQgPT09ICIiIHx8IChkICYmIGQudG9TdHJpbmcgJiYgZC50b1N0cmluZygpLnJlcGxhY2UoL15bXHNcbl0rJC8sIiIpID09PSAiIikpIHsKCQkJCQkJCQlyZXR1cm4gZXJyb3JfZnVuYy5jYWxsKHRoaXMsIHgsIHQsICIiKTsKCQkJCQkJCX0KCQkJCQkJCWlmKGQpIHsKCQkJCQkJCQlkID0gJChkKTsKCQkJCQkJCQlpZighZC5pcygidWwiKSkgeyBkID0gJCgiPHVsIC8+IikuYXBwZW5kKGQpOyB9CgkJCQkJCQkJaWYob2JqID09IC0xIHx8ICFvYmopIHsgdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oInVsIikuZW1wdHkoKS5hcHBlbmQoZC5jaGlsZHJlbigpKS5maW5kKCJsaSwgYSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5maXJzdENoaWxkIHx8ICF0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSB8fCB0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSAhPT0gIklOUyI7IH0pLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKS5lbmQoKS5maWx0ZXIoImEiKS5jaGlsZHJlbigiaW5zOmZpcnN0LWNoaWxkIikubm90KCIuanN0cmVlLWljb24iKS5hZGRDbGFzcygianN0cmVlLWljb24iKTsgfQoJCQkJCQkJCWVsc2UgeyBvYmouY2hpbGRyZW4oImEuanN0cmVlLWxvYWRpbmciKS5yZW1vdmVDbGFzcygianN0cmVlLWxvYWRpbmciKTsgb2JqLmFwcGVuZChkKS5jaGlsZHJlbigidWwiKS5maW5kKCJsaSwgYSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5maXJzdENoaWxkIHx8ICF0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSB8fCB0aGlzLmZpcnN0Q2hpbGQudGFnTmFtZSAhPT0gIklOUyI7IH0pLnByZXBlbmQoIjxpbnMgY2xhc3M9J2pzdHJlZS1pY29uJz4mIzE2MDs8L2lucz4iKS5lbmQoKS5maWx0ZXIoImEiKS5jaGlsZHJlbigiaW5zOmZpcnN0LWNoaWxkIikubm90KCIuanN0cmVlLWljb24iKS5hZGRDbGFzcygianN0cmVlLWljb24iKTsgb2JqLnJlbW92ZURhdGEoImpzdHJlZV9pc19sb2FkaW5nIik7IH0KCQkJCQkJCQl0aGlzLmNsZWFuX25vZGUob2JqKTsKCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCWlmKG9iaiAmJiBvYmogIT09IC0xKSB7CgkJCQkJCQkJCW9iai5jaGlsZHJlbigiYS5qc3RyZWUtbG9hZGluZyIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtbG9hZGluZyIpOwoJCQkJCQkJCQlvYmoucmVtb3ZlRGF0YSgianN0cmVlX2lzX2xvYWRpbmciKTsKCQkJCQkJCQkJaWYocy5jb3JyZWN0X3N0YXRlKSB7CgkJCQkJCQkJCQl0aGlzLmNvcnJlY3Rfc3RhdGUob2JqKTsKCQkJCQkJCQkJCWlmKHNfY2FsbCkgeyBzX2NhbGwuY2FsbCh0aGlzKTsgfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgewoJCQkJCQkJCQlpZihzLmNvcnJlY3Rfc3RhdGUpIHsKCQkJCQkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmNoaWxkcmVuKCJ1bCIpLmVtcHR5KCk7CgkJCQkJCQkJCQlpZihzX2NhbGwpIHsgc19jYWxsLmNhbGwodGhpcyk7IH0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfTsKCQkJCQkJcy5hamF4LmNvbnRleHQgPSB0aGlzOwoJCQkJCQlzLmFqYXguZXJyb3IgPSBlcnJvcl9mdW5jOwoJCQkJCQlzLmFqYXguc3VjY2VzcyA9IHN1Y2Nlc3NfZnVuYzsKCQkJCQkJaWYoIXMuYWpheC5kYXRhVHlwZSkgeyBzLmFqYXguZGF0YVR5cGUgPSAiaHRtbCI7IH0KCQkJCQkJaWYoJC5pc0Z1bmN0aW9uKHMuYWpheC51cmwpKSB7IHMuYWpheC51cmwgPSBzLmFqYXgudXJsLmNhbGwodGhpcywgb2JqKTsgfQoJCQkJCQlpZigkLmlzRnVuY3Rpb24ocy5hamF4LmRhdGEpKSB7IHMuYWpheC5kYXRhID0gcy5hamF4LmRhdGEuY2FsbCh0aGlzLCBvYmopOyB9CgkJCQkJCSQuYWpheChzLmFqYXgpOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCX0pOwoJLy8gaW5jbHVkZSB0aGUgSFRNTCBkYXRhIHBsdWdpbiBieSBkZWZhdWx0CgkkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goImh0bWxfZGF0YSIpOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgdGhlbWVyb2xsZXIgcGx1Z2luCiAqIEFkZHMgc3VwcG9ydCBmb3IgalF1ZXJ5IFVJIHRoZW1lcy4gSW5jbHVkZSB0aGlzIGF0IHRoZSBlbmQgb2YgeW91ciBwbHVnaW5zIGxpc3QsIGFsc28gbWFrZSBzdXJlICJ0aGVtZXMiIGlzIG5vdCBpbmNsdWRlZC4KICovCihmdW5jdGlvbiAoJCkgewoJJC5qc3RyZWUucGx1Z2luKCJ0aGVtZXJvbGxlciIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXZhciBzID0gdGhpcy5fZ2V0X3NldHRpbmdzKCkudGhlbWVyb2xsZXI7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IikKCQkJCS5hZGRDbGFzcygianN0cmVlLXRoZW1lcm9sbGVyIikKCQkJCS5kZWxlZ2F0ZSgiYSIsIm1vdXNlZW50ZXIuanN0cmVlIiwgZnVuY3Rpb24gKGUpIHsKCQkJCQlpZighJChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJqc3RyZWUtbG9hZGluZyIpKSB7CgkJCQkJCSQodGhpcykuYWRkQ2xhc3Mocy5pdGVtX2gpOwoJCQkJCX0KCQkJCX0pCgkJCQkuZGVsZWdhdGUoImEiLCJtb3VzZWxlYXZlLmpzdHJlZSIsIGZ1bmN0aW9uICgpIHsKCQkJCQkkKHRoaXMpLnJlbW92ZUNsYXNzKHMuaXRlbV9oKTsKCQkJCX0pCgkJCQkuYmluZCgiaW5pdC5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCWRhdGEuaW5zdC5nZXRfY29udGFpbmVyKCkuZmluZCgiPiB1bCA+IGxpID4gLmpzdHJlZS1sb2FkaW5nID4gaW5zIikuYWRkQ2xhc3MoInVpLWljb24tcmVmcmVzaCIpOwoJCQkJCQl0aGlzLl90aGVtZXJvbGxlcihkYXRhLmluc3QuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIj4gdWwgPiBsaSIpKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJvcGVuX25vZGUuanN0cmVlIGNyZWF0ZV9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdGhpcy5fdGhlbWVyb2xsZXIoZGF0YS5yc2x0Lm9iaik7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgibG9hZGVkLmpzdHJlZSByZWZyZXNoLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJdGhpcy5fdGhlbWVyb2xsZXIoKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJjbG9zZV9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdGhpcy5fdGhlbWVyb2xsZXIoZGF0YS5yc2x0Lm9iaik7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiZGVsZXRlX25vZGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQl0aGlzLl90aGVtZXJvbGxlcihkYXRhLnJzbHQucGFyZW50KTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJjb3JyZWN0X3N0YXRlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJZGF0YS5yc2x0Lm9iagoJCQkJCQkJLmNoaWxkcmVuKCJpbnMuanN0cmVlLWljb24iKS5yZW1vdmVDbGFzcyhzLm9wZW5lZCArICIgIiArIHMuY2xvc2VkICsgIiB1aS1pY29uIikuZW5kKCkKCQkJCQkJCS5maW5kKCI+IGEgPiBpbnMudWktaWNvbiIpCgkJCQkJCQkJLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCQkJCQkJcmV0dXJuIHRoaXMuY2xhc3NOYW1lLnRvU3RyaW5nKCkKCQkJCQkJCQkJCS5yZXBsYWNlKHMuaXRlbV9jbHNkLCIiKS5yZXBsYWNlKHMuaXRlbV9vcGVuLCIiKS5yZXBsYWNlKHMuaXRlbV9sZWFmLCIiKQoJCQkJCQkJCQkJLmluZGV4T2YoInVpLWljb24tIikgPT09IC0xOwoJCQkJCQkJCX0pLnJlbW92ZUNsYXNzKHMuaXRlbV9vcGVuICsgIiAiICsgcy5pdGVtX2Nsc2QpLmFkZENsYXNzKHMuaXRlbV9sZWFmIHx8ICJqc3RyZWUtbm8taWNvbiIpOwoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoInNlbGVjdF9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJZGF0YS5yc2x0Lm9iai5jaGlsZHJlbigiYSIpLmFkZENsYXNzKHMuaXRlbV9hKTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJkZXNlbGVjdF9ub2RlLmpzdHJlZSBkZXNlbGVjdF9hbGwuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJCQkJLmZpbmQoImEuIiArIHMuaXRlbV9hKS5yZW1vdmVDbGFzcyhzLml0ZW1fYSkuZW5kKCkKCQkJCQkJCS5maW5kKCJhLmpzdHJlZS1jbGlja2VkIikuYWRkQ2xhc3Mocy5pdGVtX2EpOwoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoImRlaG92ZXJfbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCWRhdGEucnNsdC5vYmouY2hpbGRyZW4oImEiKS5yZW1vdmVDbGFzcyhzLml0ZW1faCk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgiaG92ZXJfbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkJCQkuZmluZCgiYS4iICsgcy5pdGVtX2gpLm5vdChkYXRhLnJzbHQub2JqKS5yZW1vdmVDbGFzcyhzLml0ZW1faCk7CgkJCQkJCWRhdGEucnNsdC5vYmouY2hpbGRyZW4oImEiKS5hZGRDbGFzcyhzLml0ZW1faCk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgibW92ZV9ub2RlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdGhpcy5fdGhlbWVyb2xsZXIoZGF0YS5yc2x0Lm8pOwoJCQkJCQl0aGlzLl90aGVtZXJvbGxlcihkYXRhLnJzbHQub3ApOwoJCQkJCX0sIHRoaXMpKTsKCQl9LAoJCV9fZGVzdHJveSA6IGZ1bmN0aW9uICgpIHsKCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS50aGVtZXJvbGxlciwKCQkJCWMgPSBbICJ1aS1pY29uIiBdOwoJCQkkLmVhY2gocywgZnVuY3Rpb24gKGksIHYpIHsKCQkJCXYgPSB2LnNwbGl0KCIgIik7CgkJCQlpZih2Lmxlbmd0aCkgeyBjID0gYy5jb25jYXQodik7IH0KCQkJfSk7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkucmVtb3ZlQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IikKCQkJCS5maW5kKCIuIiArIGMuam9pbigiLCAuIikpLnJlbW92ZUNsYXNzKGMuam9pbigiICIpKTsKCQl9LAoJCV9mbiA6IHsKCQkJX3RoZW1lcm9sbGVyIDogZnVuY3Rpb24gKG9iaikgewoJCQkJdmFyIHMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKS50aGVtZXJvbGxlcjsKCQkJCW9iaiA9ICghb2JqIHx8IG9iaiA9PSAtMSkgPyB0aGlzLmdldF9jb250YWluZXJfdWwoKSA6IHRoaXMuX2dldF9ub2RlKG9iaik7CgkJCQlvYmogPSAoIW9iaiB8fCBvYmogPT0gLTEpID8gdGhpcy5nZXRfY29udGFpbmVyX3VsKCkgOiBvYmoucGFyZW50KCk7CgkJCQlvYmoKCQkJCQkuZmluZCgibGkuanN0cmVlLWNsb3NlZCIpCgkJCQkJCS5jaGlsZHJlbigiaW5zLmpzdHJlZS1pY29uIikucmVtb3ZlQ2xhc3Mocy5vcGVuZWQpLmFkZENsYXNzKCJ1aS1pY29uICIgKyBzLmNsb3NlZCkuZW5kKCkKCQkJCQkJLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3Mocy5pdGVtKQoJCQkJCQkJLmNoaWxkcmVuKCJpbnMuanN0cmVlLWljb24iKS5hZGRDbGFzcygidWktaWNvbiIpCgkJCQkJCQkJLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCQkJCQkJcmV0dXJuIHRoaXMuY2xhc3NOYW1lLnRvU3RyaW5nKCkKCQkJCQkJCQkJCS5yZXBsYWNlKHMuaXRlbV9jbHNkLCIiKS5yZXBsYWNlKHMuaXRlbV9vcGVuLCIiKS5yZXBsYWNlKHMuaXRlbV9sZWFmLCIiKQoJCQkJCQkJCQkJLmluZGV4T2YoInVpLWljb24tIikgPT09IC0xOwoJCQkJCQkJCX0pLnJlbW92ZUNsYXNzKHMuaXRlbV9sZWFmICsgIiAiICsgcy5pdGVtX29wZW4pLmFkZENsYXNzKHMuaXRlbV9jbHNkIHx8ICJqc3RyZWUtbm8taWNvbiIpCgkJCQkJCQkJLmVuZCgpCgkJCQkJCQkuZW5kKCkKCQkJCQkJLmVuZCgpCgkJCQkJLmVuZCgpCgkJCQkJLmZpbmQoImxpLmpzdHJlZS1vcGVuIikKCQkJCQkJLmNoaWxkcmVuKCJpbnMuanN0cmVlLWljb24iKS5yZW1vdmVDbGFzcyhzLmNsb3NlZCkuYWRkQ2xhc3MoInVpLWljb24gIiArIHMub3BlbmVkKS5lbmQoKQoJCQkJCQkuY2hpbGRyZW4oImEiKS5hZGRDbGFzcyhzLml0ZW0pCgkJCQkJCQkuY2hpbGRyZW4oImlucy5qc3RyZWUtaWNvbiIpLmFkZENsYXNzKCJ1aS1pY29uIikKCQkJCQkJCQkuZmlsdGVyKGZ1bmN0aW9uKCkgewoJCQkJCQkJCQlyZXR1cm4gdGhpcy5jbGFzc05hbWUudG9TdHJpbmcoKQoJCQkJCQkJCQkJLnJlcGxhY2Uocy5pdGVtX2Nsc2QsIiIpLnJlcGxhY2Uocy5pdGVtX29wZW4sIiIpLnJlcGxhY2Uocy5pdGVtX2xlYWYsIiIpCgkJCQkJCQkJCQkuaW5kZXhPZigidWktaWNvbi0iKSA9PT0gLTE7CgkJCQkJCQkJfSkucmVtb3ZlQ2xhc3Mocy5pdGVtX2xlYWYgKyAiICIgKyBzLml0ZW1fY2xzZCkuYWRkQ2xhc3Mocy5pdGVtX29wZW4gfHwgImpzdHJlZS1uby1pY29uIikKCQkJCQkJCQkuZW5kKCkKCQkJCQkJCS5lbmQoKQoJCQkJCQkuZW5kKCkKCQkJCQkuZW5kKCkKCQkJCQkuZmluZCgibGkuanN0cmVlLWxlYWYiKQoJCQkJCQkuY2hpbGRyZW4oImlucy5qc3RyZWUtaWNvbiIpLnJlbW92ZUNsYXNzKHMuY2xvc2VkICsgIiB1aS1pY29uICIgKyBzLm9wZW5lZCkuZW5kKCkKCQkJCQkJLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3Mocy5pdGVtKQoJCQkJCQkJLmNoaWxkcmVuKCJpbnMuanN0cmVlLWljb24iKS5hZGRDbGFzcygidWktaWNvbiIpCgkJCQkJCQkJLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCQkJCQkJcmV0dXJuIHRoaXMuY2xhc3NOYW1lLnRvU3RyaW5nKCkKCQkJCQkJCQkJCS5yZXBsYWNlKHMuaXRlbV9jbHNkLCIiKS5yZXBsYWNlKHMuaXRlbV9vcGVuLCIiKS5yZXBsYWNlKHMuaXRlbV9sZWFmLCIiKQoJCQkJCQkJCQkJLmluZGV4T2YoInVpLWljb24tIikgPT09IC0xOwoJCQkJCQkJCX0pLnJlbW92ZUNsYXNzKHMuaXRlbV9jbHNkICsgIiAiICsgcy5pdGVtX29wZW4pLmFkZENsYXNzKHMuaXRlbV9sZWFmIHx8ICJqc3RyZWUtbm8taWNvbiIpOwoJCQl9CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQkJIm9wZW5lZCIJOiAidWktaWNvbi10cmlhbmdsZS0xLXNlIiwKCQkJImNsb3NlZCIJOiAidWktaWNvbi10cmlhbmdsZS0xLWUiLAoJCQkiaXRlbSIJCTogInVpLXN0YXRlLWRlZmF1bHQiLAoJCQkiaXRlbV9oIgk6ICJ1aS1zdGF0ZS1ob3ZlciIsCgkJCSJpdGVtX2EiCTogInVpLXN0YXRlLWFjdGl2ZSIsCgkJCSJpdGVtX29wZW4iCTogInVpLWljb24tZm9sZGVyLW9wZW4iLAoJCQkiaXRlbV9jbHNkIgk6ICJ1aS1pY29uLWZvbGRlci1jb2xsYXBzZWQiLAoJCQkiaXRlbV9sZWFmIgk6ICJ1aS1pY29uLWRvY3VtZW50IgoJCX0KCX0pOwoJJChmdW5jdGlvbigpIHsKCQl2YXIgY3NzX3N0cmluZyA9ICcnICsKCQkJJy5qc3RyZWUtdGhlbWVyb2xsZXIgLnVpLWljb24geyBvdmVyZmxvdzp2aXNpYmxlOyB9ICcgKwoJCQknLmpzdHJlZS10aGVtZXJvbGxlciBhIHsgcGFkZGluZzowIDJweDsgfSAnICsKCQkJJy5qc3RyZWUtdGhlbWVyb2xsZXIgLmpzdHJlZS1uby1pY29uIHsgZGlzcGxheTpub25lOyB9JzsKCQkkLnZha2F0YS5jc3MuYWRkX3NoZWV0KHsgc3RyIDogY3NzX3N0cmluZywgdGl0bGUgOiAianN0cmVlIiB9KTsKCX0pOwp9KShqUXVlcnkpOwovLyovCgovKgogKiBqc1RyZWUgdW5pcXVlIHBsdWdpbgogKiBGb3JjZXMgZGlmZmVyZW50IG5hbWVzIGFtb25nc3Qgc2libGluZ3MgKHN0aWxsIGEgYml0IGV4cGVyaW1lbnRhbCkKICogTk9URTogZG9lcyBub3QgY2hlY2sgbGFuZ3VhZ2UgdmVyc2lvbnMgKGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGhhdmUgbm9kZXMgd2l0aCB0aGUgc2FtZSB0aXRsZSwgZXZlbiBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzKQogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oInVuaXF1ZSIsIHsKCQlfX2luaXQgOiBmdW5jdGlvbiAoKSB7CgkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpCgkJCQkuYmluZCgiYmVmb3JlLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdmFyIG5tcyA9IFtdLCByZXMgPSB0cnVlLCBwLCB0OwoJCQkJCQlpZihkYXRhLmZ1bmMgPT0gIm1vdmVfbm9kZSIpIHsKCQkJCQkJCS8vIG9iaiwgcmVmLCBwb3NpdGlvbiwgaXNfY29weSwgaXNfcHJlcGFyZWQsIHNraXBfY2hlY2sKCQkJCQkJCWlmKGRhdGEuYXJnc1s0XSA9PT0gdHJ1ZSkgewoJCQkJCQkJCWlmKGRhdGEuYXJnc1swXS5vICYmIGRhdGEuYXJnc1swXS5vLmxlbmd0aCkgewoJCQkJCQkJCQlkYXRhLmFyZ3NbMF0uby5jaGlsZHJlbigiYSIpLmVhY2goZnVuY3Rpb24gKCkgeyBubXMucHVzaCgkKHRoaXMpLnRleHQoKS5yZXBsYWNlKC9eXHMrL2csIiIpKTsgfSk7CgkJCQkJCQkJCXJlcyA9IHRoaXMuX2NoZWNrX3VuaXF1ZShubXMsIGRhdGEuYXJnc1swXS5ucC5maW5kKCI+IHVsID4gbGkiKS5ub3QoZGF0YS5hcmdzWzBdLm8pLCAibW92ZV9ub2RlIik7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmKGRhdGEuZnVuYyA9PSAiY3JlYXRlX25vZGUiKSB7CgkJCQkJCQkvLyBvYmosIHBvc2l0aW9uLCBqcywgY2FsbGJhY2ssIGlzX2xvYWRlZAoJCQkJCQkJaWYoZGF0YS5hcmdzWzRdIHx8IHRoaXMuX2lzX2xvYWRlZChkYXRhLmFyZ3NbMF0pKSB7CgkJCQkJCQkJcCA9IHRoaXMuX2dldF9ub2RlKGRhdGEuYXJnc1swXSk7CgkJCQkJCQkJaWYoZGF0YS5hcmdzWzFdICYmIChkYXRhLmFyZ3NbMV0gPT09ICJiZWZvcmUiIHx8IGRhdGEuYXJnc1sxXSA9PT0gImFmdGVyIikpIHsKCQkJCQkJCQkJcCA9IHRoaXMuX2dldF9wYXJlbnQoZGF0YS5hcmdzWzBdKTsKCQkJCQkJCQkJaWYoIXAgfHwgcCA9PT0gLTEpIHsgcCA9IHRoaXMuZ2V0X2NvbnRhaW5lcigpOyB9CgkJCQkJCQkJfQoJCQkJCQkJCWlmKHR5cGVvZiBkYXRhLmFyZ3NbMl0gPT09ICJzdHJpbmciKSB7IG5tcy5wdXNoKGRhdGEuYXJnc1syXSk7IH0KCQkJCQkJCQllbHNlIGlmKCFkYXRhLmFyZ3NbMl0gfHwgIWRhdGEuYXJnc1syXS5kYXRhKSB7IG5tcy5wdXNoKHRoaXMuX2dldF9zdHJpbmcoIm5ld19ub2RlIikpOyB9CgkJCQkJCQkJZWxzZSB7IG5tcy5wdXNoKGRhdGEuYXJnc1syXS5kYXRhKTsgfQoJCQkJCQkJCXJlcyA9IHRoaXMuX2NoZWNrX3VuaXF1ZShubXMsIHAuZmluZCgiPiB1bCA+IGxpIiksICJjcmVhdGVfbm9kZSIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmKGRhdGEuZnVuYyA9PSAicmVuYW1lX25vZGUiKSB7CgkJCQkJCQkvLyBvYmosIHZhbAoJCQkJCQkJbm1zLnB1c2goZGF0YS5hcmdzWzFdKTsKCQkJCQkJCXQgPSB0aGlzLl9nZXRfbm9kZShkYXRhLmFyZ3NbMF0pOwoJCQkJCQkJcCA9IHRoaXMuX2dldF9wYXJlbnQodCk7CgkJCQkJCQlpZighcCB8fCBwID09PSAtMSkgeyBwID0gdGhpcy5nZXRfY29udGFpbmVyKCk7IH0KCQkJCQkJCXJlcyA9IHRoaXMuX2NoZWNrX3VuaXF1ZShubXMsIHAuZmluZCgiPiB1bCA+IGxpIikubm90KHQpLCAicmVuYW1lX25vZGUiKTsKCQkJCQkJfQoJCQkJCQlpZighcmVzKSB7CgkJCQkJCQllLnN0b3BQcm9wYWdhdGlvbigpOwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9CgkJCQkJfSwgdGhpcykpOwoJCX0sCgkJZGVmYXVsdHMgOiB7CgkJCWVycm9yX2NhbGxiYWNrIDogJC5ub29wCgkJfSwKCQlfZm4gOiB7CgkJCV9jaGVja191bmlxdWUgOiBmdW5jdGlvbiAobm1zLCBwLCBmdW5jKSB7CgkJCQl2YXIgY25tcyA9IFtdLCBvayA9IHRydWU7CgkJCQlwLmNoaWxkcmVuKCJhIikuZWFjaChmdW5jdGlvbiAoKSB7IGNubXMucHVzaCgkKHRoaXMpLnRleHQoKS5yZXBsYWNlKC9eXHMrL2csIiIpKTsgfSk7CgkJCQlpZighY25tcy5sZW5ndGggfHwgIW5tcy5sZW5ndGgpIHsgcmV0dXJuIHRydWU7IH0KCQkJCSQuZWFjaChubXMsIGZ1bmN0aW9uIChpLCB2KSB7CgkJCQkJaWYoJC5pbkFycmF5KHYsIGNubXMpICE9PSAtMSkgewoJCQkJCQlvayA9IGZhbHNlOwoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfSk7CgkJCQlpZighb2spIHsKCQkJCQl0aGlzLl9nZXRfc2V0dGluZ3MoKS51bmlxdWUuZXJyb3JfY2FsbGJhY2suY2FsbChudWxsLCBubXMsIHAsIGZ1bmMpOwoJCQkJfQoJCQkJcmV0dXJuIG9rOwoJCQl9LAoJCQljaGVja19tb3ZlIDogZnVuY3Rpb24gKCkgewoJCQkJaWYoIXRoaXMuX19jYWxsX29sZCgpKSB7IHJldHVybiBmYWxzZTsgfQoJCQkJdmFyIHAgPSB0aGlzLl9nZXRfbW92ZSgpLCBubXMgPSBbXTsKCQkJCWlmKHAubyAmJiBwLm8ubGVuZ3RoKSB7CgkJCQkJcC5vLmNoaWxkcmVuKCJhIikuZWFjaChmdW5jdGlvbiAoKSB7IG5tcy5wdXNoKCQodGhpcykudGV4dCgpLnJlcGxhY2UoL15ccysvZywiIikpOyB9KTsKCQkJCQlyZXR1cm4gdGhpcy5fY2hlY2tfdW5pcXVlKG5tcywgcC5ucC5maW5kKCI+IHVsID4gbGkiKS5ub3QocC5vKSwgImNoZWNrX21vdmUiKTsKCQkJCX0KCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJfSk7Cn0pKGpRdWVyeSk7Ci8vKi8KCi8qCiAqIGpzVHJlZSB3aG9sZXJvdyBwbHVnaW4KICogTWFrZXMgc2VsZWN0IGFuZCBob3ZlciB3b3JrIG9uIHRoZSBlbnRpcmUgd2lkdGggb2YgdGhlIG5vZGUKICogTUFZIEJFIEhFQVZZIElOIExBUkdFIERPTQogKi8KKGZ1bmN0aW9uICgkKSB7CgkkLmpzdHJlZS5wbHVnaW4oIndob2xlcm93IiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJaWYoIXRoaXMuZGF0YS51aSkgeyB0aHJvdyAianNUcmVlIHdob2xlcm93OiBqc1RyZWUgVUkgcGx1Z2luIG5vdCBpbmNsdWRlZC4iOyB9CgkJCXRoaXMuZGF0YS53aG9sZXJvdy5odG1sID0gZmFsc2U7CgkJCXRoaXMuZGF0YS53aG9sZXJvdy50byA9IGZhbHNlOwoJCQl0aGlzLmdldF9jb250YWluZXIoKQoJCQkJLmJpbmQoImluaXQuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQl0aGlzLl9nZXRfc2V0dGluZ3MoKS5jb3JlLmFuaW1hdGlvbiA9IDA7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgib3Blbl9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWUgY2xlYW5fbm9kZS5qc3RyZWUgbG9hZGVkLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJdGhpcy5fcHJlcGFyZV93aG9sZXJvd19zcGFuKCBkYXRhICYmIGRhdGEucnNsdCAmJiBkYXRhLnJzbHQub2JqID8gZGF0YS5yc2x0Lm9iaiA6IC0xICk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgic2VhcmNoLmpzdHJlZSBjbGVhcl9zZWFyY2guanN0cmVlIHJlb3Blbi5qc3RyZWUgYWZ0ZXJfb3Blbi5qc3RyZWUgYWZ0ZXJfY2xvc2UuanN0cmVlIGNyZWF0ZV9ub2RlLmpzdHJlZSBkZWxldGVfbm9kZS5qc3RyZWUgY2xlYW5fbm9kZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCWlmKHRoaXMuZGF0YS50bykgeyBjbGVhclRpbWVvdXQodGhpcy5kYXRhLnRvKTsgfQoJCQkJCQl0aGlzLmRhdGEudG8gPSBzZXRUaW1lb3V0KCAoZnVuY3Rpb24gKHQsIG8pIHsgcmV0dXJuIGZ1bmN0aW9uKCkgeyB0Ll9wcmVwYXJlX3dob2xlcm93X3VsKG8pOyB9OyB9KSh0aGlzLCAgZGF0YSAmJiBkYXRhLnJzbHQgJiYgZGF0YS5yc2x0Lm9iaiA/IGRhdGEucnNsdC5vYmogOiAtMSksIDApOwoJCQkJCX0sIHRoaXMpKQoJCQkJLmJpbmQoImRlc2VsZWN0X2FsbC5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7CgkJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIiA+IC5qc3RyZWUtd2hvbGVyb3cgLmpzdHJlZS1jbGlja2VkIikucmVtb3ZlQ2xhc3MoImpzdHJlZS1jbGlja2VkICIgKyAodGhpcy5kYXRhLnRoZW1lcm9sbGVyID8gdGhpcy5fZ2V0X3NldHRpbmdzKCkudGhlbWVyb2xsZXIuaXRlbV9hIDogIiIgKSk7CgkJCQkJfSwgdGhpcykpCgkJCQkuYmluZCgic2VsZWN0X25vZGUuanN0cmVlIGRlc2VsZWN0X25vZGUuanN0cmVlICIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHsKCQkJCQkJZGF0YS5yc2x0Lm9iai5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJCXZhciByZWYgPSBkYXRhLmluc3QuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIiA+IC5qc3RyZWUtd2hvbGVyb3cgbGk6dmlzaWJsZTplcSgiICsgKCBwYXJzZUludCgoKCQodGhpcykub2Zmc2V0KCkudG9wIC0gZGF0YS5pbnN0LmdldF9jb250YWluZXIoKS5vZmZzZXQoKS50b3AgKyBkYXRhLmluc3QuZ2V0X2NvbnRhaW5lcigpWzBdLnNjcm9sbFRvcCkgLyBkYXRhLmluc3QuZGF0YS5jb3JlLmxpX2hlaWdodCksMTApKSArICIpIik7CgkJCQkJCQkvLyByZWYuY2hpbGRyZW4oImEiKVtlLnR5cGUgPT09ICJzZWxlY3Rfbm9kZSIgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIl0oImpzdHJlZS1jbGlja2VkIik7CgkJCQkJCQlyZWYuY2hpbGRyZW4oImEiKS5hdHRyKCJjbGFzcyIsZGF0YS5yc2x0Lm9iai5jaGlsZHJlbigiYSIpLmF0dHIoImNsYXNzIikpOwoJCQkJCQl9KTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5iaW5kKCJob3Zlcl9ub2RlLmpzdHJlZSBkZWhvdmVyX25vZGUuanN0cmVlIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkgewoJCQkJCQl0aGlzLmdldF9jb250YWluZXIoKS5maW5kKCIgPiAuanN0cmVlLXdob2xlcm93IC5qc3RyZWUtaG92ZXJlZCIpLnJlbW92ZUNsYXNzKCJqc3RyZWUtaG92ZXJlZCAiICsgKHRoaXMuZGF0YS50aGVtZXJvbGxlciA/IHRoaXMuX2dldF9zZXR0aW5ncygpLnRoZW1lcm9sbGVyLml0ZW1faCA6ICIiICkpOwoJCQkJCQlpZihlLnR5cGUgPT09ICJob3Zlcl9ub2RlIikgewoJCQkJCQkJdmFyIHJlZiA9IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIiA+IC5qc3RyZWUtd2hvbGVyb3cgbGk6dmlzaWJsZTplcSgiICsgKCBwYXJzZUludCgoKGRhdGEucnNsdC5vYmoub2Zmc2V0KCkudG9wIC0gdGhpcy5nZXRfY29udGFpbmVyKCkub2Zmc2V0KCkudG9wICsgdGhpcy5nZXRfY29udGFpbmVyKClbMF0uc2Nyb2xsVG9wKSAvIHRoaXMuZGF0YS5jb3JlLmxpX2hlaWdodCksMTApKSArICIpIik7CgkJCQkJCQkvLyByZWYuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygianN0cmVlLWhvdmVyZWQiKTsKCQkJCQkJCXJlZi5jaGlsZHJlbigiYSIpLmF0dHIoImNsYXNzIixkYXRhLnJzbHQub2JqLmNoaWxkcmVuKCIuanN0cmVlLWhvdmVyZWQiKS5hdHRyKCJjbGFzcyIpKTsKCQkJCQkJfQoJCQkJCX0sIHRoaXMpKQoJCQkJLmRlbGVnYXRlKCIuanN0cmVlLXdob2xlcm93LXNwYW4sIGlucy5qc3RyZWUtaWNvbiwgbGkiLCAiY2xpY2suanN0cmVlIiwgZnVuY3Rpb24gKGUpIHsKCQkJCQkJdmFyIG4gPSAkKGUuY3VycmVudFRhcmdldCk7CgkJCQkJCWlmKGUudGFyZ2V0LnRhZ05hbWUgPT09ICJBIiB8fCAoZS50YXJnZXQudGFnTmFtZSA9PT0gIklOUyIgJiYgbi5jbG9zZXN0KCJsaSIpLmlzKCIuanN0cmVlLW9wZW4sIC5qc3RyZWUtY2xvc2VkIikpKSB7IHJldHVybjsgfQoJCQkJCQluLmNsb3Nlc3QoImxpIikuY2hpbGRyZW4oImE6dmlzaWJsZTplcSgwKSIpLmNsaWNrKCk7CgkJCQkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJfSkKCQkJCS5kZWxlZ2F0ZSgibGkiLCAibW91c2VvdmVyLmpzdHJlZSIsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJCQkJZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKCQkJCQkJaWYoJChlLmN1cnJlbnRUYXJnZXQpLmNoaWxkcmVuKCIuanN0cmVlLWhvdmVyZWQsIC5qc3RyZWUtY2xpY2tlZCIpLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KCQkJCQkJdGhpcy5ob3Zlcl9ub2RlKGUuY3VycmVudFRhcmdldCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9LCB0aGlzKSkKCQkJCS5kZWxlZ2F0ZSgibGkiLCAibW91c2VsZWF2ZS5qc3RyZWUiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CgkJCQkJCWlmKCQoZS5jdXJyZW50VGFyZ2V0KS5jaGlsZHJlbigiYSIpLmhhc0NsYXNzKCJqc3RyZWUtaG92ZXJlZCIpLmxlbmd0aCkgeyByZXR1cm47IH0KCQkJCQkJdGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTsKCQkJCQl9LCB0aGlzKSk7CgkJCWlmKGlzX2llNyB8fCBpc19pZTYpIHsKCQkJCSQudmFrYXRhLmNzcy5hZGRfc2hlZXQoeyBzdHIgOiAiLmpzdHJlZS0iICsgdGhpcy5nZXRfaW5kZXgoKSArICIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfSAiLCB0aXRsZSA6ICJqc3RyZWUiIH0pOwoJCQl9CgkJfSwKCQlkZWZhdWx0cyA6IHsKCQl9LAoJCV9fZGVzdHJveSA6IGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuY2hpbGRyZW4oIi5qc3RyZWUtd2hvbGVyb3ciKS5yZW1vdmUoKTsKCQkJdGhpcy5nZXRfY29udGFpbmVyKCkuZmluZCgiLmpzdHJlZS13aG9sZXJvdy1zcGFuIikucmVtb3ZlKCk7CgkJfSwKCQlfZm4gOiB7CgkJCV9wcmVwYXJlX3dob2xlcm93X3NwYW4gOiBmdW5jdGlvbiAob2JqKSB7CgkJCQlvYmogPSAhb2JqIHx8IG9iaiA9PSAtMSA/IHRoaXMuZ2V0X2NvbnRhaW5lcigpLmZpbmQoIj4gdWwgPiBsaSIpIDogdGhpcy5fZ2V0X25vZGUob2JqKTsKCQkJCWlmKG9iaiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9IC8vIGFkZGVkIGZvciByZW1vdmluZyByb290IG5vZGVzCgkJCQlvYmouZWFjaChmdW5jdGlvbiAoKSB7CgkJCQkJJCh0aGlzKS5maW5kKCJsaSIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJCQkJdmFyICR0ID0gJCh0aGlzKTsKCQkJCQkJaWYoJHQuY2hpbGRyZW4oIi5qc3RyZWUtd2hvbGVyb3ctc3BhbiIpLmxlbmd0aCkgeyByZXR1cm4gdHJ1ZTsgfQoJCQkJCQkkdC5wcmVwZW5kKCI8c3BhbiBjbGFzcz0nanN0cmVlLXdob2xlcm93LXNwYW4nIHN0eWxlPSd3aWR0aDoiICsgKCR0LnBhcmVudHNVbnRpbCgiLmpzdHJlZSIsImxpIikubGVuZ3RoICogMTgpICsgInB4Oyc+JiMxNjA7PC9zcGFuPiIpOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0sCgkJCV9wcmVwYXJlX3dob2xlcm93X3VsIDogZnVuY3Rpb24gKCkgewoJCQkJdmFyIG8gPSB0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigidWwiKS5lcSgwKSwgaCA9IG8uaHRtbCgpOwoJCQkJby5hZGRDbGFzcygianN0cmVlLXdob2xlcm93LXJlYWwiKTsKCQkJCWlmKHRoaXMuZGF0YS53aG9sZXJvdy5sYXN0X2h0bWwgIT09IGgpIHsKCQkJCQl0aGlzLmRhdGEud2hvbGVyb3cubGFzdF9odG1sID0gaDsKCQkJCQl0aGlzLmdldF9jb250YWluZXIoKS5jaGlsZHJlbigiLmpzdHJlZS13aG9sZXJvdyIpLnJlbW92ZSgpOwoJCQkJCXRoaXMuZ2V0X2NvbnRhaW5lcigpLmFwcGVuZCgKCQkJCQkJby5jbG9uZSgpLnJlbW92ZUNsYXNzKCJqc3RyZWUtd2hvbGVyb3ctcmVhbCIpCgkJCQkJCQkud3JhcEFsbCgiPGRpdiBjbGFzcz0nanN0cmVlLXdob2xlcm93JyAvPiIpLnBhcmVudCgpCgkJCQkJCQkud2lkdGgoby5wYXJlbnQoKVswXS5zY3JvbGxXaWR0aCkKCQkJCQkJCS5jc3MoInRvcCIsIChvLmhlaWdodCgpICsgKCBpc19pZTcgPyA1IDogMCkpICogLTEgKQoJCQkJCQkJLmZpbmQoImxpW2lkXSIpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsgfSkuZW5kKCkKCQkJCQkpOwoJCQkJfQoJCQl9CgkJfQoJfSk7CgkkKGZ1bmN0aW9uKCkgewoJCXZhciBjc3Nfc3RyaW5nID0gJycgKwoJCQknLmpzdHJlZSAuanN0cmVlLXdob2xlcm93LXJlYWwgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxOyB9ICcgKwoJCQknLmpzdHJlZSAuanN0cmVlLXdob2xlcm93LXJlYWwgbGkgeyBjdXJzb3I6cG9pbnRlcjsgfSAnICsKCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdy1yZWFsIGEgeyBib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDsgfSAnICsKCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyB7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjA7IGhlaWdodDowOyB9ICcgKwoJCQknLmpzdHJlZSAuanN0cmVlLXdob2xlcm93IHVsLCAuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgbGkgeyB3aWR0aDoxMDAlOyB9ICcgKwoJCQknLmpzdHJlZSAuanN0cmVlLXdob2xlcm93LCAuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgdWwsIC5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBsaSwgLmpzdHJlZSAuanN0cmVlLXdob2xlcm93IGEgeyBtYXJnaW46MCAhaW1wb3J0YW50OyBwYWRkaW5nOjAgIWltcG9ydGFudDsgfSAnICsKCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdywgLmpzdHJlZSAuanN0cmVlLXdob2xlcm93IHVsLCAuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgbGkgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IH0nICsKCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBpbnMsIC5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBzcGFuLCAuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgaW5wdXQgeyBkaXNwbGF5Om5vbmUgIWltcG9ydGFudDsgfScgKwoJCQknLmpzdHJlZSAuanN0cmVlLXdob2xlcm93IGEsIC5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBhOmhvdmVyIHsgdGV4dC1pbmRlbnQ6LTk5OTlweDsgIWltcG9ydGFudDsgd2lkdGg6MTAwJTsgcGFkZGluZzowICFpbXBvcnRhbnQ7IGJvcmRlci1yaWdodC13aWR0aDowcHggIWltcG9ydGFudDsgYm9yZGVyLWxlZnQtd2lkdGg6MHB4ICFpbXBvcnRhbnQ7IH0gJyArCgkJCScuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3ctc3BhbiB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IG1hcmdpbjowcHg7IHBhZGRpbmc6MDsgaGVpZ2h0OjE4cHg7IGJvcmRlci13aWR0aDowOyBwYWRkaW5nOjA7IHotaW5kZXg6MDsgfSc7CgkJaWYoaXNfZmYyKSB7CgkJCWNzc19zdHJpbmcgKz0gJycgKwoJCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBhIHsgZGlzcGxheTpibG9jazsgaGVpZ2h0OjE4cHg7IG1hcmdpbjowOyBwYWRkaW5nOjA7IGJvcmRlcjowOyB9ICcgKwoJCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdy1yZWFsIGEgeyBib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDsgfSAnOwoJCX0KCQlpZihpc19pZTcgfHwgaXNfaWU2KSB7CgkJCWNzc19zdHJpbmcgKz0gJycgKwoJCQkJJy5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdywgLmpzdHJlZSAuanN0cmVlLXdob2xlcm93IGxpLCAuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgdWwsIC5qc3RyZWUgLmpzdHJlZS13aG9sZXJvdyBhIHsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgbGluZS1oZWlnaHQ6MThweDsgfSAnICsKCQkJCScuanN0cmVlIC5qc3RyZWUtd2hvbGVyb3cgYSB7IGRpc3BsYXk6YmxvY2s7IGhlaWdodDoxOHB4OyBsaW5lLWhlaWdodDoxOHB4OyBvdmVyZmxvdzpoaWRkZW47IH0gJzsKCQl9CgkJJC52YWthdGEuY3NzLmFkZF9zaGVldCh7IHN0ciA6IGNzc19zdHJpbmcsIHRpdGxlIDogImpzdHJlZSIgfSk7Cgl9KTsKfSkoalF1ZXJ5KTsKLy8qLwoKLyoKKiBqc1RyZWUgbW9kZWwgcGx1Z2luCiogVGhpcyBwbHVnaW4gZ2V0cyBqc3RyZWUgdG8gdXNlIGEgY2xhc3MgbW9kZWwgdG8gcmV0cmlldmUgZGF0YSwgY3JlYXRpbmcgZ3JlYXQgZHluYW1pc20KKi8KKGZ1bmN0aW9uICgkKSB7Cgl2YXIgbm9kZUludGVyZmFjZSA9IFsiZ2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbkNvdW50IiwiZ2V0QXR0ciIsImdldE5hbWUiLCJnZXRQcm9wcyJdLAoJCXZhbGlkYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24ob2JqLCBpbnRlcikgewoJCQl2YXIgdmFsaWQgPSB0cnVlOwoJCQlvYmogPSBvYmogfHwge307CgkJCWludGVyID0gW10uY29uY2F0KGludGVyKTsKCQkJJC5lYWNoKGludGVyLCBmdW5jdGlvbiAoaSwgdikgewoJCQkJaWYoISQuaXNGdW5jdGlvbihvYmpbdl0pKSB7IHZhbGlkID0gZmFsc2U7IHJldHVybiBmYWxzZTsgfQoJCQl9KTsKCQkJcmV0dXJuIHZhbGlkOwoJCX07CgkkLmpzdHJlZS5wbHVnaW4oIm1vZGVsIiwgewoJCV9faW5pdCA6IGZ1bmN0aW9uICgpIHsKCQkJaWYoIXRoaXMuZGF0YS5qc29uX2RhdGEpIHsgdGhyb3cgImpzVHJlZSBtb2RlbDoganNUcmVlIGpzb25fZGF0YSBwbHVnaW4gbm90IGluY2x1ZGVkLiI7IH0KCQkJdGhpcy5fZ2V0X3NldHRpbmdzKCkuanNvbl9kYXRhLmRhdGEgPSBmdW5jdGlvbiAobiwgYikgewoJCQkJdmFyIG9iaiA9IChuID09IC0xKSA/IHRoaXMuX2dldF9zZXR0aW5ncygpLm1vZGVsLm9iamVjdCA6IG4uZGF0YSgianN0cmVlX21vZGVsIik7CgkJCQlpZighdmFsaWRhdGVJbnRlcmZhY2Uob2JqLCBub2RlSW50ZXJmYWNlKSkgeyByZXR1cm4gYi5jYWxsKG51bGwsIGZhbHNlKTsgfQoJCQkJaWYodGhpcy5fZ2V0X3NldHRpbmdzKCkubW9kZWwuYXN5bmMpIHsKCQkJCQlvYmouZ2V0Q2hpbGRyZW4oJC5wcm94eShmdW5jdGlvbiAoZGF0YSkgewoJCQkJCQl0aGlzLm1vZGVsX2RvbmUoZGF0YSwgYik7CgkJCQkJfSwgdGhpcykpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdGhpcy5tb2RlbF9kb25lKG9iai5nZXRDaGlsZHJlbigpLCBiKTsKCQkJCX0KCQkJfTsKCQl9LAoJCWRlZmF1bHRzIDogewoJCQlvYmplY3QgOiBmYWxzZSwKCQkJaWRfcHJlZml4IDogZmFsc2UsCgkJCWFzeW5jIDogZmFsc2UKCQl9LAoJCV9mbiA6IHsKCQkJbW9kZWxfZG9uZSA6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykgewoJCQkJdmFyIHJldCA9IFtdLAoJCQkJCXMgPSB0aGlzLl9nZXRfc2V0dGluZ3MoKSwKCQkJCQlfdGhpcyA9IHRoaXM7CgoJCQkJaWYoISQuaXNBcnJheShkYXRhKSkgeyBkYXRhID0gW2RhdGFdOyB9CgkJCQkkLmVhY2goZGF0YSwgZnVuY3Rpb24gKGksIG5kKSB7CgkJCQkJdmFyIHIgPSBuZC5nZXRQcm9wcygpIHx8IHt9OwoJCQkJCXIuYXR0ciA9IG5kLmdldEF0dHIoKSB8fCB7fTsKCQkJCQlpZihuZC5nZXRDaGlsZHJlbkNvdW50KCkpIHsgci5zdGF0ZSA9ICJjbG9zZWQiOyB9CgkJCQkJci5kYXRhID0gbmQuZ2V0TmFtZSgpOwoJCQkJCWlmKCEkLmlzQXJyYXkoci5kYXRhKSkgeyByLmRhdGEgPSBbci5kYXRhXTsgfQoJCQkJCWlmKF90aGlzLmRhdGEudHlwZXMgJiYgJC5pc0Z1bmN0aW9uKG5kLmdldFR5cGUpKSB7CgkJCQkJCXIuYXR0cltzLnR5cGVzLnR5cGVfYXR0cl0gPSBuZC5nZXRUeXBlKCk7CgkJCQkJfQoJCQkJCWlmKHIuYXR0ci5pZCAmJiBzLm1vZGVsLmlkX3ByZWZpeCkgeyByLmF0dHIuaWQgPSBzLm1vZGVsLmlkX3ByZWZpeCArIHIuYXR0ci5pZDsgfQoJCQkJCWlmKCFyLm1ldGFkYXRhKSB7IHIubWV0YWRhdGEgPSB7IH07IH0KCQkJCQlyLm1ldGFkYXRhLmpzdHJlZV9tb2RlbCA9IG5kOwoJCQkJCXJldC5wdXNoKHIpOwoJCQkJfSk7CgkJCQljYWxsYmFjay5jYWxsKG51bGwsIHJldCk7CgkJCX0KCQl9Cgl9KTsKfSkoalF1ZXJ5KTsKLy8qLwoKfSkoKTs=",
	"list.css":                            "LyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCgoqIHsKICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwp9CgoucG9wdXAgewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cn0KCnRhYmxlIHsKICAgIGZvbnQtc2l6ZTogMTBwdDsKfQoKLnByY2hhbmdlID4gdGQgewogICAgcGFkZGluZy10b3A6IDEwcHg7CiAgICBmb250LXNpemU6IGxhcmdlOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5lbnRyeSB7CiAgICBiYWNrZ3JvdW5kOiBub25lIHJlcGVhdCBzY3JvbGwgMCAwICNGM0Y1RkM7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDQ0NDOwp9CgouZW50cnkgPiB0ZCB7CiAgICBwYWRkaW5nOiA0cHg7Cn0KCi5ldGl0bGUgewogICAgd2lkdGg6IDY1JTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouZXRpdGxlID4gcHJlIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5ldGl0bGUgPiBhIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLnByaW9yaXR5YnV0dG9uIHsKICAgIHdpZHRoOiA2MHB4OwogICAgY29sb3I6IGJsYWNrOwp9CgoucHJpb3JpdHljbGFzc19OT1cgewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsKfQoucHJpb3JpdHljbGFzc19MQVRFUiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cn0KLnByaW9yaXR5Y2xhc3NfVElNRUQgewogICAgYmFja2dyb3VuZC1jb2xvcjogb3JhbmdlOwp9Ci5wcmlvcml0eWNsYXNzX0RPTkUgewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5Owp9Ci5wcmlvcml0eWNsYXNzX1NUSUNLWSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7Cn0KLnByaW9yaXR5Y2xhc3NfTk9URVMgewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlOwp9Cgouc2NyZXJyb3IgewogICAgY29sb3I6IHJlZDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cg==",
	"listcommon.css":                      "QGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogRm9udEF3ZXNvbWU7CglzcmM6IHVybCgnL2ZvbnRhd2Vzb21lLndvZmYnKTsKfQoKLmFkdm1lbnUgewogIGZsb2F0OiByaWdodDsKICBmb250LXNpemU6IHgtc21hbGw7CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi5tYWlubWVudSB7CiAgZm9udC1zaXplOiBzbWFsbDsKICBkaXNwbGF5OiBpbmxpbmU7Cn0KCi5tYWlubWVudV9pdGVtIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcGFkZGluZy1sZWZ0OiAxMHB4OwogIGRpc3BsYXk6IGlubGluZTsKfQoKLnBvcHVwIHsKICBwYWRkaW5nOiA4cHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMjBweDsKICB6LWluZGV4OiA5MDAwOwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5wb3BidXR0b25zIHsKICBmbG9hdDogcmlnaHQ7Cn0KCi5rZXlpbmZvIHsKICBmb250LXNpemU6IHgtc21hbGw7Cn0KCi5uYXZsaXN0IHsKICBsaXN0LXN0eWxlLWltYWdlOiBub25lOwogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7CiAgcGFkZGluZy1sZWZ0OiAwcHg7Cn0KCi5tYWludGFibGUgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgd2lkdGg6IDEwMCU7Cn0KCi5lZGl0b3Igewp9CgoKLmVkaXRvciBpbnB1dFtuYW1lPSJlZHRpdGxlIl0gewogIHdpZHRoOiA5OSU7CiAgbWFyZ2luLWJvdHRvbTogNXB4OwogIG1hcmdpbi10b3A6IDVweDsKfQoKLmVkaXRvciB0ZXh0YXJlYVtuYW1lPSJlZHRleHQiXSB7CiAgd2lkdGg6IDk5JTsKICBkaXNwbGF5OiBpbmxpbmU7Cn0KCi5zY3JlcnJvciB7CiAgcGFkZGluZzogMTVweDsKfQoKLnN0YXRfdGFnLCAuc3RhdF90b3RhbCwgLnN0YXRfZG9uZSwgLnN0YXRfdGltZWQgewogIGJvcmRlci1yaWdodDogc29saWQgdGhpbjsKfQoKI29udG9zYXZpbmcgewogIG1hcmdpbi10b3A6IDJleDsKfQoKI29udG9uYXZfdGQgewogIHdpZHRoOiAxNSU7Cn0KCiNvbnRvbmF2X3RkIHVsIHsKCXBhZGRpbmctbGVmdDogMjBweDsKCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKfQoKLnRyZWVfZm9sZGVyIHsKCWZvbnQtZmFtaWx5OiBGb250QXdlc29tZTsKCXdoaXRlLXNwYWNlOiBub3dyYXA7CgltYXJnaW4tcmlnaHQ6IDVweDsKfQoKLnRyZWVfZm9sZGVyIGEgewoJZm9udC1mYW1pbHk6IGluaGVyaXQ7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCltkcmFnZ2FibGVdIHsKCXVzZXItc2VsZWN0OiBub25lOwp9Cgp0YWJsZS5zdWJzdGFibGUgewoJbWFyZ2luLWxlZnQ6IDMwcHg7Cglib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwp9Cgp0ZC5zdWJzdGFibGVfZm9sZGVyIGEgewoJZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lOwp9Cgp0YWJsZS5zdWJzdGFibGUgdGQgewoJdmVydGljYWwtYWxpZ246IHRvcDsKfQoKdGQuc3Vic3RhYmxlX25hbWUgewoJcGFkZGluZy1sZWZ0OiAxNXB4OwoJcGFkZGluZy1yaWdodDogMTBweDsKfQoKdGQuc3Vic3RhYmxlX2NvbnRlbnQgewoJcGFkZGluZy1sZWZ0OiAxNXB4Owp9Cgp0ZC5zdWJzdGFibGVfY29udGVudCA+IHAgewoJbWFyZ2luLXRvcDogNXB4Cn0KCnRkLnN1YnN0YWJsZV9jb250ZW50ID4gdGFibGUuc3Vic3RhYmxlIHsKCW1hcmdpbi1sZWZ0OiAtODBweDsKfQoKLnN1YnN0YWJsZV90ZXh0YXJlYSB7Cgl3aWR0aDogMTAwJTsKCWZvbnQtc2l6ZTogMTBwdDsKfQoKdHIuc2VsZWN0ZWQgewoJYm9yZGVyOiAycHggc29saWQgcmVkOwp9",
	"loading.gif":                         "R0lGODlhEAAQAPIAAP///xos9sjM/FVi+Bos9nF9+Y6X+p2k+iH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==",
	"nfint.js":                            "dmFyIGpzb25Mb2FkaW5nID0gZmFsc2U7CnZhciBjdXJSb290ID0gIiI7CnZhciBjdXJTZWxlY3RlZCA9IHsgaWQ6ICIiLCBuYW1lOiAiIiB9Owp2YXIgY3VyQ3V0ID0geyBpZDogIiIsIG5hbWU6ICIiIH07CnZhciBjb21wbGV0ZUFjdGlvbiA9IG51bGw7CnZhciBjb21wbGV0ZUFjdGlvbkhUTUwgPSAiIjsKCmZ1bmN0aW9uIGxvYWRlZCgpIHsKCXZhciBzZWFyY2hzdHIgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKTsKCXZhciB2ID0gc2VhcmNoc3RyLnNwbGl0KCImIikKCWZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKykgewoJCXZhciB2diA9IHZbaV0uc3BsaXQoIj0iKTsKCQlpZiAodnZbMF0gPT0gInEiKSB7CgkJCWN1clJvb3QgPSBkZWNvZGVVUklDb21wb25lbnQodnZbMV0pOwoJCQlicmVhazsKCQl9Cgl9CglzZXRNZW51KCIiKTsKCXZhciBtYWluRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKTsKCWxvYWRDaGlsZHJlbkFuZChtYWluRGl2LCBjdXJSb290LCAiMCIsCgkJZnVuY3Rpb24oKSB7CgkJCXRvZ2dsZUV4cGFuZGVkQW5kKGN1clJvb3QsICIxIiwgZnVuY3Rpb24oKSB7IH0pOwoJCX0pOwp9CgpmdW5jdGlvbiBzZXRNZW51KGVyclN0cikgewoJdmFyIG1lbnVEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVudV9jbCIpOwoJaWYgKGpzb25Mb2FkaW5nKSB7CgkJbWVudURpdi5pbm5lckhUTUwgPSAiTE9BRElORyZuYnNwOzxpbWcgc3JjPSdsb2FkaW5nLmdpZic+IjsKCQlyZXR1cm47Cgl9CgoJaWYgKGNvbXBsZXRlQWN0aW9uICE9IG51bGwpIHsKCQltZW51RGl2LmlubmVySFRNTCA9IGNvbXBsZXRlQWN0aW9uSFRNTDsKCQlyZXR1cm47Cgl9CgoJaWYgKGVyclN0ciAhPSAiIikgewoJCWNvbnNvbGUuZGVidWcoIkVSUk9SOiIsIGVyclN0cik7CgkJbWVudURpdi5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J21lbnVfZXJyJz5FUlJPUjogIiArIGVyclN0ciArICI8L3NwYW4+IjsKCQlyZXR1cm47Cgl9CgoJaWYgKChjdXJDdXQuaWQgIT0gIiIpICYmIChjdXJTZWxlY3RlZC5pZCAhPSAiIikpIHsKCQltZW51RGl2LmlubmVySFRNTCA9ICJDVVRUSU5HICIgKyBjdXJDdXQuaWQgKyAiIHRvICIgKyBjdXJTZWxlY3RlZC5pZCArICI6ICh2KSBhcyBzaWJsaW5nLCAoVikgYXMgY2hpbGQsIChlc2NhcGUpIGNhbmNlbCI7CgkJcmV0dXJuOwoJfQoKCWlmIChjdXJDdXQuaWQgIT0gIiIpIHsKCQltZW51RGl2LmlubmVySFRNTCA9ICJDVVRUSU5HICIgKyBjdXJDdXQuaWQgKyAiOiBzZWxlY3QgZGVzdGluYXRpb24gb3IgKGVzY2FwZSkiOwoJCXJldHVybjsKCX0KCglpZiAoY3VyU2VsZWN0ZWQuaWQgIT0gIiIpIHsKCQltZW51RGl2LmlubmVySFRNTCA9ICJTRUxFQ1RFRCAiICsgY3VyU2VsZWN0ZWQuaWQgKyAiOiAoQSkgYWRkIGNoaWxkcmVuLCAoZSkgZWRpdCBjb250ZW50LCAob3xhKSBhZGQgc2libGluZyBvYmplY3QsICh4KSBjdXQsIChyKSByZWZyZXNoLCAoZCkgZGVsZXRlLCAoZykgZ290bywgKGVzY2FwZSkgY2FuY2VsIjsKCQlyZXR1cm4KCX0KCgltZW51RGl2LmlubmVySFRNTCA9ICJSRUFEWTogKHIpIHJlZnJlc2gsIChnKSBnb3RvIChjKSB2aWV3IGNvbmZpZ3VyYXRpb24iOwp9CgpmdW5jdGlvbiBjb21wbGV0ZV9hY3Rpb25fY2xpY2soKSB7Cgljb21wbGV0ZUFjdGlvbigpOwoJY29tcGxldGVBY3Rpb24gPSBudWxsOwp9CgpmdW5jdGlvbiBjYW5jZWxfYWN0aW9uX2NsaWNrKCkgewoJY29tcGxldGVBY3Rpb24gPSBudWxsOwoJc2V0TWVudSgiIik7Cn0KCmZ1bmN0aW9uIG1ha2VIVFRQUmVxdWVzdDIobWV0aG9kLCB1cmxzdHIsIGNvbnRlbnQsIGZuKSB7Cglqc29uTG9hZGluZyA9IHRydWU7CglzZXRNZW51KCIiKTsKCXZhciBtID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgltLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewoJCWlmIChtLnJlYWR5U3RhdGUgIT0gNCkgewoJCQlyZXR1cm47CgkJfQoJCWpzb25Mb2FkaW5nID0gZmFsc2U7CgkJaWYgKG0uc3RhdHVzICE9IDIwMCkgewoJCQlzZXRNZW51KCJSZXF1ZXN0IHJldHVybmVkICIgKyBtLnN0YXV0cyk7CgkJCXJldHVybjsKCQl9CgkJc2V0TWVudSgiIik7CgkJZm4obS5yZXNwb25zZVRleHQpOwoJfQoJbS5vcGVuKG1ldGhvZCwgdXJsc3RyLCB0cnVlKTsKCWlmIChjb250ZW50ICE9IG51bGwpIHsKCQltLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgiKQoJfQoJbS5zZW5kKGNvbnRlbnQpOwp9CgpmdW5jdGlvbiBtYWtlSFRUUFJlcXVlc3QobWV0aG9kLCB1cmxzdHIsIGNvbnRlbnQsIGZuKSB7CgltYWtlSFRUUFJlcXVlc3QyKG1ldGhvZCwgdXJsc3RyLCBjb250ZW50LCBmdW5jdGlvbihkYXRhKSB7CgkJdmFyIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7CgkJaWYgKG9iai5FcnJvciAhPSAiIikgewoJCQlzZXRNZW51KG9iai5FcnJvcik7CgkJCXJldHVybjsKCQl9CgkJZm4ob2JqKTsKCX0pOwp9CgpmdW5jdGlvbiBsb2FkQ2hpbGRyZW5BbmQoYWRpdiwgcm9vdE5hbWUsIGMsIGZuKSB7CglhZGl2LmlubmVySFRNTCA9ICIiOwoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL2xpc3QuanNvbj9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJvb3ROYW1lKSArICImYz0iICsgYywgbnVsbCwKCQlmdW5jdGlvbihyZXNwb25zZU9iaikgewoJCQlmaWxsRGl2KGFkaXYsIHJlc3BvbnNlT2JqKTsKCQkJZm4oKTsKCQl9KTsKfQoKZnVuY3Rpb24gaW5zZXJ0T2JqZWN0Um93KGRhdGFibGUsIGlkLCBuKSB7Cgl2YXIgciA9IGRhdGFibGUuaW5zZXJ0Um93KG4pOwoJci5jbGFzc0xpc3QuYWRkKCJvYmplY3Ryb3ciKTsKCXIuaWQgPSAicm93XyIgKyBpZDsKCWlmIChuIDwgMCkgewoJCXJldHVybiByOwoJfQoJcmVudW1iZXJSb3dzKGRhdGFibGUsIG4rMSk7CglyZXR1cm4gcjsKfQoKZnVuY3Rpb24gcmVudW1iZXJSb3dzKGRhdGFibGUsIHN0YXJ0KSB7Cglmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBkYXRhYmxlLnJvd3MubGVuZ3RoOyArK2kpIHsKCQl2YXIgY3IgPSBkYXRhYmxlLnJvd3NbaV07CgkJdmFyIGlkY29seCA9IGNyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImlkY29sIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTsKCQlpZiAoaWRjb2x4LmlubmVySFRNTC5pbmRleE9mKCItIikgPCAwKSB7CgkJCWlkY29seC5pbm5lckhUTUwgPSAiIiArIGk7CgkJfQoJfQp9CgpmdW5jdGlvbiBmaWxsRGl2KGFkaXYsIG9iaikgewoJaWYgKG9iai5PYmplY3RzID09IG51bGwpIHsKCQlyZXR1cm47Cgl9Cgl2YXIgZGF0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CglkYXRhYmxlLmNsYXNzTGlzdC5hZGQoIm9iamxpc3QiKTsKCWFkaXYuYXBwZW5kQ2hpbGQoZGF0YWJsZSk7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCBvYmouT2JqZWN0cy5sZW5ndGg7ICsraSkgewoJCXZhciBvID0gb2JqLk9iamVjdHNbaV07CgkJdmFyIHIgPSBpbnNlcnRPYmplY3RSb3coZGF0YWJsZSwgby5JZCwgLTEpOwoJCWZpbGxPYmplY3RSb3cociwgbywgZmFsc2UpOwoJCWlmICgoby5DaGlsZHJlbiAhPSBudWxsKSAmJiAoby5DaGlsZHJlbi5sZW5ndGggPiAwKSkgewoJCQl2YXIgY2hpbGRzY2VsbCA9IGluc2VydENoaWxkcmVuUm93QW5kQ2VsbChkYXRhYmxlLCBvLklkLCAtMSk7CgkJCWZpbGxEaXYoY2hpbGRzY2VsbCwgeyBPYmplY3RzOiBvLkNoaWxkcmVuIH0pOwoJCX0KCX0KfQoKZnVuY3Rpb24gZmlsbE9iamVjdFJvdyhyLCBvLCBlZGl0b3IpIHsKCXZhciB6ID0gIiIKCWlmIChvLkNoaWxkcmVuQ291bnQgPT0gMCkgewoJCXogKz0gIjx0ZCBjbGFzcz0nZm9sZGVyY29sJz5cdWYwOTY8L3RkPiI7Cgl9IGVsc2UgaWYgKChvLkNoaWxkcmVuICE9IG51bGwpICYmIChvLkNoaWxkcmVuLmxlbmd0aCA+IDApKSB7CgkJeiArPSAiPHRkIGNsYXNzPSdmb2xkZXJjb2wnPjxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKScgb25jbGljaz0nY2xpY2tfZm9sZGVyKHRoaXMpOyc+XHVmMTQ3PC9hPjwvdGQ+IjsKCX0gZWxzZSB7CgkJeiArPSAiPHRkIGNsYXNzPSdmb2xkZXJjb2wnPjxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKScgb25jbGljaz0nY2xpY2tfZm9sZGVyKHRoaXMpOyc+XHVmMTk2PC9hPjwvdGQ+IjsKCX0KCgl2YXIgbmFtZSA9IG8uTmFtZTsKCgl6ICs9ICI8dGQgY2xhc3M9J2lkY29sJz48YSBocmVmPScvaG9tZT9xPSIgKyBlbmNvZGVVUklDb21wb25lbnQoby5JZCkgKyAiJz4iICsgbmFtZSArICI8L2E+PC90ZD4iOwoKCWlmIChlZGl0b3IpIHsKCQl6ICs9ICI8dGQgY2xhc3M9J2NvbnRlbnRjb2wnPjx0ZXh0YXJlYSBpZD0nY29udGVudGZvcm1fIiArIG8uSWQgKyAiJz48L3RleHRhcmVhPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J29iam5hbWUnIHZhbHVlPSciICsgby5OYW1lICsgIic+PGJyPjxpbnB1dCBvbmNsaWNrPSdzYXZlb2JqZWN0X2NsaWNrKHRoaXMsIGZhbHNlKScgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nU2F2ZSAoQy1zKSc+Jm5ic3A7PGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J1NhdmUgYW5kIENsb3NlIChlc2NhcGUpJyBvbmNsaWNrPSdzYXZlb2JqZWN0X2NsaWNrKHRoaXMsIHRydWUpJz4mbmJzcDs8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nUmVuYW1lJyBvbmNsaWNrPSdyZW5hbWVvYmplY3RfY2xpY2sodGhpcyknPjwvdGQ+IjsKCX0gZWxzZSB7CgkJaWYgKG8uRWRpdGFibGUpIHsKCQkJeiArPSAiPHRkIGNsYXNzPSdjb250ZW50Y29sJyI7CgkJfSBlbHNlIHsKCQkJeiArPSAiPHRkIGNsYXNzPSdjb250ZW50Y29sIHVuZWRpdGFibGUnIjsKCQl9CgkJeiArPSAib25jbGljaz0nY2xpY2tfY29udGVudCh0aGlzKSc+PGRpdiBjbGFzcz0nZm9ybWF0dGVkdGV4dCc+IiArIG8uRm9ybWF0dGVkVGV4dCArICI8L2Rpdj48L3RkPiI7Cgl9CgoJaWYgKG8uUHJpb3JpdHkgIT0gInVua25vd24iKSB7CgkJeiArPSAiPHRkIGNsYXNzPSdwcmlvcml0eWNvbCc+PGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9JyIgKyBvLlByaW9yaXR5LnRvVXBwZXJDYXNlKCkgKyAiJyBvbmNsaWNrPSdjaGFuZ2VfcHJpb3JpdHlfY2xpY2sodGhpcywgZXZlbnQpJz48L3RkPiI7Cgl9IGVsc2UgewoJCXogKz0gIjx0ZCBjbGFzcz0ncHJpb3JpdHljb2wnPjwvdGQ+IjsKCX0KCglyLmlubmVySFRNTCA9IHo7CglpZiAoby5Qcmlvcml0eSA9PSAiZG9uZSIpIHsKCQlyLmNsYXNzTGlzdC5hZGQoInN0cmlrZWQiKTsKCX0gZWxzZSB7CgkJci5jbGFzc0xpc3QucmVtb3ZlKCJzdHJpa2VkIik7Cgl9CgoJaWYgKGVkaXRvcikgewoJCXZhciB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Zm9ybV8iICsgby5JZCk7CgkJdGEudmFsdWUgPSBvLkJvZHk7CgkJdGEuZm9jdXMoKTsKCX0KfQoKZnVuY3Rpb24gY2xpY2tfY29udGVudChlKSB7Cgl2YXIgZGFyb3cgPSBnZXRDb250YWluaW5nUm93KGUpOwoJdG9nZ2xlU2VsZWN0ZWQoZ2V0SWRGcm9tUm93KGRhcm93KSk7Cn0KCmZ1bmN0aW9uIGNsaWNrX2ZvbGRlcihlKSB7Cgl2YXIgZGFyb3cgPSBnZXRDb250YWluaW5nUm93KGUpOwoJdG9nZ2xlRXhwYW5kZWRBbmQoZ2V0SWRGcm9tUm93KGRhcm93KSwgIjEiLCBmdW5jdGlvbigpIHt9KTsKCXJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gc2F2ZW9iamVjdF9jbGljayhlLCBjbG9zZSkgewoJdmFyIGRhY2VsbCA9IGdldENvbnRhaW5pbmdDZWxsKGUpOwoJdmFyIGRhcm93ID0gZ2V0Q29udGFpbmluZ1JvdyhkYWNlbGwpOwoJdmFyIGRhaWQgPSBnZXRJZEZyb21Sb3coZGFyb3cpOwoJdmFyIHRhID0gZGFjZWxsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdOwoJdmFyIGYgPSBjbG9zZSA/IAoJCWZ1bmN0aW9uKHJldHVybk9iaikgewoJCQlmaWxsT2JqZWN0Um93KGRhcm93LCByZXR1cm5PYmouT2JqZWN0c1swXSwgIWNsb3NlKTsKCQl9IDoKCQlmdW5jdGlvbihyZXR1cm5PYmopIHsKCQl9OwoJbWFrZUhUVFBSZXF1ZXN0KCJQT1NUIiwgIi9uZi91cGRhdGUuanNvbiIsICJpZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhaWQpICsgIiZib2R5PSIgKyBlbmNvZGVVUklDb21wb25lbnQodGEudmFsdWUpLCBmKTsKfQoKZnVuY3Rpb24gcmVuYW1lb2JqZWN0X2NsaWNrKGUpIHsKCXZhciBkYWNlbGwgPSBnZXRDb250YWluaW5nQ2VsbChlKTsKCXZhciBkYXJvdyA9IGdldENvbnRhaW5pbmdSb3coZGFjZWxsKTsKCXZhciBkYWlkID0gZ2V0SWRGcm9tUm93KGRhcm93KTsKCgl2YXIgaW5wdXRzID0gZGFjZWxsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwoJdmFyIG9iam5hbWUgPSBudWxsOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyArK2kpIHsKCQlpZiAoaW5wdXRzW2ldLm5hbWUgPT0gIm9iam5hbWUiKSB7CgkJCW9iam5hbWUgPSBpbnB1dHNbaV0udmFsdWU7CgkJCWJyZWFrOwoJCX0KCX0KCglpZiAob2JqbmFtZSA9PSBudWxsKSB7CgkJcmV0dXJuOwoJfQoKCW9iam5hbWUgPSBwcm9tcHQoIlJlbmFtZSBvYmplY3QiLCBvYmpuYW1lKTsKCWlmIChvYmpuYW1lID09IG51bGwpIHsKCQlyZXR1cm47Cgl9CgoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL3VwZGF0ZS5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZGFpZCkgKyAiJm5hbWU9IiArIGVuY29kZVVSSUNvbXBvbmVudChvYmpuYW1lKSwgbnVsbCwKCQlmdW5jdGlvbihyZXR1cm5PYmopIHsKCQkJZmlsbE9iamVjdFJvdyhkYXJvdywgcmV0dXJuT2JqLk9iamVjdHNbMF0sIHRydWUpOwoJCX0pOwp9CgpmdW5jdGlvbiBnZXRDb250YWluaW5nRWxlbWVudChlLCB0YWdOYW1lKSB7Cgl0YWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpOwoJZm9yICh2YXIgZWwgPSBlOyBlbCAhPSBudWxsOyBlbCA9IGVsLnBhcmVudE5vZGUpIHsKCQlpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IHRhZ05hbWUpIHsKCQkJcmV0dXJuIGVsOwoJCX0KCX0KCXJldHVybiBudWxsOwoKfQoKZnVuY3Rpb24gZ2V0Q29udGFpbmluZ1JvdyhlKSB7CglyZXR1cm4gZ2V0Q29udGFpbmluZ0VsZW1lbnQoZSwgInRyIik7Cn0KCmZ1bmN0aW9uIGdldENvbnRhaW5pbmdUYWJsZShlKSB7CglyZXR1cm4gZ2V0Q29udGFpbmluZ0VsZW1lbnQoZSwgInRhYmxlIik7Cn0KCmZ1bmN0aW9uIGdldENvbnRhaW5pbmdDZWxsKGUpIHsKCXJldHVybiBnZXRDb250YWluaW5nRWxlbWVudChlLCAidGQiKTsKfQoKZnVuY3Rpb24gZ2V0SWRGcm9tUm93KGRhcm93KSB7CglpZiAoZGFyb3cuaWQuaW5kZXhPZigicm93XyIpID09IDApIHsKCQlyZXR1cm4gZGFyb3cuaWQuc3Vic3RyaW5nKCJyb3dfIi5sZW5ndGgpOwoJfQoJaWYgKGRhcm93LmlkLmluZGV4T2YoImNoaWxkc18iKSA9PSAwKSB7CgkJcmV0dXJuIGRhcm93LmlkLnN1YnN0cmluZygiY2hpbGRzXyIubGVuZ3RoKTsKCX0KCXJldHVybiAiIjsKfQoKZnVuY3Rpb24gZ2V0Um93RnJvbUlkKGRhaWQpIHsKCXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93XyIgKyBkYWlkKTsKfQoKZnVuY3Rpb24gdG9nZ2xlU2VsZWN0ZWQoZGFpZCkgewoJaWYgKGN1clNlbGVjdGVkLmlkICE9IGRhaWQpIHsKCQlzd2l0Y2hTZWxlY3RlZChkYWlkKTsKCX0KCglzZXRNZW51KCIiKTsKCXJldHVybgp9CgpmdW5jdGlvbiBzd2l0Y2hTZWxlY3RlZChkYWlkKSB7CglpZiAoY3VyU2VsZWN0ZWQuaWQgIT0gIiIpIHsKCQl2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvd18iICsgY3VyU2VsZWN0ZWQuaWQpOwoJCWlmIChyb3cgIT0gbnVsbCkgewoJCQlyb3cuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKCQl9Cgl9CgljdXJTZWxlY3RlZC5pZCA9IGRhaWQ7CglpZiAoY3VyU2VsZWN0ZWQuaWQgIT0gIiIpIHsKCQl2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvd18iICsgY3VyU2VsZWN0ZWQuaWQpOwoJCWlmIChyb3cgIT0gbnVsbCkgewoJCQlyb3cuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHNldEN1dChkYWlkKSB7CglpZiAoY3VyQ3V0LmlkICE9ICIiKSB7CgkJdmFyIHJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3dfIiArIGN1ckN1dC5pZCk7CgkJaWYgKHJvdyAhPSBudWxsKSB7CgkJCXJvdy5jbGFzc0xpc3QucmVtb3ZlKCJjdXR0aW5nIik7CgkJfQoJfQoJY3VyQ3V0LmlkID0gZGFpZDsKCWlmIChjdXJDdXQuaWQgIT0gIiIpIHsKCQl2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvd18iICsgY3VyQ3V0LmlkKTsKCQlpZiAocm93ICE9IG51bGwpIHsKCQkJcm93LmNsYXNzTGlzdC5hZGQoImN1dHRpbmciKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGdldENoaWxkcmVuUm93KGRhaWQpIHsKCXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hpbGRzXyIgKyBkYWlkKTsKfQoKZnVuY3Rpb24gaW5zZXJ0Q2hpbGRyZW5Sb3dBbmRDZWxsKGRhdGFibGUsIGRhaWQsIGkpIHsKCWNoaWxkc3JvdyA9IGRhdGFibGUuaW5zZXJ0Um93KGkpOwoJY2hpbGRzcm93LmlkID0gImNoaWxkc18iICsgZGFpZDsKCWNoaWxkc3Jvdy5jbGFzc0xpc3QuYWRkKCJjaGlsZHJvdyIpOwoJdmFyIGNoaWxkc2NlbGwgPSBjaGlsZHNyb3cuaW5zZXJ0Q2VsbCgtMSk7CgljaGlsZHNjZWxsLmNvbFNwYW4gPSA0OwoJcmV0dXJuIGNoaWxkc2NlbGw7Cn0KCmZ1bmN0aW9uIHRvZ2dsZUV4cGFuZGVkQW5kKGRhaWQsIGNwYXJhbSwgZm4pIHsKCXZhciBjaGlsZHNyb3cgPSBnZXRDaGlsZHJlblJvdyhkYWlkKTsKCWlmIChjaGlsZHNyb3cgPT0gbnVsbCkgewoJCXZhciBkYXJvdyA9IGdldFJvd0Zyb21JZChkYWlkKTsKCQl2YXIgZm9sZGVyeCA9IGRhcm93LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImZvbGRlcmNvbCIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07CgkJdmFyIGRhdGFibGUgPSBnZXRDb250YWluaW5nVGFibGUoZGFyb3cpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgZGF0YWJsZS5yb3dzLmxlbmd0aDsgKytpKSB7CgkJCWlmIChkYXRhYmxlLnJvd3MuaXRlbShpKS5pZCA9PSBkYXJvdy5pZCkgewoJCQkJdmFyIGNoaWxkc2NlbGwgPSBpbnNlcnRDaGlsZHJlblJvd0FuZENlbGwoZGF0YWJsZSwgZGFpZCwgaSsxKQoJCQkJbG9hZENoaWxkcmVuQW5kKGNoaWxkc2NlbGwsIGRhaWQsIGNwYXJhbSwgZm4pOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKGZvbGRlcnggIT0gbnVsbCkgewoJCQlmb2xkZXJ4LmlubmVySFRNTCA9ICJcdWYxNDciOwoJCX0KCX0gZWxzZSB7CgkJdmFyIGRhcm93ID0gZ2V0Um93RnJvbUlkKGRhaWQpOwoJCXZhciBmb2xkZXJ4ID0gZGFyb3cuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZm9sZGVyY29sIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTsKCQl2YXIgZGF0YWJsZSA9IGdldENvbnRhaW5pbmdUYWJsZShjaGlsZHNyb3cpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgZGF0YWJsZS5yb3dzLmxlbmd0aDsgKytpKSB7CgkJCWlmIChkYXRhYmxlLnJvd3MuaXRlbShpKS5pZCA9PSBjaGlsZHNyb3cuaWQpIHsKCQkJCWRhdGFibGUuZGVsZXRlUm93KGkpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKGZvbGRlcnggIT0gbnVsbCkgewoJCQlmb2xkZXJ4LmlubmVySFRNTCA9ICJcdWYxOTYiOwoJCX0KCX0KfQoKZnVuY3Rpb24ga2V5cHJlc3NmbihlKSB7Cgl2YXIgYWUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwoKCWlmIChhZSAhPSBudWxsKSB7CgkJdmFyIG4gPSBhZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CgkJaWYgKG4gPT0gInRleHRhcmVhIikgewoJCQlpZiAoZS5jdHJsS2V5ICYmIChlLmtleSA9PSAicyIpKSB7CgkJCQlzYXZlb2JqZWN0X2NsaWNrKGFlLCBmYWxzZSk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0gZWxzZSBpZiAoZS5rZXkgPT0gIkVzYyIpIHsKCQkJCXNhdmVvYmplY3RfY2xpY2soYWUsIHRydWUpOwoJCQkJcmV0dXJuIGZhbHNlCgkJCX0KCQkJcmV0dXJuOwoJCX0gZWxzZSBpZiAoKG4gPT0gImlucHV0IikgJiYgKGFlLmdldEF0dHJpYnV0ZSgidHlwZSIpICE9ICJidXR0b24iKSkgewoJCQlyZXR1cm47CgkJfQoJfQoKCWlmIChlLmtleSA9PSAiRXNjIikgewoJCXN3aXRjaFNlbGVjdGVkKCIiKTsKCQlzZXRDdXQoIiIpOwoJCW1ha2VIVFRQUmVxdWVzdCgiUFVUIiwgIi9uZi9jdXJjdXQ/aWQ9IiwgbnVsbCwgZnVuY3Rpb24ob2JqKSB7IH0pOwoJCXNldE1lbnUoIiIpOwoJCXJldHVybjsKCX0KCglpZiAoZS5rZXkgPT0gInIiKSB7CgkJcmVsb2FkRXZlcnl0aGluZygpCgkJcmV0dXJuOwoJfQoJCglpZiAoKGN1clNlbGVjdGVkLmlkID09ICIiKSAmJiAoZS5rZXkgPT0gImMiKSkgewoJCW9wZW5fY29uZmlnKCk7Cgl9CgoJaWYgKChjdXJDdXQuaWQgIT0gIiIpICYmIChjdXJTZWxlY3RlZC5pZCAhPSAiIikpIHsKCQlpZiAoZS5rZXkgPT0gInYiKSB7CgkJCXBhc3RlU2libGluZyhjdXJTZWxlY3RlZC5pZCk7CgkJCXJldHVybjsKCQl9IGVsc2UgaWYgKGUua2V5ID09ICJWIikgewoJCQlwYXN0ZUNoaWxkcmVuKGN1clNlbGVjdGVkLmlkKTsKCQkJcmV0dXJuOwoJCX0KCQlyZXR1cm47Cgl9CgoJaWYgKGUua2V5ID09ICJnIikgewoJCWlmIChjdXJTZWxlY3RlZC5pZCAhPSAiIikgewoJCQljdXJSb290ID0gY3VyU2VsZWN0ZWQuaWQ7CgkJCWN1clNlbGVjdGVkLmlkID0gIiI7CgkJCWhpc3RvcnkucHVzaFN0YXRlKCIvaG9tZT9xPSIgKyBlbmNvZGVVUklDb21wb25lbnQoY3VyUm9vdCkpOwoJCQl0b2dnbGVFeHBhbmRlZEFuZChjdXJSb290LCAiMSIsIGZ1bmN0aW9uKCkgeyB9KTsKCQkJcmVsb2FkRXZlcnl0aGluZygpOwoJCX0gZWxzZSB7CgkJCWNvbXBsZXRlQWN0aW9uSFRNTCA9ICJHbyBUbzogPGZvcm0gb25zdWJtaXQ9J2NvbXBsZXRlX2FjdGlvbl9jbGljaygpJz48aW5wdXQgaWQ9J2dvdG9ib3gnLz4mbmJzcDs8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nR28nPjwvZm9ybT48YSBpZD0nY2xhc3NpY2xpbmsnIGhyZWY9JyMnPmNsYXNzaWM8L2E+IjsKCQkJY29tcGxldGVBY3Rpb24gPSBmdW5jdGlvbigpIHsKCQkJCXZhciBnb3RvYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvdG9ib3gnKTsKCQkJCWN1clJvb3QgPSBpZENvbnZlcnRTcGFjZXMoZ290b2JveC52YWx1ZSk7CgkJCQloaXN0b3J5LnB1c2hTdGF0ZShudWxsLCAiIiwgIi9ob21lP3E9IiArIGVuY29kZVVSSUNvbXBvbmVudChjdXJSb290KSk7CgkJCQkvL3RvZ2dsZUV4cGFuZGVkQW5kKGN1clJvb3QsICIxIiwgZnVuY3Rpb24oKSB7IH0pOwoJCQkJcmVsb2FkRXZlcnl0aGluZygpOwoJCQl9CgkJCXNldE1lbnUoIiIpOwoJCQl2YXIgZ290b2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb3RvYm94Jyk7CgkJCWdvdG9ib3gudmFsdWUgPSBpZFJldmVydFNwYWNlcyhjdXJSb290KTsKCQkJZ290b2JveC5mb2N1cygpOwoKCQkJdmFyIGNsYXNzaWNsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsYXNzaWNsaW5rJyk7CgkJCWNsYXNzaWNsaW5rLmhyZWYgPSAiL2xpc3Q/cT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGdvdG9ib3gudmFsdWUpCgkJfQoJCXJldHVybjsKCX0KCglpZiAoY3VyU2VsZWN0ZWQuaWQgIT0gIiIpIHsKCQlpZiAoZS5rZXkgPT0gIkEiKSB7CgkJCWFkZENoaWxkcmVuKGN1clNlbGVjdGVkLmlkKTsKCQkJcmV0dXJuOwoJCX0gZWxzZSBpZiAoZS5rZXkgPT0gImUiKSB7CgkJCW9wZW5FZGl0b3IoY3VyU2VsZWN0ZWQuaWQpOwoJCQlyZXR1cm47CgkJfSBlbHNlIGlmICgoZS5rZXkgPT0gIm8iKSB8fCAoZS5rZXkgPT0gImEiKSkgewoJCQl2YXIgZGFpZCA9IGN1clNlbGVjdGVkLmlkOwoJCQlzd2l0Y2hTZWxlY3RlZCgiIik7CgkJCXNldE1lbnUoIiIpOwoJCQlhZGRTaWJsaW5nKGRhaWQpOwoJCQlyZXR1cm47CgkJfSBlbHNlIGlmIChlLmtleSA9PSAieCIpIHsKCQkJdmFyIGRhaWQgPSBjdXJTZWxlY3RlZC5pZDsKCQkJc3dpdGNoU2VsZWN0ZWQoIiIpCgkJCXNldEN1dChkYWlkKTsKCQkJc2V0TWVudSgiIik7CgkJCW1ha2VIVFRQUmVxdWVzdCgiUFVUIiwgIi9uZi9jdXJjdXQ/aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChkYWlkKSwgbnVsbCwgZnVuY3Rpb24ob2JqKSB7IH0pOwoJCQlyZXR1cm47CgkJfSBlbHNlIGlmIChlLmtleSA9PSAiZCIpIHsKCQkJY29tcGxldGVBY3Rpb24gPSBmdW5jdGlvbigpIHsKCQkJCXZhciBkYWlkID0gY3VyU2VsZWN0ZWQuaWQ7CgkJCQlzd2l0Y2hTZWxlY3RlZCgiIik7CgkJCQlzZXRNZW51KCIiKTsKCQkJCWRlbGV0ZU9iamVjdChkYWlkKTsKCQkJfTsKCQkJY29tcGxldGVBY3Rpb25IVE1MID0gIjxzcGFuIGNsYXNzPSdtZW51X2NvbXBsZXRlJz5EZWxldGUgb2JqZWN0ICIgKyBjdXJTZWxlY3RlZC5pZCArICI/Jm5ic3A7PC9zcGFuPjxpbnB1dCB0eXBlPSdidXR0b24nIG9uY2xpY2s9J2NvbXBsZXRlX2FjdGlvbl9jbGljaygpJyB2YWx1ZT0nWWVzJy8+PGlucHV0IHR5cGU9J2J1dHRvbicgb25jbGljaz0nY2FuY2VsX2FjdGlvbl9jbGljaygpJyB2YWx1ZT0nTm8nLz4iOwoJCQlzZXRNZW51KCIiKTsKCgkJCXJldHVybjsKCQl9IGVsc2UgaWYgKChlLmtleSA9PSAiICIpIHx8IChlLmtleSA9PSAiUmlnaHQiKSB8fCAoZS5rZXkgPT0gIkFycm93UmlnaHQiKSB8fCAoZS5rZXkgPT0gInoiKSkgewoJCQl0b2dnbGVFeHBhbmRlZEFuZChjdXJTZWxlY3RlZC5pZCwgIjEiLCBmdW5jdGlvbigpIHsgfSk7CgkJCXJldHVybjsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHJlbG9hZE9iamVjdEFuZChkYWlkLCBmbikgewoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL2xpc3QuanNvbj9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhaWQpICsgIiZjPTAiLCBudWxsLAoJCWZ1bmN0aW9uKHJlc3BvbnNlT2JqKSB7CgkJCWlmIChyZXNwb25zZU9iai5PYmplY3RzLmxlbmd0aCAhPSAxKSB7CgkJCQlzZXRNZW51KCJXcm9uZyByZXR1cm4gdmFsdWUgZnJvbSBsaXN0Lmpzb24iKTsKCQkJCXJldHVybjsKCQkJfQoJCQlmbihyZXNwb25zZU9iaik7CgkJfSk7Cn0KCmZ1bmN0aW9uIG9wZW5FZGl0b3IoZGFpZCkgewoJcmVsb2FkT2JqZWN0QW5kKGRhaWQsCgkJZnVuY3Rpb24ocmVzcG9uc2VPYmopIHsKCQkJdmFyIG8gPSByZXNwb25zZU9iai5PYmplY3RzWzBdOwoJCQlpZiAoIW8uRWRpdGFibGUpIHsKCQkJCXNldE1lbnUoIkl0ZW0gY2FuIG5vdCBiZSBlZGl0ZWQiKTsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGRhcm93ID0gZ2V0Um93RnJvbUlkKGRhaWQpOwoJCQlmaWxsT2JqZWN0Um93KGRhcm93LCBvLCB0cnVlKTsKCQkJdG9nZ2xlU2VsZWN0ZWQoZGFpZCk7CgkJfSk7Cn0KCmZ1bmN0aW9uIGRlbGV0ZU9iamVjdFJvdyhkYWlkKSB7Cgl2YXIgZGFyb3cgPSBnZXRSb3dGcm9tSWQoZGFpZCk7Cgl2YXIgZGF0YWJsZSA9IG51bGw7CglpZiAoZGFyb3cgIT0gbnVsbCkgewoJCXZhciBkYXRhYmxlID0gZ2V0Q29udGFpbmluZ1RhYmxlKGRhcm93KTsKCQl2YXIgaSA9IDA7CgkJZm9yICg7IGkgPCBkYXRhYmxlLnJvd3MubGVuZ3RoOyArK2kpIHsKCQkJaWYgKGRhcm93LmlkID09IGRhdGFibGUucm93c1tpXS5pZCkgewoJCQkJZGF0YWJsZS5kZWxldGVSb3coaSk7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZW51bWJlclJvd3MoZGF0YWJsZSwgMCk7Cgl9Cgl2YXIgY2hpbGRyb3cgPSBnZXRDaGlsZHJlblJvdyhkYWlkKTsKCWlmICgoY2hpbGRyb3cgIT0gbnVsbCkgJiYgKGRhdGFibGUgIT0gbnVsbCkpIHsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFibGUucm93cy5sZW5ndGg7ICsraSkgewoJCQlpZiAoY2hpbGRyb3cuaWQgPT0gZGF0YWJsZS5yb3dzW2ldLmlkKSB7CgkJCQlkYXRhYmxlLmRlbGV0ZVJvdyhpKTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQp9CgpmdW5jdGlvbiBkZWxldGVPYmplY3QoZGFpZCkgewoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL3JlbW92ZS5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZGFpZCksIG51bGwsCgkJZnVuY3Rpb24ocmVzcG9uc2VPYmopIHsKCQkJZGVsZXRlT2JqZWN0Um93KGRhaWQpOwoJCX0pOwp9CgpmdW5jdGlvbiBleHBhbmRPckFkZE9iamVjdFJvdyhkYWlkLCBvLCBuLCBlZGl0b3IpIHsKCXJlbG9hZE9iamVjdEFuZChkYWlkLAoJCWZ1bmN0aW9uKG9iaikgewoJCQl2YXIgZGFyb3cgPSBnZXRSb3dGcm9tSWQoZGFpZCk7CgkJCWZpbGxPYmplY3RSb3coZGFyb3csIG9iai5PYmplY3RzWzBdLCBmYWxzZSk7CgkJfSk7Cgl2YXIgY29udGVudHJvdyA9IGdldENoaWxkcmVuUm93KGRhaWQpOwoJaWYgKGNvbnRlbnRyb3cgPT0gbnVsbCkgewoJCXRvZ2dsZUV4cGFuZGVkQW5kKGRhaWQsICIxIiwKCQkJZnVuY3Rpb24oKSB7CgkJCQlpZiAoZWRpdG9yKSB7CgkJCQkJb3BlbkVkaXRvcihvLklkKTsKCQkJCX0KCQkJfSk7Cgl9IGVsc2UgewoJCXZhciBkYXRhYmxlID0gY29udGVudHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXTsKCQl2YXIgciA9IGluc2VydE9iamVjdFJvdyhkYXRhYmxlLCBvLklkLCBuKTsKCQlzd2l0Y2hTZWxlY3RlZChvLklkKTsKCQlzZXRNZW51KCIiKTsKCQlmaWxsT2JqZWN0Um93KHIsIG8sIGVkaXRvcik7Cgl9Cn0KCmZ1bmN0aW9uIGFkZENoaWxkcmVuKGRhaWQpIHsKCW1ha2VIVFRQUmVxdWVzdCgiR0VUIiwgIi9uZi9uZXcuanNvbj9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhaWQpICsgIiZuPTAiLCBudWxsLAoJCWZ1bmN0aW9uKHJlc3BvbnNlT2JqKSB7CgkJCWV4cGFuZE9yQWRkT2JqZWN0Um93KGRhaWQsIHJlc3BvbnNlT2JqLk9iamVjdHNbMF0sIDAsIHRydWUpOwoJCX0pOwp9CgpmdW5jdGlvbiBnZXRQYXJlbnRPZihkYWlkKSB7Cgl2YXIgZGFyb3cgPSBnZXRSb3dGcm9tSWQoZGFpZCk7Cgl2YXIgZGF0YWJsZSA9IGdldENvbnRhaW5pbmdUYWJsZShkYXJvdyk7Cgl2YXIgcHJvdyA9IGdldENvbnRhaW5pbmdSb3coZGF0YWJsZSk7CglpZiAocHJvdyA9PSBudWxsKSB7CgkJcmV0dXJuIG51bGwKCX0KCXZhciBuID0gLTE7Cglmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFibGUucm93cy5sZW5ndGg7ICsraSkgewoJCWlmIChkYXRhYmxlLnJvd3NbaV0uaWQgPT0gZGFyb3cuaWQpIHsKCQkJbiA9IGk7CgkJCWJyZWFrOwoJCX0KCX0KCXJldHVybiBbIGdldElkRnJvbVJvdyhwcm93KSwgZGF0YWJsZSwgbiBdOwp9CgpmdW5jdGlvbiBhZGRTaWJsaW5nKGRhaWQpIHsKCXAgPSBnZXRQYXJlbnRPZihkYWlkKTsKCWlmIChwID09IG51bGwpIHsKCQlzZXRNZW51KCJDYW4ndCBhZGQgc2libGluZ3MgdG8gY3VycmVudCByb290Iik7CgkJcmV0dXJuOwoJfQoKCXBpZCA9IHBbMF0KCWRhdGFibGUgPSBwWzFdCgluID0gcFsyXSsxCgoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL25ldy5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQocGlkKSArICImbj0iICsgbiwgbnVsbCwKCQlmdW5jdGlvbihyZXNwb25zZU9iaikgewoJCQl2YXIgciA9IGluc2VydE9iamVjdFJvdyhkYXRhYmxlLCByZXNwb25zZU9iai5PYmplY3RzWzBdLklkLCBuKTsKCQkJc3dpdGNoU2VsZWN0ZWQocmVzcG9uc2VPYmouT2JqZWN0c1swXS5JZCk7CgkJCWZpbGxPYmplY3RSb3cociwgcmVzcG9uc2VPYmouT2JqZWN0c1swXSwgdHJ1ZSk7CgkJfSk7Cn0KCmZ1bmN0aW9uIHBhc3RlQ2hpbGRyZW4oZGFpZCkgewoJaWYgKGN1ckN1dC5pZCA9PSAiIikgewoJCXNldE1lbnUoIk5vIHNlbGVjdGVkIGN1dCIpOwoJCXJldHVybjsKCX0KCgltYWtlSFRUUFJlcXVlc3QoIkdFVCIsICIvbmYvbW92ZS5qc29uP2lkPSIgKyBlbmNvZGVVUklDb21wb25lbnQoY3VyQ3V0LmlkKSArICImcD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhaWQpICsgIiZuPTAiLCBudWxsLAoJCWZ1bmN0aW9uKHJlc3BvbnNlT2JqKSB7CgkJCWRlbGV0ZU9iamVjdFJvdyhjdXJDdXQuaWQpOwoJCQlzZXRDdXQoIiIpOwoJCQltYWtlSFRUUFJlcXVlc3QoIlBVVCIsICIvbmYvY3VyY3V0P2lkPSIsIG51bGwsIGZ1bmN0aW9uKG9iaikgeyB9KTsKCQkJZXhwYW5kT3JBZGRPYmplY3RSb3coZGFpZCwgcmVzcG9uc2VPYmouT2JqZWN0c1swXSwgMCwgZmFsc2UpOwoJCX0pOwp9CgpmdW5jdGlvbiBwYXN0ZVNpYmxpbmcoZGFpZCkgewoJaWYgKGN1ckN1dC5pZCA9PSAiIikgewoJCXNldE1lbnUoIk5vIHNlbGVjdGVkIGN1dCIpOwoJCXJldHVybjsKCX0KCglwID0gZ2V0UGFyZW50T2YoZGFpZCk7CglpZiAocCA9PSBudWxsKSB7CgkJc2V0TWVudSgiQ2FuJ3QgYWRkIHNpYmxpbmdzIHRvIGN1cnJlbnQgcm9vdCIpOwoJCXJldHVybjsKCX0KCglwaWQgPSBwWzBdCglkYXRhYmxlID0gcFsxXQoJbiA9IHBbMl0rMQoKCW1ha2VIVFRQUmVxdWVzdCgiR0VUIiwgIi9uZi9tb3ZlLmpzb24/aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChjdXJDdXQuaWQpICsgIiZwPSIgKyBlbmNvZGVVUklDb21wb25lbnQocGlkKSArICImbj0iICsgbiwgbnVsbCwKCQlmdW5jdGlvbihyZXNwb25zZU9iaikgewoJCQlkZWxldGVPYmplY3RSb3coY3VyQ3V0LmlkKTsKCQkJc2V0Q3V0KCIiKTsKCQkJbWFrZUhUVFBSZXF1ZXN0KCJQVVQiLCAiL25mL2N1cmN1dD9pZD0iLCBudWxsLCBmdW5jdGlvbihvYmopIHsgfSk7CgkJCWV4cGFuZE9yQWRkT2JqZWN0Um93KHBpZCwgcmVzcG9uc2VPYmouT2JqZWN0c1swXSwgcGFyc2VJbnQocmVzcG9uc2VPYmouT2JqZWN0c1swXS5OYW1lKSwgZmFsc2UpOwoJCX0pOwp9CgpmdW5jdGlvbiBjaGFuZ2VfcHJpb3JpdHlfY2xpY2soZSwgZXZlbnQpIHsKCXZhciBkYWNlbGwgPSBnZXRDb250YWluaW5nQ2VsbChlKTsKCXZhciBkYXJvdyA9IGdldENvbnRhaW5pbmdSb3coZGFjZWxsKTsKCXZhciBkYWlkID0gZ2V0SWRGcm9tUm93KGRhcm93KTsKCWlmIChkYWlkLmluZGV4T2YoIiNpZD0iKSAhPSAwKSB7CgkJc2V0TWVudSgiSW50ZXJuYWwgZXJyb3IiKTsKCQlyZXR1cm47Cgl9Cgl2YXIgcmVhbElkID0gc3RyaXBUb1JlYWxJZChkYWlkKTsKCWd1ZXNzX25leHRfcHJpb3JpdHkoZGFpZCwgZSwgZXZlbnQuc2hpZnRLZXkpOwoJbWFrZUhUVFBSZXF1ZXN0MigiR0VUIiwgIi9jaGFuZ2UtcHJpb3JpdHk/aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChyZWFsSWQpICsgIiZzcGVjaWFsPSIgKyBldmVudC5zaGlmdEtleSwgbnVsbCwKCQlmdW5jdGlvbihkYXRhKSB7CgkJCWlmIChkYXRhLm1hdGNoKC9ecHJpb3JpdHktY2hhbmdlLXRvOiAvKSkgewoJCQkJcHJpb3JpdHkgPSBkYXRhLnN1YnN0cigicHJpb3JpdHktY2hhbmdlLXRvOiAiLmxlbmd0aCk7CgkJCQlwcmlvcml0eU51bSA9IHByaW9yaXR5WzBdOwoJCQkJcHJpb3JpdHkgPSBwcmlvcml0eS5zdWJzdHIoMik7CgkJCQljaGFuZ2VfcHJpb3JpdHlfdG8oZGFpZCwgZSwgcHJpb3JpdHlOdW0sIHByaW9yaXR5KTsKCQkJfSBlbHNlIHsKCQkJCXNldE1lbnUoZGF0YSk7CgkJCX0KCQl9KTsKfQoKZnVuY3Rpb24gc3RyaXBUb1JlYWxJZChpZCkgewoJcmV0dXJuIGlkLnN1YnN0cigiI2lkPSIubGVuZ3RoKTsKfQoKZnVuY3Rpb24gZ3Vlc3NfbmV4dF9wcmlvcml0eShkYWlkLCBlLCBzcGVjaWFsKSB7CgljdXJyZW50ID0gZS52YWx1ZTsKCWlmIChjdXJyZW50ID09ICJOT1RFUyIpIHsKCQlpZiAoc3BlY2lhbCkgewoJCQljaGFuZ2VfcHJpb3JpdHlfdG8oZGFpZCwgZSwgMSwgIk5PVyIpOwoJCX0gZWxzZSB7CgkJCWNoYW5nZV9wcmlvcml0eV90byhkYWlkLCBlLCAzLCAiU1RJQ0tZIik7CgkJfQoJfSBlbHNlIGlmIChjdXJyZW50ID09ICJTVElDS1kiKSB7CgkJaWYgKHNwZWNpYWwpIHsKCQkJY2hhbmdlX3ByaW9yaXR5X3RvKGRhaWQsIGUsIDEsICJOT1ciKTsKCQl9IGVsc2UgewoJCQljaGFuZ2VfcHJpb3JpdHlfdG8oZGFpZCwgZSwgMywgIk5PVEVTIik7CgkJfQoJfSBlbHNlIHsKCQlpZiAoc3BlY2lhbCkgewoJCQljaGFuZ2VfcHJpb3JpdHlfdG8oZGFpZCwgZSwgMywgIk5PVEVTIik7CgkJfSBlbHNlIHsKCQkJaWYgKGN1cnJlbnQgPT0gIkxBVEVSIikgewoJCQkJY2hhbmdlX3ByaW9yaXR5X3RvKGRhaWQsIGUsIDEsICJOT1ciKTsKCQkJfSBlbHNlIGlmIChjdXJyZW50ID09ICJOT1ciKSB7CgkJCQljaGFuZ2VfcHJpb3JpdHlfdG8oZGFpZCwgZSwgNSwgIkRPTkUiKTsKCQkJfSBlbHNlIHsKCQkJCWNoYW5nZV9wcmlvcml0eV90byhkYWlkLCBlLCAyLCAiTEFURVIiKTsKCQkJfQoJCX0KCX0KfQoKZnVuY3Rpb24gY2hhbmdlX3ByaW9yaXR5X3RvKGRhaWQsIGUsIHByaW9yaXR5TnVtLCBwcmlvcml0eSkgewoJZS52YWx1ZSA9IHByaW9yaXR5OwoJdmFyIHRyID0gZ2V0Um93RnJvbUlkKGRhaWQpOwoJaWYgKHByaW9yaXR5ID09ICJET05FIikgewoJCXRyLmNsYXNzTGlzdC5hZGQoInN0cmlrZWQiKTsKCX0gZWxzZSB7CgkJdHIuY2xhc3NMaXN0LnJlbW92ZSgic3RyaWtlZCIpOwoJfQp9CgpmdW5jdGlvbiByZWxvYWRFdmVyeXRoaW5nKCkgewoJbWFrZUhUVFBSZXF1ZXN0KCJHRVQiLCAiL25mL2N1cmN1dCIsIG51bGwsCgkJZnVuY3Rpb24ocmVzcG9uc2VPYmopIHsKCQkJY3VyQ3V0LmlkID0gcmVzcG9uc2VPYmouT2JqZWN0c1swXS5JZDsKCQkJdmFyIGFsbFRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwoJCQl2YXIgY2hpbGRzID0gWyBjdXJSb290IF07CgkJCWZvciAodmFyIGkgPSAwOyBpIDwgYWxsVHJzLmxlbmd0aDsgaSsrKSB7CgkJCQlpZiAoYWxsVHJzW2ldLmlkLmluZGV4T2YoImNoaWxkc18iKSA9PSAwKSB7CgkJCQkJY2hpbGRzLnB1c2goYWxsVHJzW2ldLmlkLnN1YnN0cigiY2hpbGRzXyIubGVuZ3RoKSkKCQkJCX0KCQkJfQoJCQlmdW5jdGlvbiBjb250KCkgewoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsKCQkJCQlpZiAoY2hpbGRzW2ldID09IG51bGwpIHsKCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCXZhciBkYXJvdyA9IGdldFJvd0Zyb21JZChjaGlsZHNbaV0pOwoJCQkJCWlmIChkYXJvdyAhPSBudWxsKSB7CgkJCQkJCXZhciBkYWNoaWxkcm93ID0gZ2V0Q2hpbGRyZW5Sb3coY2hpbGRzW2ldKTsKCQkJCQkJaWYgKGRhY2hpbGRyb3cgIT0gbnVsbCkgewoJCQkJCQkJY2hpbGRzW2ldID0gbnVsbDsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgkJCQkJCXZhciBkYWlkID0gY2hpbGRzW2ldOwoJCQkJCQljaGlsZHNbaV0gPSBudWxsOwoJCQkJCQl0b2dnbGVFeHBhbmRlZEFuZChkYWlkLCAiMiIsIGNvbnQpOwoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQkJc2V0Q3V0KGN1ckN1dC5pZCk7CgkJCQlpZiAoY3VyU2VsZWN0ZWQuaWQgIT0gIiIpIHsKCQkJCQl2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvd18iICsgY3VyU2VsZWN0ZWQuaWQpOwoJCQkJCWlmIChyb3cgIT0gbnVsbCkgewoJCQkJCQlyb3cuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJdmFyIG1haW5EaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpOwoJCQlsb2FkQ2hpbGRyZW5BbmQobWFpbkRpdiwgY3VyUm9vdCwgIjAiLCBjb250KTsKCQl9KQp9CgpmdW5jdGlvbiBpZENvbnZlcnRTcGFjZXMoYSkgewoJcmV0dXJuIGEucmVwbGFjZSgiICIsICLCtyIpOwp9CgpmdW5jdGlvbiBpZFJldmVydFNwYWNlcyhhKSB7CglyZXR1cm4gYS5yZXBsYWNlKCLCtyIsICIgIik7Cn0KCmZ1bmN0aW9uIHN0eWxlUHJvcChzZWxlY3RvclRleHQpIHsKCWZvciAodmFyIGkgID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7CgkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLnRpdGxlID09ICJuZnN0eWxlIikgewoJCQlmb3IgKHZhciBqID0gMDsgaiA8IGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmNzc1J1bGVzLmxlbmd0aDsgaisrKSB7CgkJCQlpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0uY3NzUnVsZXNbal0uc2VsZWN0b3JUZXh0ID09IHNlbGVjdG9yVGV4dCkgewoJCQkJCXJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5jc3NSdWxlc1tqXTsKCQkJCX0KCQkJfQoJCX0KCX0KCXJldHVybiBudWxsOwp9CgpmdW5jdGlvbiBvcGVuX2NvbmZpZygpIHsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZW51Iikuc3R5bGVbImhlaWdodCJdID0gImF1dG8iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnVfY2wiKS5zdHlsZVsiZGlzcGxheSJdID0gIm5vbmUiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnVfY29uZmlnIikuc3R5bGVbImRpc3BsYXkiXSA9ICJibG9jayI7Cn0KCmZ1bmN0aW9uIGNsb3NlX2NvbmZpZygpIHsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZW51Iikuc3R5bGVbImhlaWdodCJdID0gIjQwcHgiOwoJdmFyIGNvbmZpZ19leHBhbmRlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25maWdfZXhwYW5kZWQiKS5jaGVja2VkOwoJdmFyIHMgPSBzdHlsZVByb3AoIi5vYmpsaXN0IHRyLm9iamVjdHJvdyA+IHRkLmNvbnRlbnRjb2wgZGl2LmZvcm1hdHRlZHRleHQiKTsKCWlmIChjb25maWdfZXhwYW5kZWQpIHsKCQlzLnN0eWxlWyJvdmVyZmxvdyJdID0gInZpc2libGUiOwoJCXMuc3R5bGVbImhlaWdodCJdID0gImF1dG8iOwoJfSBlbHNlIHsKCQlzLnN0eWxlWyJvdmVyZmxvdyJdID0gImhpZGRlbiI7CgkJcy5zdHlsZVsiaGVpZ2h0Il0gPSAiMS4yZW0iOwoJfQoJcyA9IHN0eWxlUHJvcCgiZGl2I21haW4iKTsKCXMuc3R5bGVbIndpZHRoIl0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uZmlnX3dpZHRoIikudmFsdWU7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVudV9jbCIpLnN0eWxlWyJkaXNwbGF5Il0gPSAiYmxvY2siOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnVfY29uZmlnIikuc3R5bGVbImRpc3BsYXkiXSA9ICJub25lIjsKfQoKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxvYWRlZCwgZmFsc2UpOwpkb2N1bWVudC5vbmtleXByZXNzID0ga2V5cHJlc3NmbjsK",
	"nfstyle.css":                         "QGZvbnQtZmFjZSB7Cglmb250LWZhbWlseTogRm9udEF3ZXNvbWU7CglzcmM6IHVybCgnL2ZvbnRhd2Vzb21lLndvZmYnKTsKfQoKKiB7Cglmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKYSB7Cgljb2xvcjogIzRDODlCRTsKfQoKYm9keSB7CgliYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKCWNvbG9yOiBzaWx2ZXI7Cglmb250LXNpemU6IDEwcHQ7Cn0KCi5vYmpsaXN0IHsKCXdpZHRoOiAxMDAlOwoJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKfQoKLm9iamxpc3QgdHIub2JqZWN0cm93IHsKCWJhY2tncm91bmQ6IG5vbmUgcmVwZWF0IHNjcm9sbCAwIDAgIzE2M0E1OTsKCWJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwp9Cgoub2JqbGlzdCB0ci5vYmplY3Ryb3c6bnRoLWNoaWxkKG9kZCkgewoJYmFja2dyb3VuZC1jb2xvcjogIzBGMzA0RDsKfQoKLm9iamxpc3QgdHIuc2VsZWN0ZWQub2JqZWN0cm93IHsKCWJvcmRlcjogM3B4IHNvbGlkIHJlZDsKfQoKLm9iamxpc3QgdHIuY3V0dGluZy5vYmplY3Ryb3cgewoJYm9yZGVyOiAzcHggc29saWQgY3lhbjsKfQoKLm9iamxpc3QgdHIub2JqZWN0cm93ID4gdGQgewoJYm9yZGVyOiAycHggc29saWQgYmxhY2s7CglwYWRkaW5nOiA0cHg7Cn0KCi5vYmpsaXN0IHRyLm9iamVjdHJvdyA+IHRkLmZvbGRlcmNvbCB7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJd2lkdGg6IDFweDsKCWZvbnQtZmFtaWx5OiBGb250QXdlc29tZTsKfQoKLm9iamxpc3QgdHIub2JqZWN0cm93ID4gdGQuZm9sZGVyY29sIGEgewoJZm9udC1mYW1pbHk6IGluaGVyaXQ7Cgljb2xvcjogaW5oZXJpdDsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm9iamxpc3QgdHIub2JqZWN0cm93ID4gdGQuaWRjb2wgewoJd2hpdGUtc3BhY2U6IG5vd3JhcDsKCXdpZHRoOiAxcHg7Cglmb250LXNpemU6IHgtc21hbGw7Cn0KCi5vYmpsaXN0IHRyLm9iamVjdHJvdyA+IHRkLmNvbnRlbnRjb2wgewoJd2lkdGg6IDEwMCU7Cn0KCi8qIEFMU08gU0VUIEJZIG5maW50LmpzICovCi5vYmpsaXN0IHRyLm9iamVjdHJvdyA+IHRkLmNvbnRlbnRjb2wgZGl2LmZvcm1hdHRlZHRleHQgewoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEuMmVtOwoJb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm9iamxpc3QgdHIuc2VsZWN0ZWQub2JqZWN0cm93ID4gdGQuY29udGVudGNvbCBkaXYuZm9ybWF0dGVkdGV4dCB7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogYXV0bzsKfQoKLm9iamxpc3QgdHIub2JqZWN0cm93ID4gdGQuY29udGVudGNvbCB0ZXh0YXJlYSB7Cgl3aWR0aDogOTglOwoJaGVpZ2h0OiA1ZW07Cn0KCi5vYmpsaXN0IHRyLmNoaWxkcm93ID4gdGQgewoJcGFkZGluZy1sZWZ0OiAxNXB4Cn0KCi5wcmlvcml0eWNvbCA+IGlucHV0IHsKCWZvbnQtd2VpZ2h0OiBib2xkZXI7Cglmb250LXNpemU6IHh4LXNtYWxsOwoJd2lkdGg6IDYwcHg7CgliYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKfQoucHJpb3JpdHljb2wgPiBpbnB1dFt2YWx1ZT0iTk9XIl0gewoJY29sb3I6ICMwRkQ0MDA7Cn0KLnByaW9yaXR5Y29sID4gaW5wdXRbdmFsdWU9IkxBVEVSIl0gewoJY29sb3I6IHllbGxvdzsKfQoucHJpb3JpdHljb2wgPiBpbnB1dFt2YWx1ZT0iVElNRUQiXSB7Cgljb2xvcjogb3JhbmdlOwp9Ci5wcmlvcml0eWNvbCA+IGlucHV0W3ZhbHVlPSJET05FIl0gewoJY29sb3I6IGxpZ2h0Ymx1ZTsKfQoucHJpb3JpdHljb2wgPiBpbnB1dFt2YWx1ZT0iU1RJQ0tZIl0gewoJY29sb3I6IGxpZ2h0Ymx1ZTsKfQoucHJpb3JpdHljb2wgPiBpbnB1dFt2YWx1ZT0iTk9URVMiXSB7Cgljb2xvcjogbGlnaHRibHVlOwp9CgouZm9ybWF0dGVkY29sIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCW1pbi13aWR0aDogMTBlbTsKCW1hcmdpbi1yaWdodDogMmVtOwoJY29sb3I6IGdyZWVuOwoJZm9udC1zaXplOiBzbWFsbDsKfQoKLyogQUxTTyBTRVQgQlkgbmZpbnQuanMgKi8KZGl2I21lbnUgewoJcG9zaXRpb246IGZpeGVkOwoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDQwcHg7CglsaW5lLWhlaWdodDogNDBweDsKCXRvcDogMHB4OwoJYm94LXNoYWRvdzogNXB4ICNhYWFhYWE7CgliYWNrZ3JvdW5kOiBpbmhlcml0Owp9CgphI2NsYXNzaWNsaW5rIHsKCWRpc3BsYXk6IGJsb2NrOwoJZmxvYXQ6IHJpZ2h0OwoJd2lkdGg6IDEwMHB4Owp9CgpkaXYjbWVudSBmb3JtIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKZGl2I21haW4gewoJbWFyZ2luLXRvcDogNDBweDsKCXdpZHRoOiAxMDAlOwp9Cgp0ci5zdHJpa2VkIHRkLmNvbnRlbnRjb2wgZGl2LmZvcm1hdHRlZHRleHQgewoJdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cn0K",
	"opts.js":                             "ZnVuY3Rpb24gdG9rcmVtb3ZlKHRva2VuKSB7CgkkLmFqYXgoeyB1cmw6ICIvdG9rZW5zP2FjdGlvbj1yZW1vdmUmdG9rZW49IiArIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbiksCgkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywgcmVxKSB7CgkJCWFsZXJ0KCJUb2tlbiByZW1vdmVkIik7CgkJfX0pOwp9CgpmdW5jdGlvbiB0b2thZGQoKSB7CgkkLmFqYXgoeyB1cmw6ICIvdG9rZW5zP2FjdGlvbj1hZGQiLAoJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIHJlcSkgewoJCQlhbGVydCgiTmV3IHRva2VuIGFkZGVkIik7CgkJfX0pOwp9Cg==",
	"static-test.html":                    "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlRoaXMgaXMgYSB0ZXN0IGZvciBzZXJ2ZTwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgVGhpcyBpcyBhIHRlc3QgZm9yIHNlcnZlCiAgPC9ib2R5Pgo8L2h0bWw+Cg==",
	"tlist.css":                           "LyoKICAgZm9yZWdyb3VuZDogc2lsdmVyCiAgIGJhY2tncm91bmQgbGlnaHQgMTogIzE2M0E1OQogICBiYWNrZ3JvdW5kIGxpZ2h0IDI6ICMwRjMwNEQKCiAgIGZvcmVncm91bmQgZGFyayAxOiAjNjdBQkU1CiAgIGZvcmVncm91bmQgZGFyayAyOiAjNEM4OUJFCiovCgoKLyoKIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMdjMKIENvcHlyaWdodCAyMDEwLCBBbGVzc2FuZHJvIEFyemlsbGkKICovCgoqIHsKICAgIGZvbnQtZmFtaWx5OiB1YnVudHUsIHNhbnMtc2VyaWY7Cn0KCmEgewogICAgY29sb3I6ICM0Qzg5QkU7Cn0KCmJvZHkgewogICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICBjb2xvcjogc2lsdmVyOwogICAgZm9udC1zaXplOiAxMHB0Owp9CgoucG9wdXAgewogICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICBib3JkZXI6IHRoaW4gc29saWQgd2hpdGU7Cn0KCnRhYmxlIHsKICAgIGZvbnQtc2l6ZTogMTBwdDsKfQoKLmNvbG5hbWUgewogICAgZm9udC1zaXplOiBtZWRpdW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmctdG9wOiAxMHB4Owp9CgoucHJjaGFuZ2UgewogICAgcGFkZGluZy10b3A6IDEwcHg7CiAgICBmb250LXNpemU6IGxhcmdlOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5lbnRyeSB7CiAgICBiYWNrZ3JvdW5kOiBub25lIHJlcGVhdCBzY3JvbGwgMCAwICMxNjNBNTk7CiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKfQoKLm9kZGVudHJ5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwRjMwNEQ7CiAgICBib3JkZXItY29sb3I6IGJsYWNrOwp9CgouZW50cnkgPiB0ZCB7CiAgICBwYWRkaW5nOiA0cHg7Cn0KCi5ldGl0bGUgewogICAgd2lkdGg6IDY1JTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouZXRpdGxlID4gcHJlIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5ldGl0bGUgPiBhIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGNvbG9yOiBzaWx2ZXI7Cn0KCi5wcmlvcml0eWJ1dHRvbiB7CiAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgZm9udC1zaXplOiB4eC1zbWFsbDsKICAgIHdpZHRoOiA2MHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Cn0KCi5uZXdjaGlsZGJ1dHRvbiB7Cglmb250LXdlaWdodDogYm9sZGVyOwoJZm9udC1zaXplOiB4eC1zbWFsbDsKCXdpZHRoOiAyMHB4OwoJYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Cgljb2xvcjogd2hpdGU7Cn0KCi5zdWJzdGFibGUgLnByaW9yaXR5YnV0dG9uIHsKICAgIHdpZHRoOiA0MHB4Owp9CgoucHJpb3JpdHljbGFzc19OT1cgewogICAgY29sb3I6ICMwRkQ0MDA7Cn0KLnByaW9yaXR5Y2xhc3NfTEFURVIgewogICAgY29sb3I6IHllbGxvdzsKfQoucHJpb3JpdHljbGFzc19USU1FRCB7CiAgICBjb2xvcjogb3JhbmdlOwp9Ci5wcmlvcml0eWNsYXNzX0RPTkUgewogICAgY29sb3I6IGxpZ2h0Ymx1ZTsKfQoucHJpb3JpdHljbGFzc19TVElDS1kgewogICAgY29sb3I6IGxpZ2h0Ymx1ZTsKfQoucHJpb3JpdHljbGFzc19OT1RFUyB7CiAgICBjb2xvcjogbGlnaHRibHVlOwp9Cgouc2NyZXJyb3IgewogICAgY29sb3I6IHJlZDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouY29kZSB7CiAgICBmb250LWZhbWlseTogb2NyYTEwLCBtb25vc3BhY2U7CiAgICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogImxpZ2EiIDA7CiAgICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogImxpZ2EiIDA7CiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICJsaWdhIiAwOwp9Cgouc3RhdHN0YWJsZSB7CiAgICBtYXJnaW4tdG9wOiA0MHB4Owp9CgouanN0cmVlIGEgewogICAgY29sb3I6IHNpbHZlcjsKfQoKLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtaG92ZXJlZCB7CiAgICBiYWNrZ3JvdW5kOiAgIzE2M0E1OTsKfQoKLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtY2xpY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAgIzE2M0E1OTsKfQoKLmpzdHJlZS1kZWZhdWx0LmpzdHJlZS1mb2N1c2VkIHsKICAgIGJhY2tncm91bmQ6IGJsYWNrOwp9CgoudHJlZWhlbHAgewoJZm9udC1zaXplOiB4eC1zbWFsbDsKfQoKLnRyZWVoZWxwIHVsIHsKCXBhZGRpbmctbGVmdDogM2VtOwoJbWFyZ2luLXRvcDogMHB4Owp9CgoudHJlZWhlbHBpZCB7Cglmb250LXNpemU6IHNtYWxsOwp9Cg==",
	"dot-luv/jquery-ui.custom.css":        "LyohIGpRdWVyeSBVSSAtIHYxLjEwLjEgLSAyMDEzLTAyLTE2CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5jc3MsIGpxdWVyeS51aS5yZXNpemFibGUuY3NzLCBqcXVlcnkudWkuc2VsZWN0YWJsZS5jc3MsIGpxdWVyeS51aS5hY2NvcmRpb24uY3NzLCBqcXVlcnkudWkuYXV0b2NvbXBsZXRlLmNzcywganF1ZXJ5LnVpLmJ1dHRvbi5jc3MsIGpxdWVyeS51aS5kYXRlcGlja2VyLmNzcywganF1ZXJ5LnVpLmRpYWxvZy5jc3MsIGpxdWVyeS51aS5tZW51LmNzcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmNzcywganF1ZXJ5LnVpLnNsaWRlci5jc3MsIGpxdWVyeS51aS5zcGlubmVyLmNzcywganF1ZXJ5LnVpLnRhYnMuY3NzLCBqcXVlcnkudWkudG9vbHRpcC5jc3MKKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PUFyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4zZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPTBiM2U2ZiZiZ1RleHR1cmVIZWFkZXI9ZGlhZ29uYWxzX3RoaWNrJmJnSW1nT3BhY2l0eUhlYWRlcj0xNSZib3JkZXJDb2xvckhlYWRlcj0wYjNlNmYmZmNIZWFkZXI9ZjZmNmY2Jmljb25Db2xvckhlYWRlcj05OGQyZmImYmdDb2xvckNvbnRlbnQ9MTExMTExJmJnVGV4dHVyZUNvbnRlbnQ9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlDb250ZW50PTIwJmJvcmRlckNvbG9yQ29udGVudD0wMDAwMDAmZmNDb250ZW50PWQ5ZDlkOSZpY29uQ29sb3JDb250ZW50PTljY2RmYyZiZ0NvbG9yRGVmYXVsdD0zMzMzMzMmYmdUZXh0dXJlRGVmYXVsdD1kb3RzX3NtYWxsJmJnSW1nT3BhY2l0eURlZmF1bHQ9MjAmYm9yZGVyQ29sb3JEZWZhdWx0PTMzMzMzMyZmY0RlZmF1bHQ9ZmZmZmZmJmljb25Db2xvckRlZmF1bHQ9OWNjZGZjJmJnQ29sb3JIb3Zlcj0wMDQ5OGYmYmdUZXh0dXJlSG92ZXI9ZG90c19zbWFsbCZiZ0ltZ09wYWNpdHlIb3Zlcj00MCZib3JkZXJDb2xvckhvdmVyPTIyMjIyMiZmY0hvdmVyPWZmZmZmZiZpY29uQ29sb3JIb3Zlcj1mZmZmZmYmYmdDb2xvckFjdGl2ZT0yOTI5MjkmYmdUZXh0dXJlQWN0aXZlPWZsYXQmYmdJbWdPcGFjaXR5QWN0aXZlPTQwJmJvcmRlckNvbG9yQWN0aXZlPTA5NmFjOCZmY0FjdGl2ZT03NWFiZmYmaWNvbkNvbG9yQWN0aXZlPTAwNDk4ZiZiZ0NvbG9ySGlnaGxpZ2h0PTBiNThhMiZiZ1RleHR1cmVIaWdobGlnaHQ9ZG90c19tZWRpdW0mYmdJbWdPcGFjaXR5SGlnaGxpZ2h0PTMwJmJvcmRlckNvbG9ySGlnaGxpZ2h0PTA1MmY1NyZmY0hpZ2hsaWdodD1mZmZmZmYmaWNvbkNvbG9ySGlnaGxpZ2h0PWZmZmZmZiZiZ0NvbG9yRXJyb3I9YTMyZDAwJmJnVGV4dHVyZUVycm9yPWRvdHNfc21hbGwmYmdJbWdPcGFjaXR5RXJyb3I9MzAmYm9yZGVyQ29sb3JFcnJvcj1jZDBhMGEmZmNFcnJvcj1mZmZmZmYmaWNvbkNvbG9yRXJyb3I9ZmZmZmZmJmJnQ29sb3JPdmVybGF5PWFhYWFhYSZiZ1RleHR1cmVPdmVybGF5PWZsYXQmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJm9wYWNpdHlPdmVybGF5PTMwJmJnQ29sb3JTaGFkb3c9YWFhYWFhJmJnVGV4dHVyZVNoYWRvdz1mbGF0JmJnSW1nT3BhY2l0eVNoYWRvdz0wJm9wYWNpdHlTaGFkb3c9MzAmdGhpY2tuZXNzU2hhZG93PThweCZvZmZzZXRUb3BTaGFkb3c9LThweCZvZmZzZXRMZWZ0U2hhZG93PS04cHgmY29ybmVyUmFkaXVzU2hhZG93PThweAoqIENvcHlyaWdodCAoYykgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIExpY2Vuc2VkIE1JVCAqLy51aS1oZWxwZXItaGlkZGVue2Rpc3BsYXk6bm9uZX0udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS51aS1oZWxwZXItcmVzZXR7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO291dGxpbmU6MDtsaW5lLWhlaWdodDoxLjM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7bGlzdC1zdHlsZTpub25lfS51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLC51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0udWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LnVpLWhlbHBlci1jbGVhcmZpeHttaW4taGVpZ2h0OjB9LnVpLWhlbHBlci16Zml4e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKX0udWktZnJvbnR7ei1pbmRleDoxMDB9LnVpLXN0YXRlLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0udWktaWNvbntkaXNwbGF5OmJsb2NrO3RleHQtaW5kZW50Oi05OTk5OXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVpLXdpZGdldC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51aS1yZXNpemFibGV7cG9zaXRpb246cmVsYXRpdmV9LnVpLXJlc2l6YWJsZS1oYW5kbGV7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjAuMXB4O2Rpc3BsYXk6YmxvY2t9LnVpLXJlc2l6YWJsZS1kaXNhYmxlZCAudWktcmVzaXphYmxlLWhhbmRsZSwudWktcmVzaXphYmxlLWF1dG9oaWRlIC51aS1yZXNpemFibGUtaGFuZGxle2Rpc3BsYXk6bm9uZX0udWktcmVzaXphYmxlLW57Y3Vyc29yOm4tcmVzaXplO2hlaWdodDo3cHg7d2lkdGg6MTAwJTt0b3A6LTVweDtsZWZ0OjB9LnVpLXJlc2l6YWJsZS1ze2N1cnNvcjpzLXJlc2l6ZTtoZWlnaHQ6N3B4O3dpZHRoOjEwMCU7Ym90dG9tOi01cHg7bGVmdDowfS51aS1yZXNpemFibGUtZXtjdXJzb3I6ZS1yZXNpemU7d2lkdGg6N3B4O3JpZ2h0Oi01cHg7dG9wOjA7aGVpZ2h0OjEwMCV9LnVpLXJlc2l6YWJsZS13e2N1cnNvcjp3LXJlc2l6ZTt3aWR0aDo3cHg7bGVmdDotNXB4O3RvcDowO2hlaWdodDoxMDAlfS51aS1yZXNpemFibGUtc2V7Y3Vyc29yOnNlLXJlc2l6ZTt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O3JpZ2h0OjFweDtib3R0b206MXB4fS51aS1yZXNpemFibGUtc3d7Y3Vyc29yOnN3LXJlc2l6ZTt3aWR0aDo5cHg7aGVpZ2h0OjlweDtsZWZ0Oi01cHg7Ym90dG9tOi01cHh9LnVpLXJlc2l6YWJsZS1ud3tjdXJzb3I6bnctcmVzaXplO3dpZHRoOjlweDtoZWlnaHQ6OXB4O2xlZnQ6LTVweDt0b3A6LTVweH0udWktcmVzaXphYmxlLW5le2N1cnNvcjpuZS1yZXNpemU7d2lkdGg6OXB4O2hlaWdodDo5cHg7cmlnaHQ6LTVweDt0b3A6LTVweH0udWktc2VsZWN0YWJsZS1oZWxwZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDA7Ym9yZGVyOjFweCBkb3R0ZWQgYmxhY2t9LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlcntkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6MnB4O3BhZGRpbmc6LjVlbSAuNWVtIC41ZW0gLjdlbTttaW4taGVpZ2h0OjB9LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25ze3BhZGRpbmctbGVmdDoyLjJlbX0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tbm9pY29uc3twYWRkaW5nLWxlZnQ6LjdlbX0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMgLnVpLWFjY29yZGlvbi1pY29uc3twYWRkaW5nLWxlZnQ6Mi4yZW19LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LjVlbTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjFlbSAyLjJlbTtib3JkZXItdG9wOjA7b3ZlcmZsb3c6YXV0b30udWktYXV0b2NvbXBsZXRle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjdXJzb3I6ZGVmYXVsdH0udWktYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luLXJpZ2h0Oi4xZW07Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OnZpc2libGV9LnVpLWJ1dHRvbiwudWktYnV0dG9uOmxpbmssLnVpLWJ1dHRvbjp2aXNpdGVkLC51aS1idXR0b246aG92ZXIsLnVpLWJ1dHRvbjphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi4yZW19YnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi40ZW19LnVpLWJ1dHRvbi1pY29ucy1vbmx5e3dpZHRoOjMuNGVtfWJ1dHRvbi51aS1idXR0b24taWNvbnMtb25seXt3aWR0aDozLjdlbX0udWktYnV0dG9uIC51aS1idXR0b24tdGV4dHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0Om5vcm1hbH0udWktYnV0dG9uLXRleHQtb25seSAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDFlbX0udWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dHtwYWRkaW5nOi40ZW07dGV4dC1pbmRlbnQ6LTk5OTk5OTlweH0udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6LjRlbSAxZW0gLjRlbSAyLjFlbX0udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDIuMWVtIC40ZW0gMWVtfS51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZy1sZWZ0OjIuMWVtO3BhZGRpbmctcmlnaHQ6Mi4xZW19aW5wdXQudWktYnV0dG9ue3BhZGRpbmc6LjRlbSAxZW19LnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYnV0dG9uLWljb24tb25seSAudWktaWNvbntsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4fS51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tcHJpbWFyeXtsZWZ0Oi41ZW19LnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnl7cmlnaHQ6LjVlbX0udWktYnV0dG9uc2V0e21hcmdpbi1yaWdodDo3cHh9LnVpLWJ1dHRvbnNldCAudWktYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi0uM2VtfWlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixidXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aC15ZWFye3dpZHRoOjEwMCV9LnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcnt3aWR0aDo0OSV9LnVpLWRhdGVwaWNrZXIgdGFibGV7d2lkdGg6MTAwJTtmb250LXNpemU6LjllbTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luOjAgMCAuNGVtfS51aS1kYXRlcGlja2VyIHRoe3BhZGRpbmc6LjdlbSAuM2VtO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyOjB9LnVpLWRhdGVwaWNrZXIgdGR7Ym9yZGVyOjA7cGFkZGluZzoxcHh9LnVpLWRhdGVwaWNrZXIgdGQgc3BhbiwudWktZGF0ZXBpY2tlciB0ZCBhe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzouMmVtO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7bWFyZ2luOi43ZW0gMCAwIDA7cGFkZGluZzowIC4yZW07Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6cmlnaHQ7bWFyZ2luOi41ZW0gLjJlbSAuNGVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW0gLjZlbTt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50e2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aXt3aWR0aDphdXRvfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3Vwe2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGV7d2lkdGg6OTUlO21hcmdpbjowIGF1dG8gLjRlbX0udWktZGF0ZXBpY2tlci1tdWx0aS0yIC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjUwJX0udWktZGF0ZXBpY2tlci1tdWx0aS0zIC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjMzLjMlfS51aS1kYXRlcGlja2VyLW11bHRpLTQgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MjUlfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLWxlZnQtd2lkdGg6MH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2NsZWFyOmxlZnR9LnVpLWRhdGVwaWNrZXItcm93LWJyZWFre2NsZWFyOmJvdGg7d2lkdGg6MTAwJTtmb250LXNpemU6MH0udWktZGF0ZXBpY2tlci1ydGx7ZGlyZWN0aW9uOnJ0bH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldntyaWdodDoycHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0e2xlZnQ6MnB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXY6aG92ZXJ7cmlnaHQ6MXB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlcntsZWZ0OjFweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2NsZWFyOnJpZ2h0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3Vwe2Zsb2F0OnJpZ2h0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDoxcHh9LnVpLWRpYWxvZ3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cGFkZGluZzouMmVtO291dGxpbmU6MH0udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXJ7cGFkZGluZzouNGVtIDFlbTtwb3NpdGlvbjpyZWxhdGl2ZX0udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGV7ZmxvYXQ6bGVmdDttYXJnaW46LjFlbSAwO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDo5MCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi4zZW07dG9wOjUwJTt3aWR0aDoyMXB4O21hcmdpbjotMTBweCAwIDAgMDtwYWRkaW5nOjFweDtoZWlnaHQ6MjBweH0udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDtwYWRkaW5nOi41ZW0gMWVtO2JhY2tncm91bmQ6bm9uZTtvdmVyZmxvdzphdXRvfS51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5le3RleHQtYWxpZ246bGVmdDtib3JkZXItd2lkdGg6MXB4IDAgMCAwO2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW4tdG9wOi41ZW07cGFkZGluZzouM2VtIDFlbSAuNWVtIC40ZW19LnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXR7ZmxvYXQ6cmlnaHR9LnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgYnV0dG9ue21hcmdpbjouNWVtIC40ZW0gLjVlbSAwO2N1cnNvcjpwb2ludGVyfS51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1zZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O3JpZ2h0Oi01cHg7Ym90dG9tOi01cHg7YmFja2dyb3VuZC1wb3NpdGlvbjoxNnB4IDE2cHh9LnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFye2N1cnNvcjptb3ZlfS51aS1tZW51e2xpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjJweDttYXJnaW46MDtkaXNwbGF5OmJsb2NrO291dGxpbmU6bm9uZX0udWktbWVudSAudWktbWVudXttYXJnaW4tdG9wOi0zcHg7cG9zaXRpb246YWJzb2x1dGV9LnVpLW1lbnUgLnVpLW1lbnUtaXRlbXttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJX0udWktbWVudSAudWktbWVudS1kaXZpZGVye21hcmdpbjo1cHggLTJweCA1cHggLTJweDtoZWlnaHQ6MDtmb250LXNpemU6MDtsaW5lLWhlaWdodDowO2JvcmRlci13aWR0aDoxcHggMCAwIDB9LnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lO2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoycHggLjRlbTtsaW5lLWhlaWdodDoxLjU7bWluLWhlaWdodDowO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktbWVudSAudWktbWVudS1pdGVtIGEudWktc3RhdGUtZm9jdXMsLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWFjdGl2ZXtmb250LXdlaWdodDpub3JtYWw7bWFyZ2luOi0xcHh9LnVpLW1lbnUgLnVpLXN0YXRlLWRpc2FibGVke2ZvbnQtd2VpZ2h0Om5vcm1hbDttYXJnaW46LjRlbSAwIC4yZW07bGluZS1oZWlnaHQ6MS41fS51aS1tZW51IC51aS1zdGF0ZS1kaXNhYmxlZCBhe2N1cnNvcjpkZWZhdWx0fS51aS1tZW51LWljb25ze3Bvc2l0aW9uOnJlbGF0aXZlfS51aS1tZW51LWljb25zIC51aS1tZW51LWl0ZW0gYXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6MmVtfS51aS1tZW51IC51aS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMmVtO2xlZnQ6LjJlbX0udWktbWVudSAudWktbWVudS1pY29ue3Bvc2l0aW9uOnN0YXRpYztmbG9hdDpyaWdodH0udWktcHJvZ3Jlc3NiYXJ7aGVpZ2h0OjJlbTt0ZXh0LWFsaWduOmxlZnQ7b3ZlcmZsb3c6aGlkZGVufS51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItdmFsdWV7bWFyZ2luOi0xcHg7aGVpZ2h0OjEwMCV9LnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci1vdmVybGF5e2JhY2tncm91bmQ6dXJsKCJpbWFnZXMvYW5pbWF0ZWQtb3ZlcmxheS5naWYiKTtoZWlnaHQ6MTAwJTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0yNSk7b3BhY2l0eTowLjI1fS51aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIC51aS1wcm9ncmVzc2Jhci12YWx1ZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXNsaWRlcntwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9LnVpLXNsaWRlciAudWktc2xpZGVyLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7d2lkdGg6MS4yZW07aGVpZ2h0OjEuMmVtO2N1cnNvcjpkZWZhdWx0fS51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7Zm9udC1zaXplOi43ZW07ZGlzcGxheTpibG9jaztib3JkZXI6MDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktc2xpZGVyLnVpLXN0YXRlLWRpc2FibGVkIC51aS1zbGlkZXItaGFuZGxlLC51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1yYW5nZXtmaWx0ZXI6aW5oZXJpdH0udWktc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0Oi44ZW19LnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItaGFuZGxle3RvcDotLjNlbTttYXJnaW4tbGVmdDotLjZlbX0udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZXt0b3A6MDtoZWlnaHQ6MTAwJX0udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1taW57bGVmdDowfS51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlLW1heHtyaWdodDowfS51aS1zbGlkZXItdmVydGljYWx7d2lkdGg6LjhlbTtoZWlnaHQ6MTAwcHh9LnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLWhhbmRsZXtsZWZ0Oi0uM2VtO21hcmdpbi1sZWZ0OjA7bWFyZ2luLWJvdHRvbTotLjZlbX0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2V7bGVmdDowO3dpZHRoOjEwMCV9LnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlLW1pbntib3R0b206MH0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWF4e3RvcDowfS51aS1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS51aS1zcGlubmVyLWlucHV0e2JvcmRlcjpub25lO2JhY2tncm91bmQ6bm9uZTtjb2xvcjppbmhlcml0O3BhZGRpbmc6MDttYXJnaW46LjJlbSAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDouNGVtO21hcmdpbi1yaWdodDoyMnB4fS51aS1zcGlubmVyLWJ1dHRvbnt3aWR0aDoxNnB4O2hlaWdodDo1MCU7Zm9udC1zaXplOi41ZW07cGFkZGluZzowO21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpkZWZhdWx0O2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3JpZ2h0OjB9LnVpLXNwaW5uZXIgYS51aS1zcGlubmVyLWJ1dHRvbntib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci1yaWdodDpub25lfS51aS1zcGlubmVyIC51aS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi10b3A6LThweDt0b3A6NTAlO2xlZnQ6MH0udWktc3Bpbm5lci11cHt0b3A6MH0udWktc3Bpbm5lci1kb3due2JvdHRvbTowfS51aS1zcGlubmVyIC51aS1pY29uLXRyaWFuZ2xlLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NXB4IC0xNnB4fS51aS10YWJze3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6LjJlbX0udWktdGFicyAudWktdGFicy1uYXZ7bWFyZ2luOjA7cGFkZGluZzouMmVtIC4yZW0gMH0udWktdGFicyAudWktdGFicy1uYXYgbGl7bGlzdC1zdHlsZTpub25lO2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bWFyZ2luOjFweCAuMmVtIDAgMDtib3JkZXItYm90dG9tOjA7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcH0udWktdGFicyAudWktdGFicy1uYXYgbGkgYXtmbG9hdDpsZWZ0O3BhZGRpbmc6LjVlbSAxZW07dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZle21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nLWJvdHRvbToxcHh9LnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIGEsLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXN0YXRlLWRpc2FibGVkIGEsLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtbG9hZGluZyBhe2N1cnNvcjp0ZXh0fS51aS10YWJzIC51aS10YWJzLW5hdiBsaSBhLC51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSBhe2N1cnNvcjpwb2ludGVyfS51aS10YWJzIC51aS10YWJzLXBhbmVse2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzoxZW0gMS40ZW07YmFja2dyb3VuZDpub25lfS51aS10b29sdGlwe3BhZGRpbmc6OHB4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTttYXgtd2lkdGg6MzAwcHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA1cHggI2FhYTtib3gtc2hhZG93OjAgMCA1cHggI2FhYX1ib2R5IC51aS10b29sdGlwe2JvcmRlci13aWR0aDoycHh9LnVpLXdpZGdldHtmb250LWZhbWlseTpBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjNlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6QXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS51aS13aWRnZXQtY29udGVudHtib3JkZXI6MXB4IHNvbGlkICMwMDA7YmFja2dyb3VuZDojMTExIHVybChpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8yMF8xMTExMTFfNTAweDEwMC5wbmcpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6I2Q5ZDlkOX0udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojZDlkOWQ5fS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgIzBiM2U2ZjtiYWNrZ3JvdW5kOiMwYjNlNmYgdXJsKGltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMTVfMGIzZTZmXzQweDQwLnBuZykgNTAlIDUwJSByZXBlYXQ7Y29sb3I6I2Y2ZjZmNjtmb250LXdlaWdodDpib2xkfS51aS13aWRnZXQtaGVhZGVyIGF7Y29sb3I6I2Y2ZjZmNn0udWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHR7Ym9yZGVyOjFweCBzb2xpZCAjMzMzO2JhY2tncm91bmQ6IzMzMyB1cmwoaW1hZ2VzL3VpLWJnX2RvdHMtc21hbGxfMjBfMzMzMzMzXzJ4Mi5wbmcpIDUwJSA1MCUgcmVwZWF0O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2ZmZn0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgIzIyMjtiYWNrZ3JvdW5kOiMwMDQ5OGYgdXJsKGltYWdlcy91aS1iZ19kb3RzLXNtYWxsXzQwXzAwNDk4Zl8yeDIucG5nKSA1MCUgNTAlIHJlcGVhdDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWhvdmVyIGEsLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIsLnVpLXN0YXRlLWhvdmVyIGE6bGluaywudWktc3RhdGUtaG92ZXIgYTp2aXNpdGVke2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZle2JvcmRlcjoxcHggc29saWQgIzA5NmFjODtiYWNrZ3JvdW5kOiMyOTI5MjkgdXJsKGltYWdlcy91aS1iZ19mbGF0XzQwXzI5MjkyOV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6Izc1YWJmZn0udWktc3RhdGUtYWN0aXZlIGEsLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWR7Y29sb3I6Izc1YWJmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHR7Ym9yZGVyOjFweCBzb2xpZCAjMDUyZjU3O2JhY2tncm91bmQ6IzBiNThhMiB1cmwoaW1hZ2VzL3VpLWJnX2RvdHMtbWVkaXVtXzMwXzBiNThhMl80eDQucG5nKSA1MCUgNTAlIHJlcGVhdDtjb2xvcjojZmZmfS51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvcntib3JkZXI6MXB4IHNvbGlkICNjZDBhMGE7YmFja2dyb3VuZDojYTMyZDAwIHVybChpbWFnZXMvdWktYmdfZG90cy1zbWFsbF8zMF9hMzJkMDBfMngyLnBuZykgNTAlIDUwJSByZXBlYXQ7Y29sb3I6I2ZmZn0udWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHR7Y29sb3I6I2ZmZn0udWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnl7Zm9udC13ZWlnaHQ6Ym9sZH0udWktcHJpb3JpdHktc2Vjb25kYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnl7b3BhY2l0eTouNztmaWx0ZXI6QWxwaGEoT3BhY2l0eT03MCk7Zm9udC13ZWlnaHQ6bm9ybWFsfS51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZHtvcGFjaXR5Oi4zNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7YmFja2dyb3VuZC1pbWFnZTpub25lfS51aS1zdGF0ZS1kaXNhYmxlZCAudWktaWNvbntmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSl9LnVpLWljb257d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbiwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zXzljY2RmY18yNTZ4MjQwLnBuZyl9LnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zXzk4ZDJmYl8yNTZ4MjQwLnBuZyl9LnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zXzljY2RmY18yNTZ4MjQwLnBuZyl9LnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLC51aS1zdGF0ZS1mb2N1cyAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nKX0udWktc3RhdGUtYWN0aXZlIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc18wMDQ5OGZfMjU2eDI0MC5wbmcpfS51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZyl9LnVpLXN0YXRlLWVycm9yIC51aS1pY29uLC51aS1zdGF0ZS1lcnJvci10ZXh0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcpfS51aS1pY29uLWNhcmF0LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktaWNvbi1jYXJhdC0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0udWktaWNvbi1jYXJhdC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAwfS51aS1pY29uLWNhcmF0LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS51aS1pY29uLWNhcmF0LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IDB9LnVpLWljb24tY2FyYXQtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDB9LnVpLWljb24tY2FyYXQtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0udWktaWNvbi1jYXJhdC0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IDB9LnVpLWljb24tY2FyYXQtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggMH0udWktaWNvbi1jYXJhdC0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS51aS1pY29uLXRyaWFuZ2xlLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTZweH0udWktaWNvbi1hcnJvdy0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0zMnB4fS51aS1pY29uLWFycm93LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTMycHh9LnVpLWljb24tYXJyb3d0aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC02NHB4fS51aS1pY29uLWFycm93LTR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC04MHB4fS51aS1pY29uLWFycm93LTQtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC04MHB4fS51aS1pY29uLWV4dGxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtODBweH0udWktaWNvbi1uZXd3aW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtODBweH0udWktaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTgwcHh9LnVpLWljb24tc2h1ZmZsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVyLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVydGhpY2stZS13e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC04MHB4fS51aS1pY29uLWZvbGRlci1jb2xsYXBzZWR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS51aS1pY29uLWZvbGRlci1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtOTZweH0udWktaWNvbi1kb2N1bWVudC1ie2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9LnVpLWljb24tbm90ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC05NnB4fS51aS1pY29uLW1haWwtY2xvc2Vke2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTk2cHh9LnVpLWljb24tbWFpbC1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9LnVpLWljb24tc3VpdGNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTk2cHh9LnVpLWljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtOTZweH0udWktaWNvbi1wZXJzb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9LnVpLWljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTk2cHh9LnVpLWljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTk2cHh9LnVpLWljb24tbG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS51aS1pY29uLXVubG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC05NnB4fS51aS1pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC05NnB4fS51aS1pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0udWktaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9LnVpLWljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMTJweH0udWktaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMTJweH0udWktaWNvbi1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTExMnB4fS51aS1pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMTJweH0udWktaWNvbi1jbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMTJweH0udWktaWNvbi1kaXNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTExMnB4fS51aS1pY29uLWNhbGN1bGF0b3J7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTExMnB4fS51aS1pY29uLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTEycHh9LnVpLWljb24tem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTEycHh9LnVpLWljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMTJweH0udWktaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTExMnB4fS51aS1pY29uLWdlYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExMnB4fS51aS1pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMTJweH0udWktaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMTJweH0udWktaWNvbi1saW5re2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMTJweH0udWktaWNvbi1jYW5jZWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0udWktaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTEyOHB4fS51aS1pY29uLXBsdXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMjhweH0udWktaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjhweH0udWktaWNvbi1taW51c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTEyOHB4fS51aS1pY29uLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTEyOHB4fS51aS1pY29uLWNsb3NldGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTI4cHh9LnVpLWljb24ta2V5e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMjhweH0udWktaWNvbi1saWdodGJ1bGJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTEyOHB4fS51aS1pY29uLXNjaXNzb3Jze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjhweH0udWktaWNvbi1jbGlwYm9hcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTEyOHB4fS51aS1pY29uLWNvcHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTEyOHB4fS51aS1pY29uLWNvbnRhY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyOHB4fS51aS1pY29uLWltYWdle2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMjhweH0udWktaWNvbi12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTI4cHh9LnVpLWljb24tc2NyaXB0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjhweH0udWktaWNvbi1hbGVydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS51aS1pY29uLWluZm97YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTQ0cHh9LnVpLWljb24tbm90aWNle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE0NHB4fS51aS1pY29uLWhlbHB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LnVpLWljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTQ0cHh9LnVpLWljb24tYnVsbGV0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTQ0cHh9LnVpLWljb24tcGluLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE0NHB4fS51aS1pY29uLXBpbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0udWktaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTYwcHh9LnVpLWljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTYwcHh9LnVpLWljb24tc2Vlay1uZXh0e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2MHB4fS51aS1pY29uLXNlZWstcHJldntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWVuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNjBweH0udWktaWNvbi1zZWVrLXN0YXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXNlZWstZmlyc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNjBweH0udWktaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNjBweH0udWktaWNvbi1wb3dlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE3NnB4fS51aS1pY29uLXNpZ25hbC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE3NnB4fS51aS1pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0xe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTN7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTc2cHh9LnVpLWljb24tY2lyY2xlLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xOTJweH0udWktaWNvbi1jaXJjbGUtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1le2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMDhweH0udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIyNHB4fS51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjI0cHh9LnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIyNHB4fS51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjI0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItdGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLXRye2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci1ibHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItYnJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS51aS13aWRnZXQtb3ZlcmxheXtiYWNrZ3JvdW5kOiNhYWEgdXJsKGltYWdlcy91aS1iZ19mbGF0XzBfYWFhYWFhXzQweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7b3BhY2l0eTouMztmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zMCl9LnVpLXdpZGdldC1zaGFkb3d7bWFyZ2luOi04cHggMCAwIC04cHg7cGFkZGluZzo4cHg7YmFja2dyb3VuZDojYWFhIHVybChpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjM7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzApO2JvcmRlci1yYWRpdXM6OHB4fQ==",
	"dot-luv/images/animated-overlay.gif": "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",
	"dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png": "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAIAAABTDPN5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAAAOZJREFUaN7t2KENAkEQheHjTpIgUJijCJrAYCgDe5KEFrBUhYMGKABBgiRBzJpNdrM7CJL5Z58aM3n57JuNp939uO8yeZ5fh/e6U2Y5LS7zh/brP729H2oWTKUmwGxqBPZAlQyf6+q22XqgSnrtg12q9CrA1qlyV4EZ1CowiVoA86hZMJWaALOpEdgDNYD9UAPYD1V6fwRbpMqtBtulqsHWqQowg1oFJlELYB41C6ZSE2A2NQJ7oErapsWltk2LTq0Ck6gFMI+aBVOpCTCbGoE9UAPYDzWA/VDbpkWnqsHWqQowgyr5Am0X4XHGCmUhAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAyLTE1VDEzOjIzOjE2LTA4OjAw5UOTBwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMi0xNVQxMzoyMzoxNi0wODowMJQeK7sAAAAASUVORK5CYII=",
	"dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png":       "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAEEAIAAAB2A9VqAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAAACtJREFUCNdj5OaOiFi0iAEDMEEolceS9nz8EBJFAhOwQKg7ss8PfvqILAEAxYkJkIKgBP0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMTVUMTM6MjM6MjgtMDg6MDA78++5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTE1VDEzOjIzOjI4LTA4OjAwSq5XBQAAAABJRU5ErkJggg==",
	"dot-luv/images/ui-bg_dots-small_20_333333_2x2.png":        "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACEAIAAACtREYwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAAAB1JREFUCNdjNDY2NjY2ZmBgYGBgYIJQIv0i/SL9ACEqAx86dAvTAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAyLTE1VDEzOjIzOjA2LTA4OjAwKemTmQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMi0xNVQxMzoyMzowNi0wODowMFi0KyUAAAAASUVORK5CYII=",
	"dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png":        "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACEAIAAACtREYwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAAABhJREFUCNdjXLxYV5cBCpggFN9L+f1qvQAv3QQsCa5aFQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wMi0xNVQxMzoyMzoyOC0wODowMDvz77kAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDItMTVUMTM6MjM6MjgtMDg6MDBKrlcFAAAAAElFTkSuQmCC",
	"dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png":        "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACEAIAAACtREYwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAAAB5JREFUCNdjZGDw9OzvZ2BgYGBgYIJQxmkq68UnAwAqmAPKLkTMfwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wMi0xNVQxMzoyNDowOS0wODowMD19+AkAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDItMTVUMTM6MjQ6MDktMDg6MDBMIEC1AAAAAElFTkSuQmCC",
	"dot-luv/images/ui-bg_flat_0_aaaaaa_40x100.png":            "iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZQTFRFqqqq////BR/TAwAAAAFiS0dEAf8CLd4AAAAPSURBVCjPY2AYBaOA+gAAAlgAAXU2hncAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMTVUMTM6MjI6MjktMDg6MDByRo8zAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTE1VDEzOjIyOjI5LTA4OjAwAxs3jwAAAABJRU5ErkJggg==",
	"dot-luv/images/ui-bg_flat_40_292929_40x100.png":           "iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZQTFRFKSkp////lJFm4gAAAAFiS0dEAf8CLd4AAAAPSURBVCjPY2AYBaOA+gAAAlgAAXU2hncAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMTVUMTM6MjM6MDYtMDg6MDAp6ZOZAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTE1VDEzOjIzOjA2LTA4OjAwWLQrJQAAAABJRU5ErkJggg==",
	"dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png":    "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",
	"dot-luv/images/ui-icons_00498f_256x240.png":               "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",
	"dot-luv/images/ui-icons_98d2fb_256x240.png":               "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",
	"dot-luv/images/ui-icons_9ccdfc_256x240.png":               "iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAABGdBTUEAAYagMeiWXwAAAM9QTFRFnM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38nM38EO/slAAAAER0Uk5TAAIBCBSFOVEHBBcqDSIeA5oMDhESGgUWBjwJPjeLJZOfkAoPgHqDNGh2YENmZGty+lgV3EZcjB9MWm4nvFUQICk2SCM3Z35MAAAAAWJLR0QAiAUdSAAADvlJREFUeNrtXQtj1LgRlh972SXeRwmXAg1tCn1dr9feHhzlcoWUMv//N1WSH5qHLK3xxusk+gJJxpIlzeeRNCPJG6USEhJmgAyyUzfhxPrDzBkY3bwMwvpnmAGTeVpCmAWCASWAt4ekm9QMXwEQFUCgAna//XVSk+AWKAnIeHtIOn+CggB+u6xAZM4mZEC0369CIF0yqFjucOm+zFkw01EhLFg2kT9gaSHBJywtINCA6S3AT4poYogAcTcIEwmUzkxw+jHgAD7udBbgXWj6WeDkeOyOUEJCQkJCQsKMceee4In9oExEa8Cd94zfwbOTAD8TFYTWA8SCkC59Uko8DRAEiAw8Ow0XM1EBJyAQXZrSpwyGRPv9LQ4ke1ZUssDtKrIECJaAyZYDpAUrn82SaO2A9YCMlhbqUae2AC+yQIvHrwfIHnLSMSCOhz4LJCQkJCQkJCScDuMc/6hrGi1/dOAxsgCQ26kwIPfo9snjAKJBkdIgfEWqx5JBZqG3Q1+av4JgAzyp4fp9JYQIEumiMKGBrA5YIvQktoyK8tgN0Jd4QP0yXIYYAXIBCMIaxG8PZKEKNrnZmhXNzgsM8ufNETShYAdSPgthjHtuD5tovIYh6kX7uOcMEYTTIyWyxwHRBxKpAJS3zv7UU88Cd3x/fJpMSEhISEhIeKwYfyx1pJuReU6j9xfp80OjW1WR6oc14KAKwvG82Fv1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",
	"dot-luv/images/ui-icons_ffffff_256x240.png":               "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",
	"jstree_default/d.gif":                                     "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",
	"jstree_default/d.png":                                     "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",
	"jstree_default/style.css":                                 "LyoKICoganNUcmVlIGRlZmF1bHQgdGhlbWUgMS4wCiAqIFN1cHBvcnRlZCBmZWF0dXJlczogZG90cy9uby1kb3RzLCBpY29ucy9uby1pY29ucywgZm9jdXNlZCwgbG9hZGluZwogKiBTdXBwb3J0ZWQgcGx1Z2luczogdWkgKGhvdmVyZWQsIGNsaWNrZWQpLCBjaGVja2JveCwgY29udGV4dG1lbnUsIHNlYXJjaAogKi8KCi5qc3RyZWUtZGVmYXVsdCBsaSwgCi5qc3RyZWUtZGVmYXVsdCBpbnMgeyBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZC5wbmciKTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyBiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyB9Ci5qc3RyZWUtZGVmYXVsdCBsaSB7IGJhY2tncm91bmQtcG9zaXRpb246LTkwcHggMDsgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7IH0KLmpzdHJlZS1kZWZhdWx0IGxpLmpzdHJlZS1sYXN0IHsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1vcGVuID4gaW5zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAwOyB9Ci5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLWNsb3NlZCA+IGlucyB7IGJhY2tncm91bmQtcG9zaXRpb246LTU0cHggMDsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1sZWFmID4gaW5zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjotMzZweCAwOyB9CgouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1ob3ZlcmVkIHsgYmFja2dyb3VuZDojZTdmNGY5OyBib3JkZXI6MXB4IHNvbGlkICNkOGYwZmE7IHBhZGRpbmc6MCAycHggMCAxcHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtY2xpY2tlZCB7IGJhY2tncm91bmQ6I2JlZWJmZjsgYm9yZGVyOjFweCBzb2xpZCAjOTlkZWZkOyBwYWRkaW5nOjAgMnB4IDAgMXB4OyB9Ci5qc3RyZWUtZGVmYXVsdCBhIC5qc3RyZWUtaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246LTU2cHggLTE5cHg7IH0KLmpzdHJlZS1kZWZhdWx0IGEuanN0cmVlLWxvYWRpbmcgLmpzdHJlZS1pY29uIHsgYmFja2dyb3VuZDp1cmwoInRocm9iYmVyLmdpZiIpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0ICFpbXBvcnRhbnQ7IH0KCi5qc3RyZWUtZGVmYXVsdC5qc3RyZWUtZm9jdXNlZCB7IGJhY2tncm91bmQ6I2ZmZmZlZTsgfQoKLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtbm8tZG90cyBsaSwgCi5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1sZWFmID4gaW5zIHsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtb3BlbiA+IGlucyB7IGJhY2tncm91bmQtcG9zaXRpb246LTE4cHggMDsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtY2xvc2VkID4gaW5zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjowIDA7IH0KCi5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLW5vLWljb25zIGEgLmpzdHJlZS1pY29uIHsgZGlzcGxheTpub25lOyB9CgouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1zZWFyY2ggeyBmb250LXN0eWxlOml0YWxpYzsgfQoKLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtbm8taWNvbnMgLmpzdHJlZS1jaGVja2JveCB7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB9Ci5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLW5vLWNoZWNrYm94ZXMgLmpzdHJlZS1jaGVja2JveCB7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9Ci5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLWNoZWNrZWQgPiBhID4gLmpzdHJlZS1jaGVja2JveCB7IGJhY2tncm91bmQtcG9zaXRpb246LTM4cHggLTE5cHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5jaGVja2VkID4gYSA+IC5qc3RyZWUtY2hlY2tib3ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0ycHggLTE5cHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5kZXRlcm1pbmVkID4gYSA+IC5qc3RyZWUtY2hlY2tib3ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IC0xOXB4OyB9Ci5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLWNoZWNrZWQgPiBhID4gLmpzdHJlZS1jaGVja2JveDpob3ZlciB7IGJhY2tncm91bmQtcG9zaXRpb246LTM4cHggLTM3cHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5jaGVja2VkID4gYSA+IC5qc3RyZWUtY2hlY2tib3g6aG92ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0ycHggLTM3cHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5kZXRlcm1pbmVkID4gYSA+IC5qc3RyZWUtY2hlY2tib3g6aG92ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IC0zN3B4OyB9CgojdmFrYXRhLWRyYWdnZWQuanN0cmVlLWRlZmF1bHQgaW5zIHsgYmFja2dyb3VuZDp0cmFuc3BhcmVudCAhaW1wb3J0YW50OyB9CiN2YWthdGEtZHJhZ2dlZC5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLW9rIHsgYmFja2dyb3VuZDp1cmwoImQucG5nIikgLTJweCAtNTNweCBuby1yZXBlYXQgIWltcG9ydGFudDsgfQojdmFrYXRhLWRyYWdnZWQuanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1pbnZhbGlkIHsgYmFja2dyb3VuZDp1cmwoImQucG5nIikgLTE4cHggLTUzcHggbm8tcmVwZWF0ICFpbXBvcnRhbnQ7IH0KI2pzdHJlZS1tYXJrZXIuanN0cmVlLWRlZmF1bHQgeyBiYWNrZ3JvdW5kOnVybCgiZC5wbmciKSAtNDFweCAtNTdweCBuby1yZXBlYXQgIWltcG9ydGFudDsgdGV4dC1pbmRlbnQ6LTEwMHB4OyB9CgouanN0cmVlLWRlZmF1bHQgYS5qc3RyZWUtc2VhcmNoIHsgY29sb3I6YXF1YTsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1sb2NrZWQgYSB7IGNvbG9yOnNpbHZlcjsgY3Vyc29yOmRlZmF1bHQ7IH0KCiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCwgCiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBsaSB1bCB7IGJhY2tncm91bmQ6I2YwZjBmMDsgYm9yZGVyOjFweCBzb2xpZCAjOTc5Nzk3OyAtbW96LWJveC1zaGFkb3c6IDFweCAxcHggMnB4ICM5OTk7IC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDFweCAycHggIzk5OTsgYm94LXNoYWRvdzogMXB4IDFweCAycHggIzk5OTsgfQojdmFrYXRhLWNvbnRleHRtZW51LmpzdHJlZS1kZWZhdWx0LWNvbnRleHQgbGkgeyB9CiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBhIHsgY29sb3I6YmxhY2s7IH0KI3Zha2F0YS1jb250ZXh0bWVudS5qc3RyZWUtZGVmYXVsdC1jb250ZXh0IGE6aG92ZXIsIAojdmFrYXRhLWNvbnRleHRtZW51LmpzdHJlZS1kZWZhdWx0LWNvbnRleHQgLnZha2F0YS1ob3ZlciA+IGEgeyBwYWRkaW5nOjAgNXB4OyBiYWNrZ3JvdW5kOiNlOGVmZjc7IGJvcmRlcjoxcHggc29saWQgI2FlY2ZmNzsgY29sb3I6YmxhY2s7IC1tb3otYm9yZGVyLXJhZGl1czoycHg7IC13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7IGJvcmRlci1yYWRpdXM6MnB4OyB9CiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBsaS5qc3RyZWUtY29udGV4dG1lbnUtZGlzYWJsZWQgYSwgCiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBsaS5qc3RyZWUtY29udGV4dG1lbnUtZGlzYWJsZWQgYTpob3ZlciB7IGNvbG9yOnNpbHZlcjsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyOjA7IHBhZGRpbmc6MXB4IDRweDsgfQojdmFrYXRhLWNvbnRleHRtZW51LmpzdHJlZS1kZWZhdWx0LWNvbnRleHQgbGkudmFrYXRhLXNlcGFyYXRvciB7IGJhY2tncm91bmQ6d2hpdGU7IGJvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTA7IG1hcmdpbjowOyB9CiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBsaSB1bCB7IG1hcmdpbi1sZWZ0Oi00cHg7IH0KCi8qIElFNiBCRUdJTiAqLwouanN0cmVlLWRlZmF1bHQgbGksIAouanN0cmVlLWRlZmF1bHQgaW5zLAojdmFrYXRhLWRyYWdnZWQuanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1pbnZhbGlkLCAKI3Zha2F0YS1kcmFnZ2VkLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtb2ssIAojanN0cmVlLW1hcmtlci5qc3RyZWUtZGVmYXVsdCB7IF9iYWNrZ3JvdW5kLWltYWdlOnVybCgiZC5naWYiKTsgfQouanN0cmVlLWRlZmF1bHQgLmpzdHJlZS1vcGVuIGlucyB7IF9iYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IDA7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtY2xvc2VkIGlucyB7IF9iYWNrZ3JvdW5kLXBvc2l0aW9uOi01NHB4IDA7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtbGVhZiBpbnMgeyBfYmFja2dyb3VuZC1wb3NpdGlvbjotMzZweCAwOyB9Ci5qc3RyZWUtZGVmYXVsdCBhIGlucy5qc3RyZWUtaWNvbiB7IF9iYWNrZ3JvdW5kLXBvc2l0aW9uOi01NnB4IC0xOXB4OyB9CiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBpbnMgeyBfZGlzcGxheTpub25lOyB9CiN2YWthdGEtY29udGV4dG1lbnUuanN0cmVlLWRlZmF1bHQtY29udGV4dCBsaSB7IF96b29tOjE7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5kZXRlcm1pbmVkIGEgLmpzdHJlZS1jaGVja2JveCB7IF9iYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IC0xOXB4OyB9Ci5qc3RyZWUtZGVmYXVsdCAuanN0cmVlLWNoZWNrZWQgYSAuanN0cmVlLWNoZWNrYm94IHsgX2JhY2tncm91bmQtcG9zaXRpb246LTM4cHggLTE5cHg7IH0KLmpzdHJlZS1kZWZhdWx0IC5qc3RyZWUtdW5jaGVja2VkIGEgLmpzdHJlZS1jaGVja2JveCB7IF9iYWNrZ3JvdW5kLXBvc2l0aW9uOi0ycHggLTE5cHg7IH0KLyogSUU2IEVORCAqLw==",
	"jstree_default/throbber.gif":                              "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",
}
View Source
var InvalidUsernameRE *regexp.Regexp = regexp.MustCompile("[^a-zA-Z0-9]")
View Source
var LONG_OPTION map[string]bool = map[string]bool{
	"setup": true,
}
View Source
var LUA_EXECUTION_LIMIT = 1000
View Source
var Logger *log.Logger = makeLogger(os.Stderr)
View Source
var LoggerWriter io.Writer
View Source
var OPERATORS map[string]bool = map[string]bool{
	"<":  true,
	">":  true,
	"=":  true,
	"<=": true,
	">=": true,
	"!=": true,
}
View Source
var OPERATOR_CHECK map[string]string = map[string]string{
	"!=":       "<>",
	"=":        "=",
	">":        ">",
	"<":        "<",
	">=":       ">=",
	"<=":       "<=",
	"LIKE":     "LIKE",
	"like":     "LIKE",
	"not like": "NOT LIKE",
	"NOT LIKE": "NOT LIKE",
	"NOTLIKE":  "NOT LIKE",
	"notlike":  "NOT LIKE",
}
View Source
var RUN_ARGUMENTS_VAR = "args"
View Source
var SEARCHFUNCTION string = "searchfn"
View Source
var SELECT_HEADER string = "" /* 171-byte string literal not displayed */
View Source
var SUMS map[string]string = map[string]string{
	"jstree_default/throbber.gif":                "7b9776076d5fceef4993b55c9383dedd",
	"dot-luv/images/ui-icons_9ccdfc_256x240.png": "d3ee81d8dbc2b6b82cbefdaa96c4bde0",
	"cint.js": "6fbc1adb5eb956a1f7640b6b6ca40402",
	"dot-luv/images/ui-bg_flat_40_292929_40x100.png":           "5e0ff78ce69de43caf11a1f697cf2fc1",
	"jstree_default/style.css":                                 "0cf8c9c15cc9fb645c31e6d351488280",
	"init.lua":                                                 "d293b6af8c00baee5765f395d12d1191",
	"loading.gif":                                              "114b90725e0e3a0b9bb1aeafef309eaf",
	"dot-luv/images/ui-icons_ffffff_256x240.png":               "a98c546518c4b7ad5edda8d289714b01",
	"dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png": "ff05392cac422d4f13bb3625a701f4c2",
	"dot-luv/images/ui-bg_dots-small_20_333333_2x2.png":        "2137986af1c492cbf72e5b254458baeb",
	"fontawesome.woff":                                         "fdf491ce5ff5b2da02708cd0e9864719",
	"dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png":    "c93075e0fc0553a843104fffee9c871f",
	"animals-dog.png":                                          "d311eb7f9e927ea7ba604387f6278558",
	"tlist.css":                                                "1504513fd4ea08de4e81078e1dc2ba10",
	"nfint.js":                                                 "e56039be26fe7eaa55bd49853432db18",
	"dlist.css":                                                "e8f3e32cd7589ec7821d8ab0ddf5c624",
	"nfstyle.css":                                              "a67cd37781c070e20ebf390528e32cbd",
	"opts.js":                                                  "b3887fa694b91162389a6c613bd1e06a",
	"cal.css":                                                  "3e13c44274dc964eef459b4af62eef43",
	"dot-luv/images/ui-bg_flat_0_aaaaaa_40x100.png":            "a5d0769a4617fc27d49f24e471189397",
	"dot-luv/jquery-ui.custom.css":                             "15cb433e8d9aa19ece8437c030b10404",
	"fullcalendar.css":                                         "981c87e1fe013795a7f5024e1afdf516",
	"jstree_default/d.gif":                                     "25d6637406a2a3d42735b22d0f627639",
	"static-test.html":                                         "a330454d4971fbf845449c94e79ccd2b",
	"jstree.js":                                                "0b3e19365aab7c8d3f0042c19bb62e08",
	"dot-luv/images/ui-icons_00498f_256x240.png":               "414a0ad8f8c4ce1bd64b8e275726b264",
	"list.css":                                                 "f672414ba454a33b21edd090c1c32e25",
	"jquery.js":                                                "397754ba49e9e0cf4e7c190da78dda05",
	"dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png":  "1e7a5703c472f6aac18dc1d047644111",
	"dot-luv/images/animated-overlay.gif":                "2b912f7c0653008ca28ebacda49025e7",
	"jquery-ui-custom.js":                                "0e907a053ab6103677a9e888afbd9bc6",
	"advanced.html":                                      "553cb724bfaea5297a58f2169e718910",
	"dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png":  "344c3f165f5efa856525bb6337ca072c",
	"jquery.min.map":                                     "3e4ac942ec0415ecb1f8ea1ea7e00b4e",
	"fullcalendar.js":                                    "0c37722811ccea744da60447f1a36242",
	"listcommon.css":                                     "5fcb2d72975bed65f9180c8bfae892d6",
	"int.js":                                             "a64ca945786032c0e08ad9eec04d9689",
	"dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png": "3a6082f31ade55b6eacecfba898c7eef",
	"jstree_default/d.png":                               "0eb50798dca00f5cc8e153e6da9a87f9",
	"dot-luv/images/ui-icons_98d2fb_256x240.png":         "a82c83bb46e1d2865e52b7868f6ba3e5",
}
View Source
var SecureCookies = true
View Source
var TASKLIST string = "tasklist"
View Source
var TimeOnlyFormats []DateTimeFormat = []DateTimeFormat{
	{"15:04:05", false, true},
	{"15:04", false, true},
}

Functions

func APITokensServer

func APITokensServer(c http.ResponseWriter, req *http.Request)

func AddCookies

func AddCookies(c http.ResponseWriter, cookies map[string]string)

func AddIdCookie

func AddIdCookie(c http.ResponseWriter) string

func Base

func Base(dbpath string) string

func CalendarEventServer

func CalendarEventServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func CalendarServerInner

func CalendarServerInner(c http.ResponseWriter, req *http.Request, tl *Tasklist, trigger string, isSavedSearch bool, perr error)

func ChangePriorityServer

func ChangePriorityServer(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

func CheckArgs

func CheckArgs(args []string, accepted map[string]bool, min int, max int, cmd string) (nargs []string, flags map[string]bool)

func CheckBool

func CheckBool(in string, name string) bool

func CheckFormValue

func CheckFormValue(req *http.Request, name string) string

func ChildsServer

func ChildsServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func CompatHelp

func CompatHelp()

func Complain

func Complain(usage bool, format string, a ...interface{})

func ConsumeRealExtra

func ConsumeRealExtra(t *Tokenizer) string

func DecodeBase64

func DecodeBase64(in string) string

func ErrorLogServer

func ErrorLogServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func ExplainServer

func ExplainServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func ExplodeBodyServer

func ExplodeBodyServer(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

func ExtraSeparatorTokenizer

func ExtraSeparatorTokenizer(t *Tokenizer) (string, int)

func FixDate

func FixDate(datetime *VarTime)

func FixExtension

func FixExtension(name string) string

func FixYear

func FixYear(datetime *VarTime, withTime bool)

func FormatTriggerAtForAdd

func FormatTriggerAtForAdd(e *Entry) string

func FrequencyToString

func FrequencyToString(freq int) string

func GetCookies

func GetCookies(c *http.Request) map[string]string

func GetIdCookie

func GetIdCookie(c *http.Request) string

func GetServer

func GetServer(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

func GetTableInt

func GetTableInt(L *lua.State, name string) int

func HasTable

func HasTable(conn *sqlite.Conn, name string) bool

func HelloServer

func HelloServer(c http.ResponseWriter, req *http.Request)

* Minimal test server

func HtmlGetServer

func HtmlGetServer(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

func IsSubitem

func IsSubitem(cols Columns) (bool, string)

func ListJsonServer

func ListJsonServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func ListServer

func ListServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func Log

func Log(ll LogLevel, a ...interface{})

func Logf

func Logf(ll LogLevel, fmt string, a ...interface{})

func LoginServer

func LoginServer(c http.ResponseWriter, req *http.Request)

func LuaIntAndQuery

func LuaIntAndQuery(L *lua.State) int

func LuaIntBoolQuery

func LuaIntBoolQuery(L *lua.State, operator, name string) int

func LuaIntCloneCursor

func LuaIntCloneCursor(L *lua.State) int

func LuaIntColumn

func LuaIntColumn(L *lua.State) int

func LuaIntColumnQuery

func LuaIntColumnQuery(L *lua.State) int

func LuaIntDebulog

func LuaIntDebulog(L *lua.State) int

func LuaIntFilterIn

func LuaIntFilterIn(L *lua.State) int

func LuaIntFilterOut

func LuaIntFilterOut(L *lua.State) int

func LuaIntGetterSetterFunction

func LuaIntGetterSetterFunction(fname string, L *lua.State, getter func(tl *Tasklist, entry *Entry) string, setter func(tl *Tasklist, entry *Entry, value string)) int

func LuaIntGetterSetterFunctionInt

func LuaIntGetterSetterFunctionInt(fname string, L *lua.State, getter func(tl *Tasklist, entry *Entry) int64, setter func(tl *Tasklist, entry *Entry, value int)) int

func LuaIntId

func LuaIntId(L *lua.State) int

func LuaIntIdQuery

func LuaIntIdQuery(L *lua.State) int

func LuaIntLocalTime

func LuaIntLocalTime(L *lua.State) int

func LuaIntNotQuery

func LuaIntNotQuery(L *lua.State) int

func LuaIntOrQuery

func LuaIntOrQuery(L *lua.State) int

func LuaIntParseDateTime

func LuaIntParseDateTime(L *lua.State) int

func LuaIntPersist

func LuaIntPersist(L *lua.State) int

func LuaIntPriority

func LuaIntPriority(L *lua.State) int

func LuaIntPriorityQuery

func LuaIntPriorityQuery(L *lua.State) int

func LuaIntRemove

func LuaIntRemove(L *lua.State) int

func LuaIntRmColumn

func LuaIntRmColumn(L *lua.State) int

func LuaIntSearch

func LuaIntSearch(L *lua.State) int

func LuaIntSearchQuery

func LuaIntSearchQuery(L *lua.State) int

func LuaIntShowRet

func LuaIntShowRet(L *lua.State) int

func LuaIntSortField

func LuaIntSortField(L *lua.State) int

func LuaIntSplit

func LuaIntSplit(L *lua.State) int

func LuaIntStringFunction

func LuaIntStringFunction(L *lua.State, name string, n int, fn func(tl *Tasklist, argv []string) int) int

func LuaIntText

func LuaIntText(L *lua.State) int

func LuaIntTextQuery

func LuaIntTextQuery(L *lua.State) int

func LuaIntTimestamp

func LuaIntTimestamp(L *lua.State) int

func LuaIntTitle

func LuaIntTitle(L *lua.State) int

func LuaIntTitleQuery

func LuaIntTitleQuery(L *lua.State) int

func LuaIntUTCTime

func LuaIntUTCTime(L *lua.State) int

func LuaIntVisit

func LuaIntVisit(L *lua.State) int

func LuaIntWhen

func LuaIntWhen(L *lua.State) int

func LuaIntWhenQuery

func LuaIntWhenQuery(L *lua.State) int

func LuaIntWriteCursor

func LuaIntWriteCursor(L *lua.State) int

func LuaTableGetString

func LuaTableGetString(L *lua.State, key string) string

func MakeLuaState

func MakeLuaState() *lua.State

func MakeParseError

func MakeParseError(error string) error

func MakeRandomString

func MakeRandomString(size int) string

func MoveChildServer

func MoveChildServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func MultiServe

func MultiServe(port string, directory string)

func MultiWrapperTasklistServer

func MultiWrapperTasklistServer(fn TasklistServer) http.HandlerFunc

func MultiWrapperTasklistWithIdServer

func MultiWrapperTasklistWithIdServer(fn TasklistWithIdServer) http.HandlerFunc

func Must

func Must(err error)

func MustExec

func MustExec(conn *sqlite.Conn, stmt string, v ...interface{})

func NewServer

func NewServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func NilGlobal

func NilGlobal(L *lua.State, name string)

func OntologySaveServer

func OntologySaveServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func OntologyServer

func OntologyServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func OptionServer

func OptionServer(c http.ResponseWriter, req *http.Request, multiuserDb *MultiuserDb, tl *Tasklist)

func ParseDateTime

func ParseDateTime(input string, timezone int) (*time.Time, error)

func ParseFreqToken

func ParseFreqToken(text string) bool

func ParseFrequency

func ParseFrequency(freq string) int

func PasswordHashing

func PasswordHashing(salt, password string) []byte

func PriorityFormatter

func PriorityFormatter(input Priority) string

func PushStringVec

func PushStringVec(L *lua.State, v []string)

func PushTime

func PushTime(L *lua.State, t time.Time)

func QaddServer

func QaddServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func RegisterServer

func RegisterServer(c http.ResponseWriter, req *http.Request)

func RemoveSearchServer

func RemoveSearchServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func RemoveServer

func RemoveServer(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

func RenTagServer

func RenTagServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func RepeatString

func RepeatString(ch string, num int) string

func Resolve

func Resolve(name string) (outname string, found bool)

func RunServer

func RunServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func SaveSearchServer

func SaveSearchServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func SaveServer

func SaveServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func SearchFile

func SearchFile(name string) (outname string, found bool)

func Serve

func Serve(port string)

func SetLogger

func SetLogger(w io.Writer)

func SetTableInt

func SetTableInt(L *lua.State, name string, value int64)

func SetTableIntString

func SetTableIntString(L *lua.State, idx int64, value string)

func SetupHandleFunc

func SetupHandleFunc(wrapperTasklistServer func(TasklistServer) http.HandlerFunc, wrapperTasklistWithIdServer func(TasklistWithIdServer) http.HandlerFunc, multiuserDb *MultiuserDb)

func SingleWrapperTasklistServer

func SingleWrapperTasklistServer(fn TasklistServer) http.HandlerFunc

func SingleWrapperTasklistWithIdServer

func SingleWrapperTasklistWithIdServer(fn TasklistWithIdServer) http.HandlerFunc

func SortFromTriggerAt

func SortFromTriggerAt(triggerAt *time.Time, defaultWithTime bool) string

func StatServer

func StatServer(c http.ResponseWriter, req *http.Request, tl *Tasklist)

func StaticInMemoryServer

func StaticInMemoryServer(c http.ResponseWriter, req *http.Request)

* Serves static pages (or 404s)

func StripQuotes

func StripQuotes(in string) string

func TimeFormatTimezone

func TimeFormatTimezone(atime *time.Time, format string, timezone int) string

func TimeString

func TimeString(triggerAt *time.Time, sort string, timezone int) string

func ValidUserName

func ValidUserName(username string) bool

func WhoAmIServer

func WhoAmIServer(c http.ResponseWriter, req *http.Request)

func WithOpenDefault

func WithOpenDefault(rest func(tl *Tasklist))

func WrapperServer

func WrapperServer(sub http.HandlerFunc) http.HandlerFunc

func WriteStackTrace

func WriteStackTrace(rerr interface{}, out io.Writer)

Types

type BoolExpr

type BoolExpr struct {
	// contains filtered or unexported fields
}

func (*BoolExpr) IntoClause

func (expr *BoolExpr) IntoClause(tl *Tasklist, depth string, negate bool) string

func (*BoolExpr) IntoClauses

func (expr *BoolExpr) IntoClauses(tl *Tasklist, depth string, negate bool, addDone bool) []string

type Clausable

type Clausable interface {
	IntoClause(tl *Tasklist, depth string, negate bool) string
}

func GetQueryObject

func GetQueryObject(tl *Tasklist, i int) Clausable

type Columns

type Columns map[string]string

func ExtractColumnsFromSearch

func ExtractColumnsFromSearch(search *ParseResult) Columns

func ParseCols

func ParseCols(colStr string, timezone int) (Columns, bool)

type DateTimeFormat

type DateTimeFormat struct {
	// contains filtered or unexported fields
}

type Entry

type Entry struct {
	// contains filtered or unexported fields
}

func DemarshalEntry

func DemarshalEntry(umentry *UnmarshalEntry, timezone int) *Entry

func GetEntryFromLua

func GetEntryFromLua(L *lua.State, name string, fname string) *Entry

func MakeEntry

func MakeEntry(id string, title string, text string, priority Priority, triggerAt *time.Time, sort string, columns Columns) *Entry

func ParseTsvFormat

func ParseTsvFormat(in string, tl *Tasklist, timezone int) *Entry

func StatementScan

func StatementScan(stmt *sqlite.Stmt, hasCols bool) (*Entry, error)

func (*Entry) Before

func (e *Entry) Before(time int64) bool

func (*Entry) CatHash

func (e *Entry) CatHash() uint32

func (*Entry) CatString

func (e *Entry) CatString(catordering map[string]int) string

func (*Entry) ColString

func (e *Entry) ColString(extra bool) string

func (*Entry) Column

func (e *Entry) Column(name string) string

func (*Entry) ColumnOk

func (e *Entry) ColumnOk(name string) (value string, ok bool)

func (*Entry) Columns

func (e *Entry) Columns() Columns

func (*Entry) Freq

func (e *Entry) Freq() int

func (*Entry) Id

func (e *Entry) Id() string

func (*Entry) MergeColumns

func (e *Entry) MergeColumns(cols Columns) *Entry

func (*Entry) NextEntry

func (entry *Entry) NextEntry(newId string) *Entry

func (*Entry) Print

func (entry *Entry) Print()

func (*Entry) Priority

func (e *Entry) Priority() Priority

func (*Entry) RemoveColumn

func (e *Entry) RemoveColumn(name string) *Entry

func (*Entry) SetColumn

func (e *Entry) SetColumn(name, value string) *Entry

func (*Entry) SetColumns

func (e *Entry) SetColumns(cols Columns, tz int) *Entry

func (*Entry) SetId

func (e *Entry) SetId(id string) *Entry

func (*Entry) SetPriority

func (e *Entry) SetPriority(p Priority) *Entry

func (*Entry) SetSort

func (e *Entry) SetSort(sort string)

func (*Entry) SetText

func (e *Entry) SetText(text string) *Entry

func (*Entry) SetTitle

func (e *Entry) SetTitle(title string) *Entry

func (*Entry) SetTriggerAt

func (e *Entry) SetTriggerAt(tat *time.Time)

func (*Entry) Sort

func (e *Entry) Sort() string

func (*Entry) Text

func (e *Entry) Text() string

func (*Entry) Title

func (e *Entry) Title() string

func (*Entry) TriggerAt

func (e *Entry) TriggerAt() *time.Time

func (*Entry) TriggerAtString

func (entry *Entry) TriggerAtString(timezone int) string

func (*Entry) UpgradePriority

func (e *Entry) UpgradePriority(special bool) bool
		 +--------+		   +---------+
		 |        |------->|         |
		 | STICKY |		   | NOTES   |
		 |        |<-------|         |
		 +--------+		   +---------+
			   ===				 =
				  ====			 =
					  =====		 =	 Special transitions (press SHIFT)
						   ====	 =
 							   ==V
			 +---------+ 	 +--------+  	+---------+
			 |     	   | 	 |        |  	|         |
			 | LATER   |---->| NOW    |---->| DONE    |
			 |         | 	 |        |  	|         |
			 +---------+ 	 +--------+  	+---------+
				 A                               |
				 |                               |
				 +-------------------------------|

 When there is a triggerAt (When) field set:

	   +----------+			+----------+		+-----------+
	   |          |			|          |------->|           |
	   | ANYTHING |-------->| TIMED    |		| DONE      |
       |          |			|          |<-------|           |
 	   +----------+			+----------+		+-----------+

type ErrorEntry

type ErrorEntry struct {
	Time    time.Time
	Message string
}

func (*ErrorEntry) TimeString

func (ee *ErrorEntry) TimeString() string

type EventForJSON

type EventForJSON map[string]interface{}

func GetCalendarEvents

func GetCalendarEvents(tl *Tasklist, query string, start, end string, endSecs int64) []EventForJSON

func ToCalendarEvent

func ToCalendarEvent(entry *Entry, className string, timezone int) EventForJSON

type ExecutableTemplate

type ExecutableTemplate func(interface{}, io.Writer)
var CalendarHTML ExecutableTemplate = MakeExecutableTemplate("Calendar", `
  <p>
  <div id='calendar'></div>
  <script>
  </script>
  </td></tr></table>
</body>
</html>
`)
var CommonHeaderHTML ExecutableTemplate = MakeExecutableTemplate("ListHeader", `
<!DOCTYPE html>
<html>
<head>
  <title>Pooch: {{.queryForTitle|html}}</title>
  <link rel='stylesheet' type='text/css' href='dot-luv/jquery-ui.custom.css'>
  <link type='text/css' rel='stylesheet' href='jstree_default/style.css'>
  <link rel='stylesheet' type='text/css' href='fullcalendar.css'/>
  <link rel='stylesheet' type='text/css' href='cal.css'>
  <link type='text/css' rel='stylesheet' href='listcommon.css'>
  <link type='text/css' rel='stylesheet' href='{{.theme}}'>
  <link type='image/png' rel='icon' href='animals-dog.png'>
  <script src='/jquery.js'></script>
  <script src='jquery-ui-custom.js'></script>
  <script src='fullcalendar.js'></script>
  <script src='jstree.js'></script>
  <script src='/int.js'></script>
  <script src='cint.js'></script>
  <style>
     {{if .hide_eid}}
        .eid {
           display: none;
		}
     {{end}}
     {{if .hide_etime}}
        .etime {
            display: none;
        }
     {{end}}
     {{if .hide_epr}}
        .epr {
            display: none;
        }
     {{end}}
     {{if .hide_prchange}}
        .prchange {
            visibility: hidden;
        }
     {{end}}
     {{if .hide_ecats}}
        .ecats {
            display: none;
        }
     {{end}}
  </style>
  <script>
     var query = "{{.query|html}}";
     thisPage = "{{.pageName}}";
  </script>
</head>
<body onkeydown='keytable(event)' onkeypress='keypress(event)'>
  <div class='advmenu'>
    <a href='/opts'>options</a>
    &nbsp;
    <a href="/advanced.html">advanced operations</a><br/>
    Current timezone: {{.timezone|html}}
  </div>
  <h2 style='display: inline;'>{{.queryForTitle|html}}</h2>
  <div class='mainmenu'>
    <div class='mainmenu_item'>
      <a href='javascript:toggle_searchpop()'>[change query]</a>
      <div id='searchpop' class='popup' style='display: none'>
         <form id='searchform' method='get' action='{{.pageName}}'>
           <label for='q'>Query:</label>&nbsp;
           <textarea autocomplete="off" name='q' id='q' cols='50' rows='5'>{{.query|html}}</textarea>
           <input type='submit' value='search'>
           <input type='button' value='cancel' onclick='javascript:toggle_searchpop()'/>
           &nbsp;
           <div class='popbuttons'>
           {{if .removeSearch }}
             <input type='button' id='editquerybtn' value='Edit query' onClick='javascript:editsearch()'/>
             <input type='button' value='Remove query' onClick='javascript:removesearch()'/>
           {{else}}
             <input type='button' value='Save query' onClick='javascript:savesearch()'/>
           {{end}}
           </div>
           <div class='keyinfo'>(press alt-enter to search)</div>
         </form>
      </div>
    </div>
    {{if .otherPageName}}
	    <div class='mainmenu_item'>
	      <a href='javascript:toggle_addpop()'>[add entry]</a>
	      <div id='addpop' class='popup' style='display: none'>
	        <form onsubmit='return add_entry("{{.query|html}}")'>
	          <label for='newentry'>New entry:</label>&nbsp;
	          <input size='50' type='text' id='newentry' name='text'/>
	          <input type='button' value='add' onclick='javascript:add_entry("{{.query|html}}")'/>
	          <input type='button' value='cancel' onclick='javascript:toggle_addpop()'/>
	        </form>
	      </div>
	    </div>
	    <div class='mainmenu_item'>
	      <a href="{{.otherPageName}}&q={{.query|url}}">[see as {{.otherPageLink}}]</a>
	    </div>
	    <div class='mainmenu_item'>
	      <a href="/explain?q={{.query|url}}">[see explanation]</a>
	    </div>
    {{end}}
    <div class='mainmenu_item'>
      <a href='javascript:toggle_runpop()'>[run]</a>
      <div id='runpop' class='popup' style='display: none'>
        <form method='get' action='/run'>
          <label for='runcmd'>Command:</label>&nbsp;
          <input size='50' type='text' id='runcmd' name='text'/>
          <input type='submit' value='run'/>
        </form>
      </div>
    </div>
    <div class='mainmenu_item'>
       <a href='/stat'>[statistics]</a>
    </div>
  </div>

  {{if .parseError}}
    <div class='screrror'>Error while executing search: {{.parseError|html}} <a href='/errorlog'>Full error log</a></div>
  {{end}}
  {{if .retrieveError}}
    <div class='screrror'>Error while executing search: {{.retrieveError|html}} <a href='/errorlog'>Full error log</a></div>
  {{end}}
  <table width='100%'><tr>
    <td valign='top' id='ontonav_td'>
      <img id='ontosaving' style='visibility: hidden' src='loading.gif'/>
      <div id='ontonav'/>
    </td>
    <td valign='top' id='maintable_td'>
`)
var EntryListEntryEditorHTML ExecutableTemplate = MakeExecutableTemplate("EntryListEntryEditor", `
    {{with .heading}}
    <tr id='editor_{{.|html}}' class='editor' style='display: none'>
    {{end}}
    {{with .entry}}
      <td colspan='5'>
        <input type='button' onclick='show_editor("{{.Id|html}}")' value="Show editor"/>
        &nbsp;
        <input type='button' onclick='show_subs("{{.Id|html}}")' value='Show sub-items'/>
        &nbsp;
        <input type='button' onclick='add_subitem(null, "{{.Id|html}}", "{{.Id|html}}", 1)' value="Add subitem"/>
        <form id='ediv_{{.Id|html}}'>
          <input name='edtitle' type='text' disabled='disabled'/><br>
          <textarea name='edtext' disabled='disabled' rows=5>
          </textarea>

		  <input name='edid' type='hidden'/>
		  <input name='edprio' type='hidden'/>

		  <p>When: <input type='text' id='edat_{{.Id|html}}' name='edat' size=10 disabled='disabled'/>
          <script>
             $("#edat_{{.Id|html}}").datepicker();
             $("#edat_{{.Id|html}}").datepicker("option", "dateFormat", "yy-mm-dd");
          </script>
		  &nbsp; Sort by: <input type='text' name='edsort' size=10 disabled='disabled'/>
          &nbsp; ID: <a href='list?q=%23:id={{.Id}}#{{.Id}}'>{{.Id|html}}</a>
          &nbsp; Timestamp: <img id='loading_{{.Id|html}}' style='display: none' src='loading.gif'/> <span id='ts_{{.Id|html}}'> </span></p>

          <p><input type='button' style='float: right' value='remove' onclick='javascript:remove_entry("{{.Id|html}}", event)'/>
          <input type='button' name='savebtn' value='save' onclick='javascript:save_editor_by_id("{{.Id|html}}", event)' disabled='disabled'/>
          <input type='button' value='reload' onclick='javascript:fill_editor("{{.Id|html}}", null)'/>
          <input type='button' value='explode body' onclick='javascript:explode_body("{{.Id|html}}")'/></p>
        </form>
        <div id='subs_{{.Id|html}}_container' style='display: none;'>
        	<table id='subs_{{.Id|html}}' class='substable'>
          		<tr><td>ciao</td></tr>
        	</table>
        	<div class="treehelp">Help:
        		<ul>
        		<li>Drag item number to reorder, drop onto other item number to place as sibling
        		<li>Drag item number to reorder, drop onto folder icon to place as children
        		<li>Double click item text to edit
        		<li>Click and press enter to create new sibling item.
        		</ul>
        		<p class='treehelpid'>ID: <a href='list?q=%23:id={{.Id}}#{{.Id}}'>{{.Id|html}}</a></p>
        	</div>
        </div>
      </td>
    {{end}}
    {{with .heading}}
    </tr>
    {{end}}
`)
var EntryListEntryHTML ExecutableTemplate = MakeExecutableTemplate("EntryListEntry", `
   {{if .heading}}
    <tr class='{{.htmlClass}}'>
   {{end}}
    {{with .entry}}
      <td class='eid'>{{.Id|html}}</td>

      <td class='etitle' onclick='javascript:toggle_editor("{{.Id|html}}", event, null)'><a href='javascript:toggle_editor("{{.Id|html}}", event, null)'>{{.Title|html}}</a>
      
      {{if .Text}}
      <pre>{{.Text|html}}</pre>
      {{end}}
      
      </td>

      <td class='epr'>
        <input type='button' class='prioritybutton priorityclass_{{.Priority|priority}}' id='epr_{{.Id|html}}' value='{{.Priority|priority}}' onclick='javascript:change_priority("{{.Id|html}}", event)'/>
      </td>

      <td class='eloading'><img id='ploading_{{.Id|html}}' style='visibility: hidden' src='loading.gif'/></td>

      <td class='etime' id='etime_{{.Id|html}}'>{{end}}{{.etime}}</td>

    <td class='ecats'>{{.ecats}}</td>

    {{range .cols}}
      <td class='ecol'>{{.|html}}</td>
    {{end}}
   {{with .heading}}
   </tr>
   {{end}}
`)
var EntryListHeaderHTML ExecutableTemplate = MakeExecutableTemplate("EntryListHeader", `
<table class='maintable' id='maintable'>
`)
var EntryListPriorityChangeHTML ExecutableTemplate = MakeExecutableTemplate("EntryListPriorityChange", `
    <tr>
      <td class='prchange' colspan='{{.PrioritySize|html}}'>{{.entry.Priority|priority}}</td>
      {{range .colNames}}
      <td class='colname'>{{.|html}}</td>
      {{else}}
      {{end}}
    </tr>
`)
var ErrorLogEnderHTML ExecutableTemplate = MakeExecutableTemplate("ErrorLogEnder", `
  </table>
</body>
</html>
`)
var ErrorLogEntryHTML ExecutableTemplate = MakeExecutableTemplate("ErrorLogEntry", `
  <tr class='{{.htmlClass}}'>
    <td class='etime'>{{.time}}</td>
    <td class='etitle'>{{.message|html}}</td>
  </tr>
`)
var ErrorLogHeaderHTML ExecutableTemplate = MakeExecutableTemplate("ErrorLogHeader", `
<!DOCTYPE html>
<html>
<head>
  <title>Pooch: {{.name|html}}</title>
  <link type='text/css' rel='stylesheet' href='{{.theme}}'>
  <link type='image/png' rel='icon' href='animals-dog.png'>
</head>
<body>
  <p><pre class='code'>{{.code|html}}</pre></p>
  <table width='100%' id='maintable' style='border-collapse: collapse; display: inline;'>
`)
var ExplainEntryHTML ExecutableTemplate = MakeExecutableTemplate("ExplainEntry", `
  <tr class='{{.htmlClass}}'>
    {{with .explain}}
    <td>{{.Addr|html}}</td>
    <td>{{.Opcode|html}}</td>
    <td>{{.P1|html}}</td>
    <td>{{.P2|html}}</td>
    <td>{{.P3|html}}</td>
    <td>{{.P4|html}}</td>
    <td>{{.P5|html}}</td>
    <td>{{.Comment|html}}</td>
    {{end}}
  </tr>
`)
var ExplainEntryHeaderHTML ExecutableTemplate = MakeExecutableTemplate("ExplainEntryHeader", `
  <th>
    <tr class='entry'>
      <td>addr</td>
      <td>opcode</td>
      <td>p1</td>
      <td>p2</td>
      <td>p3</td>
      <td>p4</td>
      <td>p5</td>
      <td>comment</td>
    </tr>
  </th>
`)
var ListEnderHTML ExecutableTemplate = MakeExecutableTemplate("ListEnder", `
  </table></td></tr></table>
</body></html>
`)
var ListGutsEnderHTML ExecutableTemplate = MakeExecutableTemplate("ListGutsEnderHTML", `<p>ID: <a href='list?q=%23:id={{.guts}}'>{{.guts|html}}</a></p>`)
var LoginHTML ExecutableTemplate = MakeExecutableTemplate("Login", `
<!DOCTYPE html>
<html>
  <head>
    <title>Login with pooch2</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    <div>{{.problem}}</div>
    <form method="post" action="/login">
      Username:&nbsp;<input type='text' name='user'/><br/>
      Password:&nbsp;<input type='password' name='password'/><br/>
      <input type='submit' value='login'/>
    </form>
  </body>
</html>
`)
var LoginOKHTML ExecutableTemplate = MakeExecutableTemplate("LoginOK", `
<!DOCTYPE html>
<html>
  <head>
    <title>Login with pooch2</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    Login successful, go to <a href="/list">index</a>.
  </body>
</html>
`)
var MustLogInHTML ExecutableTemplate = MakeExecutableTemplate("MustLogIn", `
<!DOCTYPE html>
<html>
  <head>
    <title>Login needed</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    You must log in first: <a href="/login">login</a> or <a href="/register">register</a>.
  </body>
</html>
`)
var OptionsLongPageLine ExecutableTemplate = MakeExecutableTemplate("OptionsLongPage", `
      <label for='<name|html}'>{{.name|html}}</label>&nbsp;<textarea name='{{.name|html}}' id='{{.name|html}}' rows='5' cols='80'>{{.value|html}}</textarea></br>
`)
var OptionsPageAPITokens ExecutableTemplate = MakeExecutableTemplate("OptionsPageAPITokens", `
	<hr>
	Released API tokens:
	<ul>
		{{range .}}
		<li>{{.|html}} <input type='button' value='Revoke' onclick='tokremove("{{.|html}}")'></li>
		{{end}}
	</ul>
	<input type='button' value="Add a token" onclick='tokadd()'>
`)
var OptionsPageEnd ExecutableTemplate = MakeExecutableTemplate("OptionsPageEnd", `
      <input type='submit' value='save'/>
    </form>
  </body>
</html>
`)
var OptionsPageHeader ExecutableTemplate = MakeExecutableTemplate("OptionsPageHeader", `
<!DOCTYPE html>
<html>
  <head>
    <title>Options</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
    <script src='/jquery.js'></script>
    <script src='/opts.js'></script>
  </head>
  <body>
    <h2>Options</h2>
    <form action="/opts" method="get">
      <input type='hidden' name='save' value='save'/>
`)
var OptionsPageLine ExecutableTemplate = MakeExecutableTemplate("OptionsPageLine", `
      <label for='{{.name|html}}'>{{.name|html}}</label>&nbsp;<input type='text' name='{{.name|html}}' id='{{.name|html}}' value='{{.value|html}}'/></br>
`)
var RegisterHTML ExecutableTemplate = MakeExecutableTemplate("Register", `
<!DOCTYPE html>
<html>
  <head>
    <title>Register with pooch2</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    <div>{{.problem}}</div>
    <form method="post" action="/register">
      Username:&nbsp;<input type='text' name='user'/><br/>
      Password:&nbsp;<input type='password' name='password'/><br/>
      <input type='submit' value='register'/>
    </form>
  </body>
</html>
`)
var RegisterOKHTML ExecutableTemplate = MakeExecutableTemplate("RegisterOK", `
<!DOCTYPE html>
<html>
  <head>
    <title>Register with pooch2</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    Registration successful. <a href="/login">Login</a>.
  </body>
</html>
`)
var StatEntryHTML ExecutableTemplate = MakeExecutableTemplate("StatEntry", `
  <tr class='{{.htmlClass}}'>
    {{with .entry}}
      {{if .Link}}
        <td class='stat_tag'><a href='/list?q={{.Link|url}}'>{{.Name|html}}</a></td>
      {{else}}
        <td class='stat_tag'>{{.Name|html}}</td>
      {{end}}

    <td class='stat_total'>{{.Total|html}}</td>

    <td class='stat_now'>{{.Now|html}}</td>
    <td class='stat_later'>{{.Later|html}}</td>
    <td class='stat_done'>{{.Done|html}}</td>

    <td class='stat_timed'>{{.Timed|html}}</td>

    <td class='stat_notes'>{{.Notes|html}}</td>
    <td class='stat_sticky'>{{.Sticky|html}}</td>
    {{end}}
  </tr>
`)
var StatHeaderHTML ExecutableTemplate = MakeExecutableTemplate("StatHeader", `
  <table class='maintable statstable' id='maintable'>
  <th>
    <tr class='entry'>
      <td class='stat_tag'>Tag</td>
      <td class='stat_total'>Total</td>

      <td class='stat_now'>NOW</td>
      <td class='stat_later'>LATER</td>
      <td class='stat_done'>DONE</td>

      <td class='stat_timed'>TIMED</td>

      <td class='stat_notes'>NOTES</td>
      <td class='stat_sticky'>STICKY</td>
    </tr>
  </th>
`)
var WhoAmIHTML ExecutableTemplate = MakeExecutableTemplate("WhoAmI", `
<!DOCTYPE html>
<html>
  <head>
    <title>Who Am I</title>
    <link type='image/png' rel='icon' href='animals-dog.png'>
  </head>
  <body>
    You are: {{.username|html}}
  </body>
</html>
`)

func MakeExecutableTemplate

func MakeExecutableTemplate(name string, rawTemplate string) ExecutableTemplate

func WrapTemplate

func WrapTemplate(t *template.Template) ExecutableTemplate

type ExplainEntry

type ExplainEntry struct {
	Addr               string
	Opcode             string
	P1, P2, P3, P4, P5 string
	Comment            string
}

type IdType

type IdType int

type InvOntologyEntry

type InvOntologyEntry struct {
	// contains filtered or unexported fields
}

func InvertOntology

func InvertOntology(p []string, ontology []OntologyNodeIn, r []InvOntologyEntry) []InvOntologyEntry

func (*InvOntologyEntry) String

func (ioe *InvOntologyEntry) String() string

type JsonResult

type JsonResult struct {
	Error   string
	Objects []*Object
}

type ListJsonAnswer

type ListJsonAnswer struct {
	ParseError    error
	RetrieveError error
	Results       []UnmarshalEntry
}

type LogLevel

type LogLevel int
var CurrentLogLevel LogLevel = INFO

type LuaFlags

type LuaFlags struct {
	// contains filtered or unexported fields
}

type LuaIntError

type LuaIntError struct {
	// contains filtered or unexported fields
}

func (*LuaIntError) Error

func (le *LuaIntError) Error() string

type MultiuserDb

type MultiuserDb struct {
	// contains filtered or unexported fields
}

func OpenMultiuserDb

func OpenMultiuserDb(directory string) *MultiuserDb

func (*MultiuserDb) AddAPIToken

func (mdb *MultiuserDb) AddAPIToken(username string)

func (*MultiuserDb) Close

func (mdb *MultiuserDb) Close()

func (*MultiuserDb) Exists

func (mdb *MultiuserDb) Exists(username string) bool

func (*MultiuserDb) ListAPITokens

func (mdb *MultiuserDb) ListAPITokens(username string) []string

func (*MultiuserDb) OpenOrCreateUserDb

func (mdb *MultiuserDb) OpenOrCreateUserDb(username string) *Tasklist

func (*MultiuserDb) Register

func (mdb *MultiuserDb) Register(username, password string)

func (*MultiuserDb) RemoveAPIToken

func (mdb *MultiuserDb) RemoveAPIToken(username, token string)

func (*MultiuserDb) SaveIdCookie

func (mdb *MultiuserDb) SaveIdCookie(username, idCookie string)

func (*MultiuserDb) UsernameFromReq

func (mdb *MultiuserDb) UsernameFromReq(req *http.Request) string

Returns the username from the cookie or from an API token in the request

func (*MultiuserDb) Verify

func (mdb *MultiuserDb) Verify(username, password string) bool

func (*MultiuserDb) WithOpenUser

func (mdb *MultiuserDb) WithOpenUser(req *http.Request, fn func(tl *Tasklist)) bool

type NotExpr

type NotExpr struct {
	// contains filtered or unexported fields
}

func (*NotExpr) IntoClause

func (ne *NotExpr) IntoClause(tl *Tasklist, depth string, negate bool) string

type Object

type Object struct {
	Id            string
	Name          string
	Title         string
	Body          string
	ChildrenCount int
	FormattedText string
	Priority      string
	Editable      bool
	Children      []*Object
}

type OntoCheckError

type OntoCheckError struct {
	Entry           *Entry
	ProblemCategory string
	ProblemDetail   string
}

type OntoCheckResult

type OntoCheckResult int

type OntologyNodeIn

type OntologyNodeIn struct {
	Data     string           `json:"data,omitempty"`
	State    string           `json:"state"`
	Children []OntologyNodeIn `json:"children"`
}

type OntologyNodeOut

type OntologyNodeOut struct {
	Data     string        `json:"data,omitempty"`
	State    string        `json:"state"`
	Children []interface{} `json:"children"`
}

type Pair

type Pair struct {
	Key   string
	Value int
}

type Pairs

type Pairs []Pair

func (Pairs) Len

func (ps Pairs) Len() int

func (Pairs) Less

func (ps Pairs) Less(i, j int) bool

func (Pairs) Swap

func (ps Pairs) Swap(i, j int)

type ParseError

type ParseError struct {
	// contains filtered or unexported fields
}

func (*ParseError) Error

func (e *ParseError) Error() string

func (*ParseError) String

func (pe *ParseError) String() string

type ParseResult

type ParseResult struct {
	// contains filtered or unexported fields
}

func MakeParseResult

func MakeParseResult() *ParseResult

func (*ParseResult) AddIncludeClause

func (pr *ParseResult) AddIncludeClause(expr *SimpleExpr)

func (*ParseResult) GetLuaClause

func (pr *ParseResult) GetLuaClause(tl *Tasklist) (string, error)

func (*ParseResult) IntoSelect

func (pr *ParseResult) IntoSelect(tl *Tasklist, luaClausable Clausable) (string, map[string]string, error)

func (*ParseResult) IntoTrigger

func (pr *ParseResult) IntoTrigger() string

func (*ParseResult) IsEmpty

func (pr *ParseResult) IsEmpty() bool

func (*ParseResult) ResolveSavedSearch

func (pr *ParseResult) ResolveSavedSearch(tl *Tasklist) *ParseResult

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

func NewParser

func NewParser(tkzer *Tokenizer, timezone int) *Parser

func (*Parser) LookaheadToken

func (p *Parser) LookaheadToken(token string) bool

func (*Parser) ParseColumnRequest

func (p *Parser) ParseColumnRequest() bool

func (*Parser) ParseEx

func (p *Parser) ParseEx() *ParseResult

func (*Parser) ParseExclusion

func (p *Parser) ParseExclusion(r *SimpleExpr) bool

func (*Parser) ParseOperationSubexpression

func (p *Parser) ParseOperationSubexpression(r *SimpleExpr) bool

func (*Parser) ParseOption

func (p *Parser) ParseOption(r *SimpleExpr) bool

func (*Parser) ParsePriorityExpression

func (p *Parser) ParsePriorityExpression(r *SimpleExpr) bool

func (*Parser) ParseSavedSearch

func (p *Parser) ParseSavedSearch(r *SimpleExpr) bool

func (*Parser) ParseSimpleExpression

func (p *Parser) ParseSimpleExpression(r *SimpleExpr) bool

func (*Parser) ParseSpeculative

func (p *Parser) ParseSpeculative(fn func() bool) bool

func (*Parser) ParseTimeExpression

func (p *Parser) ParseTimeExpression(r *SimpleExpr) bool

func (*Parser) ParseToken

func (p *Parser) ParseToken(token string) bool

type Priority

type Priority int
const (
	STICKY Priority = Priority(iota)
	NOW
	LATER
	NOTES
	TIMED
	DONE
	INVALID
)

func ParsePriority

func ParsePriority(prstr string) Priority

func (*Priority) String

func (p *Priority) String() string

func (*Priority) ToInteger

func (p *Priority) ToInteger() int

type SimpleExpr

type SimpleExpr struct {
	// contains filtered or unexported fields
}

func (*SimpleExpr) IntoClause

func (expr *SimpleExpr) IntoClause(tl *Tasklist, depth string, negate bool) string

func (*SimpleExpr) IntoClauseEx

func (expr *SimpleExpr) IntoClauseEx(tl *Tasklist) string

func (*SimpleExpr) IntoSelect

func (expr *SimpleExpr) IntoSelect(tl *Tasklist, depth string) string

func (*SimpleExpr) String

func (se *SimpleExpr) String() string

type Statistic

type Statistic struct {
	Name, Link       string
	Total            int
	Now, Later, Done int
	Timed            int
	Notes, Sticky    int
}

type SubitemSort

type SubitemSort []*Entry

func (SubitemSort) Len

func (ss SubitemSort) Len() int

func (SubitemSort) Less

func (ss SubitemSort) Less(i, j int) bool

func (SubitemSort) Swap

func (ss SubitemSort) Swap(i, j int)

type Tasklist

type Tasklist struct {
	// contains filtered or unexported fields
}

func GetTasklistFromLua

func GetTasklistFromLua(L *lua.State) *Tasklist

func OpenOrCreate

func OpenOrCreate(filename string) *Tasklist

func (*Tasklist) Add

func (tasklist *Tasklist) Add(e *Entry)

func (*Tasklist) CallLuaFunction

func (tl *Tasklist) CallLuaFunction(fname string, cursor *Entry) error

func (*Tasklist) CategoryDepth

func (tl *Tasklist) CategoryDepth() map[string]int

func (*Tasklist) CloneEntry

func (tl *Tasklist) CloneEntry(entry *Entry) *Entry

func (*Tasklist) Close

func (tasklist *Tasklist) Close()

func (*Tasklist) CountCategoryItems

func (tl *Tasklist) CountCategoryItems(cat string) (r int)

func (*Tasklist) DoRunString

func (tl *Tasklist) DoRunString(code string, args []string) error

func (*Tasklist) DoString

func (tl *Tasklist) DoString(code string, cursor *Entry) error

func (*Tasklist) DoStringNoLock

func (tl *Tasklist) DoStringNoLock(code string, cursor *Entry, freeCursor bool) error

func (*Tasklist) Exists

func (tasklist *Tasklist) Exists(id string) bool

func (*Tasklist) ExpandColumnsFromOntology

func (tl *Tasklist) ExpandColumnsFromOntology(cols Columns)

func (*Tasklist) ExplainRetrieve

func (tl *Tasklist) ExplainRetrieve(theselect string) []*ExplainEntry

func (*Tasklist) Explode

func (tl *Tasklist) Explode(id string)

func (*Tasklist) ExtendedAddParse

func (tl *Tasklist) ExtendedAddParse() *Entry

func (*Tasklist) Get

func (tl *Tasklist) Get(id string) *Entry

func (*Tasklist) GetChildren

func (tl *Tasklist) GetChildren(id string) []string

func (*Tasklist) GetListEx

func (tl *Tasklist) GetListEx(stmt *sqlite.Stmt, code string, incsub bool, sortCols []string) ([]*Entry, error)

func (*Tasklist) GetOntology

func (tl *Tasklist) GetOntology() []OntologyNodeIn

func (*Tasklist) GetPrivateSetting

func (tl *Tasklist) GetPrivateSetting(name string) string

func (*Tasklist) GetSavedSearch

func (tl *Tasklist) GetSavedSearch(name string) string

func (*Tasklist) GetSavedSearches

func (tl *Tasklist) GetSavedSearches() []string

func (*Tasklist) GetSetting

func (tl *Tasklist) GetSetting(name string) string

func (*Tasklist) GetSettings

func (tl *Tasklist) GetSettings() (r map[string]string)

func (*Tasklist) GetStatistic

func (tl *Tasklist) GetStatistic(tag string) *Statistic

func (*Tasklist) GetStatistics

func (tl *Tasklist) GetStatistics() []*Statistic

func (*Tasklist) GetTags

func (tl *Tasklist) GetTags() []string

func (*Tasklist) GetTimezone

func (tl *Tasklist) GetTimezone() int

func (*Tasklist) LogError

func (tasklist *Tasklist) LogError(error string)

func (*Tasklist) LuaResultToEntries

func (tl *Tasklist) LuaResultToEntries() ([]*Entry, []string)

func (*Tasklist) MakeRandomId

func (tasklist *Tasklist) MakeRandomId() string

func (*Tasklist) MustExec

func (tasklist *Tasklist) MustExec(stmt string, v ...interface{})

func (*Tasklist) OntoCheck

func (tl *Tasklist) OntoCheck(debug bool) []OntoCheckError

func (*Tasklist) ParseEx

func (tl *Tasklist) ParseEx(text string) *ParseResult

func (*Tasklist) ParseNew

func (tl *Tasklist) ParseNew(entryText, queryText string) *Entry

func (*Tasklist) ParseSearch

func (tl *Tasklist) ParseSearch(queryText string, luaClausable Clausable) (string, string, string, bool, bool, []string, map[string]string, []string, error)

func (*Tasklist) Quote

func (tasklist *Tasklist) Quote(in string) string

func (*Tasklist) Remove

func (tasklist *Tasklist) Remove(id string)

func (*Tasklist) RemoveSaveSearch

func (tl *Tasklist) RemoveSaveSearch(name string)

func (*Tasklist) RenameTag

func (tl *Tasklist) RenameTag(src, dst string)

func (*Tasklist) ResetLuaFlags

func (tl *Tasklist) ResetLuaFlags()

func (*Tasklist) Retrieve

func (tl *Tasklist) Retrieve(theselect, code string, incsub bool, sortCols []string) ([]*Entry, error)

func (*Tasklist) RetrieveErrors

func (tl *Tasklist) RetrieveErrors() []*ErrorEntry

func (*Tasklist) RunTimedTriggers

func (tl *Tasklist) RunTimedTriggers()

func (*Tasklist) SaveSearch

func (tl *Tasklist) SaveSearch(name string, query string)

func (*Tasklist) SetEntryInLua

func (tl *Tasklist) SetEntryInLua(name string, entry *Entry)

func (*Tasklist) SetPrivateSetting

func (tl *Tasklist) SetPrivateSetting(name, value string)

func (*Tasklist) SetSetting

func (tl *Tasklist) SetSetting(name, value string)

func (*Tasklist) SetSettings

func (tl *Tasklist) SetSettings(settings map[string]string)

func (*Tasklist) SetTasklistInLua

func (tl *Tasklist) SetTasklistInLua()

func (*Tasklist) ShowReturnValueRequest

func (tl *Tasklist) ShowReturnValueRequest() bool

func (*Tasklist) SortFromSubitems

func (tl *Tasklist) SortFromSubitems(subitemId string) string

func (*Tasklist) Truncate

func (tl *Tasklist) Truncate()

func (*Tasklist) Update

func (tasklist *Tasklist) Update(e *Entry, simpleUpdate bool)

func (*Tasklist) UpdateChildren

func (tl *Tasklist) UpdateChildren(pid string, childs []string)

func (*Tasklist) UpgradePriority

func (tl *Tasklist) UpgradePriority(id string, special bool) Priority

func (*Tasklist) WithTransaction

func (tasklist *Tasklist) WithTransaction(f func())

type TasklistServer

type TasklistServer func(c http.ResponseWriter, req *http.Request, tl *Tasklist)

type TasklistWithIdServer

type TasklistWithIdServer func(c http.ResponseWriter, req *http.Request, tl *Tasklist, id string)

type Tokenizer

type Tokenizer struct {
	// contains filtered or unexported fields
}

func NewTokenizer

func NewTokenizer(input string) *Tokenizer

func (*Tokenizer) Next

func (t *Tokenizer) Next() string

func (*Tokenizer) PushCommand

func (t *Tokenizer) PushCommand(command string)

func (*Tokenizer) PushExtra

func (t *Tokenizer) PushExtra(extra string)

func (*Tokenizer) RealNext

func (t *Tokenizer) RealNext() string

func (*Tokenizer) Rest

func (t *Tokenizer) Rest() string

type TokenizerFunc

type TokenizerFunc func(t *Tokenizer) (string, int)

func RepeatedTokenizer

func RepeatedTokenizer(fn func(rune) bool) TokenizerFunc

func RepeatedTokenizerTo

func RepeatedTokenizerTo(fn func(rune) bool, translation string) TokenizerFunc

func StrTokenizer

func StrTokenizer(match string) TokenizerFunc

func StrTokenizerTo

func StrTokenizerTo(match string, translation string) TokenizerFunc

type UnmarshalEntry

type UnmarshalEntry struct {
	Id        string
	Title     string
	Text      string
	Priority  Priority
	TriggerAt string
	Sort      string
}

func MarshalEntry

func MarshalEntry(entry *Entry, timezone int, addCols bool) *UnmarshalEntry

type VarTime

type VarTime struct {
	Year    int
	Month   int
	Day     int
	Weekday int
	Hour    int
	Minute  int
	Second  int
}

func SearchDayOfTheWeek

func SearchDayOfTheWeek(datetime *VarTime) *VarTime

func TimeParseTimezone

func TimeParseTimezone(layout, input string, timezone int) (*VarTime, error)

func VarTimeFromTime

func VarTimeFromTime(t time.Time) *VarTime

func (*VarTime) ToTime

func (vt *VarTime) ToTime() time.Time

func (*VarTime) ToTimePtr

func (vt *VarTime) ToTimePtr() *time.Time

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL