.btn {
	width: 120px;
	height: 40px;
	margin: 5px;
	padding: 0 20px;
	display: -webkit-inline-box;
	display: -ms-inline-flexbox;
	display: inline-flex;
	font-weight: normal;
	text-decoration: none;
	text-align: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	white-space: nowrap;
	vertical-align: middle;
	-ms-touch-action: manipulation;
	touch-action: manipulation;
	cursor: pointer;
	-webkit-user-select: none;
	   -moz-user-select: none;
	    -ms-user-select: none;
	        user-select: none;
	overflow: hidden;
	border-width: 0;
	border-style: solid;
	position: relative;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	-webkit-transition: all .3s ease-out;
	-o-transition: all .3s ease-out;
	transition: all .3s ease-out;
}

.btn:focus, .btn:active:focus {
	outline-offset: -2px;
	text-decoration: none;
}

.btn:active {
	background-image: none;
	outline: 0;
}

.btnbox {
	width: 100%;
	padding: 30px 0;
	text-align: center;
}

/* button-set */
.btn {
	background-color: #e9ecef;
	border-color: #e3e3e3;
	border-radius: 99px;
	color: #252525;
	font-weight: 700;
	font-size: 14px;
	font-size: 0.875rem;
	line-height: 1.313rem;
}

.btn:hover {
	background-color: #004AAC;
	border-color: #004AAC;
	color: #fff;
}

.btn__icon {
	margin: 0 0 0 10px;
	display: inline-block;
	vertical-align: middle;
	font-size: 20px;
}

.btn span {
	display: inline-block;
	vertical-align: middle;
	line-height: 20px;
}

.btn--sm {
	width: 100px;
	height: 40px;
	margin: 5px;
	padding: 10px 10px;
}

.btn--sm__icon {
	font-size: 20px;
}

.btn--sm span {
	line-height: 20px;
}

.btn--submit {
	background-color: #d60d0d;
	border-color: #d60d0d;
	color: #fff;
}

.btn--main {
	background-color: #004AAC;
	border-color: #004AAC;
	color: #fff;
}

.btn--success {
	background-color: rgba(0, 0, 0, 0);
	border-color: #145A12;
	color: #252525;
}

.btn--full {
	width: calc(100% - 0*2);
}

@media only screen and (max-width: 768px) {
	.btnbox {
		padding: 20px 0;
	}
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS9idXR0b24uY3NzIiwic291cmNlcyI6WyJiYXNlL2J1dHRvbi5zYXNzIiwic2V0dGluZy9fZGVmYXVsdC5zYXNzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS1wcmVmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3ZlcnNpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fdXRpbGl0aWVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LXZhbGlkYXRlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LW1hdGguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fbm9ybWFsaXplLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3BhcnNlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N5bnRheC1oZWxwZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX2FwaS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L191bnByZWZpeC5zY3NzIiwic2V0dGluZy9fdmFyaWFibGUuc2FzcyIsInNldHRpbmcvX2Z1bmN0aW9uLnNhc3MiLCJzZXR0aW5nL19taXhpbi5zYXNzIiwic2V0dGluZy9fZXh0ZW5kLnNhc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCBcIi4uL3NldHRpbmcvZGVmYXVsdFwiO1xuXG4uYnRuYm94IHtcblx0d2lkdGg6IDEwMCU7XG5cdHBhZGRpbmc6IGdhcCgzKSAwO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuLyogYnV0dG9uLXNldCAqL1xuLmJ0biB7XG5cdEBleHRlbmQgJUJ0bjtcblx0YmFja2dyb3VuZC1jb2xvcjogJGJ0bkRlZmF1bHRDb2xvcjtcblx0Ym9yZGVyLWNvbG9yOiAkYnRuRGVmYXVsdExpbmVDb2xvcjtcblx0Ym9yZGVyLXJhZGl1czogOTlweDtcblx0Y29sb3I6ICRidG5EZWZhdWx0VGV4dENvbG9yO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRAaW5jbHVkZSBmb250LXNpemUoMTRweCk7XG5cdCY6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRidG5EZWZhdWx0SG92ZXJDb2xvcjtcblx0XHRib3JkZXItY29sb3I6ICRidG5EZWZhdWx0SG92ZXJMaW5lQ29sb3I7XG5cdFx0Y29sb3I6ICRidG5EZWZhdWx0SG92ZXJUZXh0Q29sb3I7IH1cblx0Jl9faWNvbiB7XG5cdFx0bWFyZ2luOiAwIDAgMCBnYXAoMSk7XG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0Zm9udC1zaXplOiAkYnRuSWNvblNpemU7IH1cblx0c3BhbiB7XG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0bGluZS1oZWlnaHQ6ICRidG5JY29uU2l6ZTsgfVxuXHQmLS1zbSB7XG5cdFx0d2lkdGg6ICRidG5TbVdpZHRoO1xuXHRcdGhlaWdodDogJGJ0blNtSGVpZ2h0O1xuXHRcdG1hcmdpbjogZ2FwKDAuNSk7XG5cdFx0cGFkZGluZzogKCgkYnRuU21IZWlnaHQgLSAkYnRuU21JY29uU2l6ZSkvMikgZ2FwKDEpO1xuXHRcdCZfX2ljb24ge1xuXHRcdFx0Zm9udC1zaXplOiAkYnRuU21JY29uU2l6ZTsgfVxuXHRcdHNwYW4ge1xuXHRcdFx0bGluZS1oZWlnaHQ6ICRidG5TbUljb25TaXplOyB9IH1cblx0QGVhY2ggJGJfTmFtZSwgJGJfQmdDLCAkYl9CZHJDLCAkYl9UZXh0QyBpbiAkYnRuQ29uZmlnIHtcblx0XHQmLS0jeyRiX05hbWV9IHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRiX0JnQztcblx0XHRcdGJvcmRlci1jb2xvcjogJGJfQmRyQztcblx0XHRcdGNvbG9yOiAkYl9UZXh0QzsgfSB9XG5cdCYtLWZ1bGwge1xuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAjeyRidG5MaW5lV2lkdGh9KjIpOyB9IH1cbkBpbmNsdWRlIHJ3ZCg3NjgpIHtcblx0LmJ0bmJveCB7XG5cdFx0cGFkZGluZzogZ2FwKDIpIDA7IH0gfVxuIiwiLy9UaGlzIGlzIHNhc3MgZmlsZVxuQGltcG9ydCAnc3VzeSc7XG5AaW1wb3J0IFwidmFyaWFibGVcIjtcbkBpbXBvcnQgXCJmdW5jdGlvblwiO1xuQGltcG9ydCBcIm1peGluXCI7XG5AaW1wb3J0IFwiZXh0ZW5kXCI7XG4iLCIvLyBTdXN5IChVbi1QcmVmaXhlZClcbi8vID09PT09PT09PT09PT09PT09PVxuXG5AaW1wb3J0ICdzdXN5LXByZWZpeCc7XG5AaW1wb3J0ICdzdXN5L3VucHJlZml4JztcbiIsIi8vIFN1c3kgKFByZWZpeGVkKVxuLy8gPT09PT09PT09PT09PT09XG5cblxuQGltcG9ydCAndmVyc2lvbic7XG5AaW1wb3J0ICdzdXN5L3V0aWxpdGllcyc7XG5AaW1wb3J0ICdzdXN5L3N1LXZhbGlkYXRlJztcbkBpbXBvcnQgJ3N1c3kvc3UtbWF0aCc7XG5AaW1wb3J0ICdzdXN5L3NldHRpbmdzJztcbkBpbXBvcnQgJ3N1c3kvbm9ybWFsaXplJztcbkBpbXBvcnQgJ3N1c3kvcGFyc2UnO1xuQGltcG9ydCAnc3VzeS9zeW50YXgtaGVscGVycyc7XG5AaW1wb3J0ICdzdXN5L2FwaSc7XG4iLCIvLyBSZWxlYXNlIE1hbmFnZW1lbnQgaW4gU3VzeVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vLyBTdXN5IFZlcnNpb24gW3ZhcmlhYmxlXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIFN1c3kgYmVpbmcgdXNlZC5cbi8vLyAtIFdlIHdpbGwgcmVsZWFzZSBhIG1ham9yIHZlcnNpb24gZm9yIGFueSBCUkVBS0lORyBjaGFuZ2VzLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgbWlub3IgdmVyc2lvbiBmb3IgYW55IHNpZ25pZmljYW50IE5FVyBmZWF0dXJlcy5cbi8vLyAtIFdlIHdpbGwgcmVsZWFzZSBhIHBhdGNoIGZvciBhbnkgQlVHRklYIGNoYW5nZXMuXG4vLy9cbi8vLyBAZ3JvdXAgX3ZlcnNpb25cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLyBAc2luY2UgMy4wLjFcbi8vL1xuLy8vIEBwcm9wIHtpbnRlZ2VyfSAnbWFqb3InIC0gdGhlIG1ham9yIHJlbGVhc2UgbnVtYmVyXG4vLy8gQHByb3Age2ludGVnZXJ9ICdtaW5vcicgLSB0aGUgbWlub3IgcmVsZWFzZSBudW1iZXJcbi8vLyBAcHJvcCB7aW50ZWdlcn0gJ3BhdGNoJyAtIHRoZSBwYXRjaCBudW1iZXJcbiRfc3VzeS12ZXJzaW9uOiAoXG4gICdtYWpvcic6IDMsXG4gICdtaW5vcic6IDAsXG4gICdwYXRjaCc6IDcsXG4pO1xuXG5cbi8vIFN1c3kgVmVyc2lvbiBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBTdXN5XG4vLy8gYXMgYSBzdHJpbmcgaW4gdGhlIGNvbW1vbiBgbWFqb3IubWlub3IucGF0Y2hgIGZvcm1hdCDigJNcbi8vLyBvciByZXR1cm5zIG9uZSBwYXJ0IChtYWpvciB8IG1pbm9yIHwgcGF0Y2gpIGFzIGEgbnVtYmVyXG4vLy8gZm9yIHZlcnNpb24gY29tcGFyaXNvbnMuXG4vLy8gU2luY2UgdmVyc2lvbiBudW1iZXJzIGFyZW4ndCBhY3R1YWwgZGVjaW1hbHMsXG4vLy8gdGhlcmUgaXMgbm8gc2ltcGxlIHdheSB0byByZXR1cm4gdGhlIGZ1bGwgdmVyc2lvblxuLy8vIGFzIGEgY29tcGFyYWJsZSBudW1iZXIgaW4gU2Fzcy5cbi8vL1xuLy8vIEBncm91cCBfdmVyc2lvblxuLy8vXG4vLy8gQHBhcmFtIHsnbWFqb3InIHwgJ21pbm9yJyB8ICdwYXRjaCd9ICRwYXJ0IFtudWxsXSAtXG4vLy8gICBUaGUgcGFydCAobWFqb3IgfCBtaW5vciB8IHBhdGNoKSB0byByZXR1cm4gYXMgYSBudW1iZXIuXG4vLy8gICBBbnkgb3RoZXIgdmFsdWUgd2lsbCByZXR1cm4gdGhlIGZ1bGwgdmVyc2lvbiBhcyBhIHN0cmluZy5cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3VycmVudCBTdXN5IFZlcnNpb25cbi8vLyAgIC8qIEZ1bGwgVmVyc2lvbjogI3tzdXN5LXZlcnNpb24oKX0gKi9cbi8vLyAgIC8qIE1ham9yIFJlbGVhc2U6ICN7c3VzeS12ZXJzaW9uKCdtYWpvcicpfSAqL1xuQGZ1bmN0aW9uIHN1c3ktdmVyc2lvbihcbiAgJHBhcnQ6IG51bGxcbikge1xuICAkbWFqb3I6IG1hcC1nZXQoJF9zdXN5LXZlcnNpb24sICdtYWpvcicpO1xuICAkbWlub3I6IG1hcC1nZXQoJF9zdXN5LXZlcnNpb24sICdtaW5vcicpO1xuICAkcGF0Y2g6IG1hcC1nZXQoJF9zdXN5LXZlcnNpb24sICdwYXRjaCcpO1xuICAkZnVsbDogJyN7JG1ham9yfS4jeyRtaW5vcn0uI3skcGF0Y2h9JztcblxuICBAcmV0dXJuIG1hcC1nZXQoJF9zdXN5LXZlcnNpb24sICRwYXJ0KSBvciAkZnVsbDtcbn1cbiIsIi8vIFNhc3MgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PVxuLy8gLSBTdXN5IEVycm9yIE91dHB1dCBPdmVycmlkZSBbdmFyaWFibGVdXG4vLyAtIFN1c3kgRXJyb3IgW2Z1bmN0aW9uXVxuXG5cblxuLy8gU3VzeSBFcnJvciBPdXRwdXQgT3ZlcnJpZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gVHVybiBvZmYgZXJyb3Igb3V0cHV0IGZvciB0ZXN0aW5nXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuJF9zdXN5LWVycm9yLW91dHB1dC1vdmVycmlkZTogZmFsc2UgIWRlZmF1bHQ7XG5cblxuXG4vLyBTdXN5IEVycm9yXG4vLyAtLS0tLS0tLS0tXG4vLy8gT3B0aW9uYWxseSByZXR1cm4gZXJyb3IgbWVzc2FnZXMgd2l0aG91dCBmYWlsaW5nLFxuLy8vIGFzIGEgd2F5IHRvIHRlc3QgZXJyb3IgY2FzZXNcbi8vL1xuLy8vIEBncm91cCB4LXV0aWxpdHlcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7c3RyaW5nfSAkbWVzc2FnZSAtXG4vLy8gICBBIHVzZWZ1bCBlcnJvciBtZXNzYWdlLCBleHBsYWluaW5nIHRoZSBwcm9ibGVtXG4vLy8gQHBhcmFtIHtzdHJpbmd9ICRzb3VyY2UgLVxuLy8vICAgVGhlIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuLy8vIEBwYXJhbSB7Ym9vbH0gJG92ZXJyaWRlIFskX3N1c3ktZXJyb3Itb3V0cHV0LW92ZXJyaWRlXSAtXG4vLy8gICBPcHRpb25hbGx5IHJldHVybiB0aGUgZXJyb3IgcmF0aGVyIHRoYW4gZmFpbGluZ1xuLy8vIEByZXR1cm4ge3N0cmluZ30gLVxuLy8vICAgQ29tYmluZWQgZXJyb3Igd2l0aCBzb3VyY2UgYW5kIG1lc3NhZ2Vcbi8vLyBAdGhyb3dzIFdoZW4gYCRvdmVycmlkZSA9PSB0cnVlYFxuQGZ1bmN0aW9uIF9zdXN5LWVycm9yKFxuICAkbWVzc2FnZSxcbiAgJHNvdXJjZSxcbiAgJG92ZXJyaWRlOiAkX3N1c3ktZXJyb3Itb3V0cHV0LW92ZXJyaWRlXG4pIHtcbiAgQGlmICRvdmVycmlkZSB7XG4gICAgQHJldHVybiAnRVJST1IgWyN7JHNvdXJjZX1dICN7JG1lc3NhZ2V9JztcbiAgfVxuXG4gIEBlcnJvciAnWyN7JHNvdXJjZX1dICN7JG1lc3NhZ2V9Jztcbn1cblxuXG4vLyBTdSBJcyBDb21wYXJhYmxlXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgdW5pdHMgaW4gYSBncmlkIGFyZSBjb21wYXJhYmxlXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyc30gJGxlbmd0aHPigKYgLVxuLy8vICAgQXJnbGlzdCBvZiBhbGwgdGhlIG51bWJlciB2YWx1ZXMgdG8gY29tcGFyZVxuLy8vICAgKGNvbHVtbnMsIGd1dHRlcnMsIHNwYW4sIGV0Yylcbi8vL1xuLy8vIEByZXR1cm4geydmbHVpZCcgfCAnc3RhdGljJyB8IGZhbHNlfSAtXG4vLy8gICBUaGUgdHlwZSBvZiBzcGFuIChmbHVpZCBvciBzdGF0aWMpIHdoZW4gdW5pdHMgbWF0Y2gsXG4vLy8gICBvciBgZmFsc2VgIGZvciBtaXNtYXRjaGVkIHVuaXRzXG5AZnVuY3Rpb24gX3N1LWlzLWNvbXBhcmFibGUoXG4gICRsZW5ndGhzLi4uXG4pIHtcbiAgJGZpcnN0OiBudGgoJGxlbmd0aHMsIDEpO1xuXG4gIEBpZiAobGVuZ3RoKCRsZW5ndGhzKSA9PSAxKSB7XG4gICAgQHJldHVybiBpZih1bml0bGVzcygkZmlyc3QpLCAnZmx1aWQnLCAnc3RhdGljJyk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMiB0aHJvdWdoIGxlbmd0aCgkbGVuZ3Rocykge1xuICAgICRjb21wOiBudGgoJGxlbmd0aHMsICRpKTtcblxuICAgICRmYWlsOiBub3QgY29tcGFyYWJsZSgkZmlyc3QsICRjb21wKTtcbiAgICAkZmFpbDogJGZhaWwgb3IgKHVuaXRsZXNzKCRmaXJzdCkgYW5kIG5vdCB1bml0bGVzcygkY29tcCkpO1xuICAgICRmYWlsOiAkZmFpbCBvciAodW5pdGxlc3MoJGNvbXApIGFuZCBub3QgdW5pdGxlc3MoJGZpcnN0KSk7XG5cbiAgICBAaWYgJGZhaWwge1xuICAgICAgQHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIGlmKHVuaXRsZXNzKCRmaXJzdCksICdmbHVpZCcsICdzdGF0aWMnKTtcbn1cblxuXG4vLyBTdSBNYXAgQWRkIFVuaXRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLy8gVGhlIGNhbGMgZmVhdHVyZXMgdXNlIGEgbWFwIG9mIHVuaXRzIGFuZCB2YWx1ZXNcbi8vLyB0byBjb21waWxlIHRoZSBwcm9wZXIgYWxnb3J5dGhtLlxuLy8vIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG5ldyB2YWx1ZSB0byBhbnkgY29tcGFyYWJsZSBleGlzdGluZyB1bml0L3ZhbHVlLFxuLy8vIG9yIGFkZHMgYSBuZXcgdW5pdC92YWx1ZSBwYWlyIHRvIHRoZSBtYXBcbi8vL1xuLy8vIEBncm91cCB4LXV0aWxpdHlcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkbWFwIC1cbi8vLyAgIEEgbWFwIG9mIHVuaXQvdmFsdWUgcGFpcnMsIGUuZy4gKCdweCc6IDEyMHB4KVxuLy8vIEBwYXJhbSB7bGVuZ3RofSAkdmFsdWUgLVxuLy8vICAgQSBuZXcgbGVuZ3RoIHRvIGJlIGFkZGVkIHRvIHRoZSBtYXBcbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIFRoZSB1cGRhdGVkIG1hcCwgd2l0aCBuZXcgdmFsdWUgYWRkZWRcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJG1hcDogKDBweDogMTIwcHgpO1xuLy8vICAgJG1hcDogX3N1LW1hcC1hZGQtdW5pdHMoJG1hcCwgMWluKTsgLy8gYWRkIGEgY29tcGFyYWJsZSB1bml0XG4vLy8gICAkbWFwOiBfc3UtbWFwLWFkZC11bml0cygkbWFwLCAzdncpOyAvLyBhZGQgYSBuZXcgdW5pdFxuLy8vXG4vLy8gICBAZWFjaCAkdW5pdHMsICR2YWx1ZSBpbiAkbWFwIHtcbi8vLyAgICAgLyogI3skdW5pdHN9OiAjeyR2YWx1ZX0gKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBfc3UtbWFwLWFkZC11bml0cyhcbiAgJG1hcCxcbiAgJHZhbHVlXG4pIHtcbiAgJHVuaXQ6ICR2YWx1ZSAqIDA7XG4gICRoYXM6IG1hcC1nZXQoJG1hcCwgJHVuaXQpIG9yIDA7XG5cbiAgQGlmICgkaGFzID09IDApIHtcbiAgICBAZWFjaCAkdHJ5LCAkY291bGQgaW4gJG1hcCB7XG4gICAgICAkbWF0Y2g6IGNvbXBhcmFibGUoJHRyeSwgJHZhbHVlKTtcbiAgICAgICR1bml0OiBpZigkbWF0Y2gsICR0cnksICR1bml0KTtcbiAgICAgICRoYXM6IGlmKCRtYXRjaCwgJGNvdWxkLCAkaGFzKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG1hcC1tZXJnZSgkbWFwLCAoJHVuaXQ6ICRoYXMgKyAkdmFsdWUpKTtcbn1cblxuXG4vLyBTdXN5IEZsYXR0ZW5cbi8vIC0tLS0tLS0tLS0tLVxuLy8vIEZsYXR0ZW4gYSBtdWx0aWRpbWVuc2lvbmFsIGxpc3Rcbi8vL1xuLy8vIEBncm91cCB4LXV0aWxpdHlcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGxpc3QgLVxuLy8vICAgVGhlIGxpc3QgdG8gYmUgZmxhdHRlbmVkXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgVGhlIGZsYXR0ZW5lZCBsaXN0XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC1cbi8vLyAgICRsaXN0OiAxMjBweCAoMzBlbSAzMGVtKSAxMjBweDtcbi8vLyAgIC8qICN7X3N1c3ktZmxhdHRlbigkbGlzdCl9ICovXG5AZnVuY3Rpb24gX3N1c3ktZmxhdHRlbihcbiAgJGxpc3Rcbikge1xuICAkZmxhdDogKCk7XG5cbiAgLy8gRG9uJ3QgaXRlcmF0ZSBvdmVyIG1hcHNcbiAgQGlmICh0eXBlLW9mKCRsaXN0KSA9PSAnbWFwJykge1xuICAgIEByZXR1cm4gJGxpc3Q7XG4gIH1cblxuICAvLyBJdGVyYXRlIG92ZXIgbGlzdHMgKG9yIHNpbmdsZSBpdGVtcylcbiAgQGVhY2ggJGl0ZW0gaW4gJGxpc3Qge1xuICAgIEBpZiAodHlwZS1vZigkaXRlbSkgPT0gJ2xpc3QnKSB7XG4gICAgICAkaXRlbTogX3N1c3ktZmxhdHRlbigkaXRlbSk7XG4gICAgICAkZmxhdDogam9pbigkZmxhdCwgJGl0ZW0pO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZsYXQ6IGFwcGVuZCgkZmxhdCwgJGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBmbGF0dGVuZWQgbGlzdFxuICBAcmV0dXJuICRmbGF0O1xufVxuIiwiLy8vIFZhbGlkYXRpb25cbi8vLyA9PT09PT09PT09XG4vLy8gRWFjaCBhcmd1bWVudCB0byBTdSBoYXMgYSBzaW5nbGUgY2Fub25pY2FsIHN5bnRheC5cbi8vLyBUaGVzZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBjaGVjayB0byBlbnN1cmVcbi8vLyB0aGF0IGVhY2ggYXJndW1lbnQgaXMgdmFsaWQsXG4vLy8gaW4gb3JkZXIgdG8gcHJvdmlkZSB1c2VmdWwgZXJyb3JzXG4vLy8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHRzL1xuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAc2VlIHN1LXZhbGlkLWNvbHVtbnNcbi8vLyBAc2VlIHN1LXZhbGlkLWd1dHRlcnNcbi8vLyBAc2VlIHN1LXZhbGlkLXNwcmVhZFxuLy8vIEBzZWUgc3UtdmFsaWQtbG9jYXRpb25cblxuXG5cbi8vIFZhbGlkIFNwYW5cbi8vIC0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSBgc3BhbmAgYXJndW1lbnRcbi8vLyBpcyBhIG51bWJlciwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdFxuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3R9ICRzcGFuIC1cbi8vLyAgIE51bWJlciBvZiBjb2x1bW5zLCBvciBsZW5ndGggb2Ygc3BhblxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyIHwgbGlzdH0gLVxuLy8vICAgVmFsaWRhdGVkIGAkc3BhbmAgbnVtYmVyLCBsZW5ndGgsIG9yIGNvbHVtbnMgbGlzdFxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIHNwYW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLCBvciB2YWxpZCBjb2x1bW4gbGlzdFxuQGZ1bmN0aW9uIHN1LXZhbGlkLXNwYW4oXG4gICRzcGFuXG4pIHtcbiAgJHR5cGU6IHR5cGUtb2YoJHNwYW4pO1xuICBAaWYgKCR0eXBlID09ICdudW1iZXInKSB7XG4gICAgQHJldHVybiAkc3BhbjtcbiAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gJ2xpc3QnKSBhbmQgc3UtdmFsaWQtY29sdW1ucygkc3BhbiwgJ3NpbGVudC1mYWlsdXJlJykge1xuICAgIEByZXR1cm4gJHNwYW47XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7dHlwZS1vZigkc3Bhbil9XSBgI3tpbnNwZWN0KCRzcGFuKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSB2YWxpZCBudW1iZXIsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3QgZm9yICRzcGFuLicsXG4gICAgJ3N1LXZhbGlkLXNwYW4nKTtcbn1cblxuXG5cbi8vIFZhbGlkIENvbHVtbnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSBgY29sdW1uc2AgYXJndW1lbnQgaXMgYSB2YWxpZFxuLy8vIGxpc3Qgb2YgY29sdW1uLWxlbmd0aHNcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbi1sZW5ndGhzXG4vLy8gQHBhcmFtIHtib29sfSAkc2lsZW50LWZhaWx1cmUgW3RydWVdIC1cbi8vLyAgIFNldCBmYWxzZSB0byByZXR1cm4gbnVsbCBvbiBmYWlsdXJlXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRjb2x1bW5zYCBsaXN0XG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gY29sdW1uIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGxpc3Qgb2YgbnVtYmVyc1xuQGZ1bmN0aW9uIHN1LXZhbGlkLWNvbHVtbnMoXG4gICRjb2x1bW5zLFxuICAkc2lsZW50LWZhaWx1cmU6IGZhbHNlXG4pIHtcbiAgQGlmICh0eXBlLW9mKCRjb2x1bW5zKSA9PSAnbGlzdCcpIHtcbiAgICAkZmFpbDogZmFsc2U7XG5cbiAgICBAZWFjaCAkY29sIGluICRjb2x1bW5zIHtcbiAgICAgIEBpZiAodHlwZS1vZigkY29sKSAhPSAnbnVtYmVyJykge1xuICAgICAgICAkZmFpbDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgbm90ICRmYWlsIHtcbiAgICAgIEByZXR1cm4gJGNvbHVtbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gU2lsZW50IEZhaWx1cmVcbiAgQGlmICRzaWxlbnQtZmFpbHVyZSB7XG4gICAgQHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRXJyb3IgTWVzc2FnZVxuICAkYWN0dWFsOiAnWyN7dHlwZS1vZigkY29sdW1ucyl9XSBgI3tpbnNwZWN0KCRjb2x1bW5zKX1gJztcblxuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIHZhbGlkIGxpc3Qgb2YgbnVtYmVycyBmb3IgJGNvbHVtbnMuJyxcbiAgICAnc3UtdmFsaWQtY29sdW1ucycpO1xufVxuXG5cblxuLy8gVmFsaWQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBndXR0ZXJzYCBhcmd1bWVudCBpcyBhIHZhbGlkIG51bWJlclxuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXJcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlcn0gLVxuLy8vICAgVmFsaWRhdGVkIGAkZ3V0dGVyc2AgbnVtYmVyXG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gZ3V0dGVyIHZhbHVlIGlzIG5vdCBhIG51bWJlclxuQGZ1bmN0aW9uIHN1LXZhbGlkLWd1dHRlcnMoXG4gICRndXR0ZXJzXG4pIHtcbiAgJHR5cGU6IHR5cGUtb2YoJGd1dHRlcnMpO1xuXG4gIEBpZiAoJHR5cGUgPT0gJ251bWJlcicpIHtcbiAgICBAcmV0dXJuICRndXR0ZXJzO1xuICB9XG5cbiAgJGFjdHVhbDogJ1sjeyR0eXBlfV0gYCN7aW5zcGVjdCgkZ3V0dGVycyl9YCc7XG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgbnVtYmVyIG9yIGxlbmd0aCBmb3IgJGd1dHRlcnMuJyxcbiAgICAnc3UtdmFsaWQtZ3V0dGVycycpO1xufVxuXG5cblxuLy8gVmFsaWQgU3ByZWFkXG4vLyAtLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSBgc3ByZWFkYCBhcmd1bWVudCBpcyBhIHZhbGlkXG4vLy8gaW50aWdlciBiZXR3ZWVuIGAtMWAgYW5kIGAxYFxuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgdG8gaW5jbHVkZSBpbiBhIHNwYW4sXG4vLy8gICByZWxhdGl2ZSB0byB0aGUgbnVtYmVyIGNvbHVtbnNcbi8vL1xuLy8vIEByZXR1cm4gezAgfCAxIHwgLTF9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJHNwcmVhZGAgbnVtYmVyXG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gc3ByZWFkIHZhbHVlIGlzIG5vdCBhIHZhbGlkIHNwcmVhZFxuQGZ1bmN0aW9uIHN1LXZhbGlkLXNwcmVhZChcbiAgJHNwcmVhZFxuKSB7XG4gIEBpZiBpbmRleCgwIDEgLTEsICRzcHJlYWQpIHtcbiAgICBAcmV0dXJuICRzcHJlYWQ7XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7dHlwZS1vZigkc3ByZWFkKX1dIGAje2luc3BlY3QoJHNwcmVhZCl9YCc7XG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgbm9ybWFsaXplZCBbMCB8IDEgfCAtMV0gdmFsdWUgZm9yIGAkc3ByZWFkYC4nLFxuICAgICdzdS12YWxpZC1zcHJlYWQnKTtcbn1cblxuXG5cbi8vIFZhbGlkIExvY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBsb2NhdGlvbmAgYXJndW1lbnQgaXMgYSB2YWxpZCBudW1iZXIsXG4vLy8gd2l0aGluIHRoZSBzY29wZSBvZiBhdmFpbGFibGUgY29sdW1uc1xuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlcn0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGdyaWQtY29sdW1ucyB0byBiZSBzcGFubmVkXG4vLy8gQHBhcmFtIHtpbnRlZ2VyIHwgc3RyaW5nfSAkbG9jYXRpb24gLVxuLy8vICAgU3RhcnRpbmcgKDEtaW5kZXhlZCkgY29sdW1uLXBvc2l0aW9uIG9mIHRoYXQgc3BhblxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBhdmFpbGFibGUgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vXG4vLy8gQHJldHVybiB7aW50ZWdlcn0gLVxuLy8vICAgVmFsaWRhdGVkIGAkbG9jYXRpb25gIGludGlnZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBsb2NhdGlvbiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBpbmRleCxcbi8vLyAgIGdpdmVuIHRoZSBjb250ZXh0IGFuZCBzcGFuLlxuQGZ1bmN0aW9uIHN1LXZhbGlkLWxvY2F0aW9uKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uc1xuKSB7XG4gICRjb3VudDogbGVuZ3RoKCRjb2x1bW5zKTtcblxuICBAaWYgJGxvY2F0aW9uIHtcbiAgICBAaWYgKHR5cGUtb2YoJGxvY2F0aW9uKSAhPSAnbnVtYmVyJykgb3IgKG5vdCB1bml0bGVzcygkbG9jYXRpb24pKSB7XG4gICAgICAkYWN0dWFsOiAnWyN7dHlwZS1vZigkbG9jYXRpb24pfV0gYCN7JGxvY2F0aW9ufWAnO1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgdW5pdGxlc3MgbnVtYmVyIGZvciAkbG9jYXRpb24uJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfSBAZWxzZSBpZiAocm91bmQoJGxvY2F0aW9uKSAhPSAkbG9jYXRpb24pIHtcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdMb2NhdGlvbiAoYCN7JGxvY2F0aW9ufWApIG11c3QgYmUgYSAxLWluZGV4ZWQgaW50aWdlciBwb3NpdGlvbi4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9IEBlbHNlIGlmICgkbG9jYXRpb24gPiAkY291bnQpIG9yICgkbG9jYXRpb24gPCAxKSB7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnUG9zaXRpb24gYCN7JGxvY2F0aW9ufWAgZG9lcyBub3QgZXhpc3QgaW4gZ3JpZCBgI3skY29sdW1uc31gLicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH0gQGVsc2UgaWYgKCRsb2NhdGlvbiArICRzcGFuIC0gMSA+ICRjb3VudCkge1xuICAgICAgJGRldGFpbHM6ICdncmlkIGAjeyRjb2x1bW5zfWAgZm9yIHNwYW4gYCN7JHNwYW59YCBhdCBgI3skbG9jYXRpb259YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnVGhlcmUgYXJlIG5vdCBlbm91Z2ggY29sdW1ucyBpbiAjeyRkZXRhaWxzfS4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRsb2NhdGlvbjtcbn1cbiIsIi8vLyBHcmlkIE1hdGggRW5naW5lXG4vLy8gPT09PT09PT09PT09PT09PVxuLy8vIFRoZSBgc3VgIGZ1bmN0aW9ucyBnaXZlIHlvdSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBtYXRoIGxheWVyLFxuLy8vIHdpdGhvdXQgYW55IHN5bnRheC1zdWdhciBsaWtlIHNob3J0aGFuZCBwYXJzaW5nLCBhbmQgbm9ybWFsaXphdGlvbi5cbi8vLyBJZiB5b3UgcHJlZmVyIG5hbWVkIGFyZ3VtZW50cywgYW5kIHN0cmlwcGVkLWRvd24gc3ludGF4LFxuLy8vIHlvdSBjYW4gdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbiB5b3VyIGNvZGUg4oCTXG4vLy8gcmVwbGFjaW5nIGBzcGFuYCwgYGd1dHRlcmAsIGFuZCBgc2xpY2VgLlxuLy8vXG4vLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWZ1bFxuLy8vIGZvciBidWlsZGluZyBtaXhpbnMgb3Igb3RoZXIgZXh0ZW5zaW9ucyB0byBTdXN5LlxuLy8vIEFwcGx5IHRoZSBTdXN5IHN5bnRheCB0byBuZXcgbWl4aW5zIGFuZCBmdW5jdGlvbnMsXG4vLy8gdXNpbmcgb3VyIFwiUGx1Z2luIEhlbHBlcnNcIixcbi8vLyBvciB3cml0ZSB5b3VyIG93biBzeW50YXggYW5kIHBhc3MgdGhlIG5vcm1hbGl6ZWQgcmVzdWx0cyBhbG9uZ1xuLy8vIHRvIGBzdWAgZm9yIGNvbXBpbGF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vL1xuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgc3UtZ3V0dGVyXG4vLy8gQHNlZSBzdS1zbGljZVxuLy8vIEBpZ25vcmUgX3N1LXN1bVxuLy8vIEBpZ25vcmUgX3N1LWNhbGMtc3BhblxuLy8vIEBpZ25vcmUgX3N1LWNhbGMtc3VtXG4vLy8gQGlnbm9yZSBfc3UtbmVlZHMtY2FsYy1vdXRwdXRcblxuXG5cbi8vIFN1IFNwYW5cbi8vIC0tLS0tLS1cbi8vLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIGEgQ1NTLXJlYWR5IHNwYW4gd2lkdGgsXG4vLy8gYmFzZWQgb24gbm9ybWFsaXplZCBzcGFuIGFuZCBjb250ZXh0IGRhdGEg4oCTXG4vLy8gYSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiBgc3VzeS1zcGFuYCxcbi8vLyB3aXRoIGFsbCBvZiB0aGUgbG9naWMgYW5kIG5vbmUgb2YgdGhlIHN5bnRheCBzdWdhci5cbi8vL1xuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIHVuaXRsZXNzIG51bWJlcnMgd2lsbCByZXR1cm4gYCVgIHZhbHVlcy5cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCBjb21wYXJhYmxlIHVuaXRzXG4vLy8gICB3aWxsIHJldHVybiBhIHZhbHVlIGluIHRoZSB1bml0cyBwcm92aWRlZC5cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCBhIG1peCBvZiB1bml0cyxcbi8vLyAgIG9yIGEgY29tYmluYXRpb24gb2YgdW50aWxlc3MgbnVtYmVycyBhbmQgdW5pdC1sZW5ndGhzLFxuLy8vICAgd2lsbCByZXR1cm4gYSBgY2FsYygpYCBzdHJpbmcuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBzZWUgc3VzeS1zcGFuXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3R9ICRzcGFuIC1cbi8vLyAgIE51bWJlciBvciBsaXN0IG9mIGdyaWQgY29sdW1ucyB0byBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgYXZhaWxhYmxlXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRjb250YWluZXItc3ByZWFkIFskc3ByZWFkXSAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYGNvbHVtbnNgIGNvdW50XG4vLy8gQHBhcmFtIHtpbnRlZ2VyfSAkbG9jYXRpb24gWzFdIC1cbi8vLyAgIE9wdGlvbmFsIHBvc2l0aW9uIG9mIHN1Yi1zcGFuIGFtb25nIGZ1bGwgc2V0IG9mIGNvbHVtbnNcbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgUmVsYXRpdmUgb3Igc3RhdGljIGxlbmd0aCBvZiBhIHNwYW4gb24gdGhlIGdyaWRcbkBmdW5jdGlvbiBzdS1zcGFuKFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkY29udGFpbmVyLXNwcmVhZDogJHNwcmVhZCxcbiAgJGxvY2F0aW9uOiAxXG4pIHtcbiAgJHNwYW46IHN1LXZhbGlkLXNwYW4oJHNwYW4pO1xuICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRndXR0ZXJzOiBzdS12YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgJHNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRzcHJlYWQpO1xuXG4gIEBpZiAodHlwZS1vZigkc3BhbikgPT0gJ251bWJlcicpIHtcbiAgICBAaWYgKG5vdCB1bml0bGVzcygkc3BhbikpIHtcbiAgICAgIEByZXR1cm4gJHNwYW47XG4gICAgfVxuXG4gICAgJGxvY2F0aW9uOiBzdS12YWxpZC1sb2NhdGlvbigkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG4gICAgJHNwYW46IHN1LXNsaWNlKCRzcGFuLCAkY29sdW1ucywgJGxvY2F0aW9uLCAkdmFsaWRhdGU6IGZhbHNlKTtcbiAgfVxuXG4gIEBpZiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoJHNwYW4sICRjb2x1bW5zLCAkZ3V0dGVycywgJHNwcmVhZCwgbm90ICd2YWxpZGF0ZScpIHtcbiAgICBAcmV0dXJuIF9zdS1jYWxjLXNwYW4oJHNwYW4sICRjb2x1bW5zLCAkZ3V0dGVycywgJHNwcmVhZCwgJGNvbnRhaW5lci1zcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcbiAgfVxuXG4gICRzcGFuLXdpZHRoOiBfc3Utc3VtKCRzcGFuLCAkZ3V0dGVycywgJHNwcmVhZCwgJHZhbGlkYXRlOiBmYWxzZSk7XG5cbiAgQGlmIHVuaXRsZXNzKCRzcGFuLXdpZHRoKSB7XG4gICAgJGNvbnRhaW5lci1zcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkY29udGFpbmVyLXNwcmVhZCk7XG4gICAgJGNvbnRhaW5lcjogX3N1LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkLCAkdmFsaWRhdGU6IGZhbHNlKTtcbiAgICBAcmV0dXJuIHBlcmNlbnRhZ2UoJHNwYW4td2lkdGggLyAkY29udGFpbmVyKTtcbiAgfVxuXG4gIEByZXR1cm4gJHNwYW4td2lkdGg7XG59XG5cblxuXG4vLyBTdSBHdXR0ZXJcbi8vIC0tLS0tLS0tLVxuLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYSBDU1MtcmVhZHkgZ3V0dGVyIHdpZHRoLFxuLy8vIGJhc2VkIG9uIG5vcm1hbGl6ZWQgZ3JpZCBkYXRhIOKAk1xuLy8vIGEgbG93LWxldmVsIHZlcnNpb24gb2YgYHN1c3ktZ3V0dGVyYCxcbi8vLyB3aXRoIGFsbCBvZiB0aGUgbG9naWMgYW5kIG5vbmUgb2YgdGhlIHN5bnRheCBzdWdhci5cbi8vL1xuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIHVuaXRsZXNzIG51bWJlcnMgd2lsbCByZXR1cm4gYCVgIHZhbHVlcy5cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCBjb21wYXJhYmxlIHVuaXRzXG4vLy8gICB3aWxsIHJldHVybiBhIHZhbHVlIGluIHRoZSB1bml0cyBwcm92aWRlZC5cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCBhIG1peCBvZiB1bml0cyxcbi8vLyAgIG9yIGEgY29tYmluYXRpb24gb2YgdW50aWxlc3MgbnVtYmVycyBhbmQgdW5pdC1sZW5ndGhzLFxuLy8vICAgd2lsbCByZXR1cm4gYSBgY2FsYygpYCBzdHJpbmcuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBzZWUgc3VzeS1ndXR0ZXJcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkY29udGFpbmVyLXNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYGNvbHVtbnNgIGNvdW50XG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFJlbGF0aXZlIG9yIHN0YXRpYyBsZW5ndGggb2Ygb25lIGd1dHRlciBpbiBhIGdyaWRcbkBmdW5jdGlvbiBzdS1ndXR0ZXIoXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJGNvbnRhaW5lci1zcHJlYWRcbikge1xuICBAaWYgKHR5cGUtb2YoJGd1dHRlcnMpID09ICdudW1iZXInKSB7XG4gICAgQGlmICgkZ3V0dGVycyA9PSAwKSBvciAobm90IHVuaXRsZXNzKCRndXR0ZXJzKSkge1xuICAgICAgQHJldHVybiAkZ3V0dGVycztcbiAgICB9XG4gIH1cblxuICBAaWYgX3N1LW5lZWRzLWNhbGMtb3V0cHV0KCRndXR0ZXJzLCAkY29sdW1ucywgJGd1dHRlcnMsIC0xLCBub3QgJ3ZhbGlkYXRlJykge1xuICAgIEByZXR1cm4gX3N1LWNhbGMtc3BhbigkZ3V0dGVycywgJGNvbHVtbnMsICRndXR0ZXJzLCAtMSwgJGNvbnRhaW5lci1zcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcbiAgfVxuXG4gICRjb250YWluZXI6IF9zdS1zdW0oJGNvbHVtbnMsICRndXR0ZXJzLCAkY29udGFpbmVyLXNwcmVhZCk7XG4gIEByZXR1cm4gcGVyY2VudGFnZSgkZ3V0dGVycyAvICRjb250YWluZXIpO1xufVxuXG5cblxuLy8gU3UgU2xpY2Vcbi8vIC0tLS0tLS0tXG4vLy8gUmV0dXJucyBhIGxpc3Qgb2YgY29sdW1uc1xuLy8vIGJhc2VkIG9uIGEgZ2l2ZW4gc3Bhbi9sb2NhdGlvbiBzbGljZSBvZiB0aGUgZ3JpZCDigJNcbi8vLyBhIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIGBzdXN5LXNsaWNlYCxcbi8vLyB3aXRoIGFsbCBvZiB0aGUgbG9naWMgYW5kIG5vbmUgb2YgdGhlIHN5bnRheCBzdWdhci5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LXNsaWNlXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlcn0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGdyaWQgY29sdW1ucyB0byBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGxvY2F0aW9uIFsxXSAtXG4vLy8gICBTdGFydGluZyBpbmRleCBvZiBhIHNwYW4gaW4gdGhlIGxpc3Qgb2YgY29sdW1uc1xuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFN1YnNldCBsaXN0IG9mIGdyaWQgY29sdW1ucywgYmFzZWQgb24gc3BhbiBhbmQgbG9jYXRpb25cbkBmdW5jdGlvbiBzdS1zbGljZShcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkbG9jYXRpb246IDEsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgICAkbG9jYXRpb246IHN1LXZhbGlkLWxvY2F0aW9uKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbiAgfVxuXG4gICRmbG9vcjogZmxvb3IoJHNwYW4pO1xuICAkc3ViLWNvbHVtbnM6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAkbG9jYXRpb24gdG8gKCRsb2NhdGlvbiArICRmbG9vcikge1xuICAgICRzdWItY29sdW1uczogYXBwZW5kKCRzdWItY29sdW1ucywgbnRoKCRjb2x1bW5zLCAkaSkpO1xuICB9XG5cbiAgQGlmICRmbG9vciAhPSAkc3BhbiB7XG4gICAgJHJlbWFpbmRlcjogJHNwYW4gLSAkZmxvb3I7XG4gICAgJGNvbHVtbjogJGxvY2F0aW9uICsgJGZsb29yO1xuICAgICRzdWItY29sdW1uczogYXBwZW5kKCRzdWItY29sdW1ucywgbnRoKCRjb2x1bW5zLCAkY29sdW1uKSAqICRyZW1haW5kZXIpO1xuICB9XG5cbiAgQHJldHVybiAkc3ViLWNvbHVtbnM7XG59XG5cblxuXG4vLyBTdSBTdW1cbi8vIC0tLS0tLVxuLy8vIEdldCB0aGUgdG90YWwgc3VtIG9mIGNvbHVtbi11bml0cyBpbiBhIGxheW91dC5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBpbiBjb2x1bW4tY29tcGFyYWJsZSB1bml0c1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYGNvbHVtbnNgIGNvdW50XG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyfSAtXG4vLy8gICBUb3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgZ3JpZFxuQGZ1bmN0aW9uIF9zdS1zdW0oXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLXNwYW4oJGNvbHVtbnMpO1xuICAgICRndXR0ZXJzOiBzdS12YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgY29sdW1uLXN1bVxuICAkY29sdW1uLXN1bTogMDtcbiAgQGVhY2ggJGNvbHVtbiBpbiAkY29sdW1ucyB7XG4gICAgJGNvbHVtbi1zdW06ICRjb2x1bW4tc3VtICsgJGNvbHVtbjtcbiAgfVxuXG4gICRndXR0ZXItc3VtOiAoY2VpbChsZW5ndGgoJGNvbHVtbnMpKSArICRzcHJlYWQpICogJGd1dHRlcnM7XG4gICR0b3RhbDogaWYoKCRndXR0ZXItc3VtID4gMCksICRjb2x1bW4tc3VtICsgJGd1dHRlci1zdW0sICRjb2x1bW4tc3VtKTtcblxuICBAcmV0dXJuICR0b3RhbDtcbn1cblxuXG5cbi8vIFN1IENhbGNcbi8vIC0tLS0tLS1cbi8vLyBSZXR1cm4gYSB1c2FibGUgc3BhbiB3aWR0aCBhcyBhIGBjYWxjKClgIGZ1bmN0aW9uLFxuLy8vIGluIG9yZGVyIHRvIGNyZWF0ZSBtaXhlZC11bml0IGdyaWRzLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgUHJlLXNsaWNlZCBsaXN0IG9mIGdyaWQgY29sdW1ucyB0byBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgYXZhaWxhYmxlXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRjb250YWluZXItc3ByZWFkIFskc3ByZWFkXSAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYGNvbHVtbnNgIGNvdW50XG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBSZWxhdGl2ZSBvciBzdGF0aWMgbGVuZ3RoIG9mIGEgc3BhbiBvbiB0aGUgZ3JpZFxuQGZ1bmN0aW9uIF9zdS1jYWxjLXNwYW4oXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICRjb250YWluZXItc3ByZWFkOiAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkc3Bhbjogc3UtdmFsaWQtc3Bhbigkc3Bhbik7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAgICRndXR0ZXJzOiBzdS12YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG4gICAgJGNvbnRhaW5lci1zcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkY29udGFpbmVyLXNwcmVhZCk7XG4gIH1cblxuICAvLyBTcGFuIGFuZCBjb250ZXh0XG4gICRzcGFuOiBfc3UtY2FsYy1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG4gICRjb250ZXh0OiBfc3UtY2FsYy1zdW0oJGNvbHVtbnMsICRndXR0ZXJzLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuXG4gIC8vIEZpeGVkIGFuZCBmbHVpZFxuICAkZml4ZWQtc3BhbjogbWFwLWdldCgkc3BhbiwgJ2ZpeGVkJyk7XG4gICRmbHVpZC1zcGFuOiBtYXAtZ2V0KCRzcGFuLCAnZmx1aWQnKTtcbiAgJGZpeGVkLWNvbnRleHQ6IG1hcC1nZXQoJGNvbnRleHQsICdmaXhlZCcpO1xuICAkZmx1aWQtY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2ZsdWlkJyk7XG5cbiAgJGNhbGM6ICcjeyRmaXhlZC1zcGFufSc7XG4gICRmbHVpZC1jYWxjOiAnKDEwMCUgLSAjeyRmaXhlZC1jb250ZXh0fSknO1xuXG4gIC8vIEZsdWlkLXZhbHVlc1xuICBAaWYgKG5vdCAkZmx1aWQtc3Bhbikge1xuICAgICRmbHVpZC1jYWxjOiBudWxsO1xuICB9IEBlbHNlIGlmICgkZmx1aWQtc3BhbiAhPSAkZmx1aWQtY29udGV4dCkge1xuICAgICRmbHVpZC1zcGFuOiAnKiAjeyRmbHVpZC1zcGFufSc7XG4gICAgJGZsdWlkLWNvbnRleHQ6IGlmKCRmbHVpZC1jb250ZXh0LCAnLyAjeyRmbHVpZC1jb250ZXh0fScsICcnKTtcbiAgICAkZmx1aWQtY2FsYzogJygjeyRmbHVpZC1jYWxjICRmbHVpZC1jb250ZXh0ICRmbHVpZC1zcGFufSknO1xuICB9XG5cbiAgQGlmICRmbHVpZC1jYWxjIHtcbiAgICAkY2FsYzogaWYoKCRjYWxjICE9ICcnKSwgJyN7JGNhbGN9ICsgJywgJycpO1xuICAgICRjYWxjOiAnI3skY2FsYyArICRmbHVpZC1jYWxjfSc7XG4gIH1cblxuICBAcmV0dXJuIGNhbGMoI3t1bnF1b3RlKCRjYWxjKX0pO1xufVxuXG5cblxuLy8gU3UgQ2FsYy1TdW1cbi8vIC0tLS0tLS0tLS0tXG4vLy8gR2V0IHRoZSB0b3RhbCBzdW0gb2YgZml4ZWQgYW5kIGZsdWlkIGNvbHVtbi11bml0c1xuLy8vIGZvciBjcmVhdGluZyBhIG1peGVkLXVuaXQgbGF5b3V0IHdpdGggYGNhbGMoKWAgdmFsdWVzLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGF2YWlsYWJsZVxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBpbiBjb2x1bW4tY29tcGFyYWJsZSB1bml0c1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYHNwYW5gIGNvdW50XG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBNYXAgd2l0aCBgZml4ZWRgIGFuZCBgZmx1aWRgIGtleXNcbi8vLyAgIGNvbnRhaW5pbmcgdGhlIHByb3BlciBtYXRoIGFzIHN0cmluZ3NcbkBmdW5jdGlvbiBfc3UtY2FsYy1zdW0oXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLXNwYW4oJGNvbHVtbnMpO1xuICAgICRndXR0ZXJzOiBzdS12YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG4gIH1cblxuICAkZmx1aWQ6IDA7XG4gICRmaXhlZDogKCk7XG4gICRjYWxjOiBudWxsO1xuXG4gIC8vIEd1dHRlcnNcbiAgJGd1dHRlcnM6ICAkZ3V0dGVycyAqIChsZW5ndGgoJGNvbHVtbnMpICsgJHNwcmVhZCk7XG5cbiAgLy8gQ29sdW1uc1xuICBAZWFjaCAkY29sIGluIGFwcGVuZCgkY29sdW1ucywgJGd1dHRlcnMpIHtcbiAgICBAaWYgdW5pdGxlc3MoJGNvbCkge1xuICAgICAgJGZsdWlkOiAkZmx1aWQgKyAkY29sO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZpeGVkOiBfc3UtbWFwLWFkZC11bml0cygkZml4ZWQsICRjb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBpbGUgRml4ZWQgVW5pdHNcbiAgQGVhY2ggJHVuaXQsICR0b3RhbCBpbiAkZml4ZWQge1xuICAgIEBpZiAoJHRvdGFsICE9ICgwICogJHRvdGFsKSkge1xuICAgICAgJGNhbGM6IGlmKCRjYWxjLCAnI3skY2FsY30gKyAjeyR0b3RhbH0nLCAnI3skdG90YWx9Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsYyBudWxsIG9yIHN0cmluZ1xuICBAaWYgJGNhbGMge1xuICAgICRjYWxjOiBpZihzdHItaW5kZXgoJGNhbGMsICcrJyksICcoI3skY2FsY30pJywgJyN7JGNhbGN9Jyk7XG4gIH1cblxuICAvLyBGbHVpZCAwID0+IG51bGxcbiAgJGZsdWlkOiBpZigoJGZsdWlkID09IDApLCBudWxsLCAkZmx1aWQpO1xuXG5cbiAgLy8gUmV0dXJuIG1hcFxuICAkcmV0dXJuOiAoXG4gICAgJ2ZpeGVkJzogJGNhbGMsXG4gICAgJ2ZsdWlkJzogJGZsdWlkLFxuICApO1xuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuXG5cbi8vIE5lZWRzIENhbGNcbi8vIC0tLS0tLS0tLS1cbi8vLyBDaGVjayBpZiBgY2FsYygpYCB3aWxsIGJlIG5lZWRlZCBpbiBkZWZpbmluZyBhIHNwYW4sXG4vLy8gaWYgdGhlIG5lY2Vzc2FyeSB1bml0cyBpbiBhIGdyaWQgYXJlIG5vdCBjb21wYXJhYmxlLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW4gLVxuLy8vICAgU2xpY2Ugb2YgY29sdW1ucyB0byBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtib29sfSAtXG4vLy8gICBgVHJ1ZWAgd2hlbiB1bml0cyBkbyBub3QgbWF0Y2gsIGFuZCBgY2FsYygpYCB3aWxsIGJlIHJlcXVpcmVkXG5AZnVuY3Rpb24gX3N1LW5lZWRzLWNhbGMtb3V0cHV0KFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkc3Bhbjogc3UtdmFsaWQtc3Bhbigkc3Bhbik7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAgICRndXR0ZXJzOiBzdS12YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgfVxuXG4gICRoYXMtZ3V0dGVyOiBpZigobGVuZ3RoKCRzcGFuKSA+IDEpIG9yICgkc3ByZWFkID49IDApLCB0cnVlLCBmYWxzZSk7XG4gICRjaGVjazogaWYoJGhhcy1ndXR0ZXIsIGFwcGVuZCgkc3BhbiwgJGd1dHRlcnMpLCAkc3Bhbik7XG4gICRzYWZlLXNwYW46IF9zdS1pcy1jb21wYXJhYmxlKCRjaGVjay4uLik7XG5cbiAgQGlmICgkc2FmZS1zcGFuID09ICdzdGF0aWMnKSB7XG4gICAgQHJldHVybiBmYWxzZTtcbiAgfSBAZWxzZSBpZiAobm90ICRzYWZlLXNwYW4pIHtcbiAgICBAcmV0dXJuIHRydWU7XG4gIH1cblxuICAkc2FmZS1mbHVpZDogX3N1LWlzLWNvbXBhcmFibGUoJGd1dHRlcnMsICRjb2x1bW5zLi4uKTtcblxuICBAcmV0dXJuIG5vdCAkc2FmZS1mbHVpZDtcbn1cbiIsIi8vLyBTdXN5MyBDb25maWd1cmF0aW9uXG4vLy8gPT09PT09PT09PT09PT09PT09PVxuLy8vIFN1c3kzIGhhcyA0IGNvcmUgc2V0dGluZ3MsIGluIGEgc2luZ2xlIHNldHRpbmdzIG1hcC5cbi8vLyBZb3UnbGwgbm90aWNlIGEgZmV3IGRpZmZlcmVuY2VzIGZyb20gU3VzeTI6XG4vLy9cbi8vLyAqKkNvbHVtbnMqKiBubyBsb25nZXIgYWNjZXB0IGEgc2luZ2xlIG51bWJlciwgbGlrZSBgMTJgLFxuLy8vIGJ1dCB1c2UgYSBzeW50YXggbW9yZSBzaW1pbGFyIHRvIHRoZSBuZXdcbi8vLyBDU1MgW2dyaWQtdGVtcGxhdGUtY29sdW1uc11bY29sdW1uc10g4oCTXG4vLy8gYSBsaXN0IG9mIHJlbGF0aXZlIHNpemVzIGZvciBlYWNoIGNvbHVtbiBvbiB0aGUgZ3JpZC5cbi8vLyBVbml0bGVzcyBudW1iZXJzIGluIFN1c3kgYWN0IHZlcnkgc2ltaWxhciB0byBgZnJgIHVuaXRzIGluIENTUyxcbi8vLyBhbmQgdGhlIGBzdXN5LXJlcGVhdCgpYCBmdW5jdGlvbiAoc2ltaWxhciB0byB0aGUgY3NzIGByZXBlYXQoKWApXG4vLy8gaGVscHMgcXVpY2tseSBlc3RhYmxpc2ggZXF1YWwtd2lkdGggY29sdW1ucy5cbi8vL1xuLy8vIFtjb2x1bW5zXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2dyaWQtdGVtcGxhdGUtY29sdW1uc1xuLy8vXG4vLy8gLSBgc3VzeS1yZXBlYXQoMTIpYCB3aWxsIGNyZWF0ZSAxMiBmbHVpZCwgZXF1YWwtd2lkdGggY29sdW1uc1xuLy8vIC0gYHN1c3ktcmVwZWF0KDYsIDEyMHB4KWAgd2lsbCBjcmVhdGUgNiBlcXVhbCBgMTIwcHhgLXdpZGUgY29sdW1uc1xuLy8vIC0gYDEyMHB4IHN1c3ktcmVwZWF0KDQpIDEyMHB4YCB3aWxsIGNyZWF0ZSA2IGNvbHVtbnMsXG4vLy8gICB0aGUgZmlyc3QgYW5kIGxhc3QgYXJlIGAxMjBweGAsXG4vLy8gICB3aGlsZSB0aGUgbWlkZGxlIDQgYXJlIGVxdWFsIGZyYWN0aW9ucyBvZiB0aGUgcmVtYWluZGVyLlxuLy8vICAgU3VzeSB3aWxsIG91dHB1dCBgY2FsYygpYCB2YWx1ZXMgaW4gb3JkZXIgdG8gYWNoaWV2ZSB0aGlzLlxuLy8vXG4vLy8gKipHdXR0ZXJzKiogaGF2ZW4ndCBjaGFuZ2VkIOKAk1xuLy8vIGEgc2luZ2xlIGZyYWN0aW9uIG9yIGV4cGxpY2l0IHdpZHRoIOKAk1xuLy8vIGJ1dCB0aGUgYGNhbGMoKWAgb3V0cHV0IGZlYXR1cmVcbi8vLyBtZWFucyB5b3UgY2FuIG5vdyB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIHVuaXRzIGFuZCBmcmFjdGlvbnNcbi8vLyB0byBjcmVhdGUgc3RhdGljLWd1dHRlcnMgb24gYSBmbHVpZCBncmlkLCBldGMuXG4vLy9cbi8vLyAqKlNwcmVhZCoqIGV4aXN0ZWQgaW4gdGhlIFN1c3kyIEFQSSBhcyBhIHNwYW4gb3B0aW9uLFxuLy8vIGFuZCB3YXMgb3RoZXJ3aXNlIGhhbmRsZWQgYmVoaW5kIHRoZSBzY2VuZXMuXG4vLy8gTm93IHdlJ3JlIGdpdmluZyB5b3UgZnVsbCBjb250cm9sIG92ZXIgYWxsIHNwcmVhZCBpc3N1ZXMuXG4vLy8gWW91IGNhbiBmaW5kIGEgbW9yZSBbZGV0YWlsZWQgZXhwbGFuYXRpb24gb2Ygc3ByZWFkIG9uIHRoZSBibG9nXVtzcHJlYWRdLlxuLy8vXG4vLy8gW3NwcmVhZF06IGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzEzL3N1c3ktc3ByZWFkL1xuLy8vXG4vLy8gWW91IGNhbiBhY2Nlc3MgeW91ciBnbG9iYWwgc2V0dGluZ3MgYXQgYW55IHRpbWVcbi8vLyB3aXRoIHRoZSBgc3VzeS1zZXR0aW5ncygpYCBmdW5jdGlvbixcbi8vLyBvciBncmFiIGEgc2luZ2xlIHNldHRpbmcgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlXG4vLy8gd2l0aCBgc3VzeS1nZXQoJ2NvbHVtbnMnKWAsIGBzdXN5LWdldCgnZ3V0dGVycycpYCBldGMuXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy8gQGxpbmsgaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMTMvc3VzeS1zcHJlYWQvXG4vLy8gICBBcnRpY2xlOiBVbmRlcnN0YW5kaW5nIFNwcmVhZCBpbiBTdXN5M1xuLy8vXG4vLy8gQHNlZSAkc3VzeVxuLy8vIEBzZWUgc3VzeS1zZXR0aW5nc1xuLy8vIEBzZWUgc3VzeS1nZXRcblxuXG5cbi8vIFN1c3lcbi8vIC0tLS1cbi8vLyBUaGUgZ3JpZCBpcyBkZWZpbmVkIGluIGEgc2luZ2xlIG1hcCB2YXJpYWJsZSxcbi8vLyB3aXRoIGZvdXIgaW5pdGlhbCBwcm9wZXJ0aWVzOlxuLy8vIGBjb2x1bW5zYCwgYGd1dHRlcnNgLCBgc3ByZWFkYCBhbmQgYGNvbnRhaW5lci1zcHJlYWRgLlxuLy8vIEFueXRoaW5nIHlvdSBwdXQgaW4gdGhlIHJvb3QgYCRzdXN5YCB2YXJpYWJsZSBtYXBcbi8vLyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBnbG9iYWwgcHJvamVjdCBkZWZhdWx0LlxuLy8vIFlvdSBjYW4gY3JlYXRlIHNpbWlsYXIgY29uZmlndXJhdGlvbiBtYXBzXG4vLy8gdW5kZXIgZGlmZmVyZW50IHZhcmlhYmxlIG5hbWVzLFxuLy8vIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBhcy1uZWVkZWQuXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy8gQHR5cGUgTWFwXG4vLy9cbi8vLyBAc2VlICRfc3VzeS1kZWZhdWx0c1xuLy8vIEBzZWUge2Z1bmN0aW9ufSBzdXN5LXJlcGVhdFxuLy8vIEBsaW5rXG4vLy8gICBodHRwczovL2NvZGVwZW4uaW8vbWlyaXN1emFubmUvcGVuL0VnbUpKcD9lZGl0b3JzPTExMDBcbi8vLyAgIFNwcmVhZCBleGFtcGxlcyBvbiBDb2RlUGVuXG4vLy9cbi8vLyBAcHJvcCB7bGlzdH0gY29sdW1ucyAtXG4vLy8gICBDb2x1bW5zIGFyZSBkZXNjcmliZWQgYnkgYSBsaXN0IG9mIG51bWJlcnMsXG4vLy8gICByZXByZXNlbnRpbmcgdGhlIHJlbGF0aXZlIHdpZHRoIG9mIGVhY2ggY29sdW1uLlxuLy8vICAgVGhlIHN5bnRheCBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBDU1MgbmF0aXZlXG4vLy8gICBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zYCxcbi8vLyAgIGV4cGVjdGluZyBhIGxpc3Qgb2YgZ3JpZC1jb2x1bW4gd2lkdGhzLlxuLy8vICAgVW5pdGxlc3MgbnVtYmVycyBjcmVhdGUgZnJhY3Rpb25hbCBmbHVpZCBjb2x1bW5zXG4vLy8gICAoc2ltaWxhciB0byB0aGUgQ1NTLW5hdGl2ZSBgZnJgIHVuaXQpLFxuLy8vICAgd2hpbGUgbGVuZ3RoIHZhbHVlcyAodW5pdGVkIG51bWJlcnMpXG4vLy8gICBhcmUgdXNlZCB0byBkZWZpbmUgc3RhdGljIGNvbHVtbnMuXG4vLy8gICBZb3UgY2FuIG1peC1hbmQgbWF0Y2ggdW5pdHMgYW5kIGZyYWN0aW9ucyxcbi8vLyAgIHRvIGNyZWF0ZSBhIG1peGVkIGdyaWQuXG4vLy8gICBTdXN5IHdpbGwgZ2VuZXJhdGUgYGNhbGMoKWAgdmFsdWVzIHdoZW4gbmVjZXNzYXJ5LFxuLy8vICAgdG8gbWFrZSBhbGwgeW91ciB1bml0cyB3b3JrIHRvZ2V0aGVyLlxuLy8vXG4vLy8gICBVc2UgdGhlIGBzdXN5LXJlcGVhdCgkY291bnQsICR2YWx1ZSlgIGZ1bmN0aW9uXG4vLy8gICB0byBtb3JlIGVhc2lseSByZXBldGF0aXZlIGNvbHVtbnMsXG4vLy8gICBzaW1pbGFyIHRvIHRoZSBDU1MtbmF0aXZlIGByZXBlYXQoKWAuXG4vLy9cbi8vLyAgIC0gYHN1c3ktcmVwZWF0KDgpYDpcbi8vLyAgICAgYW4gOC1jb2x1bW4sIHN5bW1ldHJpY2FsLCBmbHVpZCBncmlkLlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCgxIDEgMSAxIDEgMSAxIDEpYC5cbi8vLyAgIC0gYHN1c3ktcmVwZWF0KDYsIDhlbSlgOlxuLy8vICAgICBhIDYtY29sdW1uLCBzeW1tZXRyaWNhbCwgZW0tYmFzZWQgZ3JpZC5cbi8vLyAgICAgPGJyIC8+SWRlbnRpY2FsIHRvIGAoOGVtIDhlbSA4ZW0gOGVtIDhlbSA4ZW0pYC5cbi8vLyAgIC0gYCgzMDBweCBzdXN5LXJlcGVhdCg0KSAzMDBweClgOlxuLy8vICAgICBhIDYtY29sdW1uLCBhc3ltbWV0cmljYWwsIG1peGVkIGZsdWlkL3N0YXRpYyBncmlkXG4vLy8gICAgIHVzaW5nIGBjYWxjKClgIG91dHB1dC5cbi8vLyAgICAgPGJyIC8+SWRlbnRpY2FsIHRvIGAoMzAwcHggMSAxIDEgMSAzMDBweClgLlxuLy8vXG4vLy8gICAqKk5PVEUqKiB0aGF0IGAxMmAgaXMgbm8gbG9uZ2VyIGEgdmFsaWQgMTItY29sdW1uIGdyaWQgZGVmaW5pdGlvbixcbi8vLyAgIGFuZCB5b3UgbXVzdCBsaXN0IGFsbCB0aGUgY29sdW1ucyBpbmRpdmlkdWFsbHlcbi8vLyAgIChvciBieSB1c2luZyB0aGUgYHN1c3ktcmVwZWF0KClgIGZ1bmN0aW9uKS5cbi8vL1xuLy8vIEBwcm9wIHtudW1iZXJ9IGd1dHRlcnMgLVxuLy8vICAgR3V0dGVycyBhcmUgZGVmaW5lZCBhcyBhIHNpbmdsZSB3aWR0aCxcbi8vLyAgIG9yIGZsdWlkIHJhdGlvLCBzaW1pbGFyIHRvIHRoZSBuYXRpdmUtQ1NTXG4vLy8gICBgZ3JpZC1jb2x1bW4tZ2FwYCBzeW50YXguXG4vLy8gICBTaW1pbGFyIHRvIGNvbHVtbnMsXG4vLy8gICBndXR0ZXJzIGNhbiB1c2UgYW55IHZhbGlkIENTUyBsZW5ndGggdW5pdCxcbi8vLyAgIG9yIHVuaXRsZXNzIG51bWJlcnMgdG8gZGVmaW5lIGEgcmVsYXRpdmUgZnJhY3Rpb24uXG4vLy9cbi8vLyAgIC0gYDAuNWA6XG4vLy8gICAgIGEgZmx1aWQgZ3V0dGVyLCBoYWxmIHRoZSBzaXplIG9mIGEgc2luZ2xlLWZyYWN0aW9uIGNvbHVtbi5cbi8vLyAgIC0gYDFlbWA6XG4vLy8gICAgIGEgc3RhdGljIGd1dHRlciwgYDFlbWAgd2lkZS5cbi8vL1xuLy8vICAgTWl4IHN0YXRpYyBndXR0ZXJzIHdpdGggZmx1aWQgY29sdW1ucywgb3IgdmljZSB2ZXJzYSxcbi8vLyAgIGFuZCBTdXN5IHdpbGwgZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIGBjYWxjKClgIHRvIG1ha2UgaXQgd29yay5cbi8vL1xuLy8vIEBwcm9wIHtzdHJpbmd9IHNwcmVhZCBbbmFycm93XSAtXG4vLy8gICBTcHJlYWQgb2YgYW4gZWxlbWVudCBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVyczpcbi8vLyAgIGVpdGhlciBgbmFycm93YCAobm9uZSksIGB3aWRlYCAob25lKSwgb3IgYHdpZGVyYCAodHdvKVxuLy8vXG4vLy8gICAtIEJvdGggc3ByZWFkIHNldHRpbmdzIGRlZmF1bHQgdG8gYG5hcnJvd2AsXG4vLy8gICAgIHRoZSBtb3N0IGNvbW1vbiB1c2UtY2FzZS5cbi8vLyAgICAgQSBgbmFycm93YCBzcHJlYWQgb25seSBoYXMgZ3V0dGVycyAqYmV0d2VlbiogY29sdW1uc1xuLy8vICAgICAob25lIGxlc3MgZ3V0dGVyIHRoYW4gY29sdW1ucykuXG4vLy8gICAgIFRoaXMgaXMgaG93IGFsbCBjc3MtbmF0aXZlIGdyaWRzIHdvcmssXG4vLy8gICAgIGFuZCBtb3N0IG1hcmdpbi1iYXNlZCBncmlkIHN5c3RlbXMuXG4vLy8gICAtIEEgYHdpZGVgIHNwcmVhZCBpbmNsdWRlcyB0aGUgc2FtZSBudW1iZXIgb2YgZ3V0dGVycyBhcyBjb2x1bW5zLFxuLy8vICAgICBzcGFubmluZyBhY3Jvc3MgYSBzaW5nbGUgc2lkZS1ndXR0ZXIuXG4vLy8gICAgIFRoaXMgaXMgaG93IG1vc3QgcGFkZGluZy1iYXNlZCBncmlkIHN5c3RlbXMgb2Z0ZW4gd29yayxcbi8vLyAgICAgYW5kIGlzIGFsc28gdXNlZnVsIGZvciBwdXNoaW5nIGFuZCBwdWxsaW5nIGVsZW1lbnRzIGludG8gcGxhY2UuXG4vLy8gICAtIFRoZSByYXJlIGB3aWRlcmAgc3ByZWFkIGluY2x1ZGVzIGd1dHRlcnNcbi8vLyAgICAgb24gYm90aCBzaWRlcyBvZiB0aGUgY29sdW1uLXNwYW5cbi8vLyAgICAgKG9uZSBtb3JlIGd1dHRlcnMgdGhhbiBjb2x1bW5zKS5cbi8vL1xuLy8vIEBwcm9wIHtzdHJpbmd9IGNvbnRhaW5lci1zcHJlYWQgW25hcnJvd10gLVxuLy8vICAgU3ByZWFkIG9mIGEgY29udGFpbmVyIGFyb3VuZCBhZGphY2VudCBndXR0ZXJzOlxuLy8vICAgZWl0aGVyIGBuYXJyb3dgIChub25lKSwgYHdpZGVgIChvbmUpLCBvciBgd2lkZXJgICh0d28pLlxuLy8vICAgU2VlIGBzcHJlYWRgIHByb3BlcnR5IGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHNpbmNlIDMuMC4wLWJldGEuMSAtXG4vLy8gICBgY29sdW1uc2Agc2V0dGluZyBubyBsb25nZXIgYWNjZXB0cyBudW1iZXJzXG4vLy8gICAoZS5nLiBgMTJgKSBmb3Igc3ltbWV0cmljYWwgZmx1aWQgZ3JpZHMsXG4vLy8gICBvciB0aGUgaW5pdGlhbCBgMTIgeCAxMjBweGAgc3ludGF4IGZvclxuLy8vICAgc3ltbWV0cmljYWwgZml4ZWQtdW5pdCBncmlkcy5cbi8vLyAgIFVzZSBgc3VzeS1yZXBlYXQoMTIpYCBvciBgc3VzeS1yZXBlYXQoMTIsIDEyMHB4KWAgaW5zdGVhZC5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBkZWZhdWx0IHZhbHVlc1xuLy8vICAgLy8gNCBzeW1tZXRyaWNhbCwgZmx1aWQgY29sdW1uc1xuLy8vICAgLy8gZ3V0dGVycyBhcmUgMS80IHRoZSBzaXplIG9mIGEgY29sdW1uXG4vLy8gICAvLyBlbGVtZW50cyBzcGFuIDEgbGVzcyBndXR0ZXIgdGhhbiBjb2x1bW5zXG4vLy8gICAvLyBjb250YWluZXJzIHNwYW4gMSBsZXNzIGd1dHRlciBhcyB3ZWxsXG4vLy8gICAkc3VzeTogKFxuLy8vICAgICAnY29sdW1ucyc6IHN1c3ktcmVwZWF0KDQpLFxuLy8vICAgICAnZ3V0dGVycyc6IDAuMjUsXG4vLy8gICAgICdzcHJlYWQnOiAnbmFycm93Jyxcbi8vLyAgICAgJ2NvbnRhaW5lci1zcHJlYWQnOiAnbmFycm93Jyxcbi8vLyAgICk7XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gaW5zaWRlLXN0YXRpYyBndXR0ZXJzXG4vLy8gICAvLyA2IHN5bW1ldHJpY2FsLCBmbHVpZCBjb2x1bW5z4oCmXG4vLy8gICAvLyBndXR0ZXJzIGFyZSBzdGF0aWMsIHRyaWdnZXJpbmcgY2FsYygp4oCmXG4vLy8gICAvLyBlbGVtZW50cyBzcGFuIGVxdWFsIGNvbHVtbnMgJiBndXR0ZXJz4oCmXG4vLy8gICAvLyBjb250YWluZXJzIHNwYW4gZXF1YWwgY29sdW1ucyAmIGd1dHRlcnPigKZcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgICdjb2x1bW5zJzogc3VzeS1yZXBlYXQoNiksXG4vLy8gICAgICdndXR0ZXJzJzogMC41ZW0sXG4vLy8gICAgICdzcHJlYWQnOiAnd2lkZScsXG4vLy8gICAgICdjb250YWluZXItc3ByZWFkJzogJ3dpZGUnLFxuLy8vICAgKTtcbiRzdXN5OiAoKSAhZGVmYXVsdDtcblxuXG5cbi8vIFN1c3kgUmVwZWF0XG4vLyAtLS0tLS0tLS0tLVxuLy8vIFNpbWlsYXIgdG8gdGhlIGByZXBlYXQoPGNvdW50PiwgPHZhbHVlPilgIGZ1bmN0aW9uXG4vLy8gdGhhdCBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIENTUyBHcmlkIHRlbXBsYXRlcyxcbi8vLyB0aGUgYHN1c3ktcmVwZWF0KClgIGZ1bmN0aW9uIGhlbHBzIGdlbmVyYXRlIHJlcGV0YXRpdmUgbGF5b3V0c1xuLy8vIGJ5IHJlcGVhdGluZyBhbnkgdmFsdWUgYSBnaXZlbiBudW1iZXIgb2YgdGltZXMuXG4vLy8gV2hlcmUgU3VzeSBwcmV2aW91c2x5IGFsbG93ZWQgYDhgIGFzIGEgY29sdW1uIGRlZmluaXRpb25cbi8vLyBmb3IgOCBlcXVhbCBjb2x1bW5zLCB5b3Ugc2hvdWxkIG5vdyB1c2UgYHN1c3ktcmVwZWF0KDgpYC5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vL1xuLy8vIEBwYXJhbSB7aW50ZWdlcn0gJGNvdW50IC1cbi8vLyAgIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMsIGUuZy4gYDEyYCBmb3IgYSAxMi1jb2x1bW4gZ3JpZC5cbi8vLyBAcGFyYW0geyp9ICR2YWx1ZSBbMV0gLVxuLy8vICAgVGhlIHZhbHVlIHRvIGJlIHJlcGVhdGVkLlxuLy8vICAgVGVjaG5pY2FsbHkgYW55IHZhbHVlIGNhbiBiZSByZXBlYXRlZCBoZXJlLFxuLy8vICAgYnV0IHRoZSBmdW5jdGlvbiBleGlzdHMgdG8gcmVwZWF0IGNvbHVtbi13aWR0aCBkZXNjcmlwdGlvbnM6XG4vLy8gICBlLmcuIHRoZSBkZWZhdWx0IGAxYCBmb3Igc2luZ2xlLWZyYWN0aW9uIGZsdWlkIGNvbHVtbnMsXG4vLy8gICBgNWVtYCBmb3IgYSBzdGF0aWMgY29sdW1uLFxuLy8vICAgb3IgZXZlbiBgNWVtIDEyMHB4YCBpZiB5b3UgYXJlIGFsdGVybmF0aW5nIGNvbHVtbiB3aWR0aHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBMaXN0IG9mIHJlcGVhdGVkIHZhbHVlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2Nzc1xuLy8vICAgLy8gMTIgY29sdW1uIGdyaWQsIHdpdGggNWVtIGNvbHVtbnNcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgIGNvbHVtbnM6IHN1c3ktcmVwZWF0KDEyLCA1ZW0pLFxuLy8vICAgKTtcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3Ncbi8vLyAgIC8vIGFzeW1tZXRyaWNhbCA1LWNvbHVtbiBncmlkXG4vLy8gICAkc3VzeTogKFxuLy8vICAgICBjb2x1bW5zOiAyMHB4IHN1c3ktcmVwZWF0KDMsIDEwMHB4KSAyMHB4LFxuLy8vICAgKTtcbi8vL1xuLy8vICAgLyogcmVzdWx0OiAje3N1c3ktZ2V0KCdjb2x1bW5zJyl9ICovXG5AZnVuY3Rpb24gc3VzeS1yZXBlYXQoXG4gICRjb3VudCxcbiAgJHZhbHVlOiAxXG4pIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkY291bnQge1xuICAgICRyZXR1cm46IGpvaW4oJHJldHVybiwgJHZhbHVlKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuXG5cbi8vIFN1c3kgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vLyBDb25maWd1cmF0aW9uIG1hcCBvZiBTdXN5IGZhY3RvcnkgZGVmYXVsdHMuXG4vLy8gRG8gbm90IG92ZXJyaWRlIHRoaXMgbWFwIGRpcmVjdGx5IOKAk1xuLy8vIHVzZSBgJHN1c3lgIGZvciB1c2VyIGFuZCBwcm9qZWN0IHNldHRpbmcgb3ZlcnJpZGVzLlxuLy8vXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8gQHR5cGUgTWFwXG4vLy9cbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcHJvcCB7bnVtYmVyIHwgbGlzdH0gY29sdW1ucyBbc3VzeS1yZXBlYXQoNCldXG4vLy8gQHByb3Age251bWJlcn0gZ3V0dGVycyBbMC4yNV1cbi8vLyBAcHJvcCB7c3RyaW5nfSBzcHJlYWQgWyduYXJyb3cnXVxuLy8vIEBwcm9wIHtzdHJpbmd9IGNvbnRhaW5lci1zcHJlYWQgWyduYXJyb3cnXVxuJF9zdXN5LWRlZmF1bHRzOiAoXG4gICdjb2x1bW5zJzogc3VzeS1yZXBlYXQoNCksXG4gICdndXR0ZXJzJzogMC4yNSxcbiAgJ3NwcmVhZCc6ICduYXJyb3cnLFxuICAnY29udGFpbmVyLXNwcmVhZCc6ICduYXJyb3cnLFxuKTtcblxuXG5cbi8vIFN1c3kgU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS1cbi8vLyBSZXR1cm4gYSBjb21iaW5lZCBtYXAgb2YgU3VzeSBzZXR0aW5ncyxcbi8vLyBiYXNlZCBvbiB0aGUgZmFjdG9yeSBkZWZhdWx0cyAoYCRfc3VzeS1kZWZhdWx0c2ApLFxuLy8vIHVzZXItZGVmaW5lZCBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gKGAkc3VzeWApLFxuLy8vIGFuZCBhbnkgbG9jYWwgb3ZlcnJpZGVzIHJlcXVpcmVkIOKAk1xuLy8vIHN1Y2ggYXMgYSBjb25maWd1cmF0aW9uIG1hcCBwYXNzZWQgaW50byBhIGZ1bmN0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vXG4vLy8gQHBhcmFtIHttYXBzfSAkb3ZlcnJpZGVz4oCmIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvdmVycmlkZSBvZiBnbG9iYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGFib3ZlIGZvciBwcm9wZXJ0aWVzLlxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBDb21iaW5lZCBtYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzLFxuLy8vICAgaW4gb3JkZXIgb2Ygc3BlY2lmaWNpdHk6XG4vLy8gICBhbnkgYCRvdmVycmlkZXMuLi5gLFxuLy8vICAgdGhlbiBgJHN1c3lgIHByb2plY3Qgc2V0dGluZ3MsXG4vLy8gICBhbmQgZmluYWxseSB0aGUgYCRfc3VzeS1kZWZhdWx0c2Bcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBnbG9iYWwgc2V0dGluZ3Ncbi8vLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiBzdXN5LXNldHRpbmdzKCkge1xuLy8vICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0gKi9cbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBsb2NhbCBzZXR0aW5nc1xuLy8vICAgJGxvY2FsOiAoJ2NvbHVtbnMnOiAxIDIgMyA1IDgpO1xuLy8vXG4vLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gc3VzeS1zZXR0aW5ncygkbG9jYWwpIHtcbi8vLyAgICAgLyogI3ska2V5fTogI3skdmFsdWV9ICovXG4vLy8gICB9XG5AZnVuY3Rpb24gc3VzeS1zZXR0aW5ncyhcbiAgJG92ZXJyaWRlcy4uLlxuKSB7XG4gICRzZXR0aW5nczogbWFwLW1lcmdlKCRfc3VzeS1kZWZhdWx0cywgJHN1c3kpO1xuXG4gIEBlYWNoICRjb25maWcgaW4gJG92ZXJyaWRlcyB7XG4gICAgJHNldHRpbmdzOiBtYXAtbWVyZ2UoJHNldHRpbmdzLCAkY29uZmlnKTtcbiAgfVxuXG4gIEByZXR1cm4gJHNldHRpbmdzO1xufVxuXG5cblxuLy8gU3VzeSBHZXRcbi8vIC0tLS0tLS0tXG4vLy8gUmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbCB2YWx1ZSBvZiBhbnkgU3VzeSBzZXR0aW5nXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy9cbi8vLyBAcGFyYW0ge3N0cmluZ30gJGtleSAtXG4vLy8gICBTZXR0aW5nIHRvIHJldHJpZXZlIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uXG4vLy9cbi8vLyBAcmV0dXJuIHsqfSAtXG4vLy8gICBWYWx1ZSBtYXBwZWQgdG8gYCRrZXlgIGluIHRoZSBjb25maWd1cmF0aW9uIG1hcHMsXG4vLy8gICBpbiBvcmRlciBvZiBzcGVjaWZpY2l0eTpcbi8vLyAgIGAkc3VzeWAsIHRoZW4gYCRfc3VzeS1kZWZhdWx0c2Bcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgLyogY29sdW1uczogI3tzdXN5LWdldCgnY29sdW1ucycpfSAqL1xuLy8vICAgLyogZ3V0dGVyczogI3tzdXN5LWdldCgnZ3V0dGVycycpfSAqL1xuQGZ1bmN0aW9uIHN1c3ktZ2V0KFxuICAka2V5XG4pIHtcbiAgJHNldHRpbmdzOiBzdXN5LXNldHRpbmdzKCk7XG5cbiAgQGlmIG5vdCBtYXAtaGFzLWtleSgkc2V0dGluZ3MsICRrZXkpIHtcbiAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgJ1RoZXJlIGlzIG5vIFN1c3kgc2V0dGluZyBjYWxsZWQgYCN7JGtleX1gJyxcbiAgICAgICdzdXN5LWdldCcpO1xuICB9XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRzZXR0aW5ncywgJGtleSk7XG59XG4iLCIvLy8gU3ludGF4IE5vcm1hbGl6YXRpb25cbi8vLyA9PT09PT09PT09PT09PT09PT09PVxuLy8vIFN1c3kgaXMgZGl2aWRlZCBpbnRvIHR3byBsYXllcnM6XG4vLy8gXCJTdVwiIHByb3ZpZGVzIHRoZSBjb3JlIG1hdGggZnVuY3Rpb25zIHdpdGggYSBzdHJpcHBlZC1kb3duIHN5bnRheCxcbi8vLyB3aGlsZSBcIlN1c3lcIiBhZGRzIGdsb2JhbCBzZXR0aW5ncywgc2hvcnRoYW5kIHN5bnRheCxcbi8vLyBhbmQgb3RoZXIgaGVscGVycy5cbi8vLyBFYWNoIHNldHRpbmcgKGUuZy4gc3BhbiwgbG9jYXRpb24sIGNvbHVtbnMsIHNwcmVhZCwgZXRjLilcbi8vLyBoYXMgYSBzaW5nbGUgY2Fub25pY2FsIHN5bnRheCBpbiBTdS5cbi8vL1xuLy8vIFRoaXMgbm9ybWFsaXphdGlvbiBtb2R1bGUgaGVscHMgdHJhbnNsYXRlIGJldHdlZW4gdGhvc2UgbGF5ZXJzLFxuLy8vIHRyYW5zZm9ybWluZyBwYXJzZWQgU3VzeSBpbnB1dCBpbnRvXG4vLy8gdmFsdWVzIHRoYXQgU3Ugd2lsbCB1bmRlcnN0YW5kLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemVcbi8vLyBAc2VlIHN1c3ktbm9ybWFsaXplLXNwYW5cbi8vLyBAc2VlIHN1c3ktbm9ybWFsaXplLWNvbHVtbnNcbi8vLyBAc2VlIHN1c3ktbm9ybWFsaXplLXNwcmVhZFxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtbG9jYXRpb25cblxuXG5cbi8vIFN1c3kgTm9ybWFsaXplXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSB0aGUgdmFsdWVzIGluIGEgY29uZmlndXJhdGlvbiBtYXAuXG4vLy8gSW4gYWRkaXRpb24gdG8gdGhlIGdsb2JhbCBgJHN1c3lgIHByb3BlcnRpZXMsXG4vLy8gdGhpcyBtYXAgY2FuIGluY2x1ZGUgbG9jYWwgc3Bhbi1yZWxhdGVkIGluZm9ybWF0aW9uLFxuLy8vIGxpa2UgYHNwYW5gIGFuZCBgbG9jYXRpb25gLlxuLy8vXG4vLy8gTm9ybWFsaXphdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IHZhbHVlcyBhcmUgdmFsaWQsXG4vLy8gd2hpY2ggd2lsbCBoYXBwZW4gaW4gdGhlIFN1IG1hdGggbGF5ZXIuXG4vLy8gVGhlc2UgZnVuY3Rpb25zIG1lcmVseSBsb29rIGZvciBrbm93biBTdXN5IHN5bnRheCDigJNcbi8vLyByZXR1cm5pbmcgYSBtYXAgd2l0aCB0aG9zZSBzaG9ydGhhbmQgdmFsdWVzXG4vLy8gY29udmVydGVkIGludG8gbG93LWxldmVsIGRhdGEgZm9yIFN1LlxuLy8vIEZvciBleGFtcGxlIGBzcGFuOiBhbGxgIGFuZCBgbG9jYXRpb246IGZpcnN0YFxuLy8vIHdpbGwgYmUgY29udmVydGVkIGludG8gc3BlY2lmaWMgbnVtYmVycy5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy8gQHNlZSAkc3VzeVxuLy8vIEBzZWUgc3VzeS1wYXJzZVxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBub3JtYWxpemUuXG4vLy8gICBTZWUgYCRzdXN5YCBhbmQgYHN1c3ktcGFyc2UoKWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vLyBAcGFyYW0ge21hcCB8IG51bGx9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIHVzZSBhcyBnbG9iYWwgcmVmZXJlbmNlLFxuLy8vICAgb3IgYG51bGxgIHRvIHVzZSBnbG9iYWwgc2V0dGluZ3MuXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gICB3aXRoIGFsbCB2YWx1ZXMgbm9ybWFsaXplZCBmb3IgU3UgbWF0aCBmdW5jdGlvbnMuXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUoXG4gICRjb25maWcsXG4gICRjb250ZXh0OiBudWxsXG4pIHtcbiAgLy8gU3ByZWFkXG4gIEBlYWNoICRzZXR0aW5nIGluICgnc3ByZWFkJywgJ2NvbnRhaW5lci1zcHJlYWQnKSB7XG4gICAgJHZhbHVlOiBtYXAtZ2V0KCRjb25maWcsICRzZXR0aW5nKTtcblxuICAgIEBpZiAkdmFsdWUge1xuICAgICAgJHZhbHVlOiBzdXN5LW5vcm1hbGl6ZS1zcHJlYWQoJHZhbHVlKTtcbiAgICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJHNldHRpbmc6ICR2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbHVtbnNcbiAgJGNvbHVtbnM6IG1hcC1nZXQoJGNvbmZpZywgJ2NvbHVtbnMnKTtcblxuICBAaWYgJGNvbHVtbnMge1xuICAgICRjb2x1bW5zOiBzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zKCRjb2x1bW5zLCAkY29udGV4dCk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnY29sdW1ucyc6ICRjb2x1bW5zKSk7XG4gIH1cblxuICBAaWYgbm90ICRjb2x1bW5zIHtcbiAgICAkbWFwOiB0eXBlLW9mKCRjb250ZXh0KSA9PSAnbWFwJztcbiAgICAkY29sdW1uczogaWYoJG1hcCwgbWFwLWdldCgkY29udGV4dCwgJ2NvbHVtbnMnKSwgbnVsbCk7XG4gICAgJGNvbHVtbnM6ICRjb2x1bW5zIG9yIHN1c3ktZ2V0KCdjb2x1bW5zJyk7XG4gIH1cblxuICAvLyBTcGFuXG4gICRzcGFuOiBtYXAtZ2V0KCRjb25maWcsICdzcGFuJyk7XG5cbiAgQGlmICRzcGFuIHtcbiAgICAkc3Bhbjogc3VzeS1ub3JtYWxpemUtc3Bhbigkc3BhbiwgJGNvbHVtbnMpO1xuICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJ3NwYW4nOiAkc3BhbikpO1xuICB9XG5cbiAgLy8gTG9jYXRpb25cbiAgJGxvY2F0aW9uOiBtYXAtZ2V0KCRjb25maWcsICdsb2NhdGlvbicpO1xuXG4gIEBpZiAkbG9jYXRpb24ge1xuICAgICRsb2NhdGlvbjogc3VzeS1ub3JtYWxpemUtbG9jYXRpb24oJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJ2xvY2F0aW9uJzogJGxvY2F0aW9uKSk7XG4gIH1cblxuICBAcmV0dXJuICRjb25maWc7XG59XG5cblxuXG4vLyBOb3JtYWxpemUgU3BhblxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYHNwYW5gIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3Ugc3BhbiBzeW50YXggYWxsb3dzIGFuIGV4cGxpY2l0IGxlbmd0aCAoZS5nLiBgM2VtYCksXG4vLy8gdW5pdGxlc3MgY29sdW1uLXNwYW4gbnVtYmVyIChlLmcuIGAzYCBjb2x1bW5zKSxcbi8vLyBvciBhbiBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgKGUuZy4gYCgzIDUgOClgKS5cbi8vL1xuLy8vIFN1c3kgc3BhbiBzeW50YXggYWxzbyBhbGxvd3MgdGhlIGBhbGxgIGtleXdvcmQsXG4vLy8gd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzbGljZSBvZiB0aGUgY29udGV4dFxuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0IHwgJ2FsbCd9ICRzcGFuIC1cbi8vLyAgIFNwYW4gdmFsdWUgdG8gbm9ybWFsaXplLlxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTm9ybWFsaXplZCBsaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlciB8IGxpc3R9IC1cbi8vLyAgIE51bWJlciBvciBsaXN0IHZhbHVlIGZvciBgJHNwYW5gXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtc3BhbihcbiAgJHNwYW4sXG4gICRjb2x1bW5zOiBzdXN5LWdldCgnY29sdW1ucycpXG4pIHtcbiAgQGlmICgkc3BhbiA9PSAnYWxsJykge1xuICAgIEByZXR1cm4gbGVuZ3RoKCRjb2x1bW5zKTtcbiAgfVxuXG4gIEByZXR1cm4gJHNwYW47XG59XG5cblxuXG4vLyBOb3JtYWxpemUgQ29sdW1uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYGNvbHVtbmAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBjb2x1bW4gc3ludGF4IG9ubHkgYWxsb3dzIGNvbHVtbiBsaXN0cyAoZS5nLiBgMTIwcHggMSAxIDEgMTIwcHhgKS5cbi8vL1xuLy8vIFN1c3kgc3BhbiBzeW50YXggYWxzbyBhbGxvd3MgYSB1bml0bGVzcyBgc2xpY2VgIG51bWJlciAoZS5nIGBvZiA1YCksXG4vLy8gd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzbGljZSBvZiB0aGUgY29udGV4dFxuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0IHwgaW50ZWdlcn0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBhdmFpbGFibGUgY29sdW1ucyxcbi8vLyAgIG9yIHVuaXRsZXNzIGludGVnZXIgcmVwcmVzZW50aW5nIGEgc2xpY2Ugb2Zcbi8vLyAgIHRoZSBhdmFpbGFibGUgY29udGV4dC5cbi8vLyBAcGFyYW0ge21hcCB8IG51bGx9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIHVzZSBhcyBnbG9iYWwgcmVmZXJlbmNlLFxuLy8vICAgb3IgYG51bGxgIHRvIGFjY2VzcyBnbG9iYWwgc2V0dGluZ3MuXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBDb2x1bW5zIGxpc3QgdmFsdWUsIG5vcm1hbGl6ZWQgZm9yIFN1IGlucHV0LlxuLy8vXG4vLy8gQHRocm93c1xuLy8vICAgd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBhIHNsaWNlIG9mIGFzeW1tZXRyaWNhbCBjb250ZXh0XG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRjb250ZXh0OiBudWxsXG4pIHtcbiAgJGNvbnRleHQ6ICRjb250ZXh0IG9yIHN1c3ktc2V0dGluZ3MoKTtcblxuICBAaWYgdHlwZS1vZigkY29sdW1ucykgPT0gJ2xpc3QnIHtcbiAgICBAcmV0dXJuIF9zdXN5LWZsYXR0ZW4oJGNvbHVtbnMpO1xuICB9XG5cbiAgQGlmICh0eXBlLW9mKCRjb2x1bW5zKSA9PSAnbnVtYmVyJykgYW5kICh1bml0bGVzcygkY29sdW1ucykpIHtcbiAgICAkc3BhbjogJGNvbHVtbnM7XG4gICAgJGNvbnRleHQ6IG1hcC1nZXQoJGNvbnRleHQsICdjb2x1bW5zJyk7XG4gICAgJHN5bW1ldHJpY2FsOiBzdXN5LXJlcGVhdChsZW5ndGgoJGNvbnRleHQpLCBudGgoJGNvbnRleHQsIDEpKTtcblxuICAgIEBpZiAoJGNvbnRleHQgPT0gJHN5bW1ldHJpY2FsKSB7XG4gICAgICBAcmV0dXJuIHN1c3ktcmVwZWF0KCRzcGFuLCBudGgoJGNvbnRleHQsIDEpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRhY3R1YWw6ICdvZiBgI3skc3Bhbn1gJztcbiAgICAgICRjb2x1bW5zOiAnZ3JpZC1jb2x1bW5zIGAjeyRjb250ZXh0fWAnO1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ2NvbnRleHQtc2xpY2UgI3skYWN0dWFsfSBjYW4gbm90IGJlIGRldGVybWluZWQgYmFzZWQgb24gI3skY29sdW1uc30uJyxcbiAgICAgICAgJ3N1c3ktbm9ybWFsaXplLWNvbHVtbnMnKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRjb2x1bW5zO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIFNwcmVhZFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgc3ByZWFkYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IHNwcmVhZCBzeW50YXggb25seSBhbGxvd3MgdGhlIG51bWJlcnMgYC0xYCwgYDBgLCBvciBgMWAg4oCTXG4vLy8gcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgZ3V0dGVycyBjb3ZlcmVkXG4vLy8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBzcGFubmVkLlxuLy8vXG4vLy8gU3VzeSBzcHJlYWQgc3ludGF4IGFsc28gYWxsb3dzIGtleXdvcmRzIGZvciBlYWNoIHZhbHVlIOKAk1xuLy8vIGBuYXJyb3dgIGZvciBgLTFgLCBgd2lkZWAgZm9yIGAwYCwgb3IgYHdpZGVyYCBmb3IgYDFgIOKAk1xuLy8vIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZWdlcnNcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMSB8ICduYXJyb3cnIHwgJ3dpZGUnIHwgJ3dpZGVyJ30gJHNwcmVhZCAtXG4vLy8gICBTcHJlYWQgYWNyb3NzIGFkamFjZW50IGd1dHRlcnMsIHJlbGF0aXZlIHRvIGEgY29sdW1uLWNvdW50IOKAlFxuLy8vICAgZWl0aGVyIGBuYXJyb3dgICgtMSksIGB3aWRlYCAoMCksIG9yIGB3aWRlcmAgKDEpXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXJ9IC1cbi8vLyAgIE51bWVyaWMgdmFsdWUgZm9yIGAkc3ByZWFkYFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLXNwcmVhZChcbiAgJHNwcmVhZFxuKSB7XG4gICRub3JtYWwtc3ByZWFkOiAoXG4gICAgJ25hcnJvdyc6IC0xLFxuICAgICd3aWRlJzogMCxcbiAgICAnd2lkZXInOiAxLFxuICApO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkbm9ybWFsLXNwcmVhZCwgJHNwcmVhZCkgb3IgJHNwcmVhZDtcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBMb2NhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBsb2NhdGlvbmAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBsb2NhdGlvbiBzeW50YXggcmVxdWlyZXMgdGhlICgxLWluZGV4ZWQpIG51bWJlciBmb3IgYSBjb2x1bW4uXG4vLy9cbi8vLyBTdXN5IGFsc28gYWxsb3dzIHRoZSBgZmlyc3RgIGFuZCBgbGFzdGAga2V5d29yZHMsXG4vLy8gd2hlcmUgYGZpcnN0YCBpcyBhbHdheXMgYDFgLFxuLy8vIGFuZCBgbGFzdGAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBzcGFuIGFuZCBjb2x1bW4gdmFsdWVzLlxuLy8vIEJvdGgga2V5d29yZHMgYXJlIG5vcm1hbGl6ZWQgaW50byBhbiBpbnRlZ2VyIGluZGV4XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlcn0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGdyaWQtY29sdW1ucyB0byBiZSBzcGFubmVkXG4vLy8gQHBhcmFtIHtpbnRlZ2VyIHwgJ2ZpcnN0JyB8ICdsYXN0J30gJGxvY2F0aW9uIC1cbi8vLyAgIFN0YXJ0aW5nICgxLWluZGV4ZWQpIGNvbHVtbiBwb3NpdGlvbiBvZiBhIHNwYW4sXG4vLy8gICBvciBhIG5hbWVkIGxvY2F0aW9uIGtleXdvcmQuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBBbHJlYWR5LW5vcm1hbGl6ZWQgbGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkLlxuLy8vXG4vLy8gQHJldHVybiB7aW50ZWdlcn0gLVxuLy8vICAgTnVtZXJpYyB2YWx1ZSBmb3IgYCRsb2NhdGlvbmBcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvbihcbiAgJHNwYW4sXG4gICRsb2NhdGlvbixcbiAgJGNvbHVtbnNcbikge1xuICAkY291bnQ6IGxlbmd0aCgkY29sdW1ucyk7XG4gICRub3JtYWwtbG9jYXRpb25zOiAoXG4gICAgJ2ZpcnN0JzogMSxcbiAgICAnYWxwaGEnOiAxLFxuICAgICdsYXN0JzogJGNvdW50IC0gJHNwYW4gKyAxLFxuICAgICdvbWVnYSc6ICRjb3VudCAtICRzcGFuICsgMSxcbiAgKTtcblxuICBAcmV0dXJuIG1hcC1nZXQoJG5vcm1hbC1sb2NhdGlvbnMsICRsb2NhdGlvbikgb3IgJGxvY2F0aW9uO1xufVxuIiwiLy8vIFNob3J0aGFuZCBTeW50YXggUGFyc2VyXG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbi8vLyBUaGUgc3ludGF4IHBhcnNlciBjb252ZXJ0cyBbc2hvcnRoYW5kIHN5bnRheF1bc2hvcnRdXG4vLy8gaW50byBhIG1hcCBvZiBzZXR0aW5ncyB0aGF0IGNhbiBiZSBjb21wYXJlZC9tZXJnZWQgd2l0aFxuLy8vIG90aGVyIGNvbmZpZyBtYXBzIGFuZCBnbG9iYWwgc2V0dGluZy5cbi8vL1xuLy8vIFtzaG9ydF06IGFwaS5odG1sXG4vLy9cbi8vLyBAZ3JvdXAgX3BhcnNlclxuXG5cblxuLy8gUGFyc2Vcbi8vIC0tLS0tXG4vLy8gVGhlIGBwYXJzZWAgZnVuY3Rpb24gcHJvdmlkZXMgYWxsIHRoZSBzeW50YXgtc3VnYXIgaW4gU3VzeSxcbi8vLyBjb252ZXJ0aW5nIHVzZXIgc2hvcnRoYW5kXG4vLy8gaW50byBhIHVzYWJsZSBtYXAgb2Yga2V5cyBhbmQgdmFsdWVzXG4vLy8gdGhhdCBjYW4gYmUgbm9ybWFsaXplZCBhbmQgcGFzc2VkIHRvIFN1LlxuLy8vXG4vLy8gQGdyb3VwIF9wYXJzZXJcbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzaG9ydGhhbmQgLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3Bhbixcbi8vLyAgIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuO1xuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzO1xuLy8vICAgLSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgIGZvciBvcHRpb25hbGx5IHNwcmVhZGluZ1xuLy8vICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycztcbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXJcbi8vLyAgICAgKHNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSBvbmx5IHZhbGlkXG4vLy8gICAgIGluIHRoZSBjb250ZXh0IG9mIHN5bW1ldHJpY2FsIGdyaWRzKTtcbi8vLyAgIC0gYW5kIGBzZXQtZ3V0dGVycyAkbmAgdG8gb3ZlcnJpZGUgZ2xvYmFsIGd1dHRlciBzZXR0aW5nc1xuLy8vIEBwYXJhbSB7Ym9vbH0gJGNvbnRleHQtb25seSBbZmFsc2VdIC1cbi8vLyAgIEFsbG93IHRoZSBwYXJzZXIgdG8gaWdub3JlIHNwYW4gYW5kIHNwYW4tc3ByZWFkIHZhbHVlcyxcbi8vLyAgIG9ubHkgcGFyc2luZyBjb250ZXh0IGFuZCBjb250YWluZXItc3ByZWFkLlxuLy8vICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhY2NlcHQgc3Bhbmxlc3MgdmFsdWVzLFxuLy8vICAgbGlrZSB0aGUgYGd1dHRlcnMoKWAgc3ludGF4LlxuLy8vICAgV2hlbiBwYXJzaW5nIGNvbnRleHQtb25seSxcbi8vLyAgIHRoZSBgb2ZgIGluZGljYXRvciBpcyBvcHRpb25hbC5cbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgTWFwIG9mIHNwYW4gYW5kIGdyaWQgc2V0dGluZ3Ncbi8vLyAgIHBhcnNlZCBmcm9tIHNob3J0aGFuZCBpbnB1dCDigJNcbi8vLyAgIGluY2x1ZGluZyBhbGwgdGhlIHByb3BlcnRpZXMgYXZhaWxhYmxlIGdsb2JhbGx5IOKAk1xuLy8vICAgYGNvbHVtbnNgLCBgZ3V0dGVyc2AsIGBzcHJlYWRgLCBgY29udGFpbmVyLXNwcmVhZGAg4oCTXG4vLy8gICBhbG9uZyB3aXRoIHRoZSBzcGFuLXNwZWNpZmljIHByb3BlcnRpZXNcbi8vLyAgIGBzcGFuYCwgYW5kIGBsb2NhdGlvbmAuXG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gYSBzaG9ydGhhbmQgdmFsdWUgaXMgbm90IHJlY29nbml6ZWRcbkBmdW5jdGlvbiBzdXN5LXBhcnNlKFxuICAkc2hvcnRoYW5kLFxuICAkY29udGV4dC1vbmx5OiBmYWxzZVxuKSB7XG4gICRwYXJzZS1lcnJvcjogJ1Vua25vd24gc2hvcnRoYW5kIHByb3BlcnR5Oic7XG4gICRvcHRpb25zOiAoXG4gICAgJ2ZpcnN0JzogJ2xvY2F0aW9uJyxcbiAgICAnbGFzdCc6ICdsb2NhdGlvbicsXG4gICAgJ2FscGhhJzogJ2xvY2F0aW9uJyxcbiAgICAnb21lZ2EnOiAnbG9jYXRpb24nLFxuICAgICduYXJyb3cnOiAnc3ByZWFkJyxcbiAgICAnd2lkZSc6ICdzcHJlYWQnLFxuICAgICd3aWRlcic6ICdzcHJlYWQnLFxuICApO1xuXG4gICRyZXR1cm46ICgpO1xuICAkc3BhbjogbnVsbDtcbiAgJGNvbHVtbnM6IG51bGw7XG5cbiAgJG9mOiBudWxsO1xuICAkbmV4dDogZmFsc2U7XG5cbiAgLy8gQWxsb3cgY29udGV4dC1vbmx5IHNob3J0aGFuZCwgd2l0aG91dCBzcGFuXG4gIEBpZiAoJGNvbnRleHQtb25seSkgYW5kIChub3QgaW5kZXgoJHNob3J0aGFuZCwgJ29mJykpIHtcbiAgICBAaWYgc3UtdmFsaWQtY29sdW1ucygkc2hvcnRoYW5kLCAnZmFpbC1zaWxlbnQnKSB7XG4gICAgICAkc2hvcnRoYW5kOiAnb2YnICRzaG9ydGhhbmQ7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkc2hvcnRoYW5kOiBqb2luKCdvZicsICRzaG9ydGhhbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxvb3AgdGhyb3VnaCB0aGUgc2hvcnRoYW5kIGxpc3RcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHNob3J0aGFuZCkge1xuICAgICRpdGVtOiBudGgoJHNob3J0aGFuZCwgJGkpO1xuICAgICR0eXBlOiB0eXBlLW9mKCRpdGVtKTtcbiAgICAkZXJyb3I6IGZhbHNlO1xuICAgICRkZXRhaWxzOiAnWyN7JHR5cGV9XSBgI3skaXRlbX1gJztcblxuICAgIC8vIGlmIHdlIGtub3cgd2hhdCdzIHN1cHBvc2VkIHRvIGJlIGNvbWluZyBuZXh04oCmXG4gICAgQGlmICRuZXh0IHtcblxuICAgICAgLy8gQWRkIHRvIHRoZSByZXR1cm4gbWFwXG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCRuZXh0OiAkaXRlbSkpO1xuXG4gICAgICAvLyBSZXNldCBuZXh0IHRvIGBmYWxzZWBcbiAgICAgICRuZXh0OiBmYWxzZTtcblxuICAgIH0gQGVsc2UgeyAvLyBJZiB3ZSBkb24ndCBrbm93IHdoYXQncyBzdXBwb3NlZCB0byBiZSBjb21pbmfigKZcblxuICAgICAgLy8gS2V5d29yZHPigKZcbiAgICAgIEBpZiAoJHR5cGUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIG1hcCBmb3Iga2V5d29yZHPigKZcbiAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRvcHRpb25zLCAkaXRlbSkge1xuICAgICAgICAgICRzZXR0aW5nOiBtYXAtZ2V0KCRvcHRpb25zLCAkaXRlbSk7XG5cbiAgICAgICAgICAvLyBTcHJlYWQgY291bGQgYmUgb24gdGhlIHNwYW4gb3IgdGhlIGNvbnRhaW5lcuKAplxuICAgICAgICAgIEBpZiAoJHNldHRpbmcgPT0gJ3NwcmVhZCcpIGFuZCAoJG9mKSB7XG4gICAgICAgICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCdjb250YWluZXItc3ByZWFkJzogJGl0ZW0pKTtcbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJHNldHRpbmc6ICRpdGVtKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdhbGwnKSB7XG4gICAgICAgICAgLy8gYEFsbGAgaXMgYSBzcGFuIHNob3J0Y3V0XG4gICAgICAgICAgJHNwYW46ICdhbGwnO1xuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnYXQnKSB7XG4gICAgICAgICAgLy8gU29tZSBrZXl3b3JkcyBzZXR1cCB3aGF0J3MgbmV4dOKAplxuICAgICAgICAgICRuZXh0OiAnbG9jYXRpb24nO1xuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnc2V0LWd1dHRlcnMnKSB7XG4gICAgICAgICAgJG5leHQ6ICdndXR0ZXJzJztcbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ29mJykge1xuICAgICAgICAgICRvZjogdHJ1ZTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJGVycm9yOiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgIH0gQGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInKSBvciAoJHR5cGUgPT0gJ2xpc3QnKSB7IC8vIE51bWJlcnMgJiBsaXN0c+KAplxuXG4gICAgICAgIEBpZiBub3QgKCRzcGFuIG9yICRvZikge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBzcGFuLCBhbmQgd2UncmUgbm90IGV4cGVjdGluZyBjb250ZXh04oCmXG4gICAgICAgICAgJHNwYW46ICRpdGVtO1xuICAgICAgICB9IEBlbHNlIGlmICgkb2YpIGFuZCAobm90ICRjb2x1bW5zKSB7XG4gICAgICAgICAgLy8gV2UgYXJlIGV4cGVjdGluZyBjb250ZXh04oCmXG4gICAgICAgICAgJGNvbHVtbnM6ICRpdGVtO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkZXJyb3I6IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRlcnJvcjogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGVycm9yIHtcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoJyN7JHBhcnNlLWVycm9yfSAjeyRkZXRhaWxzfScsICdzdXN5LXBhcnNlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgaGF2ZSBzcGFuLCBtZXJnZSBpdCBpblxuICBAaWYgJHNwYW4ge1xuICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJ3NwYW4nOiAkc3BhbikpO1xuICB9XG5cbiAgLy8gSWYgd2UgaGF2ZSBjb2x1bW5zLCBtZXJnZSB0aGVtIGluXG4gIEBpZiAkY29sdW1ucyB7XG4gICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgnY29sdW1ucyc6ICRjb2x1bW5zKSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG1hcCBvZiBzZXR0aW5nc+KAplxuICBAcmV0dXJuICRyZXR1cm47XG59XG4iLCIvLy8gU3ludGF4IFV0aWxpdGllcyBmb3IgRXh0ZW5kaW5nIFN1c3lcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIFRoZXJlIGFyZSBtYW55IHN0ZXBzIGludm9sdmVkXG4vLy8gd2hlbiB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZSBTdXN5IHN5bnRheCBsYXllcixcbi8vLyBhbmQgdGhlIFN1IGNvcmUgbWF0aC5cbi8vLyBUaGF0IGVudGlyZSBwcm9jZXNzIGNhbiBiZSBjb25kZW5zZWQgd2l0aCB0aGVzZSB0d28gZnVuY3Rpb25zLlxuLy8vIEZvciBhbnlvbmUgdGhhdCB3YW50cyB0byBhY2Nlc3MgdGhlIGZ1bGwgcG93ZXIgb2YgU3VzeSxcbi8vLyBhbmQgYnVpbGQgdGhlaXIgb3duIHBsdWdpbnMsIGZ1bmN0aW9ucywgb3IgbWl4aW5zIOKAk1xuLy8vIHRoaXMgaXMgdGhlIHByaW1hcnkgQVBJIGZvciBjb21waWxpbmcgdXNlciBpbnB1dCxcbi8vLyBhbmQgYWNjZXNzaW5nIHRoZSBjb3JlIG1hdGguXG4vLy9cbi8vLyBUaGlzIGlzIHRoZSBzYW1lIHRlY2huaXF1ZSB3ZSB1c2UgaW50ZXJuYWxseSxcbi8vLyB0byBrZWVwIG91ciBBUEkgbGF5ZXIgc2ltcGxlIGFuZCBsaWdodC13ZWlnaHQuXG4vLy8gRXZlcnkgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzLFxuLy8vIGEgXCJzaG9ydGhhbmRcIiBkZXNjcmlwdGlvbiBvZiB0aGUgc3BhbiBvciBjb250ZXh0LFxuLy8vIGFuZCBhbiBvcHRpb25hbCBzZXR0aW5ncy1tYXAgdG8gb3ZlcnJpZGUgZ2xvYmFsIGRlZmF1bHRzLlxuLy8vXG4vLy8gLSBVc2UgYHN1c3ktY29tcGlsZSgpYCB0byBwYXJzZSwgbWVyZ2UsIGFuZCBub3JtYWxpemVcbi8vLyAgIGFsbCB0aGUgdXNlciBzZXR0aW5ncyBpbnRvIGEgc2luZ2xlIG1hcC5cbi8vLyAtIFRoZW4gdXNlIGBzdS1jYWxsKClgIHRvIGNhbGwgb25lIG9mIHRoZSBjb3JlIG1hdGggZnVuY3Rpb25zLFxuLy8vICAgd2l0aCB3aGF0ZXZlciBkYXRhIGlzIG5lZWRlZCBmb3IgdGhhdCBmdW5jdGlvbi5cbi8vL1xuLy8vIEBncm91cCBwbHVnaW4tdXRpbHNcbi8vLyBAc2VlIHN1c3ktY29tcGlsZVxuLy8vIEBzZWUgc3UtY2FsbFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFN1c3kgQVBJIGBndXR0ZXJgIGZ1bmN0aW9uXG4vLy8gICBAZnVuY3Rpb24gc3VzeS1ndXR0ZXIoXG4vLy8gICAgICRjb250ZXh0OiBzdXN5LWdldCgnY29sdW1ucycpLFxuLy8vICAgICAkY29uZmlnOiAoKVxuLy8vICAgKSB7XG4vLy8gICAgIC8vIGNvbXBpbGUgYW5kIG5vcm1hbGl6ZSBhbGwgdXNlciBhcmd1bWVudHMgYW5kIGdsb2JhbCBzZXR0aW5nc1xuLy8vICAgICAkY29udGV4dDogc3VzeS1jb21waWxlKCRjb250ZXh0LCAkY29uZmlnLCAnY29udGV4dC1vbmx5Jyk7XG4vLy8gICAgIC8vIGNhbGwgYHN1LWd1dHRlcmAgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YVxuLy8vICAgICBAcmV0dXJuIHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBTYW1wbGUgYHNwYW5gIG1peGluIGZvciBmbG9hdGVkIGdyaWRzXG4vLy8gICBAbWl4aW4gc3Bhbihcbi8vLyAgICAgJHNwYW4sXG4vLy8gICAgICRjb25maWc6ICgpXG4vLy8gICApIHtcbi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktY29tcGlsZSgkc3BhbiwgJGNvbmZpZyk7XG4vLy8gICAgIHdpZHRoOiBzdS1jYWxsKCdzdS1zcGFuJywgJGNvbnRleHQpO1xuLy8vXG4vLy8gICAgICRlbmQ6IG1hcC1nZXQoJGNvbnRleHQsICdzcGFuJykgKyBtYXAtZ2V0KCRjb250ZXh0LCAnbG9jYXRpb24nKSAtIDE7XG4vLy8gICAgICRpcy1sYXN0OiAoJGVuZCA9PSBtYXAtZ2V0KCRjb250ZXh0LCAnY29sdW1ucycpKTtcbi8vL1xuLy8vICAgICBAaWYgJGlzLWxhc3Qge1xuLy8vICAgICAgIGZsb2F0OiByaWdodDtcbi8vLyAgICAgfSBAZWxzZSB7XG4vLy8gICAgICAgZmxvYXQ6IGxlZnQ7XG4vLy8gICAgICAgbWFyZ2luLXJpZ2h0OiBzdS1jYWxsKCdzdS1ndXR0ZXInLCAkY29udGV4dCk7XG4vLy8gICAgIH1cbi8vLyAgIH1cblxuXG5cbi8vIENvbXBpbGVcbi8vIC0tLS0tLS1cbi8vLyBTdXN5J3Mgc3ludGF4IGxheWVyIGhhcyB2YXJpb3VzIG1vdmluZyBwYXJ0cyxcbi8vLyB3aXRoIHN5bnRheC1wYXJzaW5nIGZvciB0aGUgZ3JpZC9zcGFuIHNob3J0aGFuZCxcbi8vLyBhbmQgbm9ybWFsaXphdGlvbiBmb3IgZWFjaCBvZiB0aGUgcmVzdWx0aW5nIHZhbHVlcy5cbi8vLyBUaGUgY29tcGlsZSBmdW5jdGlvbiByb2xscyB0aGlzIGFsbCB0b2dldGhlclxuLy8vIGluIGEgc2luZ2xlIGNhbGwg4oCTXG4vLy8gZm9yIHF1aWNrIGFjY2VzcyBmcm9tIG91ciBpbnRlcm5hbCBBUEkgZnVuY3Rpb25zLFxuLy8vIG9yIGFueSBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBhbmQgbWl4aW5zIHlvdSBhZGQgdG8geW91ciBwcm9qZWN0LlxuLy8vIFBhc3MgdXNlciBpbnB1dCBhbmQgY29uZmlndXJhdGlvbiBtYXBzIHRvIHRoZSBjb21waWxlcixcbi8vLyBhbmQgaXQgd2lsbCBoYW5kIGJhY2sgYSBtYXAgb2YgdmFsdWVzIHJlYWR5IGZvciBTdS5cbi8vLyBDb21iaW5lIHRoaXMgd2l0aCB0aGUgYHN1LWNhbGxgIGZ1bmN0aW9uXG4vLy8gdG8gcXVpY2tseSBwYXJzZSwgbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy5cbi8vL1xuLy8vIEBncm91cCBwbHVnaW4tdXRpbHNcbi8vLyBAc2VlIHN1LWNhbGxcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdCB8IG1hcH0gJHNob3J0IFtudWxsXSAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLFxuLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBhIGNvdW50LCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IHNwYW47XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nXG4vLy8gICAgIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzO1xuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lclxuLy8vICAgICAoc3BhbiBjb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMpO1xuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgW251bGxdIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuLy8vIEBwYXJhbSB7Ym9vbH0gJGNvbnRleHQtb25seSBbZmFsc2VdIC1cbi8vLyAgIEFsbG93IHRoZSBwYXJzZXIgdG8gaWdub3JlIHNwYW4gYW5kIHNwYW4tc3ByZWFkIHZhbHVlcyxcbi8vLyAgIG9ubHkgcGFyc2luZyBjb250ZXh0IGFuZCBjb250YWluZXItc3ByZWFkXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2Ygc2V0dGluZ3MsXG4vLy8gICBiYXNlZCBvbiBnbG9iYWwgYW5kIGxvY2FsIGNvbmZpZ3VyYXRpb24sXG4vLy8gICBhbG9uZ3dpdGggc2hvcnRoYWQgYWRqdXN0bWVudHMuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC1cbi8vLyAgICR1c2VyLWlucHV0OiAzIHdpZGUgb2Ygc3VzeS1yZXBlYXQoNiwgMTIwcHgpIHNldC1ndXR0ZXJzIDEwcHg7XG4vLy8gICAkZ3JpZC1kYXRhOiBzdXN5LWNvbXBpbGUoJHVzZXItaW5wdXQsICRzdXN5KTtcbi8vL1xuLy8vICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRncmlkLWRhdGEge1xuLy8vICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0sICovXG4vLy8gICB9XG5AZnVuY3Rpb24gc3VzeS1jb21waWxlKFxuICAkc2hvcnQ6IG51bGwsXG4gICRjb25maWc6IG51bGwsXG4gICRjb250ZXh0LW9ubHk6IGZhbHNlXG4pIHtcbiAgLy8gR2V0IGFuZCBub3JtYWxpemUgY29uZmlnXG4gICRjb25maWc6IGlmKCRjb25maWcsIHN1c3ktc2V0dGluZ3MoJGNvbmZpZyksIHN1c3ktc2V0dGluZ3MoKSk7XG4gICRub3JtYWwtY29uZmlnOiBzdXN5LW5vcm1hbGl6ZSgkY29uZmlnKTtcblxuICAvLyBQYXJzZSBhbmQgbm9ybWFsaXplIHNob3J0aGFuZFxuICAkbm9ybWFsLXNob3J0OiAoKTtcblxuICBAaWYgJHNob3J0IHtcbiAgICBAaWYgKHR5cGUtb2YoJHNob3J0KSAhPSAnbWFwJykgYW5kIChsZW5ndGgoJHNob3J0KSA+IDApIHtcbiAgICAgICRzaG9ydDogc3VzeS1wYXJzZSgkc2hvcnQsICRjb250ZXh0LW9ubHkpO1xuICAgIH1cblxuICAgICRub3JtYWwtc2hvcnQ6IHN1c3ktbm9ybWFsaXplKCRzaG9ydCwgJG5vcm1hbC1jb25maWcpO1xuICB9XG5cbiAgLy8gTWVyZ2UgYW5kIHJldHVyblxuICBAcmV0dXJuIG1hcC1tZXJnZSgkbm9ybWFsLWNvbmZpZywgJG5vcm1hbC1zaG9ydCk7XG59XG5cblxuXG4vLyBDYWxsXG4vLyAtLS0tXG4vLy8gVGhlIFN1c3kgcGFyc2luZyBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzXG4vLy8gcmVzdWx0cyBpbiBhIG1hcCBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLFxuLy8vIG11Y2ggbGlrZSB0aGUgZ2xvYmFsIGAkc3VzeWAgc2V0dGluZ3MgbWFwLlxuLy8vIEluIG9yZGVyIHRvIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBhbG9uZyB0byBTdSBtYXRoIGZ1bmN0aW9ucyxcbi8vLyB0aGUgcHJvcGVyIHZhbHVlcyBoYXZlIHRvIGJlIHBpY2tlZCBvdXQsXG4vLy8gYW5kIGNvbnZlcnRlZCB0byBhcmd1bWVudHMuXG4vLy9cbi8vLyBUaGUgYHN1LWNhbGxgIGZ1bmN0aW9uIHN0cmVhbWxpbmVzIHRoYXQgcHJvY2Vzcyxcbi8vLyB3ZWVkaW5nIG91dCB0aGUgdW5uZWNlc3NhcnkgZGF0YSxcbi8vLyBhbmQgcGFzc2luZyB0aGUgcmVzdCBhbG9uZyB0byBTdSBpbiB0aGUgcHJvcGVyIGZvcm1hdC5cbi8vLyBDb21iaW5lIHRoaXMgd2l0aCBgc3VzeS1jb21waWxlYCB0byBxdWlja2x5IHBhcnNlLFxuLy8vIG5vcm1hbGl6ZSwgYW5kIHByb2Nlc3MgZ3JpZCBjYWxjdWxhdGlvbnMuXG4vLy9cbi8vLyBAZ3JvdXAgcGx1Z2luLXV0aWxzXG4vLy9cbi8vLyBAcmVxdWlyZSBzdS1zcGFuXG4vLy8gQHJlcXVpcmUgc3UtZ3V0dGVyXG4vLy8gQHJlcXVpcmUgc3Utc2xpY2Vcbi8vLyBAc2VlIHN1c3ktY29tcGlsZVxuLy8vXG4vLy8gQHBhcmFtIHsnc3Utc3BhbicgfCAnc3UtZ3V0dGVyJyB8ICdzdS1zbGljZSd9ICRuYW1lIC1cbi8vLyAgIE5hbWUgb2YgdGhlIFN1IG1hdGggZnVuY3Rpb24gdG8gY2FsbC5cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyAtXG4vLy8gICBQYXJzZWQgYW5kIG5vcm1hbGl6ZWQgbWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuLy8vICAgdG8gdXNlIGZvciBtYXRoLWZ1bmN0aW9uIGFyZ3VtZW50cy5cbi8vL1xuLy8vIEByZXR1cm4geyp9IC1cbi8vLyAgIFJlc3VsdHMgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDtcbi8vLyAgICRncmlkLWRhdGE6IHN1c3ktY29tcGlsZSgkdXNlci1pbnB1dCwgJHN1c3kpO1xuLy8vXG4vLy8gICAuc3Utc3BhbiB7XG4vLy8gICAgIHdpZHRoOiBzdS1jYWxsKCdzdS1zcGFuJywgJGdyaWQtZGF0YSk7XG4vLy8gICB9XG5AZnVuY3Rpb24gc3UtY2FsbChcbiAgJG5hbWUsXG4gICRjb25maWdcbikge1xuICAkZ3JpZC1mdW5jdGlvbi1hcmdzOiAoXG4gICAgJ3N1LXNwYW4nOiAoJ3NwYW4nLCAnY29sdW1ucycsICdndXR0ZXJzJywgJ3NwcmVhZCcsICdjb250YWluZXItc3ByZWFkJywgJ2xvY2F0aW9uJyksXG4gICAgJ3N1LWd1dHRlcic6ICgnY29sdW1ucycsICdndXR0ZXJzJywgJ2NvbnRhaW5lci1zcHJlYWQnKSxcbiAgICAnc3Utc2xpY2UnOiAoJ3NwYW4nLCAnY29sdW1ucycsICdsb2NhdGlvbicpLFxuICApO1xuXG4gICRhcmdzOiBtYXAtZ2V0KCRncmlkLWZ1bmN0aW9uLWFyZ3MsICRuYW1lKTtcblxuICBAaWYgbm90ICRhcmdzIHtcbiAgICAkb3B0aW9uczogJ1RyeSBvbmUgb2YgdGhlc2U6ICN7bWFwLWtleXMoJGdyaWQtZnVuY3Rpb24tYXJncyl9JztcbiAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgJyN7JG5hbWV9IGlzIG5vdCBhIHB1YmxpYyBTdSBmdW5jdGlvbi4gI3skb3B0aW9uc30nLFxuICAgICAgJ3N1LWNhbGwnKTtcbiAgfVxuXG4gICRjYWxsOiBpZihmdW5jdGlvbi1leGlzdHMoJ2dldC1mdW5jdGlvbicpLCBnZXQtZnVuY3Rpb24oJG5hbWUpLCAkbmFtZSk7XG4gICRvdXRwdXQ6ICgpO1xuXG4gIEBlYWNoICRhcmcgaW4gJGFyZ3Mge1xuICAgICR2YWx1ZTogbWFwLWdldCgkY29uZmlnLCAkYXJnKTtcbiAgICAkb3V0cHV0OiBpZigkdmFsdWUsIG1hcC1tZXJnZSgkb3V0cHV0LCAoJGFyZzogJHZhbHVlKSksICRvdXRwdXQpO1xuICB9XG5cbiAgQHJldHVybiBjYWxsKCRjYWxsLCAkb3V0cHV0Li4uKTtcbn1cbiIsIi8vLyBTdXN5MyBBUEkgRnVuY3Rpb25zXG4vLy8gPT09PT09PT09PT09PT09PT09PVxuLy8vIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBmb3JtIHRoZSBjb3JlIG9mIFN1c3knc1xuLy8vIGxheW91dC1idWlsZGluZyBncmlkIEFQSS5cbi8vL1xuLy8vIC0gVXNlIGBzcGFuKClgIGFuZCBgZ3V0dGVyKClgIHRvIHJldHVybiBhbnkgZ3JpZC13aWR0aCxcbi8vLyAgIGFuZCBhcHBseSB0aGUgcmVzdWx0cyB3aGVyZXZlciB5b3UgbmVlZCB0aGVtOlxuLy8vICAgQ1NTIGB3aWR0aGAsIGBtYXJnaW5gLCBgcGFkZGluZ2AsIGBmbGV4LWJhc2lzYCwgYHRyYW5zZm9ybWAsIGV0Yy5cbi8vLyAtIEZvciBhc3ltbWV0cmljYWwtZmx1aWQgZ3JpZHMsXG4vLy8gICBgc2xpY2UoKWAgY2FuIGhlbHAgbWFuYWdlIHlvdXIgbmVzdGluZyBjb250ZXh0LlxuLy8vXG4vLy8gQWxsIHRocmVlIGZ1bmN0aW9ucyBjb21lIHdpdGggYW4gdW5wcmVmaXhlZCBhbGlhcyBieSBkZWZhdWx0LFxuLy8vIHVzaW5nIHRoZSBgc3VzeWAgaW1wb3J0LlxuLy8vIEltcG9ydCB0aGUgYHN1c3ktcHJlZml4YCBwYXJ0aWFsIGluc3RlYWQsXG4vLy8gaWYgeW91IG9ubHkgb25seSB3YW50IHByZWZpeGVkIHZlcnNpb25zIG9mIHRoZSBBUEkuXG4vLy9cbi8vLyBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gdGhlIFwiU3VcIiBjb3JlLW1hdGggZnVuY3Rpb25zOiBgc3Utc3BhbmAsIGBzdS1ndXR0ZXJgLCBhbmQgYHN1LXNsaWNlYC5cbi8vLyBJZiB5b3UgcHJlZmVyIHRoZSBtb3JlIGNvbnN0cmFpbmVkIHN5bnRheCBvZiB0aGUgbWF0aCBlbmdpbmUsXG4vLy8geW91IGFyZSB3ZWxjb21lIHRvIHVzZSB0aG9zZSBmdW5jdGlvbnMgaW5zdGVhZC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1c3ktc3BhblxuLy8vIEBzZWUgc3VzeS1ndXR0ZXJcbi8vLyBAc2VlIHN1c3ktc2xpY2Vcbi8vLyBAc2VlIHN1LXNwYW5cbi8vLyBAc2VlIHN1LWd1dHRlclxuLy8vIEBzZWUgc3Utc2xpY2VcblxuXG5cbi8vLyAjIyBTaG9ydGhhbmRcbi8vL1xuLy8vIEFsbCBmdW5jdGlvbnMgZHJhdyBvbiB0aGUgc2FtZSBzaG9ydGhhbmQgc3ludGF4IGluIHR3byBwYXJ0cyxcbi8vLyBzZXBlcmF0ZWQgYnkgdGhlIHdvcmQgYG9mYC5cbi8vL1xuLy8vICMjIyBTcGFuIFN5bnRheDogYDx3aWR0aD5gIFtgPGxvY2F0aW9uPmAgYDxzcHJlYWQ+YF1cbi8vLyBUaGUgZmlyc3QgcGFydCBkZXNjcmliZXMgdGhlXG4vLy8gKipzcGFuKiogd2lkdGgsIGxvY2F0aW9uLCBhbmQgc3ByZWFkIGluIGFueSBvcmRlci5cbi8vLyBPbmx5IHRoZSB3aWR0aCBpcyByZXF1aXJlZDpcbi8vL1xuLy8vIC0gYHNwYW4oMilgIHdpbGwgcmV0dXJuIHRoZSB3aWR0aCBvZiAyIGNvbHVtbnMuXG4vLy8gLSBgc3BhbigzIHdpZGUpYCB3aWxsIHJldHVybiAzLWNvbHVtbnMsIHdpdGggYW4gYWRkaXRpb25hbCBndXR0ZXIuXG4vLy8gLSBsb2NhdGlvbiBpcyBvbmx5IG5lZWRlZCB3aXRoIGFzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyAgIHdoZXJlIGBzcGFuKDMgYXQgMilgIHdpbGwgcmV0dXJuIHRoZSB3aWR0aCBvZlxuLy8vICAgc3BlY2lmaWMgY29sdW1ucyBvbiB0aGUgZ3JpZC5cbi8vLyAgIFNpbmNlIHRoZXNlIGFyZSBmdW5jdGlvbnMsIHRoZXkgd2lsbCBub3QgaGFuZGxlIHBsYWNlbWVudCBmb3IgeW91LlxuLy8vXG4vLy8gIyMjIENvbnRleHQgU3ludGF4OiBgW29mIDxjb2x1bW5zPiA8Y29udGFpbmVyLXNwcmVhZD4gPGd1dHRlcnM+XWBcbi8vLyBUaGUgc2Vjb25kIGhhbGYgb2YgU3VzeSdzIHNob3J0aGFuZFxuLy8vIGRlc2NyaWJlcyB0aGUgZ3JpZC0qKmNvbnRleHQqKiDigJNcbi8vLyBhdmFpbGFibGUgY29sdW1ucywgY29udGFpbmVyLXNwcmVhZCwgYW5kIG9wdGlvbmFsIGd1dHRlciBvdmVycmlkZSDigJNcbi8vLyBpbiBhbnkgb3JkZXIuXG4vLy8gQWxsIG9mIHRoZXNlIHNldHRpbmdzIGhhdmUgZ2xvYmFsbHktZGVmaW5lZCBkZWZhdWx0czpcbi8vL1xuLy8vIC0gYHNwYW4oMiBvZiA2KWAgd2lsbCBzZXQgdGhlIGNvbnRleHQgdG9cbi8vLyAgIGEgc2xpY2Ugb2YgNiBjb2x1bW5zIGZyb20gdGhlIGdsb2JhbCBncmlkLlxuLy8vICAgTW9yZSBkZXRhaWxzIGJlbG93LlxuLy8vIC0gYHNwYW4oMiBvZiAxMiB3aWRlKWAgY2hhbmdlcyB0aGUgY29udGFpbmVyLXNwcmVhZFxuLy8vICAgYXMgd2VsbCBhcyB0aGUgY29sdW1uLWNvbnRleHQuXG4vLy8gLSBgc3BhbigyIG9mIDEyIHNldC1ndXR0ZXJzIDAuNWVtKWBcbi8vLyAgIHdpbGwgb3ZlcnJpZGUgdGhlIGdsb2JhbCBndXR0ZXJzIHNldHRpbmdcbi8vLyAgIGZvciB0aGlzIG9uZSBjYWxjdWxhdGlvbi5cbi8vL1xuLy8vIEEgc2luZ2xlIHVuaXRsZXNzIG51bWJlciBmb3IgYGNvbHVtbnNgXG4vLy8gd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2xpY2Ugb2YgdGhlIHBhcmVudCBncmlkLlxuLy8vIE9uIGEgZ3JpZCB3aXRoIGBjb2x1bW5zOiBzdXN5LXJlcGVhdCgxMiwgMTIwcHgpYCxcbi8vLyB0aGUgc2hvcnRoYW5kIGBvZiA0YCB3aWxsIHVzZSB0aGUgcGFyZW50IGAxMjBweGAgY29sdW1uLXdpZHRoLlxuLy8vIFlvdSBjYW4gYWxzbyBiZSBtb3JlIGV4cGxpY2l0LFxuLy8vIGFuZCBzYXkgYG9mIHN1c3ktcmVwZWF0KDQsIDEwMHB4KWAuXG4vLy8gSWYgeW91IGFyZSB1c2luZyBhc3ltbWV0cmljYWwgZ3JpZHMsXG4vLy8gbGlrZSBgY29sdW1uczogKDEgMSAyIDMgNSA4KWAsXG4vLy8gU3VzeSBjYW4ndCBzbGljZSBpdCBmb3IgeW91IHdpdGhvdXQga25vd2luZyB3aGljaCBjb2x1bW5zIHlvdSB3YW50LlxuLy8vIFRoZSBgc2xpY2VgIGZ1bmN0aW9uIGFjY2VwdHMgZXhhY3RseSB0aGUgc2FtZSBzeW50YXggYXMgYHNwYW5gLFxuLy8vIGJ1dCByZXR1cm5zIGEgbGlzdCBvZiBjb2x1bW5zIHJhdGhlciB0aGFuIGEgd2lkdGguXG4vLy8gVXNlIGl0IGluIHlvdXIgY29udGV4dCBsaWtlIGBvZiBzbGljZShmaXJzdCAzKWAuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG5cblxuXG4vLyBTdXN5IFNwYW5cbi8vIC0tLS0tLS0tLVxuLy8vIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW4gU3VzeSDigJRcbi8vLyB1c2VkIHRvIHJldHVybiB0aGUgd2lkdGggb2YgYSBzcGFuIGFjcm9zcyBvbmUgb3IgbW9yZSBjb2x1bW5zLFxuLy8vIGFuZCBhbnkgcmVsZXZhbnQgZ3V0dGVycyBhbG9uZyB0aGUgd2F5LlxuLy8vIFdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MsXG4vLy8gYHNwYW4oMylgIHdpbGwgcmV0dXJuIHRoZSB3aWR0aCBvZiAzIGNvbHVtbnMsXG4vLy8gYW5kIHRoZSAyIGludGVybWVkaWF0ZSBndXR0ZXJzLlxuLy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBgd2lkdGhgIHByb3BlcnR5IG9mIGdyaWQgZWxlbWVudHMsXG4vLy8gb3IgYG1hcmdpbmAgYW5kIGBwYWRkaW5nYFxuLy8vIHRvIHB1c2gsIHB1bGwsIGFuZCBwYWQgeW91ciBlbGVtZW50cy5cbi8vL1xuLy8vIC0gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vICAgdGhlIGNvcmUtbWF0aCBgc3Utc3BhbigpYCBmdW5jdGlvbi5cbi8vLyAtIFRoZSB1bi1wcmVmaXhlZCBhbGlhcyBgc3BhbigpYCBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1LXNwYW5cbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzcGFuIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIHNwYW4sXG4vLy8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3Bhbi5cbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyAgICAgd2hlcmUgYGF0IDEgPT0gZmlyc3RgLFxuLy8vICAgICBhbmQgYGxhc3RgIHdpbGwgY2FsY3VsYXRlIHRoZSBwcm9wZXIgbG9jYXRpb25cbi8vLyAgICAgYmFzZWQgb24gY29sdW1ucyBhbmQgc3Bhbi5cbi8vLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmdcbi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnMuXG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyLlxuLy8vICAgICBTcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgdmFsaWRcbi8vLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMsXG4vLy8gICAgIHdoZXJlIFN1c3kgY2FuIHNhZmVseSBpbmZlciBhIHNsaWNlIG9mIHRoZSBwYXJlbnQgY29sdW1ucy5cbi8vLyAgIC0gYW5kIGBzZXQtZ3V0dGVycyAkbmAgdG8gb3ZlcnJpZGUgZ2xvYmFsIGd1dHRlciBzZXR0aW5ncy5cbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgQ2FsY3VsYXRlZCBsZW5ndGggdmFsdWUsIHVzaW5nIHRoZSB1bml0cyBnaXZlbixcbi8vLyAgIG9yIGNvbnZlcnRpbmcgdG8gYCVgIGZvciBmcmFjdGlvbi1iYXNlZCBncmlkcyxcbi8vLyAgIG9yIGEgZnVsbCBgY2FsY2AgZnVuY3Rpb24gd2hlbiB1bml0cy9mcmFjdGlvbnNcbi8vLyAgIGFyZSBub3QgY29tcGFyYWJsZSBvdXRzaWRlIHRoZSBicm93c2VyLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHNwYW4gaGFsZiB0aGUgZ3JpZFxuLy8vICAgLmZvbyB7XG4vLy8gICAgIC8vIHRoZSByZXN1bHQgaXMgYSBiaXQgdW5kZXIgNTAlIHRvIGFjY291bnQgZm9yIGd1dHRlcnNcbi8vLyAgICAgd2lkdGg6IHN1c3ktc3Bhbig2IG9mIDEyKTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBzcGFuIGEgc3BlY2lmaWMgc2VnbWVudCBvZiBhc3ltbWV0cmljYWwgZ3JpZFxuLy8vICAgLmZvbyB7XG4vLy8gICAgIHdpZHRoOiBzdXN5LXNwYW4oMyBhdCAzIG9mICgxIDIgMyA1IDgpKTtcbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LXNwYW4oXG4gICRzcGFuLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gICRvdXRwdXQ6IHN1c3ktY29tcGlsZSgkc3BhbiwgJGNvbmZpZyk7XG5cbiAgQGlmIG1hcC1nZXQoJG91dHB1dCwgJ3NwYW4nKSB7XG4gICAgQHJldHVybiBzdS1jYWxsKCdzdS1zcGFuJywgJG91dHB1dCk7XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7dHlwZS1vZigkc3Bhbil9XSBgI3tpbnNwZWN0KCRzcGFuKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnVW5hYmxlIHRvIGRldGVybWluZSBzcGFuIHZhbHVlIGZyb20gI3skYWN0dWFsfS4nLFxuICAgICdzdXN5LXNwYW4nKTtcbn1cblxuXG5cbi8vIFN1c3kgR3V0dGVyXG4vLyAtLS0tLS0tLS0tLVxuLy8vIFRoZSBndXR0ZXIgZnVuY3Rpb24gcmV0dXJuc1xuLy8vIHRoZSB3aWR0aCBvZiBhIHNpbmdsZSBndXR0ZXIgb24geW91ciBncmlkLFxuLy8vIHRvIGJlIGFwcGxpZWQgd2hlcmUgeW91IHNlZSBmaXQg4oCTXG4vLy8gb24gYG1hcmdpbnNgLCBgcGFkZGluZ2AsIGB0cmFuc2Zvcm1gLCBvciBlbGVtZW50IGB3aWR0aGAuXG4vLy9cbi8vLyAtIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyAgIHRoZSBjb3JlLW1hdGggYHN1LWd1dHRlcigpYCBmdW5jdGlvbi5cbi8vLyAtIFRoZSB1bi1wcmVmaXhlZCBhbGlhcyBgZ3V0dGVyKClgIGlzIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3UtZ3V0dGVyXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0IHwgbnVtYmVyfSAkY29udGV4dCBbbnVsbF0gLVxuLy8vICAgT3B0aW9uYWwgY29udGV4dCBmb3IgbmVzdGVkIGd1dHRlcnMsXG4vLy8gICBpbmNsdWRpbmcgc2hvcnRoYW5kIGZvclxuLy8vICAgYGNvbHVtbnNgLCBgZ3V0dGVyc2AsIGFuZCBgY29udGFpbmVyLXNwcmVhZGBcbi8vLyAgIChhZGRpdGlvbmFsIHNob3J0aGFuZCB3aWxsIGJlIGlnbm9yZWQpXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGFzIGAlYCBvZiBjdXJyZW50IGNvbnRleHQsXG4vLy8gICBvciBpbiB0aGUgdW5pdHMgZGVmaW5lZCBieSBgY29sdW1uLXdpZHRoYCB3aGVuIGF2YWlsYWJsZVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGFkZCBndXR0ZXJzIGJlZm9yZSBvciBhZnRlciBhbiBlbGVtZW50XG4vLy8gICAuZmxvYXRzIHtcbi8vLyAgICAgZmxvYXQ6IGxlZnQ7XG4vLy8gICAgIHdpZHRoOiBzcGFuKDMgb2YgNik7XG4vLy8gICAgIG1hcmdpbi1sZWZ0OiBndXR0ZXIob2YgNik7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYWRkIGd1dHRlcnMgdG8gcGFkZGluZ1xuLy8vICAgLmZsZXhib3gge1xuLy8vICAgICBmbGV4OiAxIDEgc3BhbigzIHdpZGUgb2YgNiB3aWRlKTtcbi8vLyAgICAgcGFkZGluZzogZ3V0dGVyKG9mIDYpIC8gMjtcbi8vLyAgIH1cbi8vL1xuQGZ1bmN0aW9uIHN1c3ktZ3V0dGVyKFxuICAkY29udGV4dDogbnVsbCxcbiAgJGNvbmZpZzogKClcbikge1xuICAkY29udGV4dDogc3VzeS1jb21waWxlKCRjb250ZXh0LCAkY29uZmlnLCAnY29udGV4dC1vbmx5Jyk7XG5cbiAgQHJldHVybiBzdS1jYWxsKCdzdS1ndXR0ZXInLCAkY29udGV4dCk7XG59XG5cblxuXG4vLyBTdXN5IFNsaWNlXG4vLyAtLS0tLS0tLS0tXG4vLy8gV29ya2luZyB3aXRoIGFzeW1tZXRyaWNhbCBncmlkcyAodW4tZXF1YWwgY29sdW1uIHdpZHRocylcbi8vLyBjYW4gYmUgY2hhbGxlbmdpbmcg4oCTwqBcbi8vLyBleHBlY2lhbGx5IHdoZW4gdGhleSBpbnZvbHZlIGZsdWlkL2ZyYWN0aW9uYWwgZWxlbWVudHMuXG4vLy8gRGVzY3JpYmluZyBhIGNvbnRleHQgYG9mICgxNWVtIDZlbSA2ZW0gNmVtIDE1ZW0pYCBpcyBhIGxvdFxuLy8vIHRvIHB1dCBpbnNpZGUgdGhlIHNwYW4gb3IgZ3V0dGVyIGZ1bmN0aW9uIHNob3J0aGFuZC5cbi8vLyBUaGlzIHNsaWNlIGZ1bmN0aW9uIHJldHVybnMgYSBzdWItc2xpY2Ugb2YgYXN5bW1ldHJpY2FsIGNvbHVtbnMgdG8gdXNlXG4vLy8gZm9yIGEgbmVzdGVkIGNvbnRleHQuXG4vLy8gYHNsaWNlKDMgYXQgMilgIHdpbGwgZ2l2ZSB5b3UgYSBzdWJzZXQgb2YgdGhlIGdsb2JhbCBncmlkLFxuLy8vIHNwYW5uaW5nIDMgY29sdW1ucywgc3RhcnRpbmcgd2l0aCB0aGUgc2Vjb25kLlxuLy8vXG4vLy8gLSBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gICB0aGUgY29yZS1tYXRoIGBzdS1zbGljZSgpYCBmdW5jdGlvbi5cbi8vLyAtIFRoZSB1bi1wcmVmaXhlZCBhbGlhcyBgc2xpY2UoKWAgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdS1zbGljZVxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW4gLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSBzdWJzZXQgc3Bhbiwgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzO1xuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lclxuLy8vICAgICAtIFNwYW4tY291bnRzIGxpa2UgYG9mIDZgIGFyZSBvbmx5IHZhbGlkXG4vLy8gICAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHNcbi8vLyAgICAgLSBWYWxpZCBzcHJlYWRzIGluY2x1ZGUgYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYFxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgU3Vic2V0IGxpc3Qgb2YgY29sdW1ucyBmb3IgdXNlIGZvciBhIG5lc3RlZCBjb250ZXh0XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gUmV0dXJuIGEgbmVzdGVkIHNlZ21lbnQgb2YgYXN5bW1ldHJpY2FsIGdyaWRcbi8vLyAgICRjb250ZXh0OiBzdXN5LXNsaWNlKDMgYXQgMyBvZiAoMSAyIDMgNSA4KSk7XG4vLy8gICAvKiAkY29udGV4dDogI3skY29udGV4dH07ICovXG5AZnVuY3Rpb24gc3VzeS1zbGljZShcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgJHNwYW46IHN1c3ktY29tcGlsZSgkc3BhbiwgJGNvbmZpZyk7XG5cbiAgQHJldHVybiBzdS1jYWxsKCdzdS1zbGljZScsICRzcGFuKTtcbn1cblxuXG5cbi8vLyAjIyBCdWlsZGluZyBHcmlkc1xuLy8vIFRoZSB3ZWIgaGFzIGNvbWUgYSBsb25nIHdheVxuLy8vIHNpbmNlIHRoZSBkYXlzIG9mIGRvdWJsZS1tYXJnaW4taGFja3Ncbi8vLyBhbmQgaW5jb25zaXN0ZW50IHN1YnBpeGVsIHJvdW5kaW5nLlxuLy8vIEluIGFkZGl0aW9uIHRvIGZsb2F0cyBhbmQgdGFibGVzLFxuLy8vIHdlIGNhbiBub3cgdXNlIG11Y2ggbW9yZSBwb3dlcmZ1bCB0b29scyxcbi8vLyBsaWtlIGZsZXhib3ggYW5kIENTUyBncmlkLFxuLy8vIHRvIGJ1aWxkIG1vcmUgaW50ZXJlc3RpbmcgYW5kIHJlc3BvbnNpdmUgbGF5b3V0cy5cbi8vL1xuLy8vIFdpdGggU3VzeTMsIHdlIGhvcGUgeW91J2xsIHN0YXJ0IG1vdmluZyBpbiB0aGF0IGRpcmVjdGlvbi5cbi8vLyBZb3UgY2FuIHN0aWxsIGJ1aWxkIGNsYXNzaWMgMTItY29sdW1uIEdyaWQgU3lzdGVtcyxcbi8vLyBhbmQgd2UnbGwgaGVscCB5b3UgZ2V0IHRoZXJlLFxuLy8vIGJ1dCBTdXN5MyBpcyBwcmltYXJpbHkgZGVzaWduZWQgZm9yIGEgZ3JpZC1tYXRoLW9uLWRlbWFuZFxuLy8vIGFwcHJvYWNoIHRvIGxheW91dDpcbi8vLyBhcHBseWluZyBvdXIgZnVuY3Rpb25zIG9ubHkgd2hlcmUgeW91IHJlYWxseSBuZWVkIGdyaWQgbWF0aC5cbi8vLyBSZWFkIHRoZSBbaW50cm8gYXJ0aWNsZSBieSBPZGRCaXJkXVt3ZWxjb21lXSBmb3IgbW9yZSBkZXRhaWxzLlxuLy8vXG4vLy8gW3dlbGNvbWVdOiBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8yOC9zdXN5My9cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAbGluayBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8yOC9zdXN5My8gQXJ0aWNsZTogV2VsY29tZSB0byBTdXN5M1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGZsb2F0c1xuLy8vICAgLmZsb2F0IHtcbi8vLyAgICAgd2lkdGg6IHNwYW4oMyk7XG4vLy8gICAgIG1hcmdpbi1yaWdodDogZ3V0dGVyKCk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZmxleGJveFxuLy8vICAgLmZsZXhib3gge1xuLy8vICAgICBmbGV4OiAxIDEgc3BhbigzKTtcbi8vLyAgICAgLy8gaGFsZiBhIGd1dHRlciBvbiBlaXRoZXIgc2lkZeKAplxuLy8vICAgICBwYWRkaW5nOiAwIGd1dHRlcigpIC8gMjtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBwdXNoaW5nIGFuZCBwdWxsaW5nXG4vLy8gICAucHVzaC0zIHtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IHNwYW4oMyB3aWRlKTtcbi8vLyAgIH1cbi8vL1xuLy8vICAgLnB1bGwtMyB7XG4vLy8gICAgIG1hcmdpbi1sZWZ0OiAwIC0gc3BhbigzIHdpZGUpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGJ1aWxkaW5nIGFuIGF0dHJpYnV0ZSBzeXN0ZW1cbi8vLyAgIC8vIG1hcmt1cCBleGFtcGxlOiA8ZGl2IGRhdGEtc3Bhbj1cImxhc3QgM1wiPjwvZGl2PlxuLy8vICAgW2RhdGEtc3Bhbl0ge1xuLy8vICAgICBmbG9hdDogbGVmdDtcbi8vL1xuLy8vICAgICAmOm5vdChbZGF0YS1zcGFuKj0nbGFzdCddKSB7XG4vLy8gICAgICAgbWFyZ2luLXJpZ2h0OiBndXR0ZXIoKTtcbi8vLyAgICAgfVxuLy8vICAgfVxuLy8vXG4vLy8gICBAZm9yICRzcGFuIGZyb20gMSB0aHJvdWdoIGxlbmd0aChzdXN5LWdldCgnY29sdW1ucycpKSB7XG4vLy8gICAgIFtkYXRhLXNwYW4qPScjeyRzcGFufSddIHtcbi8vLyAgICAgICB3aWR0aDogc3Bhbigkc3Bhbik7XG4vLy8gICAgIH1cbi8vLyAgIH1cbiIsIi8vIFVucHJlZml4IFN1c3lcbi8vID09PT09PT09PT09PT1cblxuXG4vLyBTcGFuXG4vLyAtLS0tXG4vLy8gVW4tcHJlZml4ZWQgYWxpYXMgZm9yIGBzdXN5LXNwYW5gXG4vLy8gKGF2YWlsYWJsZSBieSBkZWZhdWx0KVxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBhbGlhcyBzdXN5LXNwYW5cbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW5cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldXG5AZnVuY3Rpb24gc3BhbihcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LXNwYW4oJHNwYW4sICRjb25maWcpO1xufVxuXG5cbi8vIEd1dHRlclxuLy8gLS0tLS0tXG4vLy8gVW4tcHJlZml4ZWQgYWxpYXMgZm9yIGBzdXN5LWd1dHRlcmBcbi8vLyAoYXZhaWxhYmxlIGJ5IGRlZmF1bHQpXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGFsaWFzIHN1c3ktZ3V0dGVyXG4vLy9cbi8vLyBAcGFyYW0ge2ludGVnZXIgfCBsaXN0fSAkY29udGV4dCBbbnVsbF0gLVxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBndXR0ZXIoXG4gICRjb250ZXh0OiBudWxsLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gIEByZXR1cm4gc3VzeS1ndXR0ZXIoJGNvbnRleHQsICRjb25maWcpO1xufVxuXG5cbi8vIFNsaWNlXG4vLyAtLS0tLVxuLy8vIFVuLXByZWZpeGVkIGFsaWFzIGZvciBgc3VzeS1zbGljZWBcbi8vLyAoYXZhaWxhYmxlIGJ5IGRlZmF1bHQpXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGFsaWFzIHN1c3ktc2xpY2Vcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW5cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldXG5AZnVuY3Rpb24gc2xpY2UoXG4gICRzcGFuLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gIEByZXR1cm4gc3VzeS1zbGljZSgkc3BhbiwgJGNvbmZpZyk7XG59XG4iLCIvLz09PT09PT09PT09PT09PT09PT09PT1cbi8v5Li75qGG5p626Kit5a6aIG1haW5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/moYjku7bmoYbmnrY6XG4vL+eAj+imveWZqOWvrOW6puioreWumijlkI3nqLEg5a+s5bqmIOW3puWPs+mWk+i3nee4veWSjClcbiRpbm5lcjogKGZsdWlkIDEwMCUgMzAseGwgMTYwMCAzMCxsZyAxMjgwIDMwLG1kIDEwMjQgMCxzbSA5NjAgMCx4cyA3NjggMCk7IC8v5qGG5p625a+s5bqm6Kit5a6aXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ot53pm6LoqK3lrppcbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGJhc2VHYXA6IDEwcHg7IC8v5Li76KaB6Led6Zui5aSn5bCPLOmWk+i3nee1seS4gOWAjeaVuFxuXG4vL+aWh+Wtl+ioreWumlxuJGZvbnQ6ICdMYXRvJywnTm90byBTYW5zIFRDJyxzYW5zLXNlcmlmOy8v5paH5a2X5a2X5Z6LXG4kZm9udFNpemU6IDE2cHg7IC8v5Li75paH5a2X5aSn5bCPXG4kZm9udFNpemVMZXZlbDogMC41Oy8v5paH5a2X5pS+5aSn5YCN546HXG4kRm9udExldmVsOiA1OyAvL+aWh+Wtl2xldmVs55Sf5oiQ5pW4XG4kbGluZUhlaWdodExldmVsOiAxLjU7IC8v6KGM6Led5YCN546HXG4kZm9udExoOiBjZWlsKCRmb250U2l6ZSAqICRsaW5lSGVpZ2h0TGV2ZWwpOyAvL+S4u+aWh+Wtl+ihjOmrmFxuJHRleHRDb2xvcjogIzI1MjUyNTsgLy/kuLvmloflrZfpoY/oibJcbi8vJHRleHRIQ29sb3I6ICMzMjU1RjkgLy/kuLvmloflrZfmu5HlhaXpoY/oibJcbiR0ZXh0SENvbG9yOiAjMDA0QUFDO1xuJGxldHRlclNwYWNpbmc6IDBlbTsgLy/mloflrZfplpPot51cbi8v57ay56uZ5Li75p625qeL6aGP6Imy6Kit5a6aXG4kd2hpdGU6ICAgICNmZmY7XG4kZ3JheS0xMDA6ICNmOGY5ZmE7XG4kZ3JheS0yMDA6ICNlOWVjZWY7XG4kZ3JheS0zMDA6ICNkZWUyZTY7XG4kZ3JheS00MDA6ICNjZWQ0ZGE7XG4kZ3JheS01MDA6ICNhZGI1YmQ7XG4kZ3JheS02MDA6ICM2Yzc1N2Q7XG4kZ3JheS03MDA6ICM0OTUwNTc7XG4kZ3JheS04MDA6ICMzNDNhNDA7XG4kZ3JheS05MDA6ICMyMTI1Mjk7XG4kYmxhY2s6ICAgICMyNTI1MjU7XG4vLyRtYWluLWNvbG9yOiAjMzI1NUY5XG4kbWFpbi1jb2xvcjogIzAwNEFBQztcbiRibHVlOiAjMDA0QUFDO1xuJGdyZWVuOiAjMTQ1QTEyO1xuJHJlZDogI2MxMjcyZDtcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+e2suagvOahhuaetiBncmlkXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRncmlkWEw6IDE2MDA7XG4kZ3JpZExnOiAxMjgwO1xuJGdyaWRNZDogNzY4O1xuJGdyaWRTbTogNDgwO1xuJGdyaWRDb2xzOiAxMjsgLy/ntrLmoLzmrITmlbhcbiRncmlkLXByb3BzOiAoJ2RlZmF1bHQnOiAxOTIwLCcteGwnOiAkZ3JpZFhMLCctbGcnOiAkZ3JpZExnLCctbWQnOiAkZ3JpZE1kLCctc20nOiAkZ3JpZFNtKTsvL2NsYXNzIOWwjeaHieWvrOW6puioreWumlxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v6KGo6aCtIGhlYWRlclxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kaGVhZGVyTW9kZTogMTsgLy9oZWFkZXLmqKHlvI8gMTrpgbjllq7lkIzkuIDooYwgMjrpgbjllq7lnKjkuIvmlrlcbiRoZWFkZXJPcmRlcjogKCdsb2dvJzogMSwnbmF2JzogMiwnc2VhcmNoJzogNCwnc29jaWFsJzogMywnaGFtYnVyZ2VyJzogNSk7IC8v5o6S5bqPXG4kdmlldzogKCdzZWFyY2gnOiAwLCdzb2NpYWxJdGVtJzogMCk7IC8vc2VhcmNoOjHngrrpoa/npLow54K65LiN6aGv56S6IFNvY2lhbEl0ZW0g56S+576k5pW455uuXG4kbG9nb0hlaWdodDogKCdtb2RlMSc6IDgwcHgsJ21vZGUxRml4ZWQnOiA4MHB4LCdtb2RlMic6IDcwcHgsJ21vZGUyRml4ZWQnOiA1MHB4KTsgLy8gbW9kZTE6bG9nb+mrmOW6piDoiIcgbW9kZTI6bG9nb+mrmOW6plxuJGxvZ29XaWR0aDogNDAwcHg7IC8vTE9HT+WvrOW6pijlg4/ntKApXG4kbG9nb0FsaWduOiBmbGV4LXN0YXJ0OyAvL0xPR0/kvY3nva4oanVzdGlmeS1jb250ZW50KVxuJHNvY2lhbEhlaWdodDogMjBweDsgLy/npL7nvqRpY29u6auY5bqm5LiN5aSn5pa8NDBweFxuJG5hdkZvbnQ6IDIwcHg7IC8v6YG45Zau5paH5a2X5aSn5bCPXG4kbmF2SXRlbTogNDsgLy/pgbjllq7mqJnpoYzmlbjph49cbiRuYXZBbGlnbjogZmxleC1lbmQ7IC8vbmF26YG45Zau5o6S5YiX5L2N572uKGp1c3RpZnktY29udGVudClcbiRuYXZIZWlnaHQ6IDUwcHg7IC8vbW9kZTLpgbjllq7pq5jluqZcbiRuYXZMYXllcldpZHRoOiAyNTBweDsgLy/mu5HlhaXpgbjllq7pmo7lsaTlr6zluqZcbiRuYXZDb2xvcjogJHRleHRDb2xvcjsgLy/pgbjllq7mloflrZfpoY/oibJcbiRuYXZiZ0NvbG9yOiAkd2hpdGU7IC8v6YG45Zau6IOM5pmv6ImyXG4kbmF2SG92ZXJDb2xvcjogJG1haW4tY29sb3I7ICAvL+a7keWFpemhj+iJslxuJG5hdkhvdmVyYmdDb2xvcjogJHdoaXRlOyAvL+a7keWFpeiDjOaZr+mhj+iJslxuJG5hdkJvcmRlckNvbG9yOiAkZ3JheS0zMDA7IC8v6YG45Zau5qGG6aGP6ImyXG4kbmF2QnRuV2lkdGg6IDQwcHg7IC8v5LiL6ZqO5bGk5oyJ6YiV5a+s5bqmXG4kbmF2QnRuYmdDb2xvcjogJHdoaXRlOyAvL+S4i+majuWxpOaMiemIleiDjOaZr+mhj+iJslxuJHMtbmF2YmdDb2xvcjogJG1haW4tY29sb3I7Ly/miYvmqZ/mnb/pmo7lsaTpgbjllq7og4zmma9cbiRoZWFkZXJSV0Q6IDEwMjQ7IC8vIOaJi+apn+eJiOiuiuaPm+WvrOW6plxuJGhlYWRlclBob25lSGVpZ2h0OiA1MHB4OyAvL+aJi+apn+eJiGhlYWRlciDpq5jluqZcblxuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ooajllq4gZm9ybVxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kZm9ybUhlaWdodDogNDBweDsgLy/ovLjlhaXmoYbpq5jluqZcbiRmb3JtQ29sb3I6ICR0ZXh0Q29sb3I7IC8v6Ly45YWl5qGG5paH5a2X6aGP6ImyXG4kZm9ybUxpbmVXaWR0aDogMDsgIC8v6Ly45YWl5qGG5qGG57ea57KX57SwXG4kZm9ybUxpbmVDb2xvcjogI2YyZjJmMjsgIC8v6Ly45YWl5qGG5qGG57ea6aGP6ImyXG4kZm9ybUJnQ29sb3I6ICNmMmYyZjI7ICAvL+i8uOWFpeiDjOaZr+mhj+iJslxuJGZvcm1CZFJzOiAxMHB4OyAvL+i8uOWFpeahhuWck+inklxuJGZvcm1TaGFkb3c6ICMwMDA7IC8v6Ly45YWl5qGG6YG45Y+W6Zmw5b2x6aGP6ImyXG4kcGxhY2Vob2xkZXJDb2xvcjogIzg4ODsgLy/ovLjlhaXmoYZwbGFjZWhvbGRlcuaWh+Wtl+mhj+iJslxuJGxlZ2VuZENvbG9yOiAjMDAwOyAvL2Zvcm0g5qiZ6aGM5paH5a2X6aGP6ImyXG4kcmFkaW9TaXplOiAyM3B4OyAvL3JhZGlvIOmBuOmgheWkp+Wwj1xuJHJhZGlvQmdDb2xvcjogJGZvcm1CZ0NvbG9yOyAvL3JhZGlvIOmBuOmghemhj+iJslxuJHJhZGlvTGluZUNvbG9yOiAkZm9ybUxpbmVDb2xvcjsgLy9yYWRpbyDpgbjpoIXpgormoYbpoY/oibJcbiRyYWRpb0xpbmVXaWR0aDogMXB4OyAvL3JhZGlvIOmBuOmghemCiuahhueyl+e0sFxuJHJhZGlvQmRSczogMjNweDsgLy9yYWRpbyDpgbjpoIXlnJPop5JcbiRyYWRpb0NoZWNrQ29sb3I6ICM1NTU7IC8vcmFkaW8g6YG45pOH5b6M6aGP6ImyXG4kY2hlY2tib3hTaXplOiAyM3B4OyAvL0NoZWNrYm94IOmBuOmgheWkp+Wwj1xuJGNoZWNrYm94QmdDb2xvcjogJGZvcm1CZ0NvbG9yOyAvL0NoZWNrYm94IOmBuOmghemhj+iJslxuJGNoZWNrYm94TGluZVdpZHRoOiAxcHg7IC8vQ2hlY2tib3gg6YG46aCF6YKK5qGG57KX57SwXG4kY2hlY2tib3hMaW5lQ29sb3I6ICRmb3JtTGluZUNvbG9yOyAvL0NoZWNrYm94IOmCiuahhumhj+iJslxuJGNoZWNrYm94QmRSczogM3B4OyAvL0NoZWNrYm94IOWck+inkuWkp+Wwj1xuJGNoZWNrYm94Q2hlY2tDb2xvcjogIzU1NTsgLy9DaGVja2JveCDpgbjmk4flvozli77li77poY/oibJcbiRjaG9pY2VCdG5XaWR0aDogMTUwcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5a+s5bqmXG4kY2hvaWNlQnRuSGVpZ2h0OiA1MHB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemrmOW6plxuJGNob2ljZUJ0bkNvbG9yOiAkZm9ybUJnQ29sb3I7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6aGP6ImyXG4kY2hvaWNlQnRuVGV4dENvbG9yOiAjNTU1OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIleaWh+Wtl+mhj+iJslxuJGNob2ljZUJ0bkxpbmVDb2xvcjogJGZvcm1MaW5lQ29sb3I7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YKK5qGG6aGP6ImyXG4kY2hvaWNlQnRuTGluZVdpZHRoOiAxcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YKK5qGG57KX57SwXG4kY2hvaWNlQnRuQmRSczogNXB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIleWck+inklxuJGNob2ljZUJ0bkNoZWNrQ29sb3I6ICMxZTk4MTM7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M6aGP6ImyXG4kY2hvaWNlQnRuQ2hlY2tUZXh0Q29sb3I6ICNmZmY7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M5paH5a2X6aGP6ImyXG4kY2hvaWNlQnRuQ2hlY2tMaW5lQ29sb3I6ICMxZTk4MTM7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M6YKK5qGG6aGP6ImyXG4kc2VsZWN0QXJyb3dXaWR0aDogMTZweDsgLy9zZWxlY3Qg5LiJ6KeS5b2i5a+s5bqmXG4kc2VsZWN0QXJyb3dIZWlnaHQ6IDEwcHg7IC8vc2VsZWN0IOS4ieinkuW9oumrmOW6plxuJHNlbGVjdEFycm93Q29sb3I6ICM1NTU7IC8vc2VsZWN0IOS4ieinkuW9oumhj+iJslxuJHJlcXVpcmVkQ29sb3I6ICNjMDAwMDA7IC8v5b+F5aGr6aGP6ImyXG4kdGlwc0NvbG9yOiAjOTk5OyAvL+aPkOekuuaWh+Wtl+mhj+iJslxuJHRpcHNJY29uU2l6ZTogMjBweDsgLy/mj5DnpLppY29uIOWkp+Wwj1xuJHRpcHNJY29uOiAnXFxlOTAwJzsgLy/mj5DnpLppY29uXG4kdmFsaWRJY29uOiAnXFxlOTAwJzsgLy9mZWVkYmFjayDmj5DnpLogaWNvblxuJGVycm9yQ29sb3I6ICNjMDAwMDA7IC8vZmVlZGJhY2sg6Yyv6Kqk5o+Q56S66aGP6ImyXG4kZXJyb3JJY29uOiAnXFxlOTA2JzsgLy9mZWVkYmFjayDpjK/oqqTmj5DnpLppY29uXG4kc3VjY2Vzc0NvbG9yOiAjMWU5ODEzOyAvL2ZlZWRiYWNrIOaIkOWKn+aPkOekuumhj+iJslxuJHN1Y2Nlc3NJY29uOiAnXFxlOTAxJzsgLy9mZWVkYmFjayDmiJDpgJrmj5DnpLppY29uXG4kdGV4dGFyZWFIZWlnaHQ6IDE1MHB4OyAvL3RleHRhcmVhIOmrmOW6plxuJHJlc2V0Q29sb3I6ICMxZTk4MTM7IC8v6KqN6K2J56K8cmVzZXTpoY/oibJcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+aMiemIlSBidXR0b25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGJ0bldpZHRoOiAxMjBweDsgLy/lrprnvqnmjInpiJXlr6zluqZcbiRidG5IZWlnaHQ6IDQwcHg7IC8v5a6a576p5oyJ6YiV6auY5bqmXG4kYnRuTGluZVdpZHRoOiAwOyAvL+Wumue+qeaMiemIleahhue3mueyl+e0sFxuJGJ0bkljb25TaXplOiAyMHB4OyAvL+Wumue+qeaMiemIlWljb24g5aSn5bCPXG4kYnRuU21XaWR0aDogMTAwcHg7IC8v5a6a576p5bCP5oyJ6YiV5a+s5bqmXG4kYnRuU21IZWlnaHQ6IDQwcHg7IC8v5a6a576p5bCP5oyJ6YiV6auY5bqmXG4kYnRuU21JY29uU2l6ZTogMjBweDsgLy/lrprnvqnlsI/mjInpiJVpY29u5aSn5bCPXG4kYnRuRGVmYXVsdENvbG9yOiAkZ3JheS0yMDA7IC8v5Y6f5aeL5oyJ6YiV6aGP6ImyXG4kYnRuRGVmYXVsdExpbmVDb2xvcjogI2UzZTNlMzsgLy/ljp/lp4vmjInpiJXmoYbnt5rpoY/oibJcbiRidG5EZWZhdWx0VGV4dENvbG9yOiAkdGV4dENvbG9yOyAvL+WOn+Wni+aMiemIleaWh+Wtl+mhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlckNvbG9yOiAkbWFpbi1jb2xvcjsgLy/ljp/lp4vmjInpiJXmu5HlhaXpoY/oibJcbiRidG5EZWZhdWx0SG92ZXJMaW5lQ29sb3I6ICRtYWluLWNvbG9yOyAvL+WOn+Wni+aMiemIlea7keWFpeahhue3mumhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlclRleHRDb2xvcjogJHdoaXRlOyAvL+WOn+Wni+aMiemIlea7keWFpeaWh+Wtl+mhj+iJslxuLy/mjInpiJXlkI3nqLHmlrDlop7poIXnm64gKOWQjeeosSDog4zmma/poY/oibIg5aSW5qGG6aGP6ImyIOaWh+Wtl+mhj+iJsilcbiRidG5Db25maWc6IChzdWJtaXQgI2Q2MGQwZCAjZDYwZDBkICR3aGl0ZSwgbWFpbiAkbWFpbi1jb2xvciAkbWFpbi1jb2xvciAkd2hpdGUsIHN1Y2Nlc3MgcmdiYSgwLDAsMCwwKSAkZ3JlZW4gJGJsYWNrKTtcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vLyDpoIHnorwgcGFnaW5hdGlvblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kcGFnZUJnOiAkZ3JheS0yMDA7IC8v5oyJ6YiV6IOM5pmv6ImyXG4kcGFnZUhvdmVyQmc6ICRtYWluLWNvbG9yOyAvL+a7kem8oOenu+iHs+aMiemIleiDjOaZr+iJslxuJHBhZ2VBY3RpdmVCZzogZGFya2VuKCRtYWluLWNvbG9yLDAuMik7Ly/mu5HpvKDmjInkuIvnmoTmqKPlvI9cbiRwYWdlSG92ZXJDb2xvcjogJHdoaXRlOy8v5ruR5YWl6IiH6YG45Y+W5paH5a2X6aGP6ImyXG4kcGFnZURpc2FibGVkOiAkZ3JheS00MDA7IC8v56aB55So5paH5a2X6aGP6ImyXG4iLCIvL3Jlbeeul+W8j1xuQGZ1bmN0aW9uIHRvUmVtKCRzaXplKSB7XG5cdCRyZW1TaXplOiByb3VuZCgkc2l6ZSAvICRmb250U2l6ZSAqIDEwMDApIC8gMTAwMDtcblx0QHJldHVybiAkcmVtU2l6ZSAqIDFyZW07IH1cblxuLy/ot53pm6JsZXZlbCDnrpflvI9cbi8vZ2FwKDIpID09PiAyKiRiYXNlR2FwXG5AZnVuY3Rpb24gZ2FwKCRnYXBMZXZlbDogMSwgJGdhcEhlaWdodDogJGJhc2VHYXApIHtcbiAgICBAcmV0dXJuICRnYXBMZXZlbCAqICRnYXBIZWlnaHQ7IH1cbiIsIi8vVGhpcyBpcyBzYXNzIGZpbGVcbi8vYmFja2dyb3VuZCDoqK3lrppcbkBtaXhpbiBiZygkaW1nLCAkcG9zLXg6IDAsICRwb3MteTogMCwgJHJlcDogbm8tcmVwZWF0KSB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uL2ltYWdlcy8jeyRpbWd9XCIpO1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkcG9zLXggJHBvcy15O1xuXHRiYWNrZ3JvdW5kLXJlcGVhdDogJHJlcDsgfVxuXG4vL3J3ZCBwb2ludFxuLy8rcndkKDE5MjAsIG1heClcbkBtaXhpbiByd2QoJHBvaW50LCAkbXc6ICdtYXgnKSB7XG5cdEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKCN7JG13fS13aWR0aDogJHBvaW50ICogMXB4KSB7XG5cdFx0QGNvbnRlbnQ7IH0gfVxuXG4vLytpY29uKDMwcHgsMzBweCwnXFxmMTM4JywyNXB4LCAjOTk5KVxuQG1peGluIGljb24oJHdpZHRoOiBhdXRvLCAkaGVpZ2h0OiBhdXRvLCAkaWNvbl9jb250ZW50OiAnJywgJGZvbnQtc2l6ZTogMTAwJSwgJGNvbG9yOmluaGVyaXQpIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogJGljb25fY29udGVudDtcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0d2lkdGg6ICR3aWR0aDtcblx0XHRoZWlnaHQ6ICRoZWlnaHQ7XG5cdFx0Zm9udC1mYW1pbHk6ICdpY29tb29uJztcblx0XHRmb250LXNpemU6ICRmb250LXNpemU7XG5cdFx0bGluZS1oZWlnaHQ6ICRoZWlnaHQ7XG5cdFx0Y29sb3I6ICRjb2xvcjtcblx0XHRAY29udGVudDsgfSB9XG5cbi8v5paH5a2X5qGG57eaXG4vLytzdHJva2UoMiwjZWVlKVxuQG1peGluIHN0cm9rZSgkcy13aWR0aCwgJGNvbG9yKSB7XG5cdCRzLXdpZHRoOiAkcy13aWR0aDtcblx0JHNoYWRvdzogMCAwIDAgdHJhbnNwYXJlbnQ7XG5cdCRpOiAwO1xuXHQkdzogMTtcblx0QHdoaWxlICgkcy13aWR0aCA+ICRpKSB7XG5cdFx0JGk6ICRpICsgMTtcblx0XHQkajogMDtcblx0XHQkdzogJHcgKyAyO1xuXHRcdEBmb3IgJHIgZnJvbSAxIHRocm91Z2ggJHcge1xuXHRcdFx0QGZvciAkYyBmcm9tIDEgdGhyb3VnaCAkdyB7XG5cdFx0XHRcdCR4OiAkYyAtIGNlaWwoJHcgLyAyKTtcblx0XHRcdFx0JHk6ICRyIC0gY2VpbCgkdyAvIDIpO1xuXHRcdFx0XHQkc2hhZG93OiAjeyRzaGFkb3d9LCAjeyR4fXB4ICN7JHl9cHggMCAkY29sb3I7IH0gfSB9XG5cdHRleHQtc2hhZG93OiAkc2hhZG93OyB9XG5cbi8vY2FzZSBtaXhpblxuLy8raW5uZXIoMTkyMCwzMClcbi8vJGluci13IOWvrOW6plxuLy9SV0QgJGluci1nYXAg5bem5Y+zcGFkZGluZ+mWk+i3nee4veWSjFxuQG1peGluIGlubmVyKCRpbnItdywkaW5yLWdhcDogMCkge1xuXHRtYXgtd2lkdGg6ICRpbnItdyAqIDFweDtcblx0QGlmICRpbnItZ2FwICE9IDAge1xuXHRcdEBpbmNsdWRlIHJ3ZCgkaW5yLXcgKyAkaW5yLWdhcCkge1xuXHRcdFx0cGFkZGluZzogMCAoJGluci1nYXAgLyAyICogMXB4KTsgfSB9IH1cblxuLy/mloflrZfpmrHol48gZWxsaXBzaXMo6KGM6auYKVxuQG1peGluIGVsbGlwc2lzKCRlbHNfaGVpZ2h0OiAxKSB7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdEBpZigkZWxzX2hlaWdodCA8PSAxKSB7XG5cdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcblx0XHRAY29udGVudDsgfVxuXHRAZWxzZSBpZigkZWxzX2hlaWdodCA+IDEpIHtcblx0XHRkaXNwbGF5OiAtd2Via2l0LWJveDtcblx0XHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcblx0XHQtd2Via2l0LWxpbmUtY2xhbXA6ICRlbHNfaGVpZ2h0O1xuXHRcdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG5cdFx0QGNvbnRlbnQ7IH0gfVxuXG5cbi8v5paH5a2X6L2J5o+bIHJlbVxuQG1peGluIGZvbnQtc2l6ZSgkaW5TaXplLCRpbkxpbmVIZWlnaHQ6IDFweCkge1xuXHRmb250LXNpemU6ICRpblNpemU7XG5cdCRuZXdMaW5lSGVpZ2h0OiBjZWlsKCRpblNpemUgKiAkbGluZUhlaWdodExldmVsKTtcblx0Zm9udC1zaXplOiB0b1JlbSgkaW5TaXplKTtcblx0QGlmKCRuZXdMaW5lSGVpZ2h0ID09IDFweCBvciAkaW5MaW5lSGVpZ2h0IDwgJGluU2l6ZSkge1xuXHRcdGxpbmUtaGVpZ2h0OiB0b1JlbSgkbmV3TGluZUhlaWdodCk7IH1cblx0QGVsc2Uge1xuXHRcdGxpbmUtaGVpZ2h0OiB0b1JlbSgkaW5MaW5lSGVpZ2h0KTsgfSB9XG5cbi8v5paH5a2X5YCN546HXG5AbWl4aW4gZm9udC1sZXZlbCgkZkxldmVsKSB7XG5cdEBpZigkZkxldmVsIDwgMCkge1xuXHRcdCRmTGV2ZWw6IDA7IH1cblx0JG5ld2ZvbnQ6ICRmb250U2l6ZSAqICgxICsgJGZMZXZlbCAqICRmb250U2l6ZUxldmVsKTtcblx0JGZMZXZlbExpbmVIZWlnaHQ6IGNlaWwoJG5ld2ZvbnQgKiAkbGluZUhlaWdodExldmVsKTtcblx0Zm9udC1zaXplOiAkbmV3Zm9udDtcblx0Zm9udC1zaXplOiB0b1JlbSgkbmV3Zm9udCk7XG5cdGxpbmUtaGVpZ2h0OiB0b1JlbSgkZkxldmVsTGluZUhlaWdodCk7IH1cblxuXG4vLyB0cmlhbmdsZSDkuInop5LlvaIgbWl4aW5cbi8vK3RyaWFuZ2xlKDEwcHggMTJweCwgI2FlMDAwMCx1cClcbkBtaXhpbiB0cmlhbmdsZSAoJHNpemUsICRjb2xvciwgJGRpcmVjdGlvbikge1xuXHRoZWlnaHQ6IDA7XG5cdHdpZHRoOiAwO1xuXHQkd2lkdGg6IG50aCgkc2l6ZSwgMSk7XG5cdCRoZWlnaHQ6IG50aCgkc2l6ZSwgbGVuZ3RoKCRzaXplKSk7XG5cdCRmb3JlZ3JvdW5kLWNvbG9yOiBudGgoJGNvbG9yLCAxKTtcblx0JGJhY2tncm91bmQtY29sb3I6IGlmKGxlbmd0aCgkY29sb3IpID09IDIsIG50aCgkY29sb3IsIDIpLCB0cmFuc3BhcmVudCk7XG5cdEBpZiAoJGRpcmVjdGlvbiA9PSB1cCkgb3IgKCRkaXJlY3Rpb24gPT0gZG93bikgb3IgKCRkaXJlY3Rpb24gPT0gcmlnaHQpIG9yICgkZGlyZWN0aW9uID09IGxlZnQpIHtcblx0XHQkd2lkdGg6ICR3aWR0aCAvIDI7XG5cdFx0JGhlaWdodDogaWYobGVuZ3RoKCRzaXplKSA+IDEsICRoZWlnaHQsICRoZWlnaHQvMik7XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gdXAge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1sZWZ0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfVxuXG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSByaWdodCB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItbGVmdDogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci10b3A6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfVxuXHRcdEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gZG93biB7XG5cdFx0XHRib3JkZXItbGVmdDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItdG9wOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBsZWZ0IHtcblx0XHRcdGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1yaWdodDogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci10b3A6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfSB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IHVwLXJpZ2h0KSBvciAoJGRpcmVjdGlvbiA9PSB1cC1sZWZ0KSB7XG5cdFx0Ym9yZGVyLXRvcDogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSB1cC1yaWdodCB7XG5cdFx0XHRib3JkZXItbGVmdDogICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfVxuXHRcdEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gdXAtbGVmdCB7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfSB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGRvd24tcmlnaHQpIG9yICgkZGlyZWN0aW9uID09IGRvd24tbGVmdCkge1xuXHRcdGJvcmRlci1ib3R0b206ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gZG93bi1yaWdodCB7XG5cdFx0XHRib3JkZXItbGVmdDogICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfVxuXHRcdEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gZG93bi1sZWZ0IHtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gaW5zZXQtdXApIHtcblx0XHRib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkaGVpZ2h0ICR3aWR0aDsgfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC1kb3duKSB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkZm9yZWdyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdGJvcmRlci13aWR0aDogJGhlaWdodCAkd2lkdGg7IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gaW5zZXQtcmlnaHQpIHtcblx0XHRib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkd2lkdGggJGhlaWdodDsgfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC1sZWZ0KSB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvciAkZm9yZWdyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdGJvcmRlci13aWR0aDogJHdpZHRoICRoZWlnaHQ7IH0gfVxuXG4vL+e9ruS4rSAndicg5Z6C55u0572u5LitICdoJyDmsLTlubPnva7kuK0gJ2InIOWeguebtOawtOW5s+e9ruS4rVxuQG1peGluIGNlbnRlcigkcG9zaXRpb24pIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRAaWYgJHBvc2l0aW9uID09ICd2JyB7XG5cdFx0dG9wOiA1MCU7XG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG5cdEBlbHNlIGlmICRwb3NpdGlvbiA9PSAnaCcge1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKTsgfVxuXHRAZWxzZSBpZiAkcG9zaXRpb24gPT0gJ2InIHtcblx0XHR0b3A6IDUwJTtcblx0XHRsZWZ0OiA1MCU7XG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7IH0gfVxuXG4vL1JXRCDntrLmoLzorormj5tcbi8vJGNvb0NvbCDntrLmoLzmlbhcbi8vJGNvb0NvbHMg57ay5qC85L2U5qC85pW4XG4vLyRjb29HdXR0ZXIg6ZaT6LedIHB4IGVtICVcbi8v5L2/55So5pa55byPICtjb28oNiwyLDEwcHgpXG5AbWl4aW4gY29vKCRjb29Db2wsJGNvb0NvbHM6IDEsJGNvb0d1dHRlcjogMCkge1xuXHR3aWR0aDogc3BhbigkY29vQ29scyBuYXJyb3cgb2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpO1xuXHRAaWYgJGNvb0d1dHRlciAhPSAwIHtcblx0XHRtYXJnaW4tbGVmdDogZ3V0dGVyKG9mICRjb29Db2wgc2V0LWd1dHRlcnMgJGNvb0d1dHRlciB3aWRlKSAvIDI7XG5cdFx0bWFyZ2luLXJpZ2h0OiBndXR0ZXIob2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpIC8gMjtcblx0XHRtYXJnaW4tYm90dG9tOiBndXR0ZXIob2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpOyB9IH1cbiIsIi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/mjInpiJUgQnV0dG9uXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiVCdG4ge1xuXHR3aWR0aDogJGJ0bldpZHRoO1xuXHRoZWlnaHQ6ICRidG5IZWlnaHQ7XG5cdG1hcmdpbjogNXB4O1xuXHRwYWRkaW5nOiAwIGdhcCgyKTtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0LW1zLXRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuXHR0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR1c2VyLXNlbGVjdDogbm9uZTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym9yZGVyLXdpZHRoOiAkYnRuTGluZVdpZHRoO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZS1vdXQ7XG5cdCY6Zm9jdXMsXG5cdCY6YWN0aXZlOmZvY3VzIHtcblx0XHRvdXRsaW5lLW9mZnNldDogLTJweDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblx0JjphY3RpdmUge1xuXHRcdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG5cdFx0b3V0bGluZTogMDsgfSB9XG4vL+a4hemZpFxuJWNsZWFyIHtcblx0JjphZnRlciB7XG5cdFx0Y29udGVudDogXCJcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0XHRjbGVhcjogYm90aDsgfSB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsQWlCTEEsSWpCS0ksQ2lCTEM7Q0FDSixLQUFLLEVIK0hLLEtBQUs7Q0c5SGYsTUFBTSxFSCtISyxJQUFJO0NHOUhmLE1BQU0sRUFBRSxHQUFHO0NBQ1gsT0FBTyxFQUFFLENBQUMsQ0ZDQyxJQUFzQjtDRUFqQyxPQUFPLEVBQUUsV0FBVztDQUNwQixXQUFXLEVBQUUsTUFBTTtDQUNuQixlQUFlLEVBQUUsSUFBSTtDQUNyQixVQUFVLEVBQUUsTUFBTTtDQUNsQixXQUFXLEVBQUUsTUFBTTtDQUNuQixlQUFlLEVBQUUsTUFBTTtDQUN2QixXQUFXLEVBQUUsTUFBTTtDQUNuQixjQUFjLEVBQUUsTUFBTTtDQUN0QixnQkFBZ0IsRUFBRSxZQUFZO0NBQzlCLFlBQVksRUFBRSxZQUFZO0NBQzFCLE1BQU0sRUFBRSxPQUFPO0NBQ2YsV0FBVyxFQUFFLElBQUk7Q0FDakIsUUFBUSxFQUFFLE1BQU07Q0FDaEIsWUFBWSxFSGdIRSxDQUFDO0NHL0dmLFlBQVksRUFBRSxLQUFLO0NBQ25CLFFBQVEsRUFBRSxRQUFRO0NBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ2hCLFVBQVUsRUFBRSxnQkFBZ0I7Q0FPWjs7QWpCeEJqQixBaUJrQkMsSWpCbEJHLEFpQmtCRixNQUFNLEVqQmxCUixJQUFJLEFpQm1CRixPQUFPLEFBQUEsTUFBTSxDQUFDO0NBQ2QsY0FBYyxFQUFFLElBQUk7Q0FDcEIsZUFBZSxFQUFFLElBQUk7Q0FBRzs7QWpCckIxQixBaUJzQkMsSWpCdEJHLEFpQnNCRixPQUFPLENBQUM7Q0FDUixnQkFBZ0IsRUFBRSxJQUFJO0NBQ3RCLE9BQU8sRUFBRSxDQUFDO0NBQUc7O0FqQjlCZixBQUFBLE9BQU8sQ0FBQztDQUNQLEtBQUssRUFBRSxJQUFJO0NBQ1gsT0FBTyxFZUlJLElBQXNCLENmSmpCLENBQUM7Q0FDakIsVUFBVSxFQUFFLE1BQU07Q0FBRzs7QUFFdEIsZ0JBQWdCO0FBQ2hCLEFBQUEsSUFBSSxDQUFDO0NBRUosZ0JBQWdCLEVjZ0JOLE9BQU87Q2RmakIsWUFBWSxFY2dJUyxPQUFPO0NkL0g1QixhQUFhLEVBQUUsSUFBSTtDQUNuQixLQUFLLEVjTU0sT0FBTztDZExsQixXQUFXLEVBQUUsR0FBRztDZ0IwRGhCLFNBQVMsRWhCekRVLElBQUk7Q2dCMkR2QixTQUFTLEVEdkVELFFBQWU7Q0N5RXRCLFdBQVcsRUR6RUosUUFBZTtDZnlDcUI7O0FBcEM3QyxBQVFDLElBUkcsQUFRRixNQUFNLENBQUM7Q0FDUCxnQkFBZ0IsRWNtQkwsT0FBTztDZGxCbEIsWUFBWSxFY2tCRCxPQUFPO0NkakJsQixLQUFLLEVjS0ksSUFBSTtDZExzQjs7QUFDbkMsQUFBRCxVQUFPLENBQUM7Q0FDUCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENlYkgsSUFBc0I7Q2ZjaEMsT0FBTyxFQUFFLFlBQVk7Q0FDckIsY0FBYyxFQUFFLE1BQU07Q0FDdEIsU0FBUyxFYzhHRyxJQUFJO0NkOUdVOztBQWhCNUIsQUFpQkMsSUFqQkcsQ0FpQkgsSUFBSSxDQUFDO0NBQ0osT0FBTyxFQUFFLFlBQVk7Q0FDckIsY0FBYyxFQUFFLE1BQU07Q0FDdEIsV0FBVyxFYzBHQyxJQUFJO0NkMUdZOztBQUM1QixBQUFELFFBQUssQ0FBQztDQUNMLEtBQUssRWN5R00sS0FBSztDZHhHaEIsTUFBTSxFY3lHTSxJQUFJO0NkeEdoQixNQUFNLEVleEJJLEdBQXNCO0NmeUJoQyxPQUFPLEVBQUUsSUFBbUMsQ2V6QmxDLElBQXNCO0NmNkJDOztBQUhoQyxBQUFELGNBQU8sQ0FBQztDQUNQLFNBQVMsRWNzR0ksSUFBSTtDZHRHVzs7QUFON0IsQUFPQSxRQVBJLENBT0osSUFBSSxDQUFDO0NBQ0osV0FBVyxFY29HRSxJQUFJO0NkcEdhOztBQUU5QixBQUFELFlBQVMsQ0FBSztDQUNiLGdCQUFnQixFY3lHQyxPQUFPO0NkeEd4QixZQUFZLEVjd0dhLE9BQU87Q2R2R2hDLEtBQUssRWNsQkcsSUFBSTtDZGtCTTs7QUFIbEIsQUFBRCxVQUFPLENBQU87Q0FDYixnQkFBZ0IsRWNKTixPQUFPO0NkS2pCLFlBQVksRWNMRixPQUFPO0NkTWpCLEtBQUssRWNsQkcsSUFBSTtDZGtCTTs7QUFIbEIsQUFBRCxhQUFVLENBQUk7Q0FDYixnQkFBZ0IsRWN5R3NFLGdCQUFhO0NkeEduRyxZQUFZLEVjSFAsT0FBTztDZElaLEtBQUssRWNSRyxPQUFPO0NkUUc7O0FBQ25CLEFBQUQsVUFBTyxDQUFDO0NBQ1AsS0FBSyxFQUFFLGdCQUErQjtDQUFHOztBZ0JsQzFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7Q2hCUnpDLEFBQUEsT0FBTyxDQTRDRTtFQUNQLE9BQU8sRWV2Q0csSUFBc0IsQ2Z1Q2hCLENBQUM7RUFBRyJ9 */
